WordCount(3)


前排指路
软工项目开发-WordCount(1)
软工项目开发-WordCount(2)
github地址


1. 性能及代码分析

1.1 性能分析工具

本项目选择vs自带的性能探查器进行性能分析。

1.2 性能分析

由于本项目实现功能较多,在此对-s -a操作进行性能分析。
在这里插入图片描述通过观察分析图可以发现,整个运行过程中,对目录下所有.c文件进行空行/代码行/注释行的查询仅占1.36%,大部分时间花费在递归操作。如果要进行下一步优化,可以针对递归部分进行改进。但笔者认为,为了搜索所有文件而对目录进行的递归操作消耗时间是无可避免的,因此(在写这篇博客的时候)暂无改进思路。
而对于其他函数,如CountLines函数,在之前的博客中,给出了两种统计方法,以字符串形式读取文件比逐行读取花费更少的时间,但将占据更大的空间。由于本项目仅是课堂作业,进行统计的文件不会过大,因此选取空间换时间的方法。
此外,对于多种功能的叠加(e.g. 一次性输入-w -c -l),本项目原采用的方法是在每个函数中都读取一次文件,这在同时有多个操作时会由于对同一文件的重复读入延长运行时间,可在首次读取后将内容存入某一对象中,在多次操作中对此对象进行访问。

1.3 代码质量分析

使用vs的代码度量值对代码进行检查。
在这里插入图片描述
查阅资料知各参数及其数值含义如下:
圈复杂度是调用方法时取得的线性独立路径的总数,基于if/switch/while和类似的分支语句的数量。 圈复杂度指出一个方法的综合复杂度。值越低越好,如果数值较高,就说明方法可能覆盖了过多不同情况的处理(例如,尝试做太多容错处理),说明方法需要分解成更简单的只满足一种情况的单一职责方法(这样会更容易维护)。其次,为了确保每种情况都被完全地测试,必须为每条路线创建唯一的测试用例。 圈复杂度说明需要写多少个测试用例来确保所有可能的情况都已经被覆盖。
继承深度是表示一个类的继承的级数,该值是越低越好; 如果继承深度在3或4以上,代码可能超出设计标准(over-engineered),说明代码是难以维护的。数值越高,就越多子类需要修改 – 消耗时间和金钱,也潜在地引入bug 。
类耦合度是计算一个类中引用到的对象类型数,不包括原始的和内置的类型,像int和string。 该值是越低越好; 值越高,就代表类绑定了越多类,也意味着存在越多依赖关系在它的中间环境中。随着类的耦合度的增加,它就会变得难以分离出来用在另一个项目中。 简单来讲,类的耦合度越高,它的重用性就越低。
可维护指数,范围是0到100,用来指示所有类,成员,命名空间或项目的可维护性。 事实上,它是一个之前所有度量值的合计值, 与之前的度量值不同,这个值是越高越好。
在这里插入图片描述可以看到,该项目的可维护性指数较高,圈复杂度和继承深度均较低。

2. 结果展示

-c
在这里插入图片描述
-w
在这里插入图片描述-l
在这里插入图片描述
-a
在这里插入图片描述-s(结合-a)
在这里插入图片描述在这里插入图片描述
-x在这里插入图片描述在这里插入图片描述

3. PSP

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划6030
Estimate估计这个任务需要多少时间3015
Development开发14401050
Analysis需求分析(包括学习新技术)240300
Design Spec生成设计文档5020
Design Review设计复审(和同事审核设计文档)6020
Coding Standard代码规范(为目前的开发制定合适的规范)4020
Dedign具体设计6060
Coding具体编码600680
Code Review代码复审70100
Test测试(自我测试,修改代码,修改提交)200100
Reporting报告120150
Test Report测试报告7060
Size Measurement计算工作量2020
Postmortem & Process Improvement Plan事后总结,并提出过程改进计划4060
合计31002685

4.总结

选择这个项目的初衷只是因为我看不懂数独题目),以及感觉wordcount看起来比较简单(我觉得相比让同学做到自闭的地铁题来说真的很简单了)。虽然老师数次劝我换成数独题,但我还是一意孤行了。自己独立完成结对项目遇到的阻力是遇到的问题和bug无法和队友讨论,只能自己摸索完成。比如对正则表达式的不熟悉、首次使用WPF修改startUri后不知如何调用出现主窗口(最终在博客和一位学长的帮助下,顺利调用出了窗体,此处感谢一下学长)等问题都曾让我折腾了半天。但是收获也是有的。比如正如老师所说,我们的项目并不只是写一个符合要求的代码,而是遵循软件开发流程,完成从问题定义开始到测试维护(单就此项目而言似乎不需要维护)的全过程。在完成该项目的同时,我也对课上所学有了更加深刻的认识。也体会到老师最后一节课所说的软件开发要循序渐进,不要把所有工作堆在最后冲刺(容易猝死)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值