Github 地址:chaosrings/wcPro

1.PSP2.1表格

psp 2.1 psp阶段 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10 10
Estimate 估计这个任务需要多少时间 10 10
Development 开发 200 250
Analysis 需求分析(包括学习新技术) 60 150
Design Spec 生成设计文档 20 20
Design Review 设计复审(和同事审核设计文档) 10 10
Coding Standard 代码规范(为目前的开发制定合适的规范) 20 20
Design 具体设计 30 30
Coding 具体编码 150 200
Code Review 代码复审 30 30
Test 测试(自我测试,修改代码,提交修改) 150 200
Reporting 报告 10 10
Test Report 测试报告 20 20
Size Measurement 计算工作量 10 10
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 30 30
合计 750 1000

2.基本任务

  • 接口实现 main()

    我负责的模块是main函数部分的对输入参数的处理以及对输入参数进行有效性的检验,同时对于给定的Scanner类进行初始化工作,将目标参数传入目标函数,完成存储文件的语句。

    由于是控制台出入口函数,接口为main(),完成不同模块的组装和参数传输作用。

    引用的构造函数有:Lex(const string & str)、Lex()、Scanner()、~Scanner()& saveToFile(const vector<pair<string, int>> &frequencyVec)。

    具体代码如下:
      int main(int argc, char* argv[])
{
if (argc != 2)
{
cout << "syntax error!" << endl;
return -1;
}
Scanner scan;
string filePath = argv[1];
string targetStr= scan.getString(filePath);
Lex lex;
lex.setTargetStr(targetStr);
vector<pair<string, int > > wordFreqVec = lex.getWordFreqVec();
saveToFile(wordFreqVec);
return 0;
}
```c++
输入参数为argc 和argv[],返回运行正确与否的结果,过程中对输入参数个数进行判断,原则上只允许两个参数输入。一次调用Scanner返回文件中的字符串然后传入getWordFreqVec()函数中进行词频统计和排序。最后在saveToFile()中存储文件到本地。 ####3.测试用例设计 该函数中只有两个分支结点,故只需要3个测试用例就可以覆盖到所有的路径。
![](https://images2018.cnblogs.com/blog/1344288/201804/1344288-20180408212358024-466953748.png) 另外几个测试用例测试正常情况、参数过多、后缀测试、无有效返回值。因为等价类较少故不好设计到20个用例,6个有效用例已经是极限。 | Test Case ID | Test Item | Test Case Title | Test Criticality | Pre-condition | Input | Procedure | Output | result | Status | Remark(Test method) |
| ------------ | --------- | --------------- | --------------- | ------------- | ----- | --------- | ------ | ------ | ------ | ------------------- |
| 1 | main | Else | Parameters Lost | M |none |wcPro.exe |none |-1 |-1 | Pass |
|2 | main | Else | Parameters error Test | M | none |wcPro.exe -a |none |-1 |-1 |Pass |
| 3 |main | Else | Parameters Overflow | M |none | wcPro.exe -a text.txt | none | -1 | -1 | Pass |
| 4 | main | Else | Parameters correct Test | H |none | wcPro.exe text1.txt | none | 0 |0 | Pass |
| 5 | main | Else | File Postfix Test | H | none | wcPro.exe text.c | 有效字符为空 | 有效字符为空 | 0 | Pass |
| 6 | main | Else | Input invalid | H |none | wcPro.exe text1.txt | none | -2 | -2 | Pass | 因为是对主函数入口进行的修改和测试,故单元测试的优越性也就不存在了,我进行了人工逐个验证,都是符合预期结果。 ---
###扩展任务:静态测试 #### 1.参照代码规范 [Google开源项目风格指南,C++风格指南](http://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/contents/) [现代软件工程讲义 3 代码规范与代码复审](http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html) ####2.对组员201517150的代码评审 ```c++
void saveToFile(const vector<pair<string, int> > &frequencyVec)
{
ofstream outputFile("result.txt", ofstream::out);
int cnt = 0;
if (outputFile.is_open())
{
if (frequencyVec.size() == 0)
cout << "无有效输入" << endl;
for(int i=0;i<(int)frequencyVec.size()&&i<100;++i)
outputFile << frequencyVec[i].first << ":" << frequencyVec[i].second << endl;
outputFile.close();
}
}

通过静态分析可以发现其中cnt的变量没有用到。

对这个函数的功能说明我觉得有必要放在整个函数体前面进行说明和参数说明。

另外对于单句的for循环语句,虽然这个地方没有很复杂所以还能清晰的看出来,但是随着代码量的增加之后,代码的可读性就会下降,建议可以在一些复杂的循环判断结构之前进行提前的注释说明。

整个代码看上去过于紧凑,方便阅读的话一般就会在不同的标识符之间进行空格显得相对疏松。

3.静态检查工具

我使用了cppcheck工具对代码进行了静态检查工作。

cppcheck下载链接

4.静态检查扫描结果

我的代码部分没有发现静态错误,说明代码的静态检查是通过的,也就是没有出现一些变量名未使用以及重复定义等问题。

5.小组代码分析

因为整个项目的代码量不算大,所以进行代码分析的时候就会相对容易一点,整个代码都比较紧凑,对于每个判定条件都是比较恰当的。但是因为不同模块的可优化部分差别有点大,部分同学的工作量就比其他人多的多了,我们的划分还是有点不均匀。整体是符合要求的规范化代码书写和测试。

