软件工程实践第二次作业——个人实战

qq_62699435 qq_62699435 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践第二次作业——个人实战
这个作业的目标完成对世界游泳锦标赛跳水项目相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序
其他参考文献码出高效_阿里巴巴Java开发手册、源代码管理

目录

  • Gitcode项目地址
  • PSP表格
  • 解题思路描述
  • 1、先对数据进行分析
  • 2、需求分析
  • 3、得出框架
  • 接口设计和实现过程
  • 1、getPlayers接口
  • 2、getScore接口
  • 3、接口printError
  • 关键代码展示
  • getPlayers接口
  • getScore接口
  • printError接口
  • main函数
  • 性能改进
  • 单元测试
  • 异常处理
  • 心得体会

Gitcode项目地址

https://gitcode.net/qq_62699435/project-java

PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划12060
• Estimate• 估计这个任务需要多少时间12060
Development开发15901610
• Analysis• 需求分析 (包括学习新技术)240240
• Design Spec• 生成设计文档6070
• Design Review• 设计复审6050
• Coding Standard• 代码规范 (为目前的开发制定合适的规范)120100
• Design• 具体设计90100
• Coding• 具体编码600720
• Code Review• 代码复审240210
• Test• 测试(自我测试,修改代码,提交修改)180120
Reporting报告180160
• Test Repor• 测试报告6050
• Size Measurement• 计算工作量6050
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划6060
合计18901830

解题思路描述

1、先对数据进行分析

通过网页上的api将选手数据和比赛数据拷贝一份储存在本地文件中,文件命名为players和比赛名称

img

2、需求分析

要求有两种输出,分别是输出选手信息和输出比赛数据,意味着需要从已经拷贝到本地的txt文档中筛选出有效信息,利用文件流BufferedReader和BufferedWriter读出字符串,再通过JSON解析即可得到需要输出的数据并写入output.txt

3、得出框架

将不同的输出封装起来,在main函数中按行读取input.txt中的字符串,解析读入的字符串是否为合法要求,根据字符串执行不同的函数即可完成output.txt的写入功能。

接口设计和实现过程

1、getPlayers接口

getPlayers:当从input.txt中读入某一行的字符串为players时,调用该接口。通过JSONTokener读入预先存储在本地文件players.txt中的选手数据,解析为JSONObject,循环读出每一位选手的firstName和lastName连接为fullName,以及国籍和性别,通过BufferedWriter写入output.txt中。

2、getScore接口

getScore:接口需要参数path,来源于result请求后的字符串,将path转换为相对地址pathName对应本地文件txt的名称,即可打开正确的比赛记录文件。和接口一类似从本地txt文件中读入比赛信息,通过JSONObject和JSONArray的嵌套使用过滤出需要的数据,写入output.txt。

3、接口printError

printError:当iunput请求是不符合规定的请求时,调用该接口,在output.txt中写入字符串Error

关键代码展示

getPlayers接口

img

getScore接口

img

printError接口

img

main函数

img

性能改进

由于开始编程时没有考虑有重复申请相同信息的情况,采取的是一次请求一次输出的方法,当样本量增大时时间复杂度太高。

所有11条不同指令消耗的时间(120ms):

img

11*10=110条指令消耗的时间(540ms):

img

1100条指令消耗的时间(3949ms):

img

可以明显发现时间复杂度几乎是线性增大的,解决的方法也很简单,建立合适的数据结构将筛选后的数据存储起来,实现数据的复用。但是这样几乎要把之前的代码推倒重来,观察发现这次的题目其实数据量不大,输出的数据也比较固定,总共只有11种合法指令,所以考虑第一次输出的同时将输出存储到哈希表中,之后遇到相同指令时直接从哈希表中取出数据即可,同样体现了数据的复用。
即使是这样修改之后,时间复杂度和室友对比之后发现仍然较高,检查发现原因是BufferedWriter没有实现复用,每次输出到output中时都要新建一个BufferedWriter,写入之后再关闭,浪费资源。于是将BufferedWriter也封装起来实现复用,性能取得巨大提升。

