WC个人项目(JAVA实现)
一、Github地址:https://github.com/Gvonte/WC.exe
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 28 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 28 |
Development | 开发 | 1012 | 1001 |
· Analysis | · 需求分析 | 52 | 45 |
· Design Spec | · 生成设计文档 | 30 | 43 |
· Design Review | · 设计复审 | 25 | 25 |
· Coding Standard | · 代码规范 | 15 | 18 |
· Design | · 具体设计 | 90 | 80 |
· Coding | · 具体编码 | 700 | 680 |
· Code Review | · 代码复审 | 20 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 90 | 80 |
Reporting | 报告 | 130 | 110 |
· Test Report | · 测试报告 | 80 | 60 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 1172 | 1139 |
三、解题思路
①命令行参数处理
在看到命令行的格式要求后,我马上想到是用java主函数main的args来写,通过对参数c、w、l、a、x的判断执行相应的操作。
②文件统计的处理
1.关于基本功能的处理:对给定的文件路径创建一个BufferedReader,通过readline方法获取文件中的每一行字符串,然后执行相应的方法进行处理,最后通过控制台打印得到结果
2.关于扩展功能的处理:对定的文件路径创建一个BufferedReader,通过readline方法获取文件中的每一行字符串,然后利用正则表达式进行处理,最后通过控制台打印得到结果
3.关于递归方法的处理:我想到的是,根据给定的文件路径递归的遍历所有的子文件,如果是文件类型则执行前面的基本功能和扩展功能,如果是文件夹就跳过
③GUI的设计
我直接用JFileChooser获取用户选择的文件,然后对这个文件路径执行之前的基本功能或扩展功能(代码复用)
四、设计实现过程
设计了WC一个大类,通过对args的switch判断,执行相应的操作
主要调用流程:
五、测试运行
测试文件:一个空文件、一个只有一个字符的文件、一个只有一个单词的文件、一个标准的源文件。
测试代码:
@org.junit.jupiter.api.Test
void test1() throws IOException{
String[] args1 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\1.c"};
WC.main(args1);
}
@org.junit.jupiter.api.Test
void test2() throws IOException{
String[] args2 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\2.c"};
WC.main(args2);
}
@org.junit.jupiter.api.Test
void test3() throws IOException{
String[] args3 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\3.c"};
WC.main(args3);
}
@org.junit.jupiter.api.Test
void test4() throws IOException{
String[] args4 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\4.c"};
WC.main(args4);
}
@org.junit.jupiter.api.Test
void test5() throws IOException{
String[] args5 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\5.c"};
WC.main(args5);
}
测试截图:
//空文件
//一个字符的文件
//一个单词的文件
//一个源代码的文件
代码覆盖率:
六、项目总结:
在这次的项目中,我体会很深,很之前开发不一样,这次除了写代码还有项目分析,框架设计,用时估计和很多方面的测试、调试,检测代码覆盖率等工作,体会到了一个软件开发的粗略过程,对软件工程有了更深刻的理解。
原文地址:https://www.cnblogs.com/gvonte/p/11588422.html