软件质量测试 第二周作业 WordCount
软件质量与测试第二周作业-WC
github地址:https://github.com/fusidic/WordCount
一、项目简介
WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
可执行程序命名为:wc.exe,该程序处理用户需求的模式为:
wc.exe [parameter][input_file_name]
存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。
-
基本功能
wc.exe -c file.c //返回文件 file.c 的字符数 wc.exe -w file.c //返回文件 file.c 的单词总数 wc.exe -l file.c //返回文件 file.c 的总行数 wc.exe -o outputFile.txt //将结果输出到指定文件outputFile.txt -
扩展功能
wc.exe -s //递归处理目录下符合条件的文件 wc.exe -a file.c //返回更复杂的数据(代码行 / 空行 / 注释行) wc.exe -e stopList.txt // 停用词表,统计文件单词总数时,不统计该表中的单词
二、PSP
PSP 的特点:
• 不局限于某一种软件技术 (如编程语言), 而是着眼于软件开发的流程, 这样不同应用的工程师可以互相比较。
-
不依赖于考试, 而主要靠工程师自己收集数据, 然后统计提高。
-
在小型,初创的团队中, 高质量的项目需求很难找到,这意味着给程序员的输入质量不高,在这种情况下, 程序员的输出 (程序/软件) 往往质量不高, 然而这并不能全部由程序员负责。
-
PSP 依赖于数据
-
需要工程师输入数据, 记录工程师的各项活动, 这本身就需要不小的代价。
-
如果数据不准确或有遗失, 怎么办? 让工程师编造一些?
-
如果一些数据不利于工程师本人 (例如: 花很多时间修改缺陷), 我们怎么能保证工程师能如实地记录这些数据呢?
-
PSP的目的是记录工程师如何实现需求的效率, 而不是记录顾客对产品的满意度。工程师可能很高效地开发出一个顾客不喜欢的软件, 那这个工程师还是一个优秀的工程师么?
| PSP2.1 | Personal Software Process Stages | Time (%) Senior Student | Time (%)SDE |
|---|---|---|---|
| Planning | 计划 | 20 | 15 |
| · Estimate | · 估计这个任务需要多少时间 | 16 | 10 |
| Development | 开发 | 201 | 241 |
| · Analysis | · 需求分析 (包括学习新技术) | 15 | 40 |
| · Design Spec | · 生成设计文档 | 10 | 10 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1 | 1 |
| · Design | · 具体设计 | 45 | 40 |
| · Coding | · 具体编码 | 100 | 150 |
| · Code Review | · 代码复审 | 20 | 10 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 30 | 35 |
| Reporting | 报告 | 9 | 6 |
| · Test Report | · 测试报告 | 3 | 2 |
| · Size Measurement | · 计算工作量 | 2 | 1 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 3 | 3 |
三、解决方案
-
对
String[] args中的参数进行解析 -
利用字符流对目标文件进行遍历
-
确定所需的数据
-
利用Idea的Build Artifacts将文件打包成
.jar -
利用exe4j将
.jar转换成可执行文件.exe
四、程序实现
-
参数解析
private static class BasicArgs { Boolean c = false; Boolean w = false; Boolean l = false; Boolean o = false; String pathname; String outPath; BasicArgs(String[] args) { for (int i = 0; i < args.length; i++) { if (args[i].charAt(0) == '-' && args[i].length() < 3) { switch (args[i].charAt(1)) { case 'c': this.c = true; break; case 'w': this.w = true; break; case 'l': this.l = true; break; case 'o': this.o = true; i++; if (i < args.length) { this.outPath = args[i]; } break; default: break; } } else { this.pathname = args[i]; } } } } -
行读取
countline -
读取文件
fileScanner -
等
五、测试
作为一门测试的课程,测试才是重点。请根据自己以往积累的测试经验,结合本周介绍的测试用例设计方法,在编码完成之后,提交产品之前,设计测试用例,并编写单元测试,对自己的项目进行测试。
六、参考
java文件读取的几种方式https://www.cnblogs.com/hudie/p/5845187.html
java正则表达式http://www.runoob.com/java/java-regular-expressions.html
java中获取文件夹或则文件路径的方法https://www.cnblogs.com/tk55/p/6064160.html
idea如何打包jarhttps://jingyan.baidu.com/article/7e4409531fbf292fc1e2ef51.html
java项目生成exehttps://www.cnblogs.com/zhangjinru123/p/7247789.html
浙公网安备 33010602011771号