122
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | https://bbs.csdn.net/forums/ssynkqtd_06 |
|---|---|
| 这个作业要求在哪里 | https://bbs.csdn.net/topics/618087255 |
| 这个作业的目标 | 完成对世界游泳锦标赛跳水项目相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序。在文章开头给出Gitcode项目地址。给出PSP表格。解题思路描述。设计与实现过程。程序性能改进。单元测试展示。撰写解决项目的心路历程与收获> |
| 其他参考文献 | ... |
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 60 |
| - Estimate | - 估计这个任务需要多少时间 | 20 | 20 |
| Development | 开发 | 2000 | 1500 |
| - Analysis | - 需求分析 (包括学习新技术) | 200 | 200 |
| - Design Spec | - 生成设计文档 | 20 | 20 |
| - Design Review | - 设计复审 | 30 | 60 |
| - Coding Standard | - 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
| - Design | - 具体设计 | 60 | 60 |
| - Coding | - 具体编码 | 1200 | 1400 |
| - Code Review | - 代码复审 | 90 | 90 |
| - Test | - 测试(自我测试,修改代码,提交修改) | 240 | 180 |
| Reporting | 报告 | 60 | 120 |
| - Test Report | - 测试报告 | 30 | 30 |
| - Size Measurement | - 计算工作量 | 10 | 10 |
| - Postmortem & Process Improvement Plan | - 事后总结,并提出过程改进计划 | 30 | 30 |
| 合计 | 4020 | 3790 |
首先可以利用example提供的data数据,利用fastJson2解析内容,然后转换成实体类,接着就按要求对实体类进行操作。解析内容首先要找到文件,利用工具类找到项目路径在找到相对路径即可找到所有的data数据。也可以从官网爬取数据。 有了实体类就很简单,不需要硬编码对json数据进行解析操作。 把init初始化操作和正常操作分离,比如大致两个功能一个是输出players信息一个是输出result对应的信息,先要分析command命令是否正确,利用hashset的特性快速判断,是正确的就执行对应命令,即执行对应两个方法。接下来不断优化command的判断以及两个功能的执行即可。
主要分为两个基本类,一个DWASearch用来做main类,执行入口方法,一个Lib类开发功能。
Lib类需要解析json文件,所以写了json转换的对应类比如Participations选手类,Disciplines赛事类,Results赛事结果类,一开始利用网上的json转Java对象工具获取所有字段,后期精简不需要的字段。
由于json转换类需要来自不同的json文件,而且只需要在程序运行的时候初始化一次即可,所以我写了不同类对应的初始化操作函数比如initParticipationsList(),initEventSet(),initResult()等,然后再用一个init()函数包括住所有init函数,做到代码的解耦,分布进行初始化操作。
Lib类需要提供两个主要的函数,一个是readInputFile()去解析命令行的input文件,把所有命令都解析出来放到一个集合中,然后是executeCommand()函数去执行集合里的所有命令。
关键和独到之处:
1.一个init()函数包括住所有init函数,做到代码的解耦,方便后续代码的构建和重构,提高拓展性
2.充分利用Java的面向对象特性,利用json转换类执行操作而不是直接硬操作jsonMapObject然后用字符串比较
3.利用Java的streamAPI来简化代码,让代码结构更优雅简明
1.利用Buffer流处理文件,比字节流stream操作更快

2.精简Json转换类的字段,只保留必要字段,减少json解析映射时间和内存占用

3.缓存从文件解析的数据,读取一次即可,不需要再次读取

部分测试代码截图如下


测试覆盖率截图如下

优化覆盖率:
1.增加测试用例:编写更多的测试用例,覆盖更多的代码路径和边界情况。例如,对于一个方法,可以考虑其各种可能的输入情况,并确保每种情况都有对应的测试用例。
2.重构代码:有时候低测试覆盖率可能是代码设计不合理的结果。通过重构代码,将复杂的逻辑拆分成更小的、可测试的单元,可以更容易地编写出覆盖率更高的测试用例。
需要处理文件不存在以及用户非法输入的异常
文件包括数据文件和input、output文件
如果是数据文件不存在则无法运行程序,只能抛出异常;如果是input不存在也无法运行程序,可以友好地提示用户输入有问题;如果是output文件不存在可以利用相对路径创建,减少用户的操作,无需用户创建output文件
用户的非法输入异常包括input和output的输入文件地址异常和input文件的格式异常
文件地址异常即找不到文件已经在文件不存在部分处理,input文件格式异常我用hutool的判空字符串函数处理用户输入的所有指令来处理异常
部分处理代码如下


一开始看到json无从下手,利用搜索引擎学习到了可以用json工具类解析。学到了用json解析工具快速对数据进行解析和封装,提高了我的数据处理能力
数据文件在项目的固定相对路径 我利用网上和自己写的方法结合处理对文件的搜寻
优化项目性能的时候看到了可以用buffer对数据进行缓存,避免原本字节流形式的低效