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. 利用Visio绘制数据流图与组织结构图

    绘制数据流图: 利用Visio 2007来绘制网上书店系统的数据流图.利用Visio 2007创建Gane- Sarson数据流图,可以选择“软件和数据库”模板,然后再选择“数据流模型图”,创建之后可 ...

  2. Ansible 使用 Playbook 管理 Nginx 配置文件

    前面我们已经安装完 Nginx,但是在日常维护中经常需要修改配置文件,并重新加载配置文件,因此来写一个管理 Nginx 配置文件的 Playbook: [root@localhost ~]$ mkdi ...

  3. Onpaint和OnDraw的区别

    (一) OnPaint 和 OnDraw (1)OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中. (2)OnP ...

  4. gcc的选项

    -g: 是一个编译选项,即在源代码编译的过程中起作用,让gcc把更多调试信息(也就包括符号信息)收集起来并将存放到最终的可执行文件内. -rdynamic:   却是一个 连接选项 ,它将指示连接器把 ...

  5. GDI+ gif文件的显示和格式转换

    GDI+ gif文件的显示和格式转换   gdi+imagedeletenulltiff GDI+ gif文件的显示和格式转换 怎么获取gif文件的每一帧,并且显示出来呢? 1.怎么用gid+显示gi ...

  6. thrift安装及使用

    下载Thrift:http://thrift.apache.org/download ■ 将thrift-0.11.0.exe重命名为thrift.exe: ■ 解压thrift-0.11.0.tar ...

  7. 如何将一个项目打成war包?

    如何将一个项目打成war包?进入该项目所在目录jar  -cvf  myProjec.war  myProject

  8. 【SPMF开源数据挖掘平台入门】MaxSP算法使用说明

    前段时间,由于项目中用到了序列挖掘的算法,师兄推荐我用用SPMF.在此做个记录. 首先简单介绍一下SPMF: SPMF是一个采用Java开发的开源数据挖掘平台. 它提供了51种数据挖掘算法实现,用于: ...

  9. Makefile eval函数

    https://www.cnblogs.com/gaojian/archive/2012/10/04/2711494.html对 makefile 中 eval 函数的学习体会 http://blog ...

  10. sencha touch JsonP 自动提示消息 masked

    //公用类 Ext.define('app.util', { alternateClassName: 'util', statics: { /*为Ext.Viewport添加一个消息提示组件(需要初始 ...