wc优化总结

  1. 小组githubhttps://github.com/changjiang666/WcPro
  2.  Psp

阶段:

估计耗时(min

实际耗时(min

计划:

5

3

     计划所需时间

5

3

开发:

305

381

     需求分析(包括学习新技术)

20

25

     生成设计文档

5

2

     设计复审

5

2

     代码规范

5

2

     具体设计

10

30

     具体编码

120

140

     代码复审

20

30

     测试

120

150

报告:

105

105

     测试报告

90

90

     计算工作量

5

5

     事后总结,并提出过程改进计划

10

10

合计:

420

489

 

 

3. 被测代码及接口简介:

    我所测试的内容是文件输入部分,包括头文件<file.h><file.cpp>,其中file.cpp对输入路径进行分析,打开文件,并将文件内容拷贝到字符串缓冲区,缓冲区将作为返回值用于字符计数时的字符读取。

实现方法:打开给定路径下的文件,统计文件长度,根据文件长度申请足够的缓冲区,将文件内容读入缓冲区,处理文件结尾,返回缓冲区的地址。

 

关键方法:

*文件长度获取:

  fseek(fp, 0, SEEK_END);
  num = ftell(fp);
 fseek(fp, 0, SEEK_SET);

先将文件索引指针指向文件末尾,ftell(FILE*)用于获取索引指针距离文件首部的距离,即文件中的可见字符个数。 

*文件尾部处理:

  buf = (char *) malloc (sizeof(char) * (len + 2));
  fread(buf, sizeof(char), len, fp);
  fclose(fp);  

  *(buf + len) = ' ';
   *(buf + len + 1) = '\0';

缓冲区长度比字符数大2,其尾部分别设置为” ””\0”,其目的是方便在读取单词时可以方便读取最后一个单词。

  1. 关于测试用例:

鉴于文件读取模块功能简单,共可以设计10个测试用例,基于黑盒测试的理念,对输入的等价类划分为 无输入,正确输入,无效输入(输入是文件夹),错误输入。由于输入是文件路径,无法指定边界划分。基于白盒测试,对代码中的判定节点进行条件覆盖可将输入分为无效输入和正确输入(已包含在黑盒测试中)。针对需求中要求的单词类型,共提供6种测试用例,单元测试用于判断对这些文件是否读取正确。

 

Input 输入 Procedure 操作步骤 Output 预期结果 Result 实际结果 Status 是否通过 Remark 备注(在此描述使用的测试方法)
  open file error open file error OK 等价类测试:无输入
.\\TestCase.\\test1.txt   h h OK 等价类测试:正确输入
H:\\asdasd   open file error open file error OK 等价类测试:错误输入
.\\*   open file error open file error OK 等价类测试:无效输入
abc   abc abc OK 检测读取内容是否一致
hello-   hello- hello- OK 检测读取内容是否一致
let's   let's let's OK 检测读取内容是否一致
a-b   a-b a-b OK 检测读取内容是否一致
1_3   1_3 1_3 OK 检测读取内容是否一致
my you   my you my you OK 检测读取内容是否一致
  1. 测试结果

关于测试质量:测试用例已经覆盖所有可能出现的情况,测试质量有所保障。

关于测试模块质量:测试结果显示所有测试均符合预期,被测模块质量得到保障。

 

 

  1. 小组贡献

0.3

 

静态测试

  1. 参考文档“软件质量与复审”http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html

文档总结:

原则:简明易读。

代码风格规范:

 * 缩进:4空格

 * 行宽:100字符

 * 括号:表明逻辑优先级

 * 断行与空白{}行:程序模块{}分割,{}各占单行

 * 分行:一句一行,变量定义各自成行

 * 命名:“匈牙利命名法”,从命名中可以直接理解该命名的含义

 * 下划线:作用域_名称

* 书写:所有的类型//函数名都用Pascal形式,所有的变量都用Camel形式。

*/类型/变量:名词或组合名词,如MemberProductInfo等。

*函数则用动词或动宾组合词来表示,如get/set; RenderPage()

 * 注释:注释代码都采用ASCII码,不要使用中文等,提高可移植性

        注明做什么,为什么,不需要解释怎么做

        程序开头注明变量含义

        设置字体风格

 

  1. 分析对象17167同学的词频计数模块。

*注释分析:

/*
**function: process text and get statistical result
*/ 

符合要求:多行注释在中间行前加**,全部采用英文书写,对函数功能进行说明。

*缩进分析:

 void WcPro::processText()
{
 /*state val and initialize them*/
 char c;                     //visit all char and process it
 char *pText = textBuf;      //a copy from private member val

符合要求:缩进4个字节,结构清晰,通常IDE都会自动控制缩进,使代码美观。

*分行分析:

 char *pText = textBuf;      //a copy from private member val
 int word_flag = NOT_WORD;   //mark current word state
 int state = SPACE;          //DFA state

符合要求:一句一行,每个变量的定义自成一行,注释也较为清晰。

*函数名分析:

 void WcPro::processText()

符合要求:采用常规约定,第一个单词小写,之后的单词首字母大写。

  1. 静态分析工具:cppcheckhttp://cppcheck.net/

cppcheck使用:https://blog.csdn.net/e5max/article/details/11489137

  1. 静态测试结果

 

问题1(style) Class 'WcPro' has a constructor with 1 argument that is not explicit.

风格警告 :风格有关问题的代码清理(未使用的函数、冗余代码、常量性等等)

该问题是说构造函数参数不明确。我分析是代码中构造函数没有设置默认输入所导致的。可以在参数列表加入默认值即可。

 

问题2(information) Cppcheck cannot find all the include files (use --check-config for details)

信息消息 :配置问题,建议在配置期间仅启用这些。

    该问题表示没有找到所有的include文件。我查了一下,结论是:这个是cppcheck自己的配置问题,不代表代码问题。

 

posted @ 2018-04-08 22:31  幸运死神  阅读(542)  评论(0编辑  收藏  举报