结对项目-地铁出行路线规划程序(续)

结对编程:冯炜韬、杨子琛

 

  • 结对编程
  • 优点
    • 讨论能够使设计思路更清晰,避免因设计原因导致的recoding
    • 编码时出现问题能够及时被发现,减少找bug的时间
    • 一人编码时,partner可以思考测试样例,双线并行
  • 缺点
    • 当一些时候,另一个人可能比较浪费时间,比如工作量较大且多机械性操作,使效率下降
    • 对时间和地点要求高,在当今互联网时代,许多开源项目的合作者分布在世界各地,无法实现结对编程
  • 我自己
    • 优点:对软件结构有一定理解;有一定前端设计经验;有一定数据建模经验;有一定算法知识
    • 缺点:通常懒于寻找现成的代码工具包(主要原因是这些包通常可能丢失某些东西或者依赖某些其他包,导致麻烦),导致各种问题可能要自己编码解决
  • partner(杨子琛)
  • 优点:有一定数据建模经验;有一定算法知识;有耐心;测试能力较好;能较快看懂别人代码
  • 缺点:???

(某结对编程情形)

  • 契约式编程与UML
    • Design by Contract
      • 优点:能纵览全局,保证代码质量,减少重写
      • 缺点:增加设计时间,并且由于功能可能存在变化,始终不能够做到不改设计
      • 应用:并无完整的契约式编程设计,但是习惯使用一种类似的方式进行:从主函数开始写起,从大至细,遇到可以封装的功能,先写函数头(完成该函数的输入输出约定,一般副作用不会影响编程),并不着急具体内容,当这一层的内容设计完毕,再从更细的一层开始写:即BFS式编程。
    • UML

    • 编程契约(Code Contract)
      • 为了更好地实现契约式编程或者其类似形式,必须对代码有形式化的要求,这便于管理,也便于工作交接
      • 这里项目较小,文档太费时间,所以仅在全局变量及方法中注意了命名知义,部分有注释
      • VS自带进行代码格式修改,因此代码格式统一
      • 并未进行约束验证
  • 设计
    • 功能设计
      • 保留之前的大部分功能(输出一条线路所有站点的功能除外), 新增显示地图(移动缩放及标记),显示推荐线路,切换城市三大功能
      • 用户体验部分新增许多细节能够使用户更上手
    • 界面设计
      • 采用“轻薄”设计概念,减少软件的复杂感,减少多余的边角边框,让软件中每一个部分都简化到极致
      • 提供多彩的主题,缓解用户对界面的疲劳
    • 设计原则
      • 采取面向对象设计思路,高度接口化,成员全部私有,仅允许通过公有接口访问
      • 采取M/V两层结构,数据与界面高度分离,降低耦合度
  • 测试

对软件的正确性、完整性、安全性和质量进行了测试,对其功能的正确性、效率以及异常处理能力进行了验证。共进行了上百个功能正确性测试,并测试了十几种异常情况。最终程序顺利通过所有测试,测试结果如下图所示。由于软件限制无法检测代码覆盖率。

测试结果:全部通过

  • 实现细节

*基础功能

**多城市支持

***多彩主题

  并未使用其他组件,仅使用MFC自带控件,减少软件调用库的数量(其实就是懒)

实现的算法关键:BFS搜索法、贪心算法、基本的坐标变换

功能列表:

  1. 三种模式推荐线路
  2. 显示线路具体图形,标注换乘站点,标注已经通过的站点,标注起末点
  3. 地图选点设定起末点
  4. 更换不同城市的地图
  5. 更换主题(7色主题任君选择)
  6. 其他细节(支持一键互换起末点,显示站数和换乘数,双击listBox中的一项可以设定当前所在站点,支持空白处和顶部位置拖动窗体)
  • *附加
    • 采用自定义格式文件保存地图数据
    • 将数据模型设定为两类:单城市地图、城市列表
    • 城市列表类管理数据文件夹中的map.list以及对应城市包
    • 城市地图类管理单个城市的地图数据
    • 程序无需变更,只需添加新城市地图并且在map.list中注册信息,软件可自动载入地图数据

github:   https://github.com/Helicopt/metro

  • **一些狡辩解释
    • 为什么不使用WPF等控件?A:对VS不熟,目前已经各种缺文件,如果再增加扩展,又不知道会报什么错,由于时间紧张,放弃使用WPF;同时,私以为WinForm的控件已经足够使用,这个项目中WPF控件在功能上并无较大优势,同时用丑的控件写出能看的界面的才是好前端(误。
    • 为什么直接使用图片作为地图?A:显然自己画图颜值低(如果要好看还要学啥B样条曲线,而且增加地图坐标数量)啊,而且有图片我可以超高速增加地图包,简单来说,你还在给线路分颜色的时候(线路颜色与官方不对应有损用户使用体验),我就做好了。至于扩展问题?地铁线路并非地面公路,变化可能性极低,频率极低,扩展性并未减弱多少
    • 为什么前面那些设计原则等写这么少字?A:感觉定义什么的就不说了吧,上网一查一大把
原文地址:https://www.cnblogs.com/toka/p/5922436.html