软件工程结对项目——地铁出行路线规划程序
GitHub链接:https://github.com/2016bits/subway
PSP2.1表格
PSP2.1 | Personal Software Process Stages | 预计耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
·Estimate | ·估计这个任务需要多少时间 | 60 | 60 |
Development | 开发 | 300 | 420 |
·Analysis | ·需求分析(包括学习新技术) | 30 | 30 |
·Design Spec | ·生成设计文档 | - | - |
·Design Review | ·设计复审(和同事设计审核文档) | - | - |
·Coding Standard | 代码规范(为目前的开发制定合适的规范) | 120 | 150 |
·Design | ·具体设计 | 120 | 120 |
·Coding | ·具体编码 | 600 | 800 |
·Code Review | ·代码复审 | 180 | 220 |
·Test | ·测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 60 | 60 |
·Test Report | 测试报告 | 40 | 40 |
·Size Measurement | ·计算工作量 | 60 | 60 |
·postmortem & Process Improvement Plan | ·事后总结,并提出过程改进计划 | 40 | 40 |
合计 | 1670 | 2000 |
性能分析
算法整体的思路是广度优先查询,上图为/a功能(从北京站开始遍历北京地铁)所示的性能分析图。
算法优化
我认为这个项目最主要的问题还是数据存储,即如何保存各地铁站的信息及相关线路信息。
起初,按以往的经验,仅仅存储所有的地铁站名称,同时将各线路的地铁站保存下来。然而,在处理数据的过程中,发现这样很难将线路中的各地铁站信息存储到相应的数据结构中,所以读取数据时会增加额外的代价。因此,在文件中的线路信息保存时做了相应的改进,即在每条线路后面增加相应的地铁站数目信息,这样在读取地铁站时即可根据数目来进行循环控制,优化了判断。
然而,在处理过程中,又发现了另一个问题,即线路中还有环路信息,这样存储还是无法保存环路信息。所以,将环路的对应数字保存为负数,所以可以据此判断线路的情况,从而保存最后一站与起点站的线路信息,保证了环路的线路闭合。
不过,仔细观察后,发现地铁图中有个特殊的线路“机场线”:东直门——三元桥为单向,三元桥——3号航站楼——2号航站楼为双向,所以,为了区别这种单向双向的差别,将三元桥、3号航站楼和2号航站楼标记为*从而达到这种目的。
在处理/a和/b功能时,通过搜索即可达到目的。
个人收获
经过这一次的结对项目,我发现了自身C++的知识掌握还不够牢固,明白了对基础知识掌握的重要性。这一次的软件工程项目也让我养成了很好的编程习惯,那就是先完成分析和设计的任务再去编码,这样写效率会更好而且更加易于后期维护。