一.概述
1.定义
软件构造是以编程为主的活动,类似于软件实现。但软件构造又不止编程这么简单,除了核心的编程任务之外,还设计详细设计(数据结构与算法设计)、单元测试、集成与集成测试以及其他活动~
2.软件构造是设计的延续
传统上,将软件开发的编程阶段统称为软件实现,认为它是将软件构建方案映射为机器语言的过程,属于软件开发的次要任务~
仔细区分设计与实现的界限:
- 设计是规划软件构建方案的过程,实现是依据规划的软件构建方案建造真正产品的过程
- 源程序是软件构建方案的最后一个规划,不是产品本身,真正的产品是运行于计算机上的由二进制代码组成的可执行程序
- 源程序的生产过程——编程,属于设计活动,编译器完成的编译和链接才是依据规划 建造软件产品的实现活动~
软件设计阶段的设计工作是对软件系统总体结构和细节结构的规划,但是并没有产生最终的规划——还没有进行到源代码级别;而软件构造阶段的设计就是在较低的代码层次上的设计活动,将软件设计阶段产生的设计规划深入和细化到表现为源代码的最终机制~
编程从来就不是一种简单的活动,它的核心是设计代码,并验证设计的效果;过去的经验也一再表明,忽视编程工作的复杂性和重要性,会付出低质量的代价~
二.软件构造活动
1.详细设计
有些项目会将主要的详细设计工作分配在软件构造阶段完成,也有一些项目要求在软件设计阶段完成非常详细的详细设计工作,其详细设计方案能详细到让编程工作近乎无机械化;还有一些项目在软件设计阶段完成主要的详细设计工作,将剩余的详细设计工作遗留给软件构造阶段~
软件构造阶段详细设计使用的方法与技术与设计阶段是一样的,只是应用在更小的规模上~
2.编程
软件构造的核心活动,目的是生产高质量的代码:
- 易读性:程序代码必须是易读的,看上去“显而易见是正确的”
- 易维护性:易读易修改
- 可靠性:执行正确,妥善处理故障
- 性能:时间性能和空间性能
- 安全性:不要遗留程序漏洞
3.测试
通过单元测试和集成测试,验证设计的正确性
4.调试
通过调试找到程序代码中的缺陷并加以修复,总的来说 ,调试是非常依赖于经验的工作,过程可以分为如下3个部分:
- 重现问题:发现问题后先不要着急寻找缺陷,要通过重现问题来确定错误的出处
- 诊断缺陷:对于重现的问题,不能考猜测和直觉来确定缺陷所在
- 修复缺陷:一次只需改一个缺陷,修改前保留旧版本的备份,并使用测试和评审验证修复的有效性
5.代码评审
代码评审是对代码的系统检查,通过是通过同行专家评审来完成的,通过评审会议可以发现并修正之前忽略的代码错误,从而提高软件的质量和开发者的技巧~
6.集成与构建
在以分数的方式完成程序基本单位之后,软件构造还需要将这些分散单位集成和构建为构件,子系统和完整系统~
7.构造管理
- 构造计划:根据整个项目的开发过程安排,定义要开发的构件与次序,选择构造方法、明确构造任务并分配给程序员。
- 度量:软件构造阶段的产品度量主要围绕源代码展开
- 配置管理:出于团队协作开发的要求
三.软件构造实践方法
1.重构
原因:最早用来进行软件维护的方法,因为无法预计到后续数年的修改导致设计方案不能满足修改需求,亦或随着修改次数的增加,软件设计结构的质量越来越脆弱,很难继续维持可修改性
常见时机:
- 增加新的功能时
- 发现了缺陷进行修复时
- 进行代码评审时
注意事项:
- 重构是基于已有代码的设计改进,不是开发新代码的方法
- 重构要防止副作用
- 重构的重点是改进详细设计结构
2.测试驱动开发
又称为测试优先的开发,它随着极限编程方法的普遍应用而得到发展和普及~
优点:
- 提高程序的正确性和可靠性
- 提高设计质量
- 提高生产力
过程:
- 编写一段测试代码
- 编译测试代码
- 最小化编写正常程序代码
- 运行测试代码
- 最小化修改正常程序代码
- 运行测试代码
- 重构正常程序代码
- 重复以上步骤
3.结对编程
由极限编程推广的方法,思想是:两个程序员挨着坐一起,共同协作进行软件构造活动~