软工实践寒假作业(2/2)
这个作业属于哪个课程 | 班级的链接 |
---|---|
这个作业要求在哪里 | 作业要求的链接 |
这个作业的目标 | 设计一个疫情统计程序,实现对不同时间上传的患者变动文档进行读取以及各地患者状态的统计 |
作业正文 | 软工实践寒假作业(2/2) |
其他参考文献 | 无 |
1、GitHub仓库地址
https://github.com/lyf12138/InfectStatistic-main
2、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
Estimate | 估计这个任务需要多少时间 | 15 | 10 |
Development | 开发 | 300 | 360 |
Analysis | 需求分析 (包括学习新技术) | 120 | 60 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 90 | 90 |
Coding | 具体编码 | 180 | 240 |
Code Review | 代码复审 | 60 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 60 | 60 |
Test Repor | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 30 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 1045 | 1160 |
3、解题思路
拿到题目之后,我的思路是这样的:首先要建立5个全局的数组,分别用来存放省份名称、感染患者、疑似患者、治愈人数、死亡人数。
接下来需要去了解如何读取一个文件夹内的所有的文件名称,并且与这个文件夹的路径拼接成一个完整的文件地址存放在字符串中。
之后使用file类进行文件的按行读取,之后对每一行的内容用split函数按空格进行分割,最后判断读取的内容对相应的数值进行修改。
main函数中对args进行读取来判断命令符,对输出的内容进行限制。
4、设计实现过程
1)构建6个全局数组(第一个string类型用来存放省份名称province,第二个到第五个int类型用来分别存放感染患者ip、疑似患者sp、治愈人数cp、死亡人数dp,
最后一个int类型pro用来判断该位置的省份是否应该被输出。
2)构建函数getallfilename,传入参数为-log命令后面的路径名称,通过这个函数将该路径下面的所有txt文件的具体路径依次存放至string类中,
使用for循环依次读取路径,传入readfile函数中。
3)构建函数readfile,传入参数为一个需要读取的txt文件的具体路径,之后使用BufferedReader类中的readLine函数利用for循环按行读取文件内容,
并且将内容传入函数readfile2中。
4)构建函数readfile2,传入参数为一个文件内一行的具体内容用string储存,利用split函数以空格分割该字符串,此时截出来的字符串个数只有三种可能:
3或4或5。判断长度过后将第一个省份名称与province进行遍历对比,寻找该省份的下标并,之后判断后面的字符串内容,将最后那部分的字符串进行数字提取,
对对应的存储数组值进行操作。
5)main函数。主要是对命令的读取,args的取值判断。按顺序用for循环遍历args,对list后面的命令进行判断,如果是-log则记录下后面的字符串当作文件地址传入
getallfilename函数中;如果是-out则记录后面的字符串当作输出文件的地址,使用BufferedWriter类进行输出(如果文件不存在则会自动生成);如果是-province
则对后面的省份对应的pro数组中的值设为1,表示可以输出;如果是-type则对后面的字符(ip、sp、cure、dead)进行判断,做对应模块的输出。
5、代码说明
1)存放疫情信息的数组的建立
2)getallfilename函数
实现读取一个文件夹下的所有文件的名称,获得这些文件的具体路径。用File类实现,并且使用listFileName存放文件地址
3)readfile函数
实现对该文件的内容的读取,利用getline函数按行获取文本信息
4)readfile2函数
实现对读取进来的文件的一行信息进行分割,每一块信息进行判断、处理。
5)main函数
其中这个for循环用于判断输入的命令是什么。
6、单元测试截图和描述
1)-province参数测试
- 测试命令,-province参数只包含福建
- 结果如下:
- 测试命令,-province参数包含全国和福建
- 结果如下:
2)-type参数测试 - 测试命令,-type参数只包含感染患者(ip)
- 结果如下:
- 测试命令,-type参数包含感染患者(ip)和疑似患者(sp)
- 结果如下:
3)多个参数组合测试 - 测试命令,-type和-province
- 结果如下:
7、单元测试覆盖率优化和性能测试,性能优化截图和描述
- 我的单元覆盖率
8、代码规范的链接,即仓库中的codestyle.md
9、解决项目的心路历程与收获。##
- 读完《构建之法》前三章,知道了一个项目的进行要经过几个步骤,其中设计是项目开始的重点,所以在前期刚拿到作业的时间里会经常思考这个项目应该如何设计,比如读取文件应该怎么读取,读取之后应该怎么去获得文件内部信息,这样设计之后才以达到事半功倍的效果。
- 同时也了解到了单元测试也是项目开发很重要的一环,之前的我并不了解什么是单元测试,所以对这个并不重视。读完之后才知道,单元测试是对每个模块中的每个方法每个参数进行检测,做的时候需要对每个可能输入的参数进行测试,这样才不会出bug。所以我在做的时候每次写完一个函数或者一个功能的时候都会进行一次参数的输入运行测试,保证这个功能是可以达到我所预期的目的的。
- 也了解到了写进度条的好处,阅读之后知道了这样做可以帮助我们提高对产品的估算时间,这样子对我们开发项目有着很好的帮助。这次实践写了进度条之后方便我看到了我预期的时间花费和实际花费时间的差距,也可以大概推算出自己完成这个项目的时间。