一、Github地址

https://github.com/zhouyubei/WordCount

二、PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 20  20

· Estimate

· 估计这个任务需要多少时间

 20   20

Development

开发

1天  1.5天

· Analysis

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

 30  30

· Design Spec

· 生成设计文档

 -  -

· Design Review

· 设计复审 (和同事审核设计文档)

 -  -

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 -  -

· Design

· 具体设计

 30  30

· Coding

· 具体编码

 1天 1.5天

· Code Review

· 代码复审

 60  60

· Test

· 测试(自我测试,修改代码,提交修改)

60  120

Reporting

报告

 140  140

· Test Report

· 测试报告

 60  60

· Size Measurement

· 计算工作量

 20  20

· Postmortem & Process Improvement Plan

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

 60  60
 

合计

 2天  3天

三、解题思路

  1. 先实现基本功能,再实现扩展功能
  2. 由于java的知识忘得差不多了,先百度了一下java如何统计一个文件的字符数,单词数,行数,在此基础上做修改,详见参考文献1
  3. 实现命令行参数解析,参考2
  4. 实现统计空行、代码行、注释行和停用词表,参考3、4
  5. 未能实现递归处理目录文件

四、程序设计实现过程

由于程序较小,就仅使用了一个类main,有三个函数,主函数main(),参数解析函数getopt(),功能实现函数count(),主函数接收从命令行传来的参数,调用getopt()进行参数解析,并传给count()进行相应功能的实现并输出到文件中。

五、代码说明

1、参数解析函数getopt():

  • 接收主函数传过来的参数数组args,创建一个Vector向量类optString用于存放解析后的参数。
  • for循环体内判断args中的字符串与指定参数是否相等,若相等则加进optString中,若为-o或-e,则将后一字符串存进输出文件路径outPath或停用词表路径stopWordPath。
     //参数解析
public static void getopt(String[] args) {
optString = new Vector<String>();
outPath = "result.txt";
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-o")) {
if (++i == args.length) {
System.out.println("未输入输出文件路径名");
return;
}
outPath = args[i];
}
else if (args[i].equals("-e")) {
if (++i == args.length) {
System.out.println("未输入停用词表路径名");
return;
}
optString.addElement(args[i-1]);
stopWordPath = args[i];
}
else if (args[i].equals("-c") || args[i].equals("-w") || args[i].equals("-l")|| args[i].equals("-a"))
optString.addElement(args[i]);
else if (args[i].equals("-s"))
System.out.println("尚未实现-s功能");
else
inPath = args[i];
}
}

2、统计函数count()

  • 读入文件并调用readLine()函数循环读入每一行。
  • 统计字符个数和行数较为简单。
  • 统计单词个数:运用split() 方法把一个字符串分割成字符串数组strArray。若不需过滤停用词,字符串数组的长度,就是单词个数。若启用停用词表,初始化停用词表时创建Vector向量类stopWord存放停用词,创建动态数组strList,运用contains()函数判断字符串数组strArray中的词是否存在于停用词表,若不存在则加入动态数组strList,单词个数即为strList长度。
  • 运用正则表达式匹配判断代码行,空白行,注释行。若全为空或仅有一个字符为空白行,若注释符号“//”前没有或仅有一个字符为注释行,其余为代码行。
         while((str = br.readLine()) != null)
{
charNum += str.length();//-c 字符个数就是字符长度
lineNum++;//-l 因为是按行读取,所以每次增加一即可计算出行的数目
//-w
if(!str.equals("")){//防止空行也会增加一个字符串
String[] strArray = str.split(" |,|\\t");//split() 方法用于把一个字符串分割成字符串数组,字符串数组的长度,就是单词个数
//-e 过滤停用词
if (optString.contains("-e")){
ArrayList<String> strList = new ArrayList<String>();
strList.clear();
for(int i = 0; i<strArray.length; i++){
if(!stopWord.contains(strArray[i]))
strList.add(strArray[i]);
}
wordNum += strList.size();
}
else
wordNum += strArray.length;
}
//-a 代码行,空白行,注释行
if (Pattern.matches("\\s*.?\\s*", str))
blankLineNum++;
else if(Pattern.matches("\\s*.?\\s*//.*", str))
commentLineNum++;
else
codeLineNum++;
}

六、测试设计过程

1、未能写出测试脚本,均是在cmd控制台测试。语句覆盖就是要保证设计的测试用例应至少覆盖函数中所有的可执行语句,为此,我针对main类中的getopt方法,使用语句覆盖指标设计测试用例,共产生如下10个测试用例。

1、wc.exe -c file.c -o output.txt:结果会输出到output.txt中
2、wc.exe -c file.c -o:提示未输入输出文件路径名
3、wc.exe -w file.c -e stop.txt:启用停用词表,计算单词数时停用词表中的词不计入在内
4、wc.exe -w file.c -e:提示未输入停用词表路径名
5、wc.exe -w file.c -e stop1.txt:该停用词表文件不存在,会提示系统找不到指定的文件
6、wc.exe -c:提示空指针
7、wc.exe -c file1.c:该源文件不存在,会提示系统找不到指定的文件
8、wc.exe -s:提示尚未实现-s功能
9、wc.exe -c -w -l -a file.c:统计字符数、单词数、行数,结果输出到默认文件result.txt
10、wc.exe -a file.c:统计空白行数、代码行数、空白行数,结果输出到默认文件result.txt

