软件工程结对项目——地铁出行路线规划程序

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++的知识掌握还不够牢固,明白了对基础知识掌握的重要性。这一次的软件工程项目也让我养成了很好的编程习惯,那就是先完成分析和设计的任务再去编码,这样写效率会更好而且更加易于后期维护。

猜你喜欢

转载自blog.csdn.net/qq_40270187/article/details/86559601
今日推荐