首页 > temp > 简明python教程 >
-
软工实践寒假作业(2/2)(2)
先判断是否有type命令,若有则配合for和switch进行指定顺序输出,否则就按原来的的顺序输出
if(map.get(provinceName) != null) {
Province province = map.get(provinceName);
if(typeItem.size() != 0) {
for(String item : typeItem) {
switch (item) {
case "ip":
System.out.print(" 感染患者" + province.infect + "人");
osw.write(" 感染患者" + province.infect + "人");
break;
case "sp":
System.out.print(" 疑似患者" + province.seeming + "人");
osw.write(" 疑似患者" + province.seeming + "人");
break;
case "cure":
System.out.print(" 治愈" + province.cured + "人");
osw.write(" 治愈" + province.cured + "人");
break;
case "dead":
System.out.print(" 死亡" + province.dead + "人");
osw.write(" 死亡" + province.dead + "人");
break;
default:
break;
}
}
}
else {
osw.write(" 感染患者" + province.infect + "人 疑似患者" + province.seeming + "人 治愈" + province.cured + "人 死亡" + province.dead + "人");
System.out.print(" 感染患者" + province.infect + "人 疑似患者" + province.seeming + "人 治愈" + province.cured + "人 死亡" + province.dead + "人");
}
}
六、单元测试截图和描述
@Test1 测试能否正确获得命令行参数
@Test
public void testSolveArgs() {
String[] order = {"list", "-date", "2020-01-23", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt", "-type", "ip", "sp", "dead", "-province", "福建", "浙江"};
InfectStatistic.main(order);
}
@Test2 测试打印一个省的信息
@Test
public void testPrintTheProvince() throws IOException {
File output = new File("C:\\\\Users\\\\Peter\\\\Documents\\\\GitHub\\\\InfectStatistic-main\\\\221701126\\\\result\\\\out.txt");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(output));
InfectStatistic.printTheProvince("福建", osw);
osw.flush();
osw.close();
}
由于该省份还没有给与任何数据,故都是人数都是0。
@Test3 测试能否打印所有需要打印的省份
@Test
public void testPrintResult() {
InfectStatistic.outputPath = "C:\\\\Users\\\\Peter\\\\Documents\\\\GitHub\\\\InfectStatistic-main\\\\221701126\\\\result\\\\out.txt";
InfectStatistic.provinceItem.add("全国");
InfectStatistic.provinceItem.add("福建");
InfectStatistic.provinceItem.add("内蒙古");
InfectStatistic.printResult();
}
可以打印出所有省份,由于没有数据,故人数都为0
@Test4 测试能否获得每行字符串的人数
@Test
public void testGetNumber() {
String[] testStr1 = {"福建", "新增", "疑似患者", "5人"};
System.out.println(InfectStatistic.getNumber(testStr1));
String[] testStr2 = {"湖北", "感染患者", "流入", "福建", "23人"};
System.out.println(InfectStatistic.getNumber(testStr2));
String[] testStr3 = {"湖北", "排除", "疑似患者", "15人"};
System.out.println(InfectStatistic.getNumber(testStr3));
}
能够正确获得
@Test5 测试每个文件的处理,打印出需要处理的文件名
@Test
public void testSolveEveryFile() {
Vector<String> toHandleFile = new Vector<String>();
toHandleFile.add("2020-01-22");
toHandleFile.add("2020-01-23");
toHandleFile.add("2020-01-27");
InfectStatistic.solveEveryFile(toHandleFile);
}
@Test6 测试获得目录下的最大日期,打印出目录下最大的日期
@Test
public void testGetMaxDate() {
System.out.println(InfectStatistic.getMaxDate());
}
@Test7 测试获取目录下符合要求的所有文件,打印出其文件名
@Test
public void testSolveDateOrder() {
System.out.println("测试1");
InfectStatistic.targetDate = "2020-01-29";
InfectStatistic.solveDateOrder(InfectStatistic.targetDate);
System.out.println("测试2");
InfectStatistic.targetDate = "2020-01-24";
InfectStatistic.solveDateOrder(InfectStatistic.targetDate);
System.out.println("测试3");
InfectStatistic.targetDate = "2020-01-27";
InfectStatistic.solveDateOrder(InfectStatistic.targetDate);
}
@Test8 测试没有date选项的命令,打印出最新日期的日志,测试命令为:list -log "C:\Users\Peter\Documents\GitHub\InfectStatistic-main\221701126\log" "-out" "C:\Users\Peter\Documents\GitHub\InfectStatistic-main\221701126\result\out.txt" "-type" "ip" "sp" "dead" "-province" "福建" "浙江"
@Test
public void testNoDate() {
String[] order = {"list", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt", "-type"
, "ip", "sp", "dead", "-province", "福建", "浙江"};
InfectStatistic.main(order);
}
@Test9 测试-date选项,参数为2020-01-23的情况
@Test
public void testDate1() {
String[] order = {"list", "-date", "2020-01-23", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt"};
InfectStatistic.main(order);
}
@Test10 测试-date选项,参数为2020-01-25的情况,结果同2020-01-23的情况
@Test
public void testDate2() {
String[] order = {"list", "-date", "2020-01-25", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt"};
InfectStatistic.main(order);
}
@Test11 测试-date选项,参数为2020-01-27的情况
@Test
public void testDate3() {
String[] order = {"list", "-date", "2020-01-27", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt"};
InfectStatistic.main(order);
}
@Test12 测试-date选项,参数为2020-01-28的情况,打印“日期超出范围”
@Test
public void testDate4() {
String[] order = {"list", "-date", "2020-01-28", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt"};
InfectStatistic.main(order);
}
@Test13 测试-type选项,参数为cure ip
@Test
public void testType1() {
String[] order = {"list", "-date", "2020-01-22", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt", "-type", "cure", "ip"};
InfectStatistic.main(order);
}
@Test14 测试-type选项,参数为cure dead ip sp
@Test
public void testType2() {
String[] order = {"list", "-date", "2020-01-23", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt", "-type", "cure", "dead", "ip", "sp",
"-province", "全国", "浙江", "福建"};
InfectStatistic.main(order);
}
@Test15 测试-province选项,参数为全国 浙江 福建
@Test
public void testProvince1() {
String[] order = {"list", "-date", "2020-01-23", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt", "-province", "全国", "浙江", "福建"};
InfectStatistic.main(order);
}
@Test16 测试-province选项,测试需要打印的省份不在文件中出现,参数为陕西 云南
@Test
public void testProvince2() {
String[] order = {"list", "-date", "2020-01-23", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt", "-province", "陕西", "云南"};
InfectStatistic.main(order);
}
@Test17 测试-province选项,参数为福建 山东 全国 广西
@Test
public void testProvince3() {
String[] order = {"list", "-date", "2020-01-23", "-log", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\log",
"-out", "C:\\Users\\Peter\\Documents\\GitHub\\InfectStatistic-main\\221701126\\result\\out.txt", "-province", "福建", "山东", "全国", "广西"};
InfectStatistic.main(order);
}
七、单元测试覆盖率优化和性能测试
单元测试覆盖率,由于测试的比较全面,故覆盖率较高,几乎覆盖了所有代码,还有一些未覆盖的地方即为测试用例不到位或一些异常捕捉语句,提升空间不大
八、代码规范
代码规范
九、心路历程与收获
在这次作业之前,我还没有过团队合作开发的经验,因此不会使用像git这样的版本控制工具,以及像github这样子的开源仓库工具,但是在这次的开发过程中,我尝试的一步一步查询相关的文章,去使用github。
这次的编码任务是疫情统计程序,我认为在学过java的基础上开发这个程序的难度并不大,只不过需要认真的复习一下之前java的知识,但在开发过程中比较重要的就是学会记录自己的代码版本,虽然说这次还是个个人开发的小作业,但是养成存储代码版本这个好习惯是每个开发人员必备的,因此我使用了githubDestop来记录自己对这个项目的完善工程,我将这个项目分成许多模块,当完成一个模块的开发以后我就commit一下,这样就算后续代码出了什么问题,我也能根据历史记录回溯到之前正常的版本,可以说学会这项技能是十分方便和必要的。
在整个任务完成后,我还学会了单元测试。何谓单元测试?就是通过将许多测试函数封装成一个类,这样就一个一次性的跑完所需要进行的所有测试,而不需要在命令行一个一个例子去试验,提高了测试的效率,测试也是开发中的一个必不可少的流程,有了测试,我就能清晰的知道自己的代码还存在哪些不足,存在哪些bug,予以修复后,就可以进行一次commit,这样代码的稳定性就在不断的提升中,而且学会使用单元测试来测试自己的代码也是一个开发人员的责任,自己写的代码自己测,这样以后如果代码需要修改维护,就可以对症下药,而不会手忙脚乱。
测试完成以后,我通过开发工具eclipse测试了一下代码覆盖率和性能,发现了自己在编写代码过程中一些不够完美的语法处理,有一些不会被用到的方法,或者说有一些语句的顺序或者嵌套十分繁杂,都会降低覆盖率和性能,因此就着覆盖率的展示,我照着一个一个方法去改进,删除了不必要的语句,调整了语句结构,提升了一些覆盖率和性能,开发人员在开发过程中,不可只关注到任务的完成,还需要关心系统的性能问题,因为只有我们自己了解我们自己的代码,因此自己对此做出一些简单的优化是很有必要性的,也是一个好习惯,一个优秀的项目不仅应该完成用户的需求,还应该在性能方便有显著的优势,哪怕提升了一点的性能,在计算机世界中也是巨大的进步。
剩下的一些工作例如代码规范和文档的攥写也是十分重要的,不仅考察一个开发人员的编程能力,更是考验其程序的规范性和有序性,一个开发人员不应该是混乱无章的,反而应该井井有序。
通过这次的任务,我深入的理解的软件工程的开发流程,十分期待以后的多人协作,但是在多人协作之前,我们每个人应该要先规范好自己,这样整个团队才能有序团结。
十、五个相关仓库
1.vue.js
基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用,模仿饿了么打造的一个购物demo,适合找不到demo巩固的学习人员进行练习。
2.ant design pro
是基于Ant Design这个框架搭建的中后台管理控制台的脚手架,使用其可快速搭建ant d框架,便于开发,节约时间。
3.react select
React的选择控件,最初构建用于KeystoneJS,是一种用来开发React组件的方法,组件可以开箱即用,也可以自行定制。
4.h5模板
腾讯微信优化的H5动效模板,帮助你快速构建全屏滚动型H5页面。
5.css.animation
一个跨浏览器的CSS动画库,简单易用,拥有许多可以直接使用的控件。