第一次个人项目-地铁出行路线规划程序

 源代码地址:https://github.com/qingchanghan/Software-engineering

1)开始实现程序之前,使用下列PSP表格估计将在程序的各个模块的开发上耗费的时间。

PSP 2.1

Personal Software Process Stages

Time

Planning

计划

 

  · Estimate

  · 估计这个任务需要多少时间

 26.5h

Development

开发

 

  · Analysis

  · 需求分析 (包括学习新技术)

 5h

  · Design Spec

  · 生成设计文档

 1h

  · Design Review

  · 设计复审 (和同事审核设计文档)

 1h

  · Coding Standard

  · 代码规范 (为目前的开发制定合适的规范)

 1h

  · Design

  · 具体设计

 5h

  · Coding

  · 具体编码

 8h

  · Code Review

  · 代码复审

 2h

  · Test

  · 测试(自我测试,修改代码,提交修改)

 2h

Reporting

报告

 

  · Test Report

  · 测试报告

 1h

  · Size Measurement

  · 计算工作量

 0.5h

  · Postmortem & Process Improvement Plan

  · 事后总结, 并提出过程改进计划

 1h

 

合计

 26.5h

 2)实现完程序之后,使用下列PSP表格记录在各个模块上实际花费的时间。

PSP 2.1

Personal Software Process Stages

Time

Planning

计划

 

  · Estimate

  · 估计这个任务需要多少时间

 

Development

开发

 

  · Analysis

  · 需求分析 (包括学习新技术)

 4h

  · Design Spec

  · 生成设计文档

 1h

  · Design Review

  · 设计复审 (和同事审核设计文档)

 1h

  · Coding Standard

  · 代码规范 (为目前的开发制定合适的规范)

 4h

  · Design

  · 具体设计

 6h

  · Coding

  · 具体编码

 12h

  · Code Review

  · 代码复审

 3h

  · Test

  · 测试(自我测试,修改代码,提交修改)

 3h

Reporting

报告

 

  · Test Report

  · 测试报告

 1h

  · Size Measurement

  · 计算工作量

 0.5h

  · Postmortem & Process Improvement Plan

  · 事后总结, 并提出过程改进计划

 1h

 

合计

 36.5h

 3)先贴一张性能分析图。

从这张图上可以看出,热路径中transfer2()函数占了85.14%,其中调用transfer3()函数占了80.09%,transfer3()调用自己又占了68.93%。为什么占了这么多呢?原因就是它是一个递归函数。

简单介绍一下我的算法吧,换乘最少的最短路线的算法。设起始点为sta1,目标点为sta2,首先求出sta1可直接到达的站点(即不经过换乘,下面不再重复),计算出sta2可直接到达的站点,看二者有没有交集。若没有,求出sta1必须换乘一次才能到达的站点,再看看有没有交集,重复此过程,直到有交集为止。但是有了交集以后,由于我们要求的是换乘最少的最短路径,所以要从终点回溯,这也就是这个递归函数的由来。正因为有了这个递归函数,程序执行相对较慢。一般换乘2-3次还可以无延迟出结果,4次就得等个几秒钟。

想过改进这个算法,但是一是时间比较紧张,二是也没有想出来好的办法,所以无奈就这样了。

其他的一些地方倒是改进了一点,主要是代码复用来减少了代码量。

4)测试用例

地铁四号线
地铁十号线
地铁机场线
-c 张郭庄 善各庄
-b 张郭庄 善各庄
-c 知春路 东直门
-b 知春路 东直门
-c 沙河 土桥
-b 沙河 土桥
-c 苏庄 俸伯
-b 苏庄 俸伯
-c 安河桥北 亦庄火车站
-b 安河桥北 亦庄火车站
-c 沙河 南锣鼓巷
-b 沙河 南锣鼓巷

这些用例涵盖了地图的大部分线路,也涵盖了几种要求,且结果都和百度地图的结果比对过,应该是正确的。

5)这次项目是第一次,老师当堂布置的任务。当时一看作业要求,必须用C++或C#,整个人都有点懵。好在C++的语法和C几乎一样,陆续花了几个小时,补充了C++的知识。

以前的OO和别的程序,我都是先想一点写一点,然后边写边想边修改。以前这样的方法还好,但是这次完成起来就显得尤为吃力。

所以我觉得以后在写代码之前,一定要认真完成分析和设计的工作,然后再动手写代码,这样的效率才更高。

posted @ 2016-09-14 23:45  qingchanghan  阅读(1391)  评论(4编辑  收藏  举报