122
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 福州大学-202302软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 软件工程第二次作业--文件读取 |
| 这个作业的目标 | 完成对世界游泳锦标赛跳水项目数据的爬取,并编写一个处理相关数据的程序 |
| 其他参考文献 | 构建之法、单元测试教程、Java开发手册、菜鸟教程 |
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 30 |
| • Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
| Development | 开发 | 1200 | 1400 |
| • Analysis | • 需求分析 (包括学习新技术) | 180 | 200 |
| • Design Spec | • 生成设计文档 | 30 | 20 |
| • Design Review | • 设计复审 | 30 | 40 |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
| • Design | • 具体设计 | 60 | 60 |
| • Coding | • 具体编码 | 480 | 600 |
| • Code Review | • 代码复审 | 30 | 60 |
| • Test | • 测试(自我测试,修改代码,提交修改) | 250 | 300 |
| Reporting | 报告 | 150 | 180 |
| • Test Repor | • 测试报告 | 40 | 60 |
| • Size Measurement | • 计算工作量 | 25 | 30 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 60 | 60 |
| 合计 | 2380 | 3090 |
打开网页,然后打开web网页开发者工具,点击网络一栏来监听数据发送请求。

然后点击对应的比赛项目,获取相关数据,然后点击fetch/XHR筛选出json文件。

获取运动员信息也用同样的方法

可以看到题目要求的数据全部在json文件中,因此想要拿到数据就要解析json文件


解析json文件就用java中的工具包,我选择的是阿里巴巴的fastjson工具包,想要使用该工具包就要在pom文件中引入相应的依赖。

然后可以用工具包里的getJSONObject方法和getJSONArray方法逐步剥离json文件,从而获取想要的数据
得到想要的数据后,就要将数据保存到合适的数据结构中,从而利于将数据写入文件并展示出来。我使用对象封装的方法将json解析的数据保存,一个运动员就对应一个对象,而运动员的成绩、姓名、性别就和对象中的属性一一对应。
用于保存运动员基本信息的运动员类

用于保存每个运动员比赛结果的类:

我将所有关键函数封装到一个接口中,作为本次项目的核心代码,然后将输出全部选手信息、输出决赛结果、输出比赛详细结果这三个功能分别封装到接口的三个函数中。
接口结构展示:

这三个核心函数的实现思路大致相同:
解析json数据代码:

将对象转化为字符串代码:

处理input命令的代码:

经过测试,本人发现项目主要耗时在解析json、将数据写入文件上,将json文件转化为字符串耗费了大量时间,因此从以下几个方面改进了解析json文件和文件IO的函数:
修改前函数:


修改后函数:


修改前耗时:

修改后耗时:

测试命令行输入的各种情况,以下是部分测试函数:

测试结果:

覆盖率:

测试核心函数输出选手信息和输出比赛信息,以下是部分测试函数:

测试结果:

覆盖率:


测试输出选手详细信息的核心函数,以下是部分测试函数:

测试结果:

覆盖率:

下载squaretest进行自动测试:

选择要测试的函数:

处理命令行参数异常情况,确保无参数时也可以运行,同时当文件名错误时也会抛出异常。

当文件中的项目名称输入错误或格式输入错误时及时处理,输出”N/A“

当文件中的命令不符合规范时及时处理,输出”Error“

json文件打开失败要及时反馈

在完成这次项目的过程中,主要学习了解析json文件的方法,知晓了如何用maven导入工具包来帮助开发,同时也掌握了爬取网站上部分数据的方法。在实际开发过程中遇到了诸如无法打开文件、单元测试异常等问题,在解决问题的过程中也让我的代码水平得到了提升,查阅资料的能力也得到了加强。我也将在这个项目的基础上继续努力,挑战自我。