软件质量测试 第二周作业 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

posted on 2018-03-20 15:19  fusidic  阅读(115)  评论(0)    收藏  举报

导航