西门子KP700显示屏
软件维护阶段,它可以持续几年甚至几十年。软件在运行过程中可能会发现潜藏的错误,需要对它们进行诊断和改正,称为改正性维护;也可能是为了适应变化了的软件工作环境而需要做适应性维护;也可能是在软件漫长的运行时期,用户业务发生变化往往会对软件提出新的功能要求和性能要求,这种增加软件功能、增强软件性能的维护称为完善性维护;另外还有一些其他维护,如为了提高软件的可维护性和可靠性而对软件修改的预防性维护。。需求规格说明书应包括对软件的功能需求、性能需求、环境约束和外部接口等的描述。这些文档既是对用户确认的系统逻辑模型的描述,也是下一步进行设计的依据。
(2)概要设计
概要设计又称总体设计。这个阶段必须回答的关键问题是“怎么做”,即应该怎样实现目标系统。主要任务是将需求转变为软件的表示形式。开发人员要把确定的各项功能需求转换成需求的体系结构,即从需求规格说明书导出软件结构图,确定由哪些模块组成及模块之间的关系。同时还要设计该项目的应用系统的总体数据结构和数据库结构。
(3)详细设计
详细设计阶段不是编写程序,这个阶段的任务是要回答“应该怎样具体地实现这个系统”。为概要设计阶段得到的软件结构图中的每个模块完成的功能进行具体描述,要把功能描述转变为**的、结构化的过程描述,即确定实现模块功能所需要的算法和数据结构,并用相应的详细设计工具表示出来。
(4)编码
化为软件需求,把软件需求转化为设计,用代码来实现设计,对代码进行测试,完成各阶段的文档编制,并确认软件可以投入运行使用的过程。
1.3.2 软件生存周期
软件生存周期是借用工程中产品生存周期的概念而得来的,是指某一软件项目从被提出并着手实现开始,直到该软件报废或停止使用为止所经历的时间。生存周期是软件工程的一个重要概念,把整个生存周期划分为若干个阶段,是实现软件生产工程化的重要步骤。赋予每个阶段相对独立的任务,每个阶段都有技术复审和管理复审,从技术和管理两方面对这个阶段的开发成果进行检查,及时决定系统是继续进行,还是停止或是返工。
软件的生存周期一般分为软件计划、软件开发和软件运行3个时期。软件计划时期一般有问题定义和可行性研究两个阶段;开发时期有需求分析、软件设计(包括概要设计、详细设计)、编码和测试4个阶段;运行时期主要是维护阶段。列出了一个典型的软件生存周期。下面结合该图说明软件生存周期各阶段的主要任务。结构复杂的软件开发,因此产生了尖锐的矛盾,所谓的“软件危机”便由此产生了。
IBM公司的360 OS和美国空军后勤系统,在开发过程中都花费了几千人/年的工作量,西门子后以失败告终。其中360 OS由4000个模块组成,共约100万条指令,花费了5000人/年的工作量,经费达数千万美元,拖延几年才交付使用,交付使用后每年发现近100个错误,结果以失败告终。360 OS开发负责人Broo
泥潭中的命运……程序设计就像这样的泥潭,一批批程序员在泥潭中挣扎……没有料到问题会这样棘手……”。比360 OS更糟的软件系统并不少,即花费大量的人力、物力、财力结果半途而废,或者说完成之日就是遗弃之时。这就是人们常说的“软件危机”。
3.软件工程时代
1968 年至今为软件工程年代,或者程序+文档时代。这个时代硬件发展的特点是集成电路计算机发展到超大规模集成电路计算机,高性能低成本的微处理机大量出现,硬件速度的发展已经超过人们提供支持软件的能力。然而,硬件只提供了潜在的计算能力,对于复杂的大型软件开发项目,需要十分复杂的计算机软件才能实现。也就是说,如果没有软件来驾驭和开发的这种能力,人类并不能有效地使用计算机。在这个时代,软件维护费用、软件价格不断上升,没有完全摆脱软件危机。
软件产品是一种逻辑产品,软件开发工作的进度情况可见性差,很难准确度量,使得软件产品的开发过程比一般产品的开发过程更难以评价和管理。为了提高软件开发过程的可见性,更好地进行组织和管理,应该根据软件产品的总目标及完成期限,规定开发人员的责任和各阶段产品标准,从而使得软件开发每一阶段所得到的结果能够清楚地审查。
(6)开发小组人员应该少而精
B.W.Boehm总结多年从事软件开发的实践经验得出这条基本原理,其含义是,开发小组的组成人员应该具有高素质、高水平,而人数不宜太多。软件开发组人员的素质和数量是影响软件产品质量和开发效率的关键因素。
(7)承认不断改进软件工程实践的必要性