第4周作业:WordCount优化
第4周作业:WordCount优化
本次项目的github地址:https://github.com/decadeheart/WcPlus
一、基本任务
PSP表格
| PSP2.1 | PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 30 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 30 |
| Development | 开发 | 15 | 25 |
| · Analysis | · 需求分析 (包括学习新技术) | 20 | 25 |
| · Design Spec | · 生成设计文档 | 30 | 30 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 10 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
| · Design | · 具体设计 | 30 | 40 |
| · Coding | · 具体编码 | 100 | 120 |
| · Code Review | · 代码复审 | 45 | 30 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 | 40 |
| Reporting | 报告 | 30 | 35 |
| · Test Report | · 测试报告 | 75 | 80 |
| · Size Measurement | · 计算工作量 | 15 | 15 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 20 |
| 合计 | 490 | 580 |
接口设计
接口描述
我负责的是输入模块,就是负责处理在控制台的输入部分。完成方式是构建一个独立的类WcPlus,该类有argc和argv[]两个参数,argc是参数个数,argv是参数列表,当参数小于一个时,表示没有输入正确的路径。当参数大于一个时进行正则匹配.txt文件,最终根据输入流是否可以打开,判断该路径是否为有效路径。也就是该接口得到了一个字符串数组并返回了有效的输入流,该接口的完成情况是能正常返回有效输入流,检测输入控制台的字符串是否真正是符合要求的,并在出错时返回相应出错情况。
设计思路
在本次实验中,文件路径可以选取最后一个参数,通过正则匹配来验证文件名是否符合需求,然后再通过文件流对路径进行读取,检测该文件是否存在,最后返回可以读取的文件流
实现过程
根据几个判断来区分不同的输入情况
WcPlus::WcPlus(const int &argc, char * argv[])
{
//首先参数得要多于一个
if (argc > 1) {
string path(argv[argc - 1]);
//正则匹配到.txt文件
regex ifname("[[:alnum:]]+\\.txt$", regex::icase);
if (!regex_search(path, ifname))
{
cout << "match failed";
exit(-1);
}
input.open(path);
//判断该路径能否打开文件
if (input.is_open()){
cout << "valid filePath";
}
else {
cout << "inValid filePath";
}
}
else {
cout << "not input filePath";
}
}
测试设计
设计的测试用例要覆盖所有的情况,同时应该有多种情况复合

小组贡献
我们小组齐心协力,集思广益,最终成功完成了任务,最终我的小组贡献分0.25
二、扩展任务
1.代码规范
选择了现代软件工程讲义 3 代码规范与代码复审为参考,代码风格规范中:断行与空白的{}行、分行、命名、下划线、大小写,代码设计规范中:函数、gogo、错误处理、断言、析构函数、new和delete、类型继承。
2.同组分析
根据上述代码规范,我分析了我们同组的张伟东同学的代码,他的部分代码如下:
void WcPlus::getWordList()
{
input >> noskipws;
char ch;
string str;
while (input >> ch)
{
if (isalpha(ch))
{
ch = tolower(ch);
str = str + ch;
}
else if (!str.empty())
{
if ((ch == '-') && (isalpha((input.peek()))))
{
str = str + '-';
}
else
{
auto ret = word.insert({ str,1 });
if (!ret.second)
++ret.first->second;
str = "";
}
}
}
input >> skipws;
input.close();
}
在他的代码中。括号清楚的表示了优先级,每个{和}都独占一行,有更多个单词组成的变量采用了驼峰命名规则,根据以上特点说明该同学的代码十分符合代码规范,严谨而简洁
3.静态代码扫描
我们使用的是vs2015自带的静态扫描工具,最终的扫描结果

三、高级任务
设计、评审、优化
选择8kb,16kb,32kb大小的txt文件进行测试,程序处理时长如下:
9ms,11ms,14ms.我们发现文件大小对于输入时的性能影响较小,但是文件增大也会使时间增长,根据代码得到以下优化思路:优化正则匹配规则,从而减少匹配花费时间。
四、个人总结
通过这次任务,我们进一步的了解了单元测试,黑盒测试和白盒测试,小组成员们在一起通过共同努力完成任务,也让我们互相交流互相学习,增强了团结协作能力!

浙公网安备 33010602011771号