2、针对main类中的count方法,使用语句覆盖指标设计测试用例,共产生如下7个测试用例,为源文件file.c中内容。停用词表中内容为“a”。

 int a
a,b
}
c d //gg
}//

3、评价:语句覆盖被认为是“最弱的覆盖”,原因是它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,优点是可以很直观地从源代码得到测试用例,无须细分每条判定表达式。缺点是由于这种测试方法仅仅针对程序逻辑中显式存在的语句(即可执行语句),但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。所以满足程序测试要求还需更多测试。

七、参考文献

  1. http://blog.csdn.net/ycy0706/article/details/45457311
  2. http://blog.csdn.net/ksu99/article/details/157602
  3. http://blog.csdn.net/u013930303/article/details/44872155
  4. http://blog.csdn.net/javaniuniu/article/details/53454749
  5. 参照同学:https://github.com/Asfalas/WordCount
  6. 参照同学:https://github.com/Wegnery/WordCount

软件测试第2周个人作业:WordCount编码测试的更多相关文章

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

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

  2. 第二周个人作业WordCount

    1.Github地址 https://github.com/JingzheWu/WordCount 2.PSP表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning ...

  3. 软件测试作业——WordCount的测试

    一.代码提交 1.代码地址:https://gitee.com/zst1978805482/WordCount 2.作业地址:https://edu.cnblogs.com/campus/xnsy/T ...

  4. WordCount编码测试

    Github项目地址:https://github.com/LantyrLYL/WordCount PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计 ...

  5. 软件测试第二周个人作业:WordCount

    github地址:https:/github.com/muzhailong/wc.git 第一次写博客很不容易,也算是一个好的开始吧. 1.   个人作业要求 作业简述:根据WordCount的需求描 ...

  6. 实验十一 团队作业7—团队项目设计完善&编码测试

    实验十一 团队作业7—团队项目设计完善&编码测试 实验时间 2018-6-8 Deadline: 2018-6-20 10:00,以团队随笔博文提交至班级博客的时间为准. 评分标准: 按时交 ...

  7. 结队第二次作业——WordCount进阶需求

    结队第二次作业--WordCount进阶需求 博客地址 051601135 岳冠宇 博客地址 051604103 陈思孝 博客地址 Github地址 具体分工 队友实现了爬虫功能,我实现了wordco ...

  8. c++ 西安交通大学 mooc 第十三周基础练习&第十三周编程作业

    做题记录 风影影,景色明明,淡淡云雾中,小鸟轻灵. c++的文件操作已经好玩起来了,不过掌握好控制结构显得更为重要了. 我这也不做啥题目分析了,直接就题干-代码. 总结--留着自己看 1. 流是指从一 ...

  9. 软件测试第六周学习笔记之“Win8 APP应用程序的白盒测试”

    这周的学习笔记我想写点自己关于实验中碰到的问题和感想. 因为这次做的是白盒测试,所以我决定去测试一下上回测试的app的功能函数. 这次我用的是单元测试项目来做的白盒测试: 创建单元测试的步骤: 1.点 ...

随机推荐

  1. appium自动化 - android

    1. 获取driver appium通过生成driver来识别和操作app的UI元素.生成driver时,需要给出被测设备的相关信息.appium官方上的例子如下: https://github.co ...

  2. linux学习19 shell脚本基础-bash脚本编程基础及配置文件

    一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由 ...

  3. cookie的使用和设置

    cookie就是服务端通过浏览器端的存储机制,把一些会话相关数据存储在浏览器中.优点:分担服务端的压力,提高了效率,缺点:不安全 生成和请求原理 cookie的生命周期设定以后,哪怕是关闭浏览器,那么 ...

  4. vs2015 远程调试web

    1.找到vs2015远程调试器 针对服务器版本选择 X64 .X86,把文件夹复制到服务器 2.在服务器中运行:msvsmon.exe 选择 工具->选项,修改成 无身份验证,允许任何用户进行调 ...

  5. 隐藏IDEA project 中的指定文件

    例如隐藏project下的.idea文件目录,以及.iml文件 在 Settings>File Types > ignore files and folders 中添加    .idea; ...

  6. BZOJ 3931: [CQOI2015]网络吞吐量 Dijkstra+最大流

    这个没啥难的. 只保留可以转移最短路的边,然后拆点跑一个最大流即可. #include <bits/stdc++.h> #define N 1004 #define M 250004 #d ...

  7. 2019 南昌ICPC网络赛H The Nth Item

    The Nth Iteam 题意:F(0)=1,F(1)=1,F(n)=3*F(n-1)+2*F(n-2) (n>=2) ,F(n) mod 998244353.给出Q跟N1,Ni=Ni-1^( ...

  8. 关于 ESIM 网络的 资料 集合

    1.https://blog.csdn.net/wcy23580/article/details/84990923 原理及Python keras 实现 2.https://www.kaggle.co ...

  9. NSObject和反射

    如何NSObject和反射 NSObject 常用方法 如何判断 某个对象是否属于某个类或子类 -(BOOL)isKindOfClass:(Class)aClass 判断是否为aClass的实例(不包 ...

  10. Python数据抓取(3) —抓取标题、时间及链接

    本次分享,jacky将跟大家分享如何将第一财经文章中的标题.时间以及链接抓取出来 (一)观察元素抓取位置 网页的原始码很复杂,我们必须找到特殊的元素做抽取,怎么找到特殊的元素呢?使用开发者工具检视每篇 ...