结对成员: 11061158 杨帆
11061154 周辰光
- 新知准备
在投入作业之前,先对可能用到的知识与方法进行一定的学习了解。
1.结对编程 Pair Programming
在学习了软工这门课后,这还是我第一次接触到结对编程。所谓的结对编程,说的就是一对程序员肩并肩地、平等地、互补地进行开发工作。
两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起
编码,一起单元测试,一起集成测试,一起写文档等。
结对编程的优点有以下几点:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上,当有另一个人在你身边和你紧密配合, 做同样一件事情的时候,你不好意思开小差, 也不好意思糊弄。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
缺点则有以下几点:
(1)习惯一个人写程序,不喜欢被人盯着工作,这样不自在,无法工作。
(2)有些公司规定所有的任务都要结对编程, 结果大家都走形式, 滥竽充数的人也在结对编程的过程中得过且过。
(3)如果团队的人员要在多个项目中工作,不能充分保证足够的结对编程时间,那么成员要经常处于等待的状态,反而影响效率。
躬身自省,我们对自身组合的利弊的进行了分析。
周辰光:优点:(1)善于倾听;(2)团队意识强;(3)逻辑思维缜密。
缺点:编程效率较低
杨帆: 优点:(1)计划性强;(2)善于总结经验教训;(3)实践能力强。
缺点:合作时缺乏沟通,进度不一致。
总体上看,我们的组合利弊互补,所需的只是一定时间的磨合。
2. 数据隐蔽 Information Hiding
每个模块对其他所有模块都隐蔽自己的设计决策,模块应该详细说明且精心设计以求在某个模块中包含的信息不被不需要这些信息的其他模块访问,
独立模块相互之间只交流实现软件功能所必需的那些信息。而对于两人一组完成一个项目的结对编程,对于数据的隐蔽与安全性的要求较低。但是,在
编程过程中谨慎设计数据隐蔽可以省去许多不必要的麻烦。
3. 界面设计 interface design
用户界面设计在人与计算机之间搭建了一个有效的交流媒介。创建用户场景,构建产品屏幕布局,达到识别用户,任务和环境需求的要求,符合置用户
于控制之下,减少用户的记忆负担,保持界面一致的基本原则。
4. 松耦合 loose coupling
松耦合系统通常是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的。客户端和服务之间的通讯由消息的架构支配。只要消息符合协商
的架构,则客户端或服务的实现就可以根据需要进行更改,而不必担心会破坏对方。松耦合有助于降低客户端和远程服务之间的依赖性。
5. 契约式设计 design by contract (DbC)
契约式设计 (DbC)是一种设计计算机软件的方法。这名称来源于“商业契约”,因为软件设计者血药提供精确的、并且可验证的借口。换句话说,软件设计的
合作者之间达成了一种固定的契约,相互划清权利与义务,以便编程清晰的进展。
契约式设计中存在3个关键问题:
(1) 先验条件:它所期望的是什么?
(2) 后验条件:它要保证的是什么?
相对应的,契约的概括如下:
(1)调用函数时,传递的条件必须为真;否则,出现的错误是调用者的责任;
(2)函数保证正常运行,结果与过程合理,不会无限循环;
(3)函数内部处理工程可以千差万别,但返回给调用者的数据必须是正确合理的。
- 关键算法
经多次优化,最终算法归结为以下框图:
应用该算法,我们对passenger的3个xml文件进行了测试,并与初始算法对比如下:
passenger1:
passenger2:
passenger3:
可以看出,时间效率得到了明显提升。
- UML类图
- 单元测试
- 总结
这次结对作业,从十一假期到截止日期,共花费了2周的时间。对我们来说,这是一次非常具有挑战性
的作业。首先,对于很多需要应用的知识我们并不熟悉,甚至C#语言都需要从零开始学起。同时,这也
是我们第一次结对编程的经历。在这个过程中,从开始的交流不便,到算法思路不同,思维跟不上,这些
情况都或多或少的出现过。不过,最重要的是,在我们的共同努力下,我们战胜了这些障碍,完成了作业。
相信这对我们的编程之路来说是一个好的开始。