1.2 什么是软件分析与设计
软件分析与设计是软件工程的重要组成部分,其定义目前还没有统一的标准。早期,软件工程专家B.W. Boehm将软件工程定义为:设计并构造计算机程序,以及为开发、运行和维护这些程序所必需的相关文件资料。Fritz Bauer如下定义软件工程:为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。IEEE软件工程标准定义软件工程为:开发、运行、维护和修复软件的系统方法。
尽管软件工程的具体定义不尽相同,且又有一些学者提出了更完善的定义,但都是在强调在软件开发的过程中需要应用工程化思想的重要性。我们综合考虑上述的定义,给出软件系统分析与设计的定义为:为开发满足用户需要的软件系统,而采用工程化思想进行分析和设计的原则和方法以及实践。
1.2.1 基本原理
本节介绍软件开发活动的一些基本思想和原理。
1.工程化原理
工程化思想的核心是,把软件看作一个工程产品,这种产品需要经过需求分析、设计、实现、测试、管理和维护一系列过程。用完善的工程化原理研究软件系统生产的规范方法,这样,软件的开发不仅会在指定的期限内完成,还会节约成本,保证软件的质量。
通过工程化的思想,一方面可以提高软件的质量,降低成本;另一方面可以为软件的工程化开发提供保障。随着软件行业的迅猛发展,一些问题和危机逐渐暴露出来,如项目时间总是推迟、项目结果不能令客户满意、项目预算成倍超过、项目人员不断流动等都是软件开发商不断面临的问题。其主要原因是缺乏软件过程控制能力;开发过程随心所欲,时间计划和费用估算缺乏现实的基础;管理者忙于应付突发事件,对产品质量缺乏客观认识;软件开发的成败建立在个人能力的基础上。
2.推迟实现原理
推迟实现是软件开发方法学的基本指导思想。软件开发过程应该理性地“推迟实现”,即把逻辑设计与物理设计清楚地划分开来,尽可能推迟软件的物理实现。这样就避免了在软件开发过程中遇到大中型的软件项目时,由于过早而仓促地考虑程序的具体实现,但考虑不周而导致大量返工。
3.逐步求精原理
逐步求精也称逐步细化,它承认人类思维能力的局限性(认为人类思维能力仅有7±2信息量子的局限性),将一个复杂问题有条理地从抽象到具体,逐步分解、细化和解决。这是人类把复杂问题趋于简单化控制和管理的有效策略。逐步求精解决复杂问题的策略是软件工程方法学中的一项通用技术,且与分解、抽象和信息隐蔽等概念紧密相关。
4.系统分解原理
系统分解是把复杂问题趋于简单化处理的有效策略。根据人类解决一般问题的经验,可得出如下规律:如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题的复杂程度之和;同理,如果一个复杂问题分解成若干容易解决的小问题,那么就能够减少解决问题所需要的总工作量。当然,系统分解必须是科学而合理的,否则可能会增加解决问题的难度和工作量。
5.系统抽象原理
抽象是把一些事物(状态或过程)中存在的相似的方面(忽略它们的差异)概括成“共性”。抽象的主要思想是抽取出事物的本质特性,而暂不考虑它们的细节,即抓“大”放“小”。这是一种分层次的渐进过程。软件系统开发广泛采用分层次的从抽象到具体的逐步求精技术。建立模型是软件系统开发最常用的方法和技术之一。模型是一个方法或过程的合理而规范的框架。
6.信息隐蔽原理
科学而合理的分解,还表现在得到的是一个个最简单、最清晰的“独立”部分,即这些部分的交互接口简单而清晰。不仅便于维护,而且利于复用。信息隐蔽是指“局部化”的信息(关系密切的软件元素,如实现过程、数据等),对于不需要了解这些信息的其他“局部”来说是不可访问的(隐蔽的)。信息隐蔽意味着把一些关系密切的软件元素物理地放得彼此靠近,使信息最大限度地局部化。软件模块中使用局部数据元素就是局部化的一个例子。
1.2.2 基本原则
美国著名的软件工程专家B.W. Boehm综合不同专家关于软件开发的意见,并总结了多家公司开发软件系统的经验,于1983年提出了软件分析与设计的7条基本原则。Boehm 认为,这些原则是确保软件产品质量和开发效率的原则的最小集合。它们是相互独立的,是缺一不可的最小集合。
1.分阶段的开发原则
根据这条基本原则,可以把软件开发划分为若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件开发与维护进行管理。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。Boehm认为,在整个软件生命周期中应制定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。
2.阶段评审原则
统计结果显示:在软件系统开发的各阶段中,编码阶段之前的错误约占63%,而编码错误仅占37%。并且,错误发现得越晚,更正它付出的代价就会越大,要差2~3个数量级甚至更高。因此,软件系统的质量保证工作不能等到编码结束以后再进行,必须坚持进行严格的阶段评审,以便尽早地发现错误。
3.严格的控制原则
改动需求是让开发人员很头痛的一件事。但是,实践告诉我们,需求的改动往往是不可避免的。这就要求我们采用科学的产品控制技术来顺应这种要求。其中主要是实行基准配置管理(又称为变动控制),即凡是修改软件的建议,尤其是涉及对基准配置的修改,都必须按规定进行严格的评审,评审通过后才能实施。这里的“基准配置”指的是经过阶段评审后的软件配置成分及各阶段产生的文档或程序代码等。当需求变动时,其他各个阶段的文档或代码都要随之相应变动,以保证软件系统的一致性。
4.采用有效的开发技术原则
采用先进的软件分析与设计技术既可以提高软件系统开发与维护的效率,又可以提高软件系统的质量并减少维护的成本。
5.明确责任原则
软件系统是一种逻辑产品,软件开发小组的工作进展情况可见性差,难以评价和管理。为更好地进行管理,应根据软件系统开发的总目标及完成期限,尽量明确地规定开发小组的责任和软件产品标准,从而使所得到的标准能清楚地审查。
6.人员应少而精原则
开发人员的素质和数量是影响软件系统质量和开发效率的重要因素,应该少而精。事实上,高素质开发人员的工作效率比低素质开发人员的工作效率要高几倍到几十倍,开发工作中犯的错误也要少得多;当开发人员增加时,可能的通信信道会随着人数的增加而增大,而通信开销也将急剧增大。
7.不断改进开发过程原则
在软件系统的工程化生产中,我们不仅要积极采用新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据不仅可以用来评估新的软件技术的效果,还可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。