首页 > 技术文章 > 预培训-个人项

hengyumo 2019-07-22 14:01 原文

所属课程 2019北航软件工程暑期师资培训(北京航空航天大学)
作业要求 预培训-个人项目
作业目标 实现一个帮助进行地铁出行路线规划的命令行程序。

要求:

  1. 使用Visual Studio Community 2019 或 IDEA 进行开发,采用C++, C# 或 Java 语言实现,运行环境为64-bit Windows 10。
  2. 提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。Code Quality Analysis工具的用法参见:
    http://msdn.microsoft.com/en-us/library/dd264897.aspx
  3. 请使用性能分析工具来找出代码中的性能瓶颈并进行改进。
  4. 写出至少10个测试用例确保你的程序能够正确处理各种情况。
  5. 使用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算法的原理。

github:https://github.com/numb-men/subway

推荐阅读