软件测试第二周作业

一,github地址

https://github.com/lc-xie/WordCount

二,PSP表格


PSP2.1


PSP阶段


预估耗时

(分钟)


实际耗时

(分钟)


Planning


计划

 25  25

· Estimate


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

 25   25

Development


开发

200  240

· Analysis


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

 30  30

· Design Spec


· 生成设计文档

 -  -

· Design Review


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

 -  -

· Coding Standard


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

 -  -

· Design


· 具体设计

 40  40

· Coding


· 具体编码

 200 240

· Code Review


· 代码复审

 60  60

· Test


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

60  100

Reporting


报告

 150  180

· Test Report


· 测试报告

 60  60

· Size Measurement


· 计算工作量

 30  20

· Postmortem & Process Improvement Plan


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

 60  60
 
合计

 940  1080

三,思路

  1. 先将基本功能实现,再考虑扩展功能
  2. 实现WordCountTool工具类,这个类用于计算各种数值,将结果写入文件
  3. 实现命令行参数解析

四,程序的实现过程

程序只实现了基本功能,包含两个类,一个Main类和一个工具类。在Main类中获取输入,并将数据传入工具类进行计算,工具类有两个函数,一个用于计算单词数、行数和字符数,一个用于输出结果到文件。

五,代码

1、main函数

  第一步获取目标文件的地址

  第二步获取操作序列

  第三步获取导出结果的文件地址,若不导出则直接回车

  第四步调用工具类进行计算

import java.io.File;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入目标文件地址:");
        String filePath=scanner.nextLine();
        System.out.print("请输入操作需求(以空格隔开,如:c l):");
        String[] charArr=scanner.nextLine().split(" ");
        System.out.print("若需要输出到本地文件,请输入目标文件地址,不需要请直接回车:");
        String outputFile=scanner.nextLine();
        File file=new File(outputFile);
        CountTool countTool=new CountTool();
        countTool.count(filePath);

        for (String c:charArr){
            switch (c){
                case "c":
                    System.out.println("字符数:"+countTool.charCount);
                    break;
                case "l":
                    System.out.println("行数:"+countTool.lineCount);
                    break;
                case "w":
                    System.out.println("单词数:"+countTool.wordCount);
                    break;
                default:break;
            }
        }

        if (file.exists()){
            countTool.ouputToFile(file,charArr);
        }
    }
}

2、CountTool类

  主要存有三个计算结果的变量和两个函数

/**
 * Created by stephen on 18-3-19.
 * 统计文件的单词数,字符数,行数
 */
public class CountTool {
    private String aimFile;
    public int lineCount=0;//行数
    public int charCount=0;//字符数
    public int wordCount=0;//单词数

    .....

}

3、count()函数

  此函数用于计算行数、单词数和字符数

  首先判断目标文件是否存在,不存在则输出“目标文件不存在!请重新输入”并返回

  然后一行行读文件,每读一行,lineCount++;同时通过s.length计算本行的字符数,再通过遍历循环找到所有的“ ”和‘,"来判断单词数量。

  最后关闭文件读写流。

