wordcountpro

github项目地址:https://github.com/handsomesnail/WordCountPro

PSP2.1  PSP阶段  预估耗时(小时)  实际耗时(小时)
 Planning  计划 0.5  0.5 
 Estimate  估计任务需要多少时间 0.5  0.5 
 Development  开发 1.5 
 Analysis  需求分析 0.5  0.5 
 Design Spec  生成设计文档 0.5 
 Design Review  设计复审 0.5 0.5
 Coding Standard  代码规范 0.5  0.5
 Design  具体设计  0.5 0.5
Coding  具体编码 1 1
 Code Review  代码复审 0.5 0.5
 Test  测试  2 1.5
 Reporting  报告  0.5 0.5 
 Test Report  测试报告 1 0.5 
 Size Measurement  计算工作量  0.5 0.5 
 Postmortem  总结 0.5  0.5 
 

 合计

 11.5 9.5

基本任务:排序后将词频输出到文件

代码贡献

//输出结果到result.txt
void Output() {
 vector<pair<string, int>> tempVector(wordMap.begin(), wordMap.end());//哈希表转存到动态数组
 sort(tempVector.begin(), tempVector.end(), Compare);//根据value和key排序

 ofstream outfs("result.txt");
 if (outfs.is_open()) {
  for (int i = 0; i < tempVector.size(); i++) {
   if (i >= 100)
    break;

   outfs << tempVector[i].first + " " << tempVector[i].second;
   //cout << tempVector[i].first + " " << tempVector[i].second << endl;
   if (i != 99 && i != tempVector.size() - 1)
    outfs << endl;
  }
 }
 outfs.close();

}

//传入排序的比较方法
bool Compare(pair<string, int> p1, pair<string, int> p2) {
 if (p1.second != p2.second)
  return p1.second > p2.second;
 else return p1.first < p2.first;
}

测试用例

IDItemTitleCriticalityConditioninputOutputResultStatusRemark
4_1 output 正常输出测试1 H wordMap result.txt result.txt 通过 黑盒
4_2 output 异常输出测试2 H wordMap result.txt result.txt 通过 黑盒
4_3 compare 排序比对测试3 H P1,P2 false false 通过 白盒
4_4 compare 排序比对测试4 H P1,P2 false false 通过 白盒
4_5 compare 排序比对测试5 H P1,P2 false false 通过 白盒
4_6 compare 排序比对测试1 H P1,P2 true false 通过 白盒
4_7 compare 排序比对测试2 H P1,P2 true false 通过 白盒

质量评测:设计的测试用例均通过了测试,且测试用例运行时间短,效率符合要求。测试用例覆盖了可能出现的输入情况,并覆盖了该模块的所有分支,单元测试结果符合预期。

 

 小组贡献:经过小组内部讨论,贡献率约开发规范

扩展任务

开发规范:选用了Google的《C++风格指南》中的规范:“果函数超过 40 行, 可以思索一下能不能在不影响程序结构的前提下对其进行分割。”在编写函数时要考虑到函数体的长度,如果该函数要实现复杂的功能,可能会造成函数过长,这样会使得代码难以阅读。

代码分析:根据规范分析组员中学号为17071的提交代码符合规范要求,符合开发规范。

代码静态扫描

  • 扫描结果显示源文件WordCountPro.cpp的117行处的指针chRtn释放内存不匹配导致内存泄漏, chRtn为字符数组, 应当使用delete[] chRtn;释放其内存,替换原代码中的delete chRtn;

高级任务

压力测试:

小组成员认为统计大文件可以有效测试性能,使用较大的文件对源程序进行压力测试,对程序的主要性能指标(即处理时长,以毫秒计算)进行测试和记录(debug测试框架下)。

同行评审

组内所有成员展开同行评审,经过讨论,认为制约程序性能的因素主要在核心模块对单词存储的数据结构以及排序算法上。
在核心模块中主要因素为当前选择的set和map容器,其内部数据结构为红黑树不够高效,次要因素则是是频繁调用的函数应当设为内联函数。

性能优化:

小组成员将记录分隔符表以及单词表的set和map容器替换为unordered_map和unordered_set,内部为哈希表。并将有关函数改为内联函数。

posted @ 2018-04-08 14:18  17095  阅读(183)  评论(1编辑  收藏  举报