这个作业属于哪个课程 | 2020春|S班 |
---|---|
这个作业要求在哪里 | 软工实践寒假作业(2/2) |
这个作业的目标 | Git、GitHub使用,代码规范意识,一定的程序设计能力(基于命令行),PSP,以及单元测试和性能分析改进 |
作业正文 | 寒假作业2 |
其他参考文献 | jprofiler教程、单元测试教程、github使用教程、.gitignore教程、PSP表格 |
-
仓库地址
-
PSP表格
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 20 Estimate 估计这个任务需要多少时间 5 10 Development 开发 515 660 Analysis 需求分析 (包括学习新技术) 60 60 Design Spec 生成设计文档 30 45 Design Review 设计复审 30 20 Coding Standard 代码规范 (为目前的开发制定合适的规范) 45 30 Design 具体设计 20 10 Coding 具体编码 240 360 Code Review 代码复审 30 45 Test 测试(自我测试,修改代码,提交修改) 60 90 Reporting 报告 120 100 Test Repor 测试报告 20 20 Size Measurement 计算工作量 10 10 Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 60 合计 730 880 -
思路描述
刚开始拿到题目的时候啥都看不懂,看完一遍还是有点不明就里,后来才理解是有关命令行参数的程序,顿时就有了思路,先必须要有一个类来存命令行的内容,所以就需要一个函数对命令行参数进行解析构成一个命令行类的对象,将这个函数封装在一个命令行解析类中,该类作为一个解析工具使用,最后需要一个类来对某个命令行对象进行分析运行,整个过程大概就是如此。
-
实现过程
1.首先先构造三个内部类,分别为命令行类,命令行解析类,命令行运行类
2.命令行类是根据用户在黑窗口输入的命令行对应的一个类,包含了命令和参数等内容
3.命令行解析类则是用于解析命令行的工具,包含一个解析函数,通过一个ArrayList进行解析返回一个命令行对象
4.命令行运行类则是用于对某一个命令行对象进行分析运行,最重要的部分就是一个用于统计单个log文件的函数,并且该类也包含比如省列表,文件列表等必要数据
5.由main函数获得命令行所构成的列表,构造命令行解析类进行解析形成命令行类的对象,最终使用命令行运行类完成题目的要求内容 -
代码说明
代码结构
代码细节1
首先是CommandLine类的内容,十分简单,纯粹为了存放数据;
代码细节2
然后就是CommandLineAnalysis的内容,第一个重点出现,即analysis函数,将命令行参数构成的ArrayList进行解析形成一个CommandLine对象;
代码细节3
先是一些存放总数据的变量;
第二个重点,使用构造函数调用种种成员函数完成命令行的功能;
第三个重点,使用process_data函数进行单个文件的统计,统计结果存于CommandLineRun类中的成员变量中;
最后一个关键点,也就是print_file函数的编写,用于实现按照-type和-province参数的要求进行最终的文档输出。
-
单元测试
单元测试结构和内容
此次测试较为简单,测试了最重要的命令行解析和命令行运行功能,使用自己人工编写的命令行ArrayList进行测试,并测试将所有省的统计结果直接输出到控制台,文件中则还是按照要求进行输出,以下为输出截图:
使用另一个命令,输出如下:
-
单元测试覆盖率优化和性能测试
单元测试覆盖率
从覆盖率看来两个关键点:命令行解析和单个文件统计基本达到100%,单个文件统计没达到100%是因为有一个文件内容正则表达式判定不匹配的部分并没有覆盖到所以无需改动。
性能测试
偶然发现有一些没有用到的变量和没有关闭的流,进行改正。
-
代码规范
-
心路历程与收获
-
此次作业让我感受到了有计划的好处,之前写代码从来都是写到哪算到哪,这次进行了实事先的计划,果然编码时就顺利很多也让我的代码规整了很多,结构较为清除,不像之前找函数都找不到,并且也有了写注释的习惯,我虽然每次编码都隔了至少一天但因为注释让我对之前写的内容清清楚楚。
-
这次作业也让我学习到了很多,例如GitHub的使用、单元测试的知识、覆盖率和jprofiler的运用还顺便复习了java语法。
-
-
与第一次作业有关的仓库
互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识,后端同学必看,前端同学也可学习
极客时间视频课程《玩转Spring全家桶》
Spring Cloud 学习教程
Spring Boot 学习教程
Maven多模块,搭建SpringBoot项目,手把手教学