一、软件构建的概念
1.1 软件构建的活动相关定义
构建(Construction),通常在我们生活理解中,第一印象可能就是房屋的构建。或者又例如小朋友搭积木的那种过程也可称为构建。故构建的通常指的是建设的过程。而软件构建的也就是软件开发的过程。而软件开发,在《代码大全》这种书,作者总结了11个构建过程中涉及到活动。
- 1).定义问题
- 2).需求分析
- 3).规划构建
- 4).软件架构
- 5).详细设计
- 6).编码与调试
- 7).单元测试
- 8).继承测试
- 9).集成
- 10).系统测试
- 11).保障维护
而作者通过下面一张图,阐述了本书的侧重的范围:详细设计、编码与调试、单元测试这几块。
1.2 软件构建为什么重要
- 1).构建活动是软件开发的主要组成部分
构建活动在整个软件开发活动总时间中所占比例一般在30%至80%之间,所以必然会影响项目的成败
- 2).构建活动是软件开发中的核心活动
- 3).把精力集中于构建活动,可以大大提高程序员的生产率
- 4).构建产物-源代码往往是对软件的唯一精确描述
在很多项目中,程序员可以得到的唯一文档就是源代码本身。需求规格书和设计文档可能会过时,但是源代码是最新的。因此,源代码就必须具有尽可能的高的质量。
- 5).构建活动是唯一一项确保会完成的工作
二、使用隐喻的方式理解软件构建
软件开发相对于其他学科而言,还是一门很年轻的学科,它还没有完全成熟到拥有一套标准隐喻的程序,因此必然存在许多或者相互补充,或者相互抵制的隐喻,某些隐喻相对好些,而另一些比较糟糕,你对隐喻有多理解,也就决定了你对软件开发有多理解
2.1 常见的隐喻
- 1).写作代码
在很多项目中,程序员可以得到的唯一文档就是源代码本身。需求规格书和设计文档可能会过时,但是源代码是最新的。因此,源代码就必须具有尽可能的高的质量。
- 2).培植系统
将创造软件想象成类似播种和耕种的情形。你一次设计的系统的一小部分、写出一段代码、做一点测试,并将成果一点点添加到整个系统
- 3).系统生长
先做出软件系统的一个尽可能简单,但能运行的版本。后期你再一次一次增加你得功能。目前互联网的公司的产品大都使用此方式进行开发,因为前期投入成本比较低,如果失败了,可以迅速改变策略方向。如果成功了,可以进行围绕核心依次展开拓展开发。
- 4).建造软件
与系统生长概念相通,但是它提供了更详细的指导。比如前期详尽的调研,准备,软件规划等等。比如要构建大型信息化系统。应该使用此模式
三、软件构建的前期准备
3.1 前期准备的重要性
使用高质量的实践方法是那些能够创造高质量软件的程序员的共性。这些高质量的实践方法在项目的初期、中期、末期都强调质量。
构建活动是软件项目的中间阶段,在你开始构建的时候,项目前期工作已经或多或少为这个项目的成功或失败打下了基础。然而,在构建的过程中,你至少应该能够辨明当时的形式如何,如果你看到失败的乌云已经出现在地平线上时。就退回到项目的前期工作。
3.2 前期准备适用于现代软件项目吗?
在20世纪70年代开始至今的业界数据显示,如果在开始构建活动之前认真地进行适当的准备活动,那项目将会运行的很好。(作者的调研总结结论)
3.3 问题定义的先决条件
在构建软件之前,首先要满足的是一项先决条件,对这个系统要解决的问题做出清楚地陈诉。这时候称为:产品设想、设想陈述、任务陈述或者说产品定义。但是本书,将它称为“问题定义”
如下图,问题定义为后面的软件开发奠定了坚实的基础
而且问题定义应该用客户的语言来写,而且应该从客户的角度来描述问题。通常不应该用计算机的专业术语叙述。最好的解决方案未必是一个计算机程序。
3.4 需求的先决条件
1).要求一套明确的需求,这点很重要。因为明确的需求有助于确保是与用户驾驭的功能,而不是程序员驾驭的功
能。因为明确的需求,免得你去猜测用户想要什么功能。2).明确的需求有助于避免争论,以免产生歧义。
3).明确的需求有助于减少开始编程开发之后的系统变更情况。如果你在编码的过程中发现一个代码上的错误,你只需要修改几行代码,然后继续工作。但是如果你在编码的时候发现一个需求的错误,那你就得改变设计。
4).稳定的需求是软件开发的圣杯。一旦需求稳定,项目就能以有序的、可预测的、平稳的方式,完成从架构到设计到编码到测试等一系列工作。
3.5 如何处理构建期间的需求变更
1).确保每一个都知道需求变更的代价
2).建立一套变更控制程序
3).使用能适应变更的开发方法
4).放弃这个项目
3.6 架构的先决条件
软件架构是软件设计的高层部分,用于支撑更细节的设计的框架。通常会有一份独立的文档描述架构。
好的架构使得构建活动变得更加容易。糟糕的架构则使得构建活动几乎寸步。
3.7 软件架构的典型
- 1).程序组织
- 2).主要类
- 3).数据设计
- 4).业务规则设计
- 5).用户界面设计
- 6).资源管理
- 7).安全性
- 8).性能
- 9).可伸缩性
- 10).互用性
- 11).国际化/本地化
- 12).IO输入输出的性能考虑
- 13).错误处理
- 14).容错性
- 15).架构可行性
四、总结
这篇主要是前三章关于概念理论的总结与分享。代码相关的在后面的篇幅进行介绍。谢谢,大家可以关注我的个人微信公众:Java从零入门系列,更多干货等你来哦!!!