1、软件开发流程实训教程第第1 1章章 软件开发项目的前期准备软件开发项目的前期准备【本章引言】【本章引言】软件开发在整个计算机软件的生存周期中是最重要的一软件开发在整个计算机软件的生存周期中是最重要的一环。如何高效、高质的开发成功的软件产品一直是软件环。如何高效、高质的开发成功的软件产品一直是软件工程师们一直追求的目标。经过半个多世纪的研究与探工程师们一直追求的目标。经过半个多世纪的研究与探索,人们在计算软件开发领域已经积累了丰富的经验与索,人们在计算软件开发领域已经积累了丰富的经验与成果。成果。【教学目标】【教学目标】掌握计算机软件的概念与计算机软件的基本分类;掌握计算机软件的概念与计算机软件
2、的基本分类;掌握软件生存周期划分与相关档案掌握软件生存周期划分与相关档案 的内容;的内容;掌握常用软件开发模型;掌握常用软件开发模型;掌握计算机软件开发方法。掌握计算机软件开发方法。第一章第一章 软件开发项目的前期准备软件开发项目的前期准备 1.1 计算机软件概述计算机软件概述 1.2 软件的生存周期软件的生存周期 1.3 软件开发常用模型软件开发常用模型 1.4 软件开发方法和软件开发工具软件开发方法和软件开发工具 1.1 计算机软件概述计算机软件概述 1.1.1 计算机软件概念计算机软件概念 1.1.2 软件的分类软件的分类 1.1.3 软件工程的历史及发展软件工程的历史及发展 1.1 计
3、算机软件概述计算机软件概述 软件软件是一个完整的计算机系统中与是一个完整的计算机系统中与硬件相互依存的另一部分,它是包括硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序,数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档序能正常操纵信息的数据结构;文档是与程序开发,维护和使用有关的图是与程序开发,维护和使用有关的图文材料。文材料。1.1.1 计算机软件概念计算机软件概念 软件软件是计算机系统中与硬件相互依存的另一部是计算机系统中与硬件相
4、互依存的另一部分,它是包括程序,数据及其相关文档的完整分,它是包括程序,数据及其相关文档的完整集合。集合。计算机软件计算机软件是指计算机程序以及解释和指导是指计算机程序以及解释和指导使用程序的文档的总和。计算机程序包括源程使用程序的文档的总和。计算机程序包括源程序和目标程序。序和目标程序。1.1.1 计算机软件概念计算机软件概念 源程序源程序是指用高级语言或汇编语言编写是指用高级语言或汇编语言编写的程序,目标程序是指源程序经编译的程序,目标程序是指源程序经编译或解释加工以后,语言编写的程序,或解释加工以后,语言编写的程序,目标程序是指源程序经编译或解释加目标程序是指源程序经编译或解释加工以后可
5、以由计算机直接执行的程序。工以后可以由计算机直接执行的程序。文档文档是指用自然语言或者形式化语言所是指用自然语言或者形式化语言所编写的文字资料和图表,用来描述程编写的文字资料和图表,用来描述程序的内容、组成、设计、功能规格、序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法。开发情况、测试结果及使用方法。1.1.1 计算机软件概念计算机软件概念 软件开发的特点是:软件开发的特点是:(1)由于软件并不是实际存在的物理形态由于软件并不是实际存在的物理形态 它是一种抽象的逻辑过程,是一种逻辑实体,它是一种抽象的逻辑过程,是一种逻辑实体,这个特点使它与其它工程对象有着明显的差异。这个特点使它
6、与其它工程对象有着明显的差异。人们可以把它记录在纸上、内存、和硬盘、光人们可以把它记录在纸上、内存、和硬盘、光盘上,但却无法看到软件本身的形态,必须通盘上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功过观察、分析、思考、判断,才能了解它的功能、性能等特性。能、性能等特性。1.1.1 计算机软件概念计算机软件概念 (2)(2)软件的生产过程也非常特殊,同我们传软件的生产过程也非常特殊,同我们传统意义里的普通工厂里的加工不同的是,软件统意义里的普通工厂里的加工不同的是,软件更像是一种纯粹的脑力劳动,同第一个特点一更像是一种纯粹的脑力劳动,同第一个特点一样它没有明显的物
7、理加工过程。样它没有明显的物理加工过程。(3)(3)由于软件产品其实是一种抽象的逻辑存由于软件产品其实是一种抽象的逻辑存在,所以在软件的运行和使用期间,没有硬件在,所以在软件的运行和使用期间,没有硬件那样的机械磨损,设施老化问题。那样的机械磨损,设施老化问题。1.1.1 计算机软件概念计算机软件概念 任何物理设备在运行和使用中,都有一个大致趋任何物理设备在运行和使用中,都有一个大致趋势相同的失效率曲线。即为如图势相同的失效率曲线。即为如图1-1(a)1-1(a)所示的型曲所示的型曲线(即浴盆曲线)。在这个曲线里边我们可以看出随线(即浴盆曲线)。在这个曲线里边我们可以看出随着使用时间的增加设备的
8、失效率主要是由磨损用坏造着使用时间的增加设备的失效率主要是由磨损用坏造成的。而软件的情况与此不同,由于其固有的特性,成的。而软件的情况与此不同,由于其固有的特性,本身不存在磨损和老化问题,即便是他的载体出现本身不存在磨损和老化问题,即便是他的载体出现型曲线,软件本身仍然可以便利的移到另一台载体上型曲线,软件本身仍然可以便利的移到另一台载体上边。然而同物理设备不同的是它存在退化问题,说着边。然而同物理设备不同的是它存在退化问题,说着时间的增加,软件本身会出现落伍的现象,因此必须时间的增加,软件本身会出现落伍的现象,因此必须要对软件本身进行一次或多次修改(维护),要对软件本身进行一次或多次修改(维
9、护),如图如图1-1(b)1-1(b)所示。而这些修改又不可避免的引入所示。而这些修改又不可避免的引入错误,导致软件失效率升高,从而似的软件退化。当错误,导致软件失效率升高,从而似的软件退化。当修改的成本变得难以接受时,软件就被抛弃。修改的成本变得难以接受时,软件就被抛弃。1.1.1 计算机软件概念计算机软件概念图图1-1 1-1 计算机软件失效率曲线计算机软件失效率曲线1.1.1 计算机软件概念计算机软件概念 (4)(4)软件的开发和运行不是完全由软件本软件的开发和运行不是完全由软件本身的技术实现的,它常常还受到计算机系身的技术实现的,它常常还受到计算机系统的限制,对计算机系统有着不同程度的
10、统的限制,对计算机系统有着不同程度的依赖性。软件对硬件和环境有着不同程度依赖性。软件对硬件和环境有着不同程度的依赖性。这导致了软件移植的问题的依赖性。这导致了软件移植的问题1.1.1 计算机软件概念计算机软件概念(5)(5)软件本身是一件结构非常复杂的产品。软件本身是一件结构非常复杂的产品。软件的复杂性来自于两个方面:软件的复杂性来自于两个方面:一是来自它所反映的实际问题的复杂性(即需要解一是来自它所反映的实际问题的复杂性(即需要解决问题的复杂性)决问题的复杂性)二是来自软件本身设计程序逻辑结构的复杂性二是来自软件本身设计程序逻辑结构的复杂性 1.1.1 计算机软件概念计算机软件概念(6)(6
11、)软件的成本问题。软件的成本问题。软件开发成本主要指软件开发过程中软件开发成本主要指软件开发过程中所花费的工作量及相应的代价。所花费的工作量及相应的代价。另外,软件也没有一个明显的制造另外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程,它的开发成本是以一次性开发过程所花费的代价来计算的。软件的过程所花费的代价来计算的。软件的研制工作需要投入大量的、复杂的、研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高强度的脑力劳动,它的成本是比较高的。高的。1.1.1 计算机软件概念计算机软件概念 (7)(7)软件开发出来时要给软件开发出来时要给“人人”使用的,使用的,所以
12、软件不可避免地要具备人的社会属所以软件不可避免地要具备人的社会属性。性。相当多的软件工作涉及到社会因素。相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构、体制许多软件的开发和运行涉及机构、体制及管理方式等问题,甚至涉及到人的观及管理方式等问题,甚至涉及到人的观念和人们的心理。这些问题都将直接影念和人们的心理。这些问题都将直接影响项目的成败。响项目的成败。1.1.2 软件的分类软件的分类 软件软件是计算机的灵魂,没有软件的计算机是计算机的灵魂,没有软件的计算机就如同没有磁带的录音机和没有录像带的就如同没有磁带的录音机和没有录像带的录像机一样,与废铁没什么差别。录像机一样,与废铁没什么
13、差别。它使计它使计算机具有非凡的灵活性和通用性。算机具有非凡的灵活性和通用性。也正是这一原因,决定了计算机的任何动作也正是这一原因,决定了计算机的任何动作都离不开由人安排的指令。都离不开由人安排的指令。1.1.2 软件的分类软件的分类 1.1.按软件的功能进行划分:按软件的功能进行划分:一般把软件按功能分为两大类:应一般把软件按功能分为两大类:应用软件和系统软件。用软件和系统软件。(1 1)应用软件)应用软件(2 2)系统软件)系统软件 1.1.2 软件的分类软件的分类(1 1)应用软件)应用软件 应用软件是专门为某一应用目的而编制的软件,应用软件是专门为某一应用目的而编制的软件,较常见的有以
14、下几种:较常见的有以下几种:文字处理软件文字处理软件 用于输入、存贮、修改、编辑、打印文字材料等,例用于输入、存贮、修改、编辑、打印文字材料等,例如如WORDWORD、WPSWPS等;等;信息管理软件信息管理软件 用于输入、存贮、修改、检索各种信息;用于输入、存贮、修改、检索各种信息;辅助设计软件辅助设计软件 用于高效地绘制、修改工程图纸,进行设计中的常规用于高效地绘制、修改工程图纸,进行设计中的常规算,帮助人寻求好设计方案;算,帮助人寻求好设计方案;实时控制软件实时控制软件用于随时搜集生产装置、飞行器等的运行状态信息,用于随时搜集生产装置、飞行器等的运行状态信息,以此为依据按预定的方案实施自
15、动或半自动控制,以此为依据按预定的方案实施自动或半自动控制,安全、准确地完成任务。安全、准确地完成任务。1.1.2 软件的分类软件的分类(2 2)系统软件)系统软件 代表性的系统软件有:代表性的系统软件有:操作系统操作系统 管理计算机的硬件设备,使应用软件能方便、高效地管理计算机的硬件设备,使应用软件能方便、高效地使用这些设备。在微机上常见的有:使用这些设备。在微机上常见的有:DOSDOS、WINDOWSWINDOWS、UNIXUNIX、OS/2OS/2等;等;数据库管理系统数据库管理系统 有组织地、动态地存贮大量数据,使人们能方便、高有组织地、动态地存贮大量数据,使人们能方便、高效地使用这些
16、数据。现在比较流行的数据库有效地使用这些数据。现在比较流行的数据库有FoxProFoxPro、DB-2DB-2、AccessAccess、SQL-serverSQL-server等;等;编译软件编译软件 CPUCPU执行每一条指令都只完成一项十分简单的操作,一执行每一条指令都只完成一项十分简单的操作,一个系统软件或应用软件,要由成千上万甚至上亿条指个系统软件或应用软件,要由成千上万甚至上亿条指令组合而成。令组合而成。1.1.2 软件的分类软件的分类 2.2.按软件规模进行划分:按软件规模进行划分:根据所完成任务的不同以及开发根据所完成任务的不同以及开发任务、投入资金等因素,软件也可以任务、投入
17、资金等因素,软件也可以按照规模来划分。按照规模来划分。(1 1)微型软件:)微型软件:这类软件一般只需要这类软件一般只需要一个人几天即可完成,软件只有几一个人几天即可完成,软件只有几K K到几十到几十K K大小。由于规模很小,软件大小。由于规模很小,软件测试也极为容易;测试也极为容易;1.1.2 软件的分类软件的分类(2 2)小型软件:)小型软件:这类软件一般由十人以内在半年这类软件一般由十人以内在半年内完成,开发前需要进行完整的开发设计。软内完成,开发前需要进行完整的开发设计。软件一般有几百件一般有几百K K到十几到十几M M。完成时需要进行软件。完成时需要进行软件测试工作,但测试工作相对比
18、较容易;测试工作,但测试工作相对比较容易;(3 3)中型软件:)中型软件:中型软件一般由十几个人甚至几中型软件一般由十几个人甚至几十个人开发,开发工作比较复杂,时限为半年十个人开发,开发工作比较复杂,时限为半年至一年。软件大小一般有几十至一年。软件大小一般有几十M M。对于这种规模。对于这种规模的软件软件测试十分必要。要进行严格的可行的软件软件测试十分必要。要进行严格的可行性分析,开发设计等工作;性分析,开发设计等工作;1.1.2 软件的分类软件的分类(4 4)大型软件:)大型软件:这类软件一般由几十人开发,开这类软件一般由几十人开发,开发工作十分复杂,时限为发工作十分复杂,时限为1 1年甚至
19、两年以上。年甚至两年以上。软件大小上百软件大小上百M M甚至几百甚至几百M M。这类软件开发前要。这类软件开发前要进行详细可行性分析、需求分析、开发设计等进行详细可行性分析、需求分析、开发设计等工作,软件测试要贯彻在开发全过程。这类软工作,软件测试要贯彻在开发全过程。这类软件交付使用后往往还要进行一次甚至多次维护件交付使用后往往还要进行一次甚至多次维护升级工作;升级工作;(5 5)超大型软件:)超大型软件:这类软件开发人员一般超过百这类软件开发人员一般超过百人甚至几百人开发,开发工作十分艰辛,开发人甚至几百人开发,开发工作十分艰辛,开发时限一般在时限一般在2 2年以上,这类软件小则几百年以上,
20、这类软件小则几百M M,大,大则甚至几则甚至几G G。1.1.2 软件的分类软件的分类 3.3.按软件工作方式划分:按软件工作方式划分:(1 1)实时处理软件:)实时处理软件:指在事件或数据产生时,立即指在事件或数据产生时,立即予以处理,并及时反馈信号,控制需要监测和控予以处理,并及时反馈信号,控制需要监测和控制的过程的软件。主要包括数据采集,分析,输制的过程的软件。主要包括数据采集,分析,输出三部分;出三部分;(2 2)分时软件:)分时软件:允许多个联机用户同时使用计算机;允许多个联机用户同时使用计算机;(3 3)交互式软件:)交互式软件:能实现人机通信的软件;能实现人机通信的软件;(4 4
21、)批处理软件:)批处理软件:把一组输入作业或一批数据以成把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理完的软批处理的方式一次运行,按顺序逐个处理完的软件。件。1.1.2 软件的分类软件的分类 4.4.按软件服务对象的范围划分:按软件服务对象的范围划分:(1 1)项目软件:)项目软件:也称定制软件,是受某个特定也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软软件开发机构在合同的约束下开发出来的软件。例如军用防空指挥系统、卫星控制系统;件。例如军用防空指挥系统、卫星控制系统;(2 2)产品
22、软件:)产品软件:是由软件开发机构开发出来直是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软接提供给市场,或是为千百个用户服务的软件。例如,文字处理软件、文本处理软件、件。例如,文字处理软件、文本处理软件、财务处理软件、人事管理软件等财务处理软件、人事管理软件等 1.1.3 软件工程的历史及发展软件工程的历史及发展 软件工程软件工程(Software EngineeringSoftware Engineering,简称为,简称为SESE)是针对软件这一具有特殊性质的产品的工是针对软件这一具有特殊性质的产品的工程化方法。软件工程涵盖了软件生存周期程化方法。软件工程涵盖了软件生存周
23、期的所有阶段,并提供了一整套工程化的方的所有阶段,并提供了一整套工程化的方法,来指导软件人员的工作。法,来指导软件人员的工作。1.1.3 软件工程的历史及发展软件工程的历史及发展 1.1.软件工程的含义软件工程的含义 “软件工程”是科学和数学的某种应用,通过这一应用,使计算机设备的能力借助于计算机程序、过程和有关文档成为对人类有用的东西。软件工程的成果是为软件设计和开发人员提供思想方法和工具,而软件开发是一项需要良好组织,严密管理且各方面人员配合协作的复杂工作,软件工程正是指导这项工作的一门科学。1.1.3 软件工程的历史及发展软件工程的历史及发展 软件工程应该包括哪些知识?软件工程应该包括哪
24、些知识?IEEEIEEE在软件在软件工程知识体系指南(工程知识体系指南(SEWBOKSEWBOK:Guide to Guide to the Software Engineering Body of the Software Engineering Body of Knowledge 2004VersionKnowledge 2004Version)中这样定义:)中这样定义:软件开发、实施、维护的系统化、规范化、软件开发、实施、维护的系统化、规范化、质量化的方法的应用,也就是软件的应用质量化的方法的应用,也就是软件的应用工程;工程;对上述方法的研究。对上述方法的研究。1.1.3 软件工程的历史
25、及发展软件工程的历史及发展 2.2.软件开发的三个历史阶段软件开发的三个历史阶段:第一个阶段是二十世纪第一个阶段是二十世纪5050年代到年代到6060年代,年代,是程序设计阶段,基本是个体手工劳动的是程序设计阶段,基本是个体手工劳动的生产方式。生产方式。第二阶段是二十世纪第二阶段是二十世纪6060年代到年代到7070年代,年代,是软件设计阶段,小组合作生产方式。是软件设计阶段,小组合作生产方式。第三个阶段是从二十世纪八十年代止今,第三个阶段是从二十世纪八十年代止今,为软件工程时代为软件工程时代 ,是工程化的生产方式。,是工程化的生产方式。1.1.3 软件工程的历史及发展软件工程的历史及发展 3
26、.3.软件危机软件危机 早期出现的软件危机主要表现在:早期出现的软件危机主要表现在:(1)(1)软件开发费用和进度失控。费用超支、进度拖延软件开发费用和进度失控。费用超支、进度拖延的情况屡屡发生。的情况屡屡发生。(2)(2)软件的可靠性差。尽管耗费了大量的人力物力,软件的可靠性差。尽管耗费了大量的人力物力,而系统的正确性却越来越难以保证,出错率大大增而系统的正确性却越来越难以保证,出错率大大增加,由于软件错误而造成的损失十分惊人;加,由于软件错误而造成的损失十分惊人;(3)(3)生产出来的软件难以维护。很多程序缺乏相应的生产出来的软件难以维护。很多程序缺乏相应的文档资料,程序中的错误难以定位,
27、难以改正,有文档资料,程序中的错误难以定位,难以改正,有时改正了已有的错误又引入新的错误。时改正了已有的错误又引入新的错误。1.1.3 软件工程的历史及发展软件工程的历史及发展 进入进入8080年代以来,尽管软件工程研年代以来,尽管软件工程研究与实践取得了可喜的成就,软件技术究与实践取得了可喜的成就,软件技术水平有了长足的进展,但是软件生产水水平有了长足的进展,但是软件生产水平依然远远落后于硬件生产水平的发展平依然远远落后于硬件生产水平的发展速度。危机不仅没有消失,还有加剧之速度。危机不仅没有消失,还有加剧之势。主要表现在:势。主要表现在:(1)(1)软件成本在计算机系统总成本中所占软件成本在
28、计算机系统总成本中所占的比例居高不下,且逐年上升。的比例居高不下,且逐年上升。(2)(2)软件开发生产率提高的速度远远跟不软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的需要,软上计算机应用迅速普及深入的需要,软件产品供不应求的状况使得人类不能充件产品供不应求的状况使得人类不能充分利用现代计算机硬件所能提供的巨大分利用现代计算机硬件所能提供的巨大潜力。潜力。1.1.3 软件工程的历史及发展软件工程的历史及发展 IBM360IBM360操作系统的历史教训已成为软件开发项操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。目中的典型事例被记入历史史册。出现这种现出现这种现象的
29、主要原因是:象的主要原因是:(1)(1)用户需求不明确。软件开发过程中,用户需求不明用户需求不明确。软件开发过程中,用户需求不明确问题主要体现在四个方面:确问题主要体现在四个方面:在软件开发出来之前,用户自己也不清楚软件开发在软件开发出来之前,用户自己也不清楚软件开发的具体需求;的具体需求;用户对软件开发需求的描述不精确,可能有遗漏、用户对软件开发需求的描述不精确,可能有遗漏、有二义性、甚至有错误;有二义性、甚至有错误;在软件开发过程中,用户还提出修改软件开发功能、在软件开发过程中,用户还提出修改软件开发功能、界面、支撑环境等方面的要求;界面、支撑环境等方面的要求;软件开发人员对用户需求的理解
30、与用户本来愿望有软件开发人员对用户需求的理解与用户本来愿望有差异。差异。1.1.3 软件工程的历史及发展软件工程的历史及发展 (2)(2)缺乏正确的理论指导。缺乏有力的方法学和工具缺乏正确的理论指导。缺乏有力的方法学和工具方面的支持。由于软件开发不同于大多数其他工业产方面的支持。由于软件开发不同于大多数其他工业产品,其开发过程是复杂的逻辑思维过程,其产品极大品,其开发过程是复杂的逻辑思维过程,其产品极大程度地依赖于开发人员高度的智力投入。程度地依赖于开发人员高度的智力投入。(3)(3)软件开发规模越来越大。随着软件开发应用范围软件开发规模越来越大。随着软件开发应用范围的增广,软件开发规模愈来愈
31、大。大型软件开发项目的增广,软件开发规模愈来愈大。大型软件开发项目需要组织一定的人力共同完成,而多数管理人员缺乏需要组织一定的人力共同完成,而多数管理人员缺乏开发大型软件开发系统的经验,而多数软件开发人员开发大型软件开发系统的经验,而多数软件开发人员又缺乏管理方面的经验。又缺乏管理方面的经验。(4)(4)软件开发复杂度越来越高。软件开发不仅仅是在软件开发复杂度越来越高。软件开发不仅仅是在规模上快速地发展扩大,而且其复杂性也急剧地增加规模上快速地发展扩大,而且其复杂性也急剧地增加.l 1.2.1 1.2.1 软件生存周期及各阶段软件生存周期及各阶段的工作的工作l 1.2.2 1.2.2 软件生存
32、周期各阶段的软件生存周期各阶段的文档编制文档编制 1.2 软件的生存周期软件的生存周期 1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作 软件生存周期的各个阶段软件生存周期的各个阶段的划分并没有一成不变的划分并没有一成不变的法则,不同的开发方式、软件种类、软件规模和的法则,不同的开发方式、软件种类、软件规模和开发环境都会在不同程度上影响软件生存周期各阶开发环境都会在不同程度上影响软件生存周期各阶段的划分,但无论最终把生存周期如何根据自己的段的划分,但无论最终把生存周期如何根据自己的实际情况进行划分,都是旨在更好的利用手中的资实际情况进行划分,都是旨在更好的利用手中的资源(主要指
33、人力资源、软件资源、技术资源和源码源(主要指人力资源、软件资源、技术资源和源码资源),降低软件的开发风险、复杂度和开发成本资源),降低软件的开发风险、复杂度和开发成本(主要以开发的时间和投入资源为衡量标准),要(主要以开发的时间和投入资源为衡量标准),要做到最好的对软件生存周期各阶段进行划分,就必做到最好的对软件生存周期各阶段进行划分,就必须遵循一条基本的原则,那就是在各阶段的任务应须遵循一条基本的原则,那就是在各阶段的任务应尽可能的相对独立,同一阶段各项任务的性质应尽尽可能的相对独立,同一阶段各项任务的性质应尽可能的相同,从而达到降低每个阶段任务的复杂度,可能的相同,从而达到降低每个阶段任务
34、的复杂度,减少不同阶段任务之间的联系。这样作对软件项目减少不同阶段任务之间的联系。这样作对软件项目开发的组织管理是十分有必要的,同时对最终的软开发的组织管理是十分有必要的,同时对最终的软件项目开发成功是不可或缺的。件项目开发成功是不可或缺的。既然软件开发周期这么重要,我们既然软件开发周期这么重要,我们想要软件项目最终开发取得成功或是想要软件项目最终开发取得成功或是对软件进行管理和资源投入,我们就对软件进行管理和资源投入,我们就应当充份的了解周期里各个活动的定应当充份的了解周期里各个活动的定义和任务,才能合理,准确,客观的义和任务,才能合理,准确,客观的安排每一阶段的工作,以下就对各种安排每一阶
35、段的工作,以下就对各种活动的定义和任务做一下简单介绍,活动的定义和任务做一下简单介绍,使之对它们有一个初步的了解。使之对它们有一个初步的了解。1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作 1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作 1.1.可行性分析和项目开发计划可行性分析和项目开发计划 这两个活动通常被整合在一起进行,在实际工作中通这两个活动通常被整合在一起进行,在实际工作中通常把它们归类到同一个阶段中。常把它们归类到同一个阶段中。在这个阶段中经验起到了决定性的作用,接下来在这个阶段中经验起到了决定性的作用,接下来的任务就是制定详细的项目开发计划,项
36、目开发计划的任务就是制定详细的项目开发计划,项目开发计划主要根据所开发的项目的目标、性能、功能、规模来主要根据所开发的项目的目标、性能、功能、规模来确定所需的资源,主要包括三个方面,即硬件资源、确定所需的资源,主要包括三个方面,即硬件资源、软件资源和人力资源,除此之外还有对项目的开发费软件资源和人力资源,除此之外还有对项目的开发费用,开发进度做出估计,可供决策者和用户参考。用,开发进度做出估计,可供决策者和用户参考。至此,本阶段的工作任务已基本完成,这时候系至此,本阶段的工作任务已基本完成,这时候系统分析员应将统分析员应将可行性报告可行性报告和和项目开发计划项目开发计划一一并提交管理部门审查。
37、并提交管理部门审查。1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作2.2.需求分析需求分析 需求分析的难点主要体现在以下几个方面:需求分析的难点主要体现在以下几个方面:(1 1)问题的复杂性;)问题的复杂性;(2 2)交流障碍;)交流障碍;(3 3)用户对问题的陈述不完备性和不一致)用户对问题的陈述不完备性和不一致性;性;(4 4)需求易变性。)需求易变性。1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作 针对需求分析人们提出了许多解决方法和针对需求分析人们提出了许多解决方法和自动化分析工具,如结构化分析方法和自动化分析工具,如结构化分析方法和面向对象分析方法
38、,面向对象分析方法,CASECASE技术等等。解技术等等。解决问题的方法有许多,但都决问题的方法有许多,但都要遵循一些要遵循一些基本的原则:基本的原则:(1 1)可以把一个复杂问题按照某种分解)可以把一个复杂问题按照某种分解方式进行分解并可逐层细化;方式进行分解并可逐层细化;(2 2)必须能够表达和理解问题的数据域)必须能够表达和理解问题的数据域和功能域;和功能域;(3 3)必须具有良好的模型建立能力,能)必须具有良好的模型建立能力,能够准确的把问题用够准确的把问题用“图表图表”的形式表达的形式表达出来。出来。1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作 其实最终的目标就是
39、为了用户的需要,回其实最终的目标就是为了用户的需要,回答这个系统要答这个系统要“做什么做什么”的问题。具体的问题。具体如下:如下:(1 1)问题识别)问题识别 功能需求功能需求 性能需求性能需求 环境需求环境需求 用户界面需求用户界面需求 (2 2)分析与综合,导出软件的逻辑模型)分析与综合,导出软件的逻辑模型 (3 3)编写文档)编写文档 1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作3.3.概要设计概要设计 概要设计的基本任务如下:概要设计的基本任务如下:(1 1)设计软件系统的逻辑结构。)设计软件系统的逻辑结构。(2 2)设计软件所需要的数据库系统)设计软件所需要的数据
40、库系统 (3 3)编写概要设计文档)编写概要设计文档 (4 4)评审)评审 软件概要设计的几个基本原理:软件概要设计的几个基本原理:(1 1)抽象)抽象 (2 2)信息隐蔽)信息隐蔽(3 3)模块化)模块化 1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作4.4.详细设计详细设计 程序员会根据这些过程描述来编写程序代码,具程序员会根据这些过程描述来编写程序代码,具体如下:体如下:(1 1)为每个模块进行详细的算法设计。这是需要用)为每个模块进行详细的算法设计。这是需要用相应的工具来完成的,因为自然语言通常很容易相应的工具来完成的,因为自然语言通常很容易具有具有“二义性二义性”,
41、而工具能做到含义唯一性;,而工具能做到含义唯一性;(2 2)为模块内的数据结构进行设计;)为模块内的数据结构进行设计;(3 3)对数据库进行物理设计。注意这不是实现数据)对数据库进行物理设计。注意这不是实现数据库,而是设计出数据库的具体物理结构;库,而是设计出数据库的具体物理结构;(4 4)其它设计(前期特殊代码设计、)其它设计(前期特殊代码设计、I/OI/O格式设计、格式设计、界面友好设计等);界面友好设计等);(5 5)编写详细设计说明书;)编写详细设计说明书;(6 6)评审。)评审。1.2.1 软件生存周期及各阶段的工作软件生存周期及各阶段的工作5.5.编写代码编写代码 6.6.软件测试
42、软件测试 7.7.软件实施软件实施8.8.软件维护软件维护 软件的维护一般的流程如下:软件的维护一般的流程如下:(1 1)确定维护的类型;)确定维护的类型;(2 2)对校正性维护要从评价错误的严重性开始;)对校正性维护要从评价错误的严重性开始;(3 3)对适应性维护和完善性维护可以视业务繁忙情况而)对适应性维护和完善性维护可以视业务繁忙情况而定,也有条件制定比较完善的维护计划;定,也有条件制定比较完善的维护计划;(4 4)实施维护工作,要确保维护是必要和安全的;)实施维护工作,要确保维护是必要和安全的;(5 5)维护回顾,看看有没有什么地方做的不对或遗漏的;)维护回顾,看看有没有什么地方做的不
43、对或遗漏的;(6 6)编写详细的维护日志。)编写详细的维护日志。1.2.2 软件生存周期各阶段的文软件生存周期各阶段的文档编制档编制软件生存周期各阶段交付文档如表软件生存周期各阶段交付文档如表1-11-1所示:所示:1.1.可行性研究报告可行性研究报告 8.8.用户手册用户手册2.2.项目开发计划项目开发计划 9.9.操作手册操作手册3.3.软件需求说明书软件需求说明书 10.10.模块开发卷宗模块开发卷宗4.4.数据要求说明书数据要求说明书 11.11.测试计划测试计划5.5.总体设计说明书总体设计说明书 12.12.测试分析报告测试分析报告6.6.详细设计说明书详细设计说明书 13.13.
44、开发进度月报开发进度月报7.7.数据库设计说明书数据库设计说明书 14.14.项目开发总结报告项目开发总结报告文档文档可行性研究可行性研究与计划与计划需求分需求分析析总体总体设计设计详细详细设计设计系统实系统实现现集成测集成测试试确认测确认测试试使用与使用与维护维护1 1 可行性研究报告可行性研究报告Y YN NN NN NN NN NN NN N2 2 项目开发计划项目开发计划Y YY YN NN NN NN NN NN N3 3 软件需求说明书软件需求说明书N NY YN NN NN NN NN NN N4 4 数据要求说明书数据要求说明书N NY YN NN NN NN NN NN N5
45、 5 测试计划测试计划N NY YY YN NN NN NN NN N6 6 总体设计说明书总体设计说明书N NN NY YN NN NN NN NN N7 7 详细设计说明书详细设计说明书N NN NN NY YN NN NN NN N8 8 数据库设计说明书数据库设计说明书N NN NY YN NN NN NN NN N9 9 模块开发卷宗模块开发卷宗N NN NN NN NY YY YN NN N10 10 用户手册用户手册N NY YY YY YY YN NN NN N11 11 操作手册操作手册N NN NY YY YY YN NN NY Y12 12 测试分析报告测试分析报告N N
46、N NN NN NN NT TT TN N13 13 开发进度月报开发进度月报Y YY YY YY YY YY YY YN N14 14 项目开发总结项目开发总结N NN NN NN NN NN NY YY Y15 15 维护记录维护记录N NN NN NN NN NN NN NY Y表1-1 软件生存周期各阶段交付文档【说明】:表1-1中前14类文档是国家标准软件产品开发文件编制指南所建议的。1.3 软件开发常用模型软件开发常用模型 1.3.1 1.3.1 瀑布模型瀑布模型 1.3.2 1.3.2 增量模型增量模型 1.3.3 1.3.3 螺旋模型螺旋模型 1.3.4 1.3.4 变换模型变
47、换模型 1.3.5 1.3.5 喷泉模型喷泉模型 1.3.6 1.3.6 智能模型智能模型 1.3.7 WINWIN1.3.7 WINWIN模型模型 1.3.8 1.3.8 原型实现模型原型实现模型 1.3.9 RAD1.3.9 RAD模型模型 1.3.10 1.3.10 并发开发模型并发开发模型 1.3.11 1.3.11 软件开发常用模型小结软件开发常用模型小结 1.3.1 瀑布模型瀑布模型采用瀑布模型的软件过程如图采用瀑布模型的软件过程如图1-21-2所示。所示。图1-2 软件生存周期的瀑布模型 1.3.2 增量模型增量模型采用增量模型的软件过程如图采用增量模型的软件过程如图1-31-3
48、所示。所示。图1-3 采用增量模型的软件过程 1.3.3 螺旋模型螺旋模型图1-4 螺旋模型螺旋模型沿着螺线旋转,如图螺旋模型沿着螺线旋转,如图1-41-4所示所示 1.3.3 螺旋模型螺旋模型采用螺旋模型的软件过程如图采用螺旋模型的软件过程如图1-51-5所示所示图图1-5 采用螺旋模型的软件过程采用螺旋模型的软件过程 1.3.4 变换模型变换模型采用变换模型的软件过程如图采用变换模型的软件过程如图1-61-6所示所示图图1-6 1-6 采用变换模型的软件过程采用变换模型的软件过程 1.3.5 喷泉模型喷泉模型采用喷泉模型的软件过程如图采用喷泉模型的软件过程如图1-71-7所示所示图图1-7
49、 1-7 采用喷泉模型的软件过程采用喷泉模型的软件过程 1.3.6 智能模型智能模型采用智能模型的软件过程如图采用智能模型的软件过程如图1-81-8所示所示图图1-8 1-8 采用智能模型的软件过程采用智能模型的软件过程 1.3.7 WINWIN WINWIN模型模型采用采用WINWINWINWIN模型的软件过程如图模型的软件过程如图1-91-9所示所示图图1-9 1-9 采用采用WINWINWINWIN模型的软件过程模型的软件过程 1.3.8 原型实现模型原型实现模型采用原型实现模型的软件过程如图采用原型实现模型的软件过程如图1-101-10所示所示图图1-10 1-10 采用原型实现模型的
50、软件过程采用原型实现模型的软件过程 1.3.9 RAD RAD模型模型采用采用RADRAD模型的软件过程如图模型的软件过程如图1-111-11所示所示图图1-11 1-11 采用采用RADRAD模型的软件过程模型的软件过程 1.3.10 并发开发模型并发开发模型采用并发开发模型的软件过程中一个活动的示意如图采用并发开发模型的软件过程中一个活动的示意如图1-121-12所示所示图图1-12 1-12 并发过程模型的一个活动并发过程模型的一个活动1.3.11 软件开发常用模型小结软件开发常用模型小结软件过程模型发展经历了以下阶段:软件过程模型发展经历了以下阶段:(1)(1)以软件需求完全确定为前提