第四周作业

1. Github地址

https://github.com/chaosrings/wcPro

2. PSP表格

PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)
Planing计划1020
·Estimate·估计这个任务需要多少时间1020
Development开发480500
·Analysis·需求分析(包括学习新技术)6060
·Design Spec·生成设计文档00
· Design Review设计复审 (和同事审核设计文档1515
· Coding Standard·代码规范 (为目前的开发制定合适的规范)1515
·Design·具体设计3030
·Coding·具体编码180200
·Code Review·代码复审6060
·Test·测试(自我测试,修改代码,提交修改)120120
Reporting报告120120
·Test Report·测试报告6060
·Size Measurement· 计算工作量3030
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划3030
合计610640

3. 接口实现

我负责的模块主要是对结果进行输出到指定文件中,函数接口为:
void saveToFile(const vector<pair<string, int> > &frequencyVec)
其中的参数frequencyVec是一个Vector数据,保存着单词和相应的词频信息

3.1 具体代码实现

   void saveToFile(const vector<pair<string, int> > &frequencyVec)
   {
      ofstream outputFile("result.txt", ofstream::out);     //打开名文result.txt文件,如果当前目录不存在就新建一个
      int cnt = 0;
      if (outputFile.is_open())
      {
          for(int i=0;i<(int)frequencyVec.size()&&i<100;++i)              //加100的约束条件是只输出前100个统计的单词
              outputFile << frequencyVec[i].first << ":" << frequencyVec[i].second << endl;
          outputFile.close();
      }
   }

其中frequencyVec是统计好的“单词-词频”的Vector,并且已经按需求排序。所以在这个保存结果的函数里需要做的就是打开result.txt文件,并把结果写到文件中。如果该目录下不存在result.txt文件则新建一个,通过outputFile("result.txt", ofstream::out)实现。如果统计好的不同单词多于100个时,只对前100个做输出处理,操作完成后关闭文件。

4. 测试用例

该函数测试的流程图如下:
1341650-20180408181912851-1592167121.png

4.1 白盒测试:

测试路径测试用例预期输出实际输出
1->3当前目录有result.txt文件,frequencyVec的长度小于100统计好的单词全输出全输出
2->1->3当前目录没有result.txt文件,frequencyVec的长度小于100创建result.txt文件并输出到其中单词信息写到新建的result.txt中
1->4frequency中的长度大于100只输出前100项单词和词频排好序的100项单词和相应词频
2->1->4当前目录没有result.txt文件,frequencyVec的长度大于100创建result.txt文件并输出前100项到其中100项单词信息写到新建的result.txt中

4.2 黑盒测试

对于各种测试输入,可以划分为4个等价类
1341650-20180408191657445-915433765.png
对于个等价类的输入,同白盒测试一样。

5. 单元测试

由于该函数比较简单,而且主要作用是输出,用专门的测试框架会比较不方便,所以这里并没有用框架而是简单地在main函数里面调用测试。

5.1 少量单词

当只有少量单词时,测试结果如图:
1341650-20180408194109979-1291741163.png
运行结果和预期相同。

5.2 大量单词

当包含大量单词,且单词总数大于100时,结果如下:
1341650-20180408195353448-1401967638.png
运行结果也和预期相同,单词种数大于100则只输出前100项.

6. 小组贡献

0.24

拓展任务:静态测试

以下面小组中的某位成员的一段代码为例进行评审,该代码主要实现了词法分析功能

string Lex::getNextToken()
{
    string thisToken = "";
    while (currentPos < targetStr.size() && !isalpha(targetStr[currentPos]))//在currentPos小于目标字符长度时跳过非字母开头
        ++currentPos;
    while (currentPos < targetStr.size())
    {
        char curChar = targetStr[currentPos];
        if (isalpha(curChar))        //如果是字母便保存
            thisToken +=curChar;
        else if (curChar == '-'&&currentPos < targetStr.size() - 1 && isalpha(targetStr[currentPos + 1]))//有连字符号时,只有连字符号后是字母才算单词
        {
            thisToken += '-';
        }
        else
            break;  //其他情况,已经从curentPos开始获取到了一个单词,返回
        currentPos++;
    }
    return thisToken;

}

参照谷歌C++风格指南,对代码的规范进行评价:
1、缩进比较合理,方便代码的阅读
2、变量命名比较规范,容易理解变量含义
3、加以适当的注释可以让人更好地理解代码
4、方法有恰当的返回值,代码结构清晰
大体上来说并没有什么问题。
再利用cppcheck检查自己的代码,也没有太大的问题。

转载于:https://www.cnblogs.com/LZing/p/8745490.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值