一、项目Github地址

https://github.com/huangzihaohzh/WordCounter

二、PSP表格


PSP2.1 Personal
Software Process Stages
预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 90
· Estimate · 估计这个任务需要多少时间 60 90
Development 开发 1260 1320
· Analysis · 需求分析  60 45
· Design Spec · 生成设计文档 60 90
· Design
Review
· 设计复审  60 45
· Coding
Standard
· 代码规范 30 90
· Design · 具体设计 60 150
· Coding · 具体编码 540 480
· Code Review · 代码复审 90 60
· Test · 测试(自我测试,修改代码,提交修改) 360 360
Reporting 报告 180 160
· Test Report · 测试报告 120 120
· Size
Measurement
· 计算工作量 30 20
· Postmortem
& Process Improvement Plan
· 事后总结, 并提出过程改进计划 30 20
合计   1500 1570

三、解题思路

  1. 阅读需求文档(个人项目文档),大致了解题目的要求。由需求文档可知,题目要求编写一个根据用户输入的参数,对文本文件进行字符、单词、行数的技术并显示。此外还需要对所编程序进行测试,并按要求填写PSP表格以及撰写博文;
  2. 为了更合理地进行设计,决定先阅读下《构建之法》,了解了PSP表格的制订、回归测试的设计以及软件工程的工作量和质量的衡量标准等;
  3. 对于本项目,对用户的输入需要进行检查和分为参数组和文件名两项,考虑用正则表达式来进行处理,对于各类计数功能的实现也考虑用正则表达式去实现,对于“-a”选项对应的代码行 / 空行 / 注释行的处理则相对复杂一点,需要进一步寻找资料。

四、设计实现过程

主要涉及与实现

  1. 用户输入检查:使用正则表达式对用户输入的参数和地址进行检查,检查输入是否符合参数格式以及地址格式是否正确;
  2. 参数提取与存储:对用户输入进行分类存储,用户输入参数存到参数列表中,地址/文件名存入到一个字符串字段中。
  3. 按用户参数进行不同的操作:遍历参数列表,对不同的参数调用对应的方法获取计数值并加以显示。

流程图如下

五、测试

单元测试

测试代码

public class Test {
private TextFile textFile = null; //Constructor
public Test(String filePath) throws Exception{
this.textFile = new TextFile(filePath);
} //测试TextFile.charNumCounter()
public void testCharNumCounter(){
int charNum = textFile.charNumCounter();
if(charNum>=0)
System.out.println("文件字符数为:"+charNum);
else
System.out.println("字符数计算出错");
} //测试TextFile.wordNumCounter()
public void testWordNumCounter(){
int wordNum = textFile.wordNumCounter();
if(wordNum>=0)
System.out.println("文件单词数为:"+wordNum);
else
System.out.println("单词计算出错");
} //测试TextFile.lineNumCounter()
public void testLineNumCounter() throws IOException {
int lineNum = textFile.lineNumCounter();
if(lineNum>=0)
System.out.println("文件行数为:"+lineNum);
else
System.out.println("行数计算错误");
}
}

测试结果

D:\123.txt
文件字符数为:80
文件单词数为:6
文件行数为:2

整体测试

空文件测试(内有一空行,文件大小0KB)

命令:java -jar wc.jar -c -w -l "D:\test_txt\Empty.txt"

测试结果:

文件字符数为:0
文件单词数为:0
文件行数为:1

只有一个字符的文件测试

命令:java -jar wc.jar -c -w -l "D:\test_txt\OnlyOneChar.txt"

测试结果:

文件字符数为:1
文件单词数为:0
文件行数为:1

只有一个词的文件测试

命令:java -jar wc.jar -c -w -l "D:\test_txt\OnlyOneWord.txt"

测试结果:

文件字符数为:4
文件单词数为:1
文件行数为:1

只有一行的文件测试

命令:java -jar wc.jar -c -w -l "D:\test_txt\OnlyOneLine.txt"

测试结果:

文件字符数为:59
文件单词数为:3
文件行数为:1

一个典型的源文件测试

命令:java -jar wc.jar -c -w -l "D:\test_txt\Current.txt"

测试结果:

文件字符数为:27
文件单词数为:6
文件行数为:2

-x参数测试

命令:java -jar wc.jar -x -c -w -l

测试结果:

