预培训-个人项
所属课程 | 2019北航软件工程暑期师资培训(北京航空航天大学) |
---|---|
作业要求 | 预培训-个人项目 |
作业目标 | 实现一个帮助进行地铁出行路线规划的命令行程序。 |
要求:
- 使用Visual Studio Community 2019 或 IDEA 进行开发,采用C++, C# 或 Java 语言实现,运行环境为64-bit Windows 10。
- 提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。Code Quality Analysis工具的用法参见:
http://msdn.microsoft.com/en-us/library/dd264897.aspx - 请使用性能分析工具来找出代码中的性能瓶颈并进行改进。
- 写出至少10个测试用例确保你的程序能够正确处理各种情况。
- 使用Github来管理源代码和测试用例。
1、模块构思
(1)POJO部分
站点是以线路为顺序进行组织的,考虑到可维护性(方便修改、添加、删除站点)和语义性使用xml来进行地铁线路的存储:
其中station包含属性:id、站点名称、站点所属线路、还有邻接站点。
一条线路line包含多个站点、一个地铁站包含多个线路。
为了方便进行xml文件和Java对象的映射,使用了JAXB库来实现这种映射:
SubwayPojo:
Line:
Station:
三个POJO类实现了一系列get、set方法,并且使用相应的注解和XML进行了映射。
(2)主程序部分
主程序部分包含一个类:
subway
主要包括以下函数功能:
主要的思路是,尽可能的解耦,把命令行参数获取解耦出来,这样以后要扩展出新的调用方式只要新增一个函数就好,
不用修改原来的代码。
(3)工具类部分
工具类部分主要包含一个类:
Util
为了方便对数据进行录入,Util实现了一个简单的命令行录入小程序:
有两种录入方式,一种是按线路进行录入:
一种是按站点进行录入:
同时还实现了从文件中读取地铁信息,和存地铁信息到文件:
(4)单元测试部分
单元测试部分主要包括一个类:
SubwayTest
使用了Junit来实现单元测试,通过比对预期文件结果和输出文件结果来判断正确性:
2、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | 300 | 370 |
• Analysis | • 需求分析 (包括学习新技术) | 90 | 90 |
• Design Spec | • 生成设计文档 | 60 | 30 |
• Design Review | • 设计复审 | 30 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 0 | 0 |
• Design | • 具体设计 | 120 | 240 |
• Coding | • 具体编码 | 400 | 500 |
• Code Review | • 代码复审 | 50 | 50 |
• Test | • 测试(自我测试,修改代码,提交修改) | 50 | 50 |
Reporting | 报告 | 50 | 40 |
• Test Repor | • 测试报告 | 0 | 0 |
• Size Measurement | • 计算工作量 | 20 | 10 |
• Postmortem & Process Improvement Plan |
• 事后总结, 并提出过程改进计划 | 30 | 30 |
All | 合计 | 880 | 1030 |
3、核心算法
核心算法使用Dijkstra算法,实现图的数据结构采用邻接矩阵:
算法流程图:
4、单元测试和覆盖率
5、性能分析
主要性能瓶颈在JAXB上。
6、总结
通过这次个人项目,熟悉了JAXB的使用,更深入的了解了Djkstra算法的原理。