451
社区成员
这个作业属于哪个课程 | <软件工程-23年春季学期> |
---|---|
这个作业要求在哪里 | <软件工程实践第二次作业---文件读取> |
这个作业的目标 | <完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序> |
其他参考文献 | 《构建之法》 |
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
•Estimate | •估计这个任务需要多少时间 | 30 | 30 |
Development | 开发 | ||
•Analysis | •需求分析 (包括学习新技术) | 60 | 70 |
•Design Spec | •生成设计文档 | 30 | 20 |
•Design Review | •设计复审 (和同事审核设计文档) | 20 | 20 |
•Coding Standard | •代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
•Design | •具体设计 | 60 | 60 |
•Coding | •具体编码 | 900 | 1100 |
•Code Review | •代码复审 | 60 | 80 |
•Test | •测试(自我测试,修改代码,提交修改) | 60 | 70 |
Reporting | 报告 | ||
•Test Report | •测试报告 | 30 | 40 |
•Size Measurement | •计算工作量 | 30 | 20 |
•Postmortem & Process Improvement Plan | •事后总结, 并提出过程改进计划 | 30 | 20 |
Total | 合计 | 1330 | 1550 |
使用阿里巴巴开发的JSON库FastJson进行解析
以输出选手信息为例:调用JSONObject.parseObject方法将解析的json数据字符串转换成json对象,调用jsonObject.getJSONArray方法读取players数组。遍历数组,用临时变量将元素转为json对象,StringBuilder接收查找对象中的full_name、gender和nationality中的name,最后结果调用StringBuilder.toString方法返回String类型变量
- 读文件:使用FileReader接受文件路径,BufferedReader接收FileReader,调用read方法进行按行读取到StringBuilder保存,最后StringBuilder调用toString方法返回
- 写文件:使用fileWriter接收文件路径,BufferedWriter接收fileWriter,调用BufferedWriter的write方法写文件
AOsearch类:
- public static void main(String[] args):获得指令判断是否合法,调用Lib类的方法读写文件
Lib类主要方法:
- String readFile(String jsonPath):解析json文件,返回json数据字符串
- String writeFile(String json, String output):将处理好的数据写入文件
- String getPlayers(JSONObject jsonObject):从json字符串中获取所需的运动员信息,返回其String类型
- String getMatch(JSONObject jsonObject):从json字符串中获取所需的比赛信息,返回其String类型
1.参数:data文件夹下对应文件路径
2.返回:json文件解析后的json数据字符串
1.参数:json字符串、output文件
2.返回:void
1.参数:JSONObject对象
2.返回:字符串形式的运动员信息
1.参数:JSONObject对象
2.返回:字符串形式的比赛信息
- 因为文件中可能会有大量的重复指令,如果每一次都对指令相应文件进行读操作,将会耗费大量时间
- 所以引入缓存机制,将所有第一次读过的指令以键值对的形式存入HashMap中,如果遇到重复指令可以直接从HashMap中得到相应json数据的String形式,即可以直接输出,避免了反复打开文件进行读操作的时间
- 优化前:
- 优化后:
- 对AOsearch进行单元测试
- 覆盖率:
异常主要存在于指令和文件方面:
1.指令输入不合法,如:不输入指令、指令数目超过2
2.文件方面的异常:文件不正确或不存在
需要尽可能的将各种异常的处理方法写入代码,防止代码运行过程中崩溃
这次作业在刚布置的时候刚好遇到要做手术,所以匆匆看了几眼也没有深入思考,只感觉很复杂。但在返校之后真正开始编写代码时,发现只要将问题划分成一个个小问题,然后就可以逐个击破。在代码性能优化方面没有什么思路,还需要继续努力。