D:\test_txt\OnlyOneChar.txt
文件字符数为:1
文件单词数为:0
文件行数为:1

测试图片



总结

在本次项目开发过程中,有以下几点总结与教训:

  1. 要加大前期计划与分析的时间投入
  2. 拒绝拖延症,早开始,早结束

软件工程个人作业(wc.exe项目)的更多相关文章

  1. 个人项目作业——wc.exe

    一.Github项目地址 https://github.com/PIPIYing/wc 二.项目概况 项目描述 Word Count 1. 实现一个简单而完整的软件工具(源程序特征统计程序). 2. ...

  2. 软工作业1:wc.exe项目开发(java)

    Github地址:https://github.com/Zzhaomin/learngit 项目相关要求 : wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

  3. 软件工程团队作业-Alpha阶段项目复审

    Alpha阶段项目复审 复审人:黄杰 复审总结表 小组的名字和链接 优点 缺点,bug/140字 最终名次 项目 一个普通的团队 https://www.cnblogs.com/clsgghost/p ...

  4. 【软件工程Ⅱ】作业四 |个人项目-小学四则运算 “软件”之初版(C语言)

    本次作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186 本次作业代码的github地址:https://gith ...

  5. 软件工程 wc.exe 代码统计作业

    软件工程 wc.exe 代码统计作业分享 1. Github 项目地址 https://github.com/EdwardLiu-Aurora/WordCount 更好地阅读本文,可点击这里 基本要求 ...

  6. 个人项目作业(wc.exe)

    1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...

  7. 个人项目作业WC(JAVA)

    GitHub地址:https://github.com/1666403186/WC 一.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试.回归 ...

  8. 软工作业1—java实现wc.exe

    github项目地址 https://github.com/liyizhu/wc.exe WC 项目要求 基本功能列表: wc.exe -c file.c     //返回文件 file.c 的字符数 ...

  9. 软工作业No.1。Java实现WC.exe

    网址:https://github.com/a249970271/WC WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有w ...

随机推荐

  1. Springboot中定时器的简单使用

    在定时器的类上添加注解: @Component@EnableAsync@EnableScheduling 一.普通的定时器: 每天15:10执行的定时器 @Scheduled(cron="0 ...

  2. [视频教程] 灵活配置多版本PHP并存运行

    经常有一些项目需要使用不同版本的PHP运行环境,比如有的老项目需要使用5.3版本,有的新项目比如laravel需要使用7.2以上版本,那么在一台机器上如何多版本PHP并存运行呢 有一种很灵活高效的方式 ...

  3. CodeForces - 1251E2 (思维+贪心)

    题意 https://vjudge.net/problem/CodeForces-1251E2 一共有 n 个选民,你可以付出 pi​ 的代价让第 i 个选民为你投票,或者,在为你投票的人数达到 mi ...

  4. unity_animator_stop_replay(重新播放)

    对于一个Animation重复播放,但在隐藏后,再次显示播放会出现有些属性未复原 问题描述 特效同事给的Animation中更改了物体的很多属性,如Active,Alpha, Scale,Positi ...

  5. 开始认识java

    1.java发展历史                              1991年   詹姆斯·高斯林 (James Gosling)  SUN公司Green项目(消费类电子产品) Oak  ...

  6. 4. jenkins 构建任务

    这边说一下 ,服务器的分布.  因为我这边 测试环境的项目比较多,不能修改主机名 1号机器 节点机器(node) 最终项目发布到这台机器 2号机器  jenkins jenkins的部署,发布 3号机 ...

  7. lua 9 parttern 字符极其简要的介绍

    摘自:https://www.lua.org/pil/20.2.html 所有的字符和含义包括: . all characters %a letters %c control characters % ...

  8. 数据库连接池 DBUtils:

    import pymysqlfrom DBUtils.PooledDB import PooledDB, SharedDBConnectionPOOL = PooledDB ( creator=pym ...

  9. 数据驱动表格| 根据json数据,自动生成合并式table

    1.数据驱动表格 2.数据驱动表格(2)

  10. (day56)八、删除框、批量创建、分页器组件

    目录 一.ajax结合sweetalert实现删除按钮的动态效果 二.bulk_create批量插入数据 三.自定义分页器 (一)手动推导 (二)自定义分页器 (1)模板 (2)用法 一.ajax结合 ...