2020软件工程实践第二次作业
这个作业属于哪个课程 | 2020春W班 |
---|---|
这个作业要求在哪里 | 寒假作业(2/2) |
这个作业的目标 | 疫情统计 |
作业正文 | 第二次寒假作业 |
其他参考文献 | 一些github教程 |
一、仓库地址
我的本次作业的仓库地址:InfectStatistic-main
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 25 |
Estimate | 估计这个任务需要多少时间 | 30 | 25 |
Development | 开发 | 1200 | 1650 |
Analysis | 需求分析 (包括学习新技术) | 300 | 450 |
Design Spec | 生成设计文档 | 30 | 35 |
Design Review | 设计复审 | 20 | 15 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 45 |
Design | 具体设计 | 360 | 310 |
Coding | 具体编码 | 600 | 660 |
Code Review | 代码复审 | 60 | 45 |
Test | 测试(自我测试,修改代码,提交修改) | 270 | 250 |
Reporting | 报告 | 120 | 130 |
Test Report | 测试报告 | 60 | 50 |
Size Measurement | 计算工作量 | 30 | 25 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 45 |
合计 | 1500 | 1925 |
三、解题思路
- 1、Github初使用
- 注册Github账号,下载Git与Github Desktop。
- 学习仓库的各项操作(fork,star,issue等)。
- 学习基础Git命令,如:如何将本地文件提交到Github仓库中,打开某文件,删除某文件等。
(以上学习通过观看bilibili上的教程视频与一些CSDN教程实现)
- 2、学习用命令行编译执行java文件,两条语句:
- javac xx.java
- java xx …… (假设java文件名为xx)
- 3、进行需求分析
- 首先,要解析命令行:
- 读取命令行。
- 检测命令与参数的配对、格式的正确性。
- 提取出命令行中所需要的参数,创建相应的变量用于存放。
- 其次,要读取文件:
- 根据命令行读取满足日期的日志文件。
- 逐行读取每一个日志文件。
- 对其中的数据做相应的记录。
- 最后,要写文件:
- 根据命令行确定需要写入文本的文件路径及名称(若文件不存在需创建)
- 根据命令行参数将所有需要的数据逐个、逐行写入指定文件。
(根据具体功能百度所需要的代码)
- 首先,要解析命令行:
四、设计实现功能
- 首先是一个大类,即class InfectStatistic,是InfectStatistic.java文件的主类
- 主类下有很多全局变量,用来存放各种与时间、省份还有人口有关的数据。
- 然后是CmdArgs类,用于解析命令行:
- 一个函数用来接收主函数传来的命令行字符串;
- 若干个GetXX函数用来提取、检查并保存或处理正确的参数。
- 再然后是HandleFile类,用于处理文件的读写:
- 若干个字符串,存放日志文件中所有可能出现的句式;
- 一个函数用于读所有对应的日志文件;
- 若干个函数用于处理每一种句式出现时人员的变动问题;
- 最后一个函数用于将所需的结果写入指定文件。
- 最后是主函数,实例化类的对象。
五、代码说明
如此搭配用于检验各种参数
if(args[i].equals("-log")) {
flag = GetLog(++i);
if(flag == 0) {
System.out.println("日志路径有误");
return false;
}
}
public int GetLog(int i) {
if(i < args.length) {
if(args[i].matches("^[A-z]:\\\\(.+?\\\\)*$")) {
logPath = args[i];
return 1;
}
else
return 0;
}
else
return 0;
}
逐行处理日志文件数据,其中一种类型:
//public String condition1 = "\\S+ 新增 感染患者 \\d+人";
if(s.matches(condition1))
DoCondition1(s);
public void DoCondition1(String str) {
String [] arr = str.split("\\s+");
int n = Integer.parseInt(arr[3].substring(0, arr[3].indexOf("人")));
for(int i = 0;i < total;i++) {
if(arr[0].equals(provinceName[i])) {
numOfPeople[i][0] += n;
numOfPeople[0][0] += n;
}
}
}
根据命令行类型输出文档
//情况一:没有指明type与province
if(typeFlag == false && provinceFlag == false) {
for(int i = 0;i < total;i++) {
if(totalNum[i]>0) {
pw.write(provinceName[i]+" ");
for(int j = 0;j < 4;j++)
pw.write(typeName[j]+numOfPeople[i][j]+"人"+" ");
pw.write("\n");
}
}
}
六、单元测试
class InfectStatisticTest {
@Test
void Test1() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-01-22","-type","ip","sp","cure","dead","-province","福建"};
InfectStatistic.main(str);
}
@Test
void Test2() {
String[] str = {"-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-01-22"};
InfectStatistic.main(str);
}
@Test
void Test3() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-02-22"};
InfectStatistic.main(str);
}
@Test
void Test4() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-02-31"};
InfectStatistic.main(str);
}
@Test
void Test5() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-01-22","-type","ip","sp","dead","cure"};
InfectStatistic.main(str);
}
@Test
void Test6() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-01-22","-type"};
InfectStatistic.main(str);
}
@Test
void Test7() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-01-22","-province","福建"};
InfectStatistic.main(str);
}
@Test
void Test8() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-01-22","-province",};
InfectStatistic.main(str);
}
@Test
void Test9() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\a"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test.txt"
,"-date","2020-01-22"};
InfectStatistic.main(str);
}
@Test
void Test10() {
String[] str = {"list","-log"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\log\\"
,"-out"
,"C:\\Users\\crb19\\Documents\\GitHub\\InfectStatistic-main\\221701202\\result\\test"
,"-date","2020-01-22"};
InfectStatistic.main(str);
}
}
七、覆盖率优化与性能测试
要提高覆盖率,还是要把函数功能分的再仔细一点。
八、代码规范
我的代码规范文件:codestyle.md
九、心路历程与收获
这次的作业在我看来的话,可以用十二个字总结,就是:艰难开始、顺利继续、匆忙收尾。俗话说的好,万事开头难。无独有偶,这次作业我也是蹉跎了好几天才下手。一开始的日子每次我打开作业要求时,都感到焦虑、难熬。面对扑面而来的新鲜知识的气息,退缩的冲动来的是那么的轻易。只能硬着头皮一边百度,一边操作,但总怕自己做的是错的,还没有回头路可走。学习了这么多天Github的使用,我发现还是视频教学对我比较有用。看着博客里的图片、文字,我总是看着看着就犯迷糊。后来我搜寻了一些教学视频,跟着老师一步一步的操作,感觉成就来的比较快。
学习了仓库的知识后就开始编写代码了,看了助教的作业引导博客,我才有了做作业的条理。在使用cmd编译java文件时,突然想起以前老师好像和我们说过javac的使用,果然还是要温故才能知新呐。代码编写一旦入了道,感觉就来了,越写越顺手,所有需要的功能网上搜索一下就出来了。
但是由于我太晚开始写作业,所以作业的总结、优化之类的做的比较粗糙。通过这次作业,我学到了很多知识,确实都是很有用的知识。也领悟到很多,每次作业都要早早开始,越是困难就越是要克服。不会的知识就是找资料,新知识的学习总是很费时间的,但是当你学会了以后再回头看,会发现当初困住你的障碍其实也没什么大不了。世上无难事,只怕有心人。
十、相关仓库
- 1、front-dev-bookmarks
- 一个巨大的前端开发资源清单,star:26.8k,fork:4.3k
- 2、csscss
- css代码冗余分析仪,用于分析冗余。star:2.9k,fork:148
- 3、jshint
- js静态代码分析工具,可以帮你检测js语法错误和潜在的问题。star:8.3k,fork:1.7k
- 4、slick
- 一款完全响应式的 jQuery 图片滚动插件,能够根据容器自动适应宽度。star:25.3k,fork:5.1k
- 5、amazeui
- 移动优先的跨屏前端框架。面向HTML5开发,使用css3做动画和交互。star:13.4k,fork:2.6k