这里是开发方法文档
敏捷过程模型开发
本软件为轻量,选择敏捷过程模型开发迅速,开发人员较少,主张频繁的交流与沟通来达成开发计划,开发方法,与开发标准的统一。从需求上来看,本产品由几个关联度极低的功能组成,采用敏捷开发的方法将项目分解为多个子项目,分别对每个模块进行测试,不仅开发迅速,集成度高,而且有着良好的扩展性。总体上满足简单,变化,可持续,高质量,轻便的特性。
结对编程与二人合作
在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。
结对编程有如下优点
- 在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
- 对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
- 在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
- 在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
该方法适用于在高速度中完成任务,任务有较高的技术要求,任务失败的代价很高的情况。每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。
参考结对编程方法,在二人合作中,由技术较高的同志主导软件设计方向与模块设计,另一位辅助开发,实现计划好的开发任务,二人沟通频繁,互相满足对方需求,调整开发方向并时刻关注任务总体进展,在结对项目中往往能达到较好的效果。
合作难免会出现意见不统一的情况,这时应当理性地思考对方的想法,从软件开发的整体上确定选择哪个方案或者中和二人意见的部分制定新的方案。沟通的时候可以考虑三明治方法:先来一片面包,做好铺垫,例如可以从双方的共同点,团队共同的愿景讲起, 让对方觉得处于一个安全的环境。再把肉放上,这时就可以把 建设性的意见油炸好,加上生菜,佐料等,在提供反馈时,不宜完全沉溺于过去的陈年谷子烂芝麻,给别人做评价,下结论,可以调整一个角度,强调过去你做得不够, 但是我们以后可以做得更好。然后再来一片面包, 盖上。 这时候可以呼应开头, 鼓励对方把工作做好。
Information Hiding, interface design, loose coupling的利用
信息隐藏是结构化设计与面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。代码模块应该采用定义良好的接口来封装,外部是不可见的。松耦合是为了避免牵一发而动全身,当系统为两层架构时可以增加代理层来实现模块的互不影响
为此:
- 类的所有数据成员都是private,所有访问都是通过访问函数实现的
- 错误处应当写在本模块中,以免影响到调用它的模块
- 高层模块不应该依赖低层模块
- 一个接口只服务于一个子模块或业务逻辑
- 调用接口而不需要关注它的实现
Design by Contract, Code Contract的优缺点
契约式设计就是按照某种规定对一些数据等做出约定,如果超出约定,程序将不再运行,例如要求输入的参数必须满足某种条件。契约式设计强调三个概念:前置条件,后置条件和不变式。前置条件发生在每个操作(方法,或者函数)的最开始,后置条件发生在每个操作的最后,不变式实际上是前置条件和后置条件的交集。违反这些操作会导致程序抛出异常。但用户在使用组件的时候,即使知道契约,能否严格按照契约来做,开发期间是否能够将所有的违反契约的地方全部列出来,仍然是一个问题(理论完美但现实残酷),容易造成代码的冗余和不可读性的提高。优点是提升代码的质量,提高了软件工程的效率和质量。 在实现的时候需要有良好的边界检查条件与错误处理机制。
程序的代码规范
- 注释清楚明白,简单易懂,能说明该模块功能与逻辑上下文关联
- 函数,类,变量名称应具有基本示意作用并符合统一的命名规范。
- 单个函数大小应当适中,功能不应过于复杂且不与其他函数功能杂糅。
- 尽量减少函数的嵌套调用
- 边界条件理应清晰,且各种条件下的错误处理函数齐全。
|