/**
     * 计算各个值
     * @param filePath 代码文件的路径
     */
    public void count(String filePath){
        try {
            File file=new File(filePath);
            if (!file.exists()){
                System.out.println("目标文件不存在!请重新输入");
                return;
            }
            aimFile=file.getName();

            FileInputStream fis=new FileInputStream(file);
            InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            String s="";
            while ((s=br.readLine())!=null) {
                charCount += s.length();//字符个数就是字符长度
                //wordCount += s.split(" ").length;//split() 方法用于把一个字符串分割成字符串数组,字符串数组的长度,就是单词个数
                for (int i=1;i<s.length();i++){
                    if ((s.charAt(i)==‘ ‘&&s.charAt(i-1)!=‘ ‘&&s.charAt(i-1)!=‘,‘)||
                            (s.charAt(i)==‘,‘&&s.charAt(i-1)!=‘ ‘&&s.charAt(i-1)!=‘,‘)){
                        wordCount++;
                    }
                    if (s.charAt(i)!=‘ ‘&&s.charAt(i)!=‘,‘&&i==s.length()-1)wordCount++;
                }
                lineCount++;//因为是按行读取,所以每次增加一即可计算出行的数目
            }
            br.close();
            isr.close();
            fis.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

4、ouputToFile()函数

  将结果输出到指定文件

  获取结果后,遍历操作序列,将对应的数据写入

/**
     * 将数据写入文件
     * @param filePath
     * @param arr 输入的操作数组,‘o‘,‘c‘,‘w‘,‘s‘
     * @return
     */
    public boolean ouputToFile(File filePath,String[] arr){

        BufferedWriter bw=null;
        try {
            FileWriter fw = new FileWriter(filePath.getAbsoluteFile());
            bw = new BufferedWriter(fw);
        }catch (IOException e){
            e.printStackTrace();
            return false;
        }
        for (String c:arr){
            switch (c){
                case "c":
                    try {
                        bw.write(aimFile+",字符数:"+charCount+‘\n‘);
                    }catch (IOException e){
                        e.printStackTrace();
                        return false;
                    }
                    break;
                case "l":
                    try {
                        bw.write(aimFile+",行数:"+lineCount+‘\n‘);
                    }catch (IOException e){
                        e.printStackTrace();
                        return false;
                    }
                    break;
                case "w":
                    try {
                        bw.write(aimFile+",单词数:"+wordCount+‘\n‘);
                    }catch (IOException e){
                        e.printStackTrace();
                        return false;
                    }
                    break;
                default:break;
            }
        }
        try {
            bw.close();
        }catch (IOException e){
            e.printStackTrace();
        }
        return true;
    }

六,测试设计过程

  明天完善

七,参考文献

  http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 

原文地址:https://www.cnblogs.com/stephenxlc/p/8605743.html

时间: 2024-10-08 00:12:33

软件测试第二周作业的相关文章

软件测试第二周作业 wordcount

软件测试第二周作业 wordcount Github地址 https://github.com/mxz96102/word_count PSP2.1表格 PSP2.1 PSP 阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 25 30 · Estimate · 估计这个任务需要多少时间 150 252 Development 开发     · Analysis · 需求分析 (包括学习新技术) 20 20 · Design Spec · 生成设计文档 0 0 · Desig

软件测试第二周作业 WordCounter

Github 项目地址 WordCounter in github PSP(Personal Software Process) PSP2.1 PSP阶段 预估耗时实际耗时(分钟) 实际耗时(分钟) Planning 计划 10 17 Estimate 估计这个任务需要多少时间 5 10 Development 开发 545 650 - Analysis - 需求分析(包括学习新技术) 120 160 - Design Spec - 生成设计文档 60 90 - Coding Standard

解题报告——2018级2016第二学期第二周作业

解题报告——2018级2016第二学期第二周作业 D:迷宫问题 题目描述: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 输入 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. 输出 左上角到右

马哥linux 培训第二周作业

注意:第二周作业,请将以下题目整理在51cto博客当中,完成后请将对应的博文链接地址提交在答案栏中,提交格式如下:学号+姓名+博文链接地址eg:1+张三+http://mageedu.blog.51cto.com/4265610/1794420 本周作业内容:1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 文件管理的命令有cp.mv.rm 复制命令:cp 用法: cp [-adfilprsu] 来源文件(source) 目标文件(destination) cp [o

第二周作业补交(请老师看一下)

#include<stdio.h> #include<math.h> int main(void) { int money,year; double rate,sum; printf("Enter money:"); scanf("%d",&money); printf("Enter year:"); scanf("%d",&year); printf("Enter rate:

魏昊卿——《Linux内核分析》第二周作业:了解操作系统是怎样工作的

魏昊卿——<Linux内核分析>第二周作业:了解操作系统是怎样工作的 一.实验部分 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单的时间片轮转多道程序内核代码 mymain.c myinterr

学习linux第二周作业

第二周作业: 本周作业内容: 1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. touch,rm,mv,cp,file,ls,chmod,chown,ln,rename, touch 修改文件atime,如果文件不存在,那么创建该文件. rm:删除文件. -r:循环删除,包含文件和目录 -f:强制删除,布询问. -i:询问是否删除. 默认情况下,系统自带别名,rm=rm -i mv:移动文件,可以在移动的过程中重命名文件或文件夹. 例如:移动重命名mytest1目录为

软件工程 第二周作业

##软件工程第二周作业 提出问题 1. 一般来说,想要自己的程序跑得又快又好,就要减少函数的反复调用,但有所得则必有所失,效能提高就有可能伴随着程序的稳定性的降低,这两者应该如何权衡呢? 2. 关于5.3.5 老板驱动的流程,这种开发流程模式存在着一些问题,那要如何解决这些问题呢? 这种模式当然也有它的问题. 领导对许多技术细节是外行. 领导未必懂得软件项目的管理,领导的权威影响了自由的交流和创造. 领导最擅长的管理方式是行政命令,这未必能管好软件团队或任何需要创造力的团队. 领导的精力有限,领

软件质量与测试第二周作业 WordCount

第二周作业 WordCount 一.Github 地址 https://github.com/llag9810/Software-Quality-and-Testing-Wordcount 二.PSP2.1 表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 60 25 · Estimate · 估计这个任务需要多少时间 30 15 Development 开发 600 810 · Analysis · 需求分析 (包括学习新技术) 60 60 · D