项目地址 | 仓库地址 |
结队伙伴 | 陈宇红 |
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 20 | 40 |
Estimate | 估计这个任务须要多少时间 | 480 | 600 |
Development | 开发 | 40 | 45 |
Analysis | 需求分析(包括学习新技术) | 20 | 15 |
Design Spec | 生成设计文档 | 60 | 60 |
Design Review | 设计复审(和同事审核设计文档) | 20 | 30 |
Coding Standerd | 代码规范(为目前的开发制定合适的规范) | 20 | 15 |
Design | 具体设计 | 80 | 100 |
Coding | 具体编码 | 240 | 300 |
Code Review | 代码复审 | 120 | 120 |
Test | 测试(自我测试,修改代码,提交修改) | 240 | 200 |
Reporting | 报告 | 30 | 30 |
Test Report | 测试报告 | 60 | 60 |
Size Measurement | 计算工做量 | 30 | 30 |
Postmortem & Process Improvement Plan | 过后总结, 并提出过程改进计划 | 60 | 50 |
合计 | 1040 | 1095 |
思路描述:
1.细分题目,划分红一个个小任务以下图所示
2.由于c++尚未学到文件操做,因此我就先看了教材,大体学了下文件基本操做,再在网上查了文件操做的教程。
3.这次代码涉及到了排序,我就翻了数据结构关于排序方面的知识,以及如何写代码。html
1.规划出大体方法
ios
2.概括整理函数,类及之间的关系
咱们通过协商大体把每个功能都设计成一个函数,这样比较整洁且比较有概括性,在调试过程也比较容易找到错处。而后是划分类,咱们把最基础的统计字符方面划分为一个类,再把关于单词的划分为一个类,最后把行数统计划分为一个类。函数与类之间最重要的是类中包含函数,由于咱们在设计的时候把每个须要实现的功能都设计成了一个函数,因此在类里面能够很容易想到把函数划分进去。c++
因为这是我俩第一次用c++完成一个项目,因此咱们参考了网上的c++代码规范知否,知否git
审查模块名
coutword_1github
1.主要问题数据结构
1.发现同伴在设计过程出现了一个功能上的遗漏,在限制单词条件时,遗漏了“以数字开头"不是单词这一条件函数
2.第二个问题是我在统计单词数所用的循环结构中,因为逻辑表达不当形成了死循环。
修改前:性能
void word_count2::read_str() { char ch;//收集每个文件中字符 string str_1;//记录每个规定的字符 long pos;//记录f_in的位置 int fir = 0;//判断第一个字符是否为字母 f_in.clear(); f_in.seekg(0, ios::beg); while (!f_in.eof()) { int read=0; f_in.get(ch); read++; int k; f_in.seekg(pos); //f_in.get(ch); for ( k = 1; k < 4; k++) { read++; f_in.get(ch); if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break; } if (k == 4) { f_in.get(ch); while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9')) { f_in.get(ch); read++; } pos = f_in.tellg(); f_in.seekg(pos - read); getline(f_in, str_1, ch); store_str(str_1); f_in.seekg(pos); } } } }
修改后:单元测试
void word_count2::read_str() { char ch;//收集每个文件中字符 string str_1;//记录每个规定的字符 long pos;//记录f_in的位置 int fir = 0;//判断第一个字符是否为字母 f_in.clear(); f_in.seekg(0, ios::beg); while (!f_in.eof()) { f_in.get(ch); fir++; if (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)) { int read=1;//记录规定字符创的长度。 //-------------------------------------------------->增长代码 if (fir == 1) { pos = f_in.tellg(); } else { pos = f_in.tellg(); f_in.seekg(pos-1);//获得上一个字符 f_in.get(ch); } if (('0' <= ch && ch <= '9') || ch== '" ') { f_in.seekg(pos); f_in.get(ch); while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch) || ('0' <= ch && ch <= '9')) { f_in.get(ch); } }//------------------------------------------------------------------------------------------------------------------- else { read++; int k; f_in.seekg(pos); //f_in.get(ch); for ( k = 1; k < 4; k++) { read++; f_in.get(ch); if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break; } if (k == 4) { f_in.get(ch); while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9')) { f_in.get(ch); read++; } pos = f_in.tellg(); f_in.seekg(pos - read); getline(f_in, str_1, ch); store_str(str_1); f_in.seekg(pos); } } } } }
2.复审感悟学习
在写代码时,对于重要部分咱们必定要注释,否则会对代码复审形成很大的影响。甚至要从新想代码的思路.
性能改进时间花费
大体是120分钟
改进思路
1.主要改进是将散乱函数封装成类
性能分析图
.单元测试图
1.在进行单元测试时出现不少问题,以致于咱们单元测试这卡了好久。
第一个问题:附加依赖项添加错误:根据以前博客须要咱们添加obj文件,可是咱们进行单元测试时已经添加的头文件里面已经包含了obj文件里的全部内容,形成了单元测试时报错多个函数重复定义。
后来咱们把附加依赖项删除后就解决了这个问题。
第二个问题:是文件的相对路径上:文件明明已经存在但就是打不开,测试一直不经过。
后来发现咱们代码里用的是相对路径,可是要打开的文件与咱们运行的程序不在同一个文件夹里面,因此报错了。