优化后:
所有11条不同指令消耗的时间(120ms->113ms):

img

11*10=110条指令消耗的时间(540ms->125ms):

img

1100条指令消耗的时间(3949ms->132ms):

img

10888条指令消耗的时间(221ms):

img

单元测试

白盒测试:使用了一个包含11种合法输入的10890行的input.txt测试输出结果,得到output.txt共716760行,与舍友程序得到的结果进行对比,结果相同,基本能够通过白盒测试。

img

编写了一个test测试程序自动测试getPlayers接口能否输出正确的程序

img

异常处理

在读写文件前先检查文件是否存在

img

检查是否是非法输入,通过正则表达式检验是否为result+比赛名的合法输入

img

try-catch捕获程序过程中的异常,而不会中断程序的执行。

img

心得体会

1、基本了解了从网页爬取数据的步骤,对网页数据有了更多的理解。但是爬取数据的方法有待拓展,基本是通过api网址手动爬取保存到本地文件中,后续可以学习使用工具更方便地爬取。
2、初步掌握JSON解析的方法,能够从网页上爬取的数据进行解析,得到想要的某一部分数据,同时也涉及输入输出流的运用,从文件中读取大数据,进行解析得到部分数据,再输出到对应文件中,日常使用中也很好用。
3、封装思想。经过性能优化环节,对封装的作用有了更深理解,能实现代码和数据的复用,极大提升性能,之后编程过程中也会注意封装。
4、重视需求分析,一开始没有考虑到数据结构怎么建立,只考虑到一次输入一次输出,后续修改就非常麻烦了。所以之后会认真分析需求,建立合适的数据结构和接口,实现代码复用。

...全文

相关推荐

【软件工程】大作业——软件设计说明书,高分大作业

南京理工大学紫金学院,《软件工程》这门课最后的大作业,是每个小组做一份软件设计说明书,这份就是我们当时的高分作业。

振华OPPO

软件工程实践第二次作业

项目 内容 这个作业属于哪个课程 福州大学软件工程实践2022年春-F班 这个作业要求在哪里 软件工程实践第二次作业——个人实战 这个作业的目标 爬取数据、实现一个命令行程序 其他参考文献 CSDN 博客园 文章目录1、GitCode项目地址2、PSP表格3、解题思路描述4、接口设计和实现过程4.1 实体类设计4.2 工具类设计4.2.1 文件工具类4.2.2 验证工具类4.3 核心类设计5、关键代码展示6、性能改进6.1 数据读取优化6.2 数据写入优化6.3 性能分析7、...

Kylenax

软件工程个人总结

这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 这个作业要求在哪里 软件工程实践总结 团队名称 灵机一栋 这个作业的目标 对本学期的软工实践进行个人、团队总结,提出建议 学号 031902140 一、个人总结 1)对比开篇博客对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了期待和目标,哪些方面还存在不足,为什么? 软工实践课程让我第一次接触软件的开发,第一次亲身体验软件开发的完整流程由理论走向实践...

请给我个好听的备注

软件工程课程设计“作业管理系统”的总结和期望

在当今全球疫情的时期,返校、出行等人员流动无法顺利有序进行的情况下,很多学校的教育方式正逐渐由线下授课方式转换为线上授课方式。而此时,一套完善的线上授课及作业系统便成为切实的需求。因此,为了在教育领域应用计算机帮助教学工作更顺利地进行,解决教师与学生教学生活中远程操作的问题,设计实现该网上作业管理系统。

李狄坤

山东大学软件工程实验报告及作业

1.项目是数据库课设做的火车票售票系统 2.写的SSR 3.没有复习资料,只有老师布置的作业题的答案。

夜行少女
评论 1
收藏 已收藏
分享
返回顶部