作业小结:

这次和上次不同是小组合作完成的作业,自己很庆幸能够和学弟们组队并比较顺利的完成这次任务,对于整个开发、测试以及软件质量之间的关系有了比较清楚的认识,一个软件的质量从一个整体来保证是比较困难的,但是经过合理的功能划分和单元测试、模块测试、系统测试能够更大程度上规避软件缺陷,开发的过程中要有测试的意识,这不仅仅可以提升自己的代码质量同时对于后期测试的工作也可以缓解。当然现在一般的主流软件开发过程中,测试过程时间的定义一直就比较模糊,可能是为了更好的权衡开发成本和质量之间的关系吧。

WordCount优化的更多相关文章

  1. HUST软测1504班第4周小组作业成绩:WordCount优化

    说明 本次公布的成绩为第四周作业的结果: 第4周小组作业:WordCount优化 博客推荐:本次作业有一位同学完成有创意,推荐优秀博客.(优秀博客不会对成绩带来正面或者负面影响)PS:做任何创新的任务 ...

  2. 第四周小组作业:Wordcount优化

    1.小组github地址 https://github.com/muzhailong/wcPro 2.PSP表格 PSP2.1 PSP阶段 预计耗时(分钟) 实际耗时(分钟) Planning 计划 ...

  3. WcPro项目(WordCount优化)

    1 基本任务:代码编写+单元测试 1.1 项目GitHub地址 https://github.com/ReWr1te/WcPro 1.2 项目PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实 ...

  4. WordCount 优化版测试小程序实现

    Stage1:代码编写+单元测试 Github地址: https://github.com/245553473/wcPro.git PSP表格: PSP PSP阶段 预估耗时(分钟) 实际耗时(分钟) ...

  5. 软件测试第4周小组作业:WordCount优化

    一.基本任务:代码编写+单元测试 1.Github地址: https://github.com/Wegnery/New_WordCount 2.PSP2.1表格 PSP2.1 PSP阶段 预估耗时 ( ...

  6. 第四周WordCount优化

    一.GitHub地址 https://github.com/kawoyi/Advanced-WordCounter最终由组长整合的组长github 二.psp表格 三.个人模块及实现 我负责的是输入模 ...

  7. WordCount优化版测试小程序实现

    Github地址:https://github.com/hcy6668/wordCountPro.git PSP表格: PSP  PSP阶段  预估耗时(小时)  实际耗时(小时)  Planning ...

  8. 第4周小组作业:WordCount优化

     Github项目地址:https://github.com/chaseMengdi/wcPro stage1:代码编写+单元测试 PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分 ...

  9. WordCount优化-第四周小组作业

    一.基本功能 GITHUB项目地址:https://github.com/LongtermPartner/ExtendWordCount PSP表格填写: PSP2.1 PSP阶段 预估耗时 (分钟) ...

随机推荐

  1. WAF Bypass数据库特性(Mysql探索篇)

    0x01 背景 Mysql数据库特性探索,探索能够绕过WAF的数据库特性. 0x02 测试 常见有5个位置即:   SELECT * FROM admin WHERE username = 1[位置一 ...

  2. RF变量列表类型@{}和${}列表类型的关系

    总结:@{}列表类型和${}列表类型都可以表示list类型,均可以通过 set variable 和 create list 创建,区别主要是展示格式和引用格式: @{}类型可以通过 set vari ...

  3. ISD9160学习笔记05_ISD9160语音识别代码分析

    前言 语音识别是特别酷的功能,ISD9160的核心卖点就是这个语音识别,使用了Cybron VR 算法. 很好奇这颗10块钱以内的IC是如何实现人家百来块钱的方案.且听如下分析. 本文作者twowin ...

  4. thinkjs+swagger Editor

    一直很好奇专门写接口同事的工作,于是趁着手边工作中的闲暇时间,特地看看神奇的接口文档怎么摆弄. 总览: 这是基于thinkjs(3.0),使用swagger editor编写,实现功能性测试的接口文档 ...

  5. Ubuntu下Eclipse的安装方法

    1. 下载jre,eclipse,cdt 其中jre是java运行环境,eclipse需要先装jre,才可能运行,cdt是在eclipse中运行c\c++程序的插件. 1.1 下载jre 网址是:ja ...

  6. 十款不错的Hybrid App移动开发框架

    本文转载至http://www.pureasme.com/blog/2015/0419476.html ionic 是个高级的 HTML5 移动端应用框架,是个很漂亮的使用 HTML5 开发混合移动应 ...

  7. (转载)Java反射机制

    Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调 ...

  8. 用Copy命令合并文件

    用Copy命令合并文件 这个文章是在我以前的百度空间里面发表过的,后来因为某个内分泌失调的管理员把我的空间http://hi.baidu.com/kamdy   封了! 旧事不提,还是回到主题吧,这个 ...

  9. 【转】VC 隐藏模块、MFC 改变窗口类名

    [转]VC 隐藏模块 void HideDll() { HMODULE hMod = ::GetModuleHandle("MyHook.dll"); PLIST_ENTRY He ...

  10. VS2008 SP1 安装卡在 VS90sp1-KB945140-X86-CHS的解决方法

    VS2008 SP1 安装卡在 VS90sp1-KB945140-X86-CHS的解决方法 VS2008 SP1 安装卡在 VS90sp1-KB945140-X86-CHS的解决方法 方法一:(不推荐 ...