1、第第1章章 概述概述 软件,已处于信息技术的核心位置,软软件,已处于信息技术的核心位置,软件产业,已成为信息产业中独立的支柱产业,件产业,已成为信息产业中独立的支柱产业,软件业的发展造就了一个个软件业的发展造就了一个个“童话童话”。软件。软件工厂成为了科技时代的浪尖。工厂成为了科技时代的浪尖。自从自从19681968年首次软件工程一词以来,软件年首次软件工程一词以来,软件工程已成为计算机软件的一个重要分支和研工程已成为计算机软件的一个重要分支和研究方向。究方向。第第1章章 概述概述 工程将理论和所学的知识应用于实践的科学。工程将理论和所学的知识应用于实践的科学。软件工程应用计算机科学、数学及管
2、理科学等原理,软件工程应用计算机科学、数学及管理科学等原理,开发软件的工程。它借鉴传统工程的原则、方法,以提高质量开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。其中,计算机科学、数学用于构造模型与,降低成本为目的。其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。衡,管理科学用于计划、资源、质量、成本等管理。软件工程是一门交叉性学科。软件工程是一门交叉性学科。软件工程的主要内容软件工程的主要内容 软件工程的基本概念软件工程的基本概
3、念 软件开发模型软件开发模型 软件开发各阶段的任务、技术、方法软件开发各阶段的任务、技术、方法 软件过程软件过程 软件工具软件工具 软件工程管理软件工程管理 软件质量保证软件质量保证 软件工程环境软件工程环境 软件经济学软件经济学软件的概念软件的概念 程序、软件与软件产品程序、软件与软件产品独唱独唱-小合唱小合唱-合唱合唱-万人大合唱万人大合唱|简单程序简单程序 较复杂程序较复杂程序 软件软件 软件定义:软件定义:软件软件=程序程序+数据数据+文档文档程序:按事先设计的功能和性能需求执行的指令序列程序:按事先设计的功能和性能需求执行的指令序列数据:是程序能正常操纵信息的数据结构数据:是程序能正
4、常操纵信息的数据结构文档:与程序开发、维护和使用有关的图文材料文档:与程序开发、维护和使用有关的图文材料 软件的特点软件的特点 软件是逻辑实体。具有抽象性。软件的形态不软件是逻辑实体。具有抽象性。软件的形态不可见,必须通过观察、分析、思考、判断来了解其可见,必须通过观察、分析、思考、判断来了解其功能、性能和其它特性。功能、性能和其它特性。软件是人脑思维的产物,其生产过程与硬件不同软件是人脑思维的产物,其生产过程与硬件不同开发过程的质量控制及软件产品保护问题。开发过程的质量控制及软件产品保护问题。软件的开发和运行受计算机系统限制软件移软件的开发和运行受计算机系统限制软件移植问题。植问题。软件的开
5、发技术落后,手工开发方式仍占统治地软件的开发技术落后,手工开发方式仍占统治地位,开发效率低。位,开发效率低。软件的特点软件的特点软件的失效率与硬件不同。软件的失效率与硬件不同。失效率时间硬件失效率曲线失效率时间软件失效率曲线 软件的特点软件的特点软件的复杂性越来越高,对软件人员的要求越来越高,出现了软件的复杂性越来越高,对软件人员的要求越来越高,出现了软件复杂性与软件技术发展的不适应现象。软件复杂性与软件技术发展的不适应现象。软件复杂性差距软件需求与软件技术发展现状软件需求与软件技术发展现状软件需求时间软件技术软件技术进步落后于需求增长软件技术进步落后于需求增长 软件的特点软件的特点 软件的特
6、点软件的特点软件的开发研制成本高,自年代以来,已大大超过硬件成软件的开发研制成本高,自年代以来,已大大超过硬件成本。本。计算机系统软、硬件成本比例的变化情况计算机系统软、硬件成本比例的变化情况硬件年份年份软件年年年成本成本 软件的特点软件的特点相当多的软件工作涉及社会因素,如机构、体制、管理方式等,相当多的软件工作涉及社会因素,如机构、体制、管理方式等,包括人的观念及心理,都直接影响软件工作的成败。包括人的观念及心理,都直接影响软件工作的成败。软件的分类软件的分类按功能按功能按规模按规模按工作方式按工作方式按使用频度按使用频度按失效影响按失效影响系统软件支撑软件应用软件按服务对象按服务对象 软
7、件的分类软件的分类按功能按功能按规模按规模按工作方式按工作方式按使用频度按使用频度按失效影响按失效影响按服务对象按服务对象微型软件小型软件大型软件甚大型软件极大型软件 软件的分类软件的分类按功能按功能按规模按规模按工作方式按工作方式按使用频度按使用频度按失效影响按失效影响按服务对象按服务对象实时处理软件分时软件交互式软件批处理软件 软件的分类软件的分类按功能按功能按规模按规模按工作方式按工作方式按使用频度按使用频度按失效影响按失效影响按服务对象按服务对象产品软件项目软件 软件的分类软件的分类按功能按功能按规模按规模按工作方式按工作方式按使用频度按使用频度按失效影响按失效影响按服务对象按服务对象
8、使用频度低使用频度高 软件的分类软件的分类按功能按功能按规模按规模按工作方式按工作方式按使用频度按使用频度按失效影响按失效影响按服务对象按服务对象不良影响严重影响软件开发的发展过程软件开发的发展过程 程序设计阶段程序设计阶段 50至至60年代年代 程序系统阶段程序系统阶段 60至至70年代年代 软件工程阶段软件工程阶段 70年代以后年代以后计算机应用发展计算机应用发展软件数量多软件数量多规模大规模大软件成本高软件成本高质量低质量低个体化软件开发方法个体化软件开发方法软件维护困难软件维护困难软件危机软件危机软件工程软件工程软件危机软件危机 定义定义计算机软件的开发和维护过程所遇到的一系列严重问题
9、。计算机软件的开发和维护过程所遇到的一系列严重问题。表现表现 对软件开发成本和进度的估算很不准确对软件开发成本和进度的估算很不准确 用户很不满意用户很不满意 质量很不可靠质量很不可靠 没有适当的文档没有适当的文档 软件成本比重上升软件成本比重上升 供不应求:软件开发生产率跟不上计算机应用迅速深供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势入的趋势 软件危机软件危机 原因原因 客观:软件本身特点客观:软件本身特点 逻辑部件逻辑部件 规模庞大规模庞大 主观:不正确的开发方法主观:不正确的开发方法 忽视需求分析忽视需求分析 错误认为:软件开发错误认为:软件开发=程序编写程序编写 轻视软件维护
10、轻视软件维护软件危机软件危机 解决途径解决途径 组织管理组织管理 工程项目管理方法工程项目管理方法 技术措施技术措施 软件开发技术与方法软件开发技术与方法 软件工具软件工具 软件工程软件工程 为了解决软件危机,既要有技术措施(方法和工为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从具),又要有必要的组织管理措施。软件工程正是从管理和技术方面研究如何更好地开发和维护计算机软管理和技术方面研究如何更好地开发和维护计算机软件的学科。件的学科。定义定义:软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、软件工程是指导计算机软件开发和维护的工程学
11、科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来能够得到的最好的技术方法结合起来即软件工程。即软件工程。软件工程软件工程软件工程的基本原理软件工程的基本原理(自(自“软件工程软件工程”提出后,专家和学者们陆提出后,专家和学者们陆续提出了续提出了100多条关于软件工程的准则或多条关于软件工程的准则或“信条信条”,有专家归纳出了确保开发,有专家归纳出了确保开发质量和效率的原理的最小集合质量和效率的原理的最小集合7条基本原理):条基本原理):1)用分阶段的
12、生命周期严格管理;用分阶段的生命周期严格管理;2)坚持进行阶段评审;)坚持进行阶段评审;3)实行严格的产品控制;)实行严格的产品控制;4)采用现代程序设计技术;)采用现代程序设计技术;5)结果应能清楚地审查;)结果应能清楚地审查;6)开发小组人员应少而精;)开发小组人员应少而精;7)承认不断改进软件工程实践的必要性)承认不断改进软件工程实践的必要性。软件工程三要素软件工程三要素软件工程软件工程三个要素三个要素方法工具过程提供一系列软件开发技术。提供一系列软件开发技术。包括完成开发过程中各方面包括完成开发过程中各方面任务的方法并用某种特殊的任务的方法并用某种特殊的语言或图形来描述。语言或图形来描
13、述。软件工程三要素软件工程三要素软件工程软件工程三个要素三个要素方法工具过程软件工具为软件方法提供了自动软件工具为软件方法提供了自动的或半自动的支撑环境。将多种的或半自动的支撑环境。将多种工具集成在一起可构成计算机辅工具集成在一起可构成计算机辅助软件工程(助软件工程(CASE)的软件开的软件开发支撑系统。发支撑系统。软件工程三要素软件工程三要素软件工程软件工程三个要素三个要素方法工具过程软件过程是将软件工程的软件过程是将软件工程的方法和工具综合起来,进方法和工具综合起来,进行软件开发。行软件开发。方法、工具和过程:方法、工具和过程:软件工程方法为软件开发提供了软件工程方法为软件开发提供了 “如
14、何做如何做”的技术的技术 软件工具为软件工程方法提供了自动的或半自动的软件软件工具为软件工程方法提供了自动的或半自动的软件支撑环境支撑环境 软件工程过程定义了软件工程过程定义了:方法使用的顺序方法使用的顺序 要求交付的文档资料要求交付的文档资料 为保证质量和适应变化所需要的管理为保证质量和适应变化所需要的管理 软件开发各个阶段完成的里程碑软件开发各个阶段完成的里程碑软件工程的三要素软件工程的三要素软件工程项目的基本目标软件工程项目的基本目标 付出较低的开发成本付出较低的开发成本 达到要求的软件功能达到要求的软件功能 取得较好的软件性能取得较好的软件性能 开发的软件易于移植开发的软件易于移植 需
15、要较低的维护费用需要较低的维护费用 能按时完成开发工作,及时交付使用能按时完成开发工作,及时交付使用软件工程基本软件工程基本原则原则 抽象抽象 采用分层次抽象,自顶向下、逐层细化的办法采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性控制软件开发过程的复杂性。信息隐蔽信息隐蔽 将模块设计成将模块设计成“黑箱黑箱”,实现的细节隐藏,实现的细节隐藏在模块内部,不让模块的使用者直接访问。这就是信息在模块内部,不让模块的使用者直接访问。这就是信息封装,使用与实现分离的原则。封装,使用与实现分离的原则。模块化模块化 如如 C C 语言程序中的函数过程,语言程序中的函数过程,C+C+语言程序
16、语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。杂的系统。局部化局部化 要求在一个物理模块内集中逻辑上相互关联要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于控制解的复杂性。部具有较强的内聚。这有助于控制解的复杂性。确定性确定性 软件开发过程中所有概念的表达应是确定的、软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。无歧义性的、规范的。一致性一致性 整个软件系统的各个模块应使用一致的概念、整个软件系统的各个
17、模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一应保持一致。用于形式化规格说明的公理系统应保持一致。致。软件工程基本软件工程基本原则原则 完备性完备性 软件系统不丢失任何重要成分,可以完全实现软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。开发和运行过程中需
18、要严格的技术评审。可验证性可验证性 开发大型的软件系统需要对系统自顶向下、开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。原则,以确保系统的正确性。软件工程基本软件工程基本原则原则 软件工程过程和软件生命期软件工程过程软件工程过程:软件工程过程是为获得软件产品,在软件工具支持下由软件人员完成的软件工程过程是为获得软件产品,在软件工具支持下由软件人员完成的一系列软件工程活动。一系列软件工程活动。软件工程过程内容软件工程过程内容软件工程过程特性软件工程过程特性1)软件规格说明:规定软
19、件的功能及运行限制)软件规格说明:规定软件的功能及运行限制2)软件开发:产生满足规格说明的软件)软件开发:产生满足规格说明的软件3)软件确认:对软件能否满足用户要求进行确认)软件确认:对软件能否满足用户要求进行确认4)软件演进:为满足用户的变更要求的演进)软件演进:为满足用户的变更要求的演进 软件工程过程和软件生命期软件工程过程软件工程过程:软件工程过程是为获得软件产品,在软件工具支持下由软件人员完成的软件工程过程是为获得软件产品,在软件工具支持下由软件人员完成的一系列软件工程活动。一系列软件工程活动。软件工程过程内容软件工程过程内容软件工程过程特性软件工程过程特性1)可理解性;)可理解性;2
20、)可见性;)可见性;3)可支持性;)可支持性;4)可接受性;)可接受性;5)可靠性;)可靠性;6)健壮性;)健壮性;7)可维护性;)可维护性;8)速度。)速度。软件工程过程和软件生命期软件生命期(软件生命期(Life cycle):一个软件从定义、开发、使用和维护,直到最终被废弃,所经历一个软件从定义、开发、使用和维护,直到最终被废弃,所经历的生存过程称为软件生存期或叫生命期。的生存过程称为软件生存期或叫生命期。生命期的划分:生命期的划分:制定计制定计划划需求分析和定需求分析和定义义软件设软件设计计程序编程序编写写软件测软件测试试运行运行/维维护护定义阶段定义阶段开发阶段开发阶段维护阶段维护阶
21、段 软件生存期模型软件生存期模型瀑布模型瀑布模型原型模型原型模型螺旋模型螺旋模型喷泉模型喷泉模型构件组装模型构件组装模型统一过程模型统一过程模型第四代技术第四代技术 瀑布模型瀑布模型计划计划需求分析需求分析设计设计编码编码测试测试运行、维护运行、维护定义定义阶段阶段开发开发阶段阶段维护维护阶段阶段原型模型原型模型原型模型也称快速原型模型原型模型也称快速原型模型.原型模型的基本思想是:原型模型的基本思想是:软件开发人员在与用户进行需求分析时,软件开发人员在与用户进行需求分析时,以比较小的代价快速建立一个能够反映用户主要需求的原型系以比较小的代价快速建立一个能够反映用户主要需求的原型系统,让用户在
22、计算机上进行操作,在实践过程中提出改进意见,统,让用户在计算机上进行操作,在实践过程中提出改进意见,开发人员根据用户的意见,对原型进行补充和完善,然后再由开发人员根据用户的意见,对原型进行补充和完善,然后再由用户试用、评价、提出建议,重复这一过程,直到用户对开发用户试用、评价、提出建议,重复这一过程,直到用户对开发的原型系统满意为止。的原型系统满意为止。原型模型原型模型原型开发原型开发原型评价原型评价最终系统设计最终系统设计用户用户反馈反馈 原型模型原型模型螺旋模型螺旋模型 螺旋模型沿着螺线旋转,在四个象限上分别螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:表达四个方面的活动,
23、即:制定计划制定计划确定软件目标,选定实施方案,弄清确定软件目标,选定实施方案,弄清项目开发的限制项目开发的限制 风险分析风险分析分析所选方案,考虑如何识别和消除分析所选方案,考虑如何识别和消除风险风险 实施工程实施工程实施软件开发实施软件开发 客户评估客户评估评价开发工作,提出修正建议评价开发工作,提出修正建议螺旋模型螺旋模型螺旋模型 特点特点 瀑布模型瀑布模型+快速原型快速原型+风险分析风险分析 迭代过程迭代过程 一个螺旋一个螺旋式周期式周期 确定目标,选择方案,选定完成目标的策略确定目标,选择方案,选定完成目标的策略 风险角度分析该策略风险角度分析该策略 启动一个开发阶段启动一个开发阶段
24、 评价前一步的结果评价前一步的结果,计划下一轮的工作计划下一轮的工作 喷泉模型喷泉模型 迭代迭代 重复重复 演进演进 无间隙无间隙 各阶段间无明显界限各阶段间无明显界限喷泉模型喷泉模型构件组装模型构件组装模型构件组装模型构件组装模型 特点特点:面向对象面向对象 基于构件库基于构件库 融合螺旋模型特征融合螺旋模型特征 支持软件开发的迭代方法支持软件开发的迭代方法 软件重用软件重用统一过程模型统一过程模型 RationalRational统一过程(统一过程(Rational Unified ProcessRational Unified Process,RUPRUP)是由是由RationalRat
25、ional公司开发的一种软件过程,它公司开发的一种软件过程,它的开发过程有如下的开发过程有如下3 3个主要特点:个主要特点:是一种用例(是一种用例(UseUsecasecase)驱动的软件开发过程驱动的软件开发过程 是以体系结构(是以体系结构(ArchitectureArchitecture)为中心的过程为中心的过程 迭代(迭代(IterativeIterative)开发与增量(开发与增量(IncrementalIncremental)开发相结合的过程开发相结合的过程第四代技术第四代技术 “第四代技术第四代技术”(4GT)包含了一系列的软件工具,包含了一系列的软件工具,其特点是:能使软件工程师
26、在较高级别上说明软件的其特点是:能使软件工程师在较高级别上说明软件的某些特征,然后利用工具将开发者的说明自动生成源某些特征,然后利用工具将开发者的说明自动生成源代码,并且软件被说明级别越高,其建造程序的速度代码,并且软件被说明级别越高,其建造程序的速度就越快。就越快。基于基于4GT的开发过程如下:的开发过程如下:像其他范型一样,像其他范型一样,4GT也是从需求收集这一步开始。也是从需求收集这一步开始。制订一个系统的设计策略。制订一个系统的设计策略。应用应用4GL的生成功能,自动生成所期望的代码。的生成功能,自动生成所期望的代码。进行测试,完成相关文档,并完成其他软件工程范型中进行测试,完成相关
27、文档,并完成其他软件工程范型中同样要求的所有集成活动,得到最终产品。同样要求的所有集成活动,得到最终产品。软件开发方法简述软件开发方法简述 软件开发方法是指软件开发过程中所应遵循的方法软件开发方法是指软件开发过程中所应遵循的方法和步骤。和步骤。局部软件开发方法:针对某些活动的开发方法局部软件开发方法:针对某些活动的开发方法全局软件开发方法:覆盖开发全过程的方法全局软件开发方法:覆盖开发全过程的方法考虑如下的几个因素:考虑如下的几个因素:(1)对该软件开发方法是否已具有经验,或有已受过训练的人对该软件开发方法是否已具有经验,或有已受过训练的人员;员;(2)为软件开发提供的软件硬件资源及可使用的工
28、具的情况;为软件开发提供的软件硬件资源及可使用的工具的情况;(3)该开发方法在计划、组织和管理方面的可行性;该开发方法在计划、组织和管理方面的可行性;(4)对开发项目所涉及领域的知识的掌握情况。对开发项目所涉及领域的知识的掌握情况。软件开发方法简述软件开发方法简述 1 1、结构化方法结构化方法 结构化方法也称为面向功能的软件开发方法或结构化方法也称为面向功能的软件开发方法或Yourdon方法,是由方法,是由E.Yourdon和和L.Constantine提出的提出的.结构化分析方法结构化分析方法SA:对软件进行需求分析对软件进行需求分析 结构化设计方法结构化设计方法SD:进行总体设计和详细设计
29、进行总体设计和详细设计 结构化编程结构化编程SP 特点:特点:按照功能分解的原则,自顶向下、逐步求精,直到实现按照功能分解的原则,自顶向下、逐步求精,直到实现软件功能为止。软件功能为止。该方法简单、实用。该方法简单、实用。软件开发方法简述软件开发方法简述1 1、结构化方法结构化方法 主要问题:主要问题:(1)它以功能分解为基础,而用户的功能是经常改变它以功能分解为基础,而用户的功能是经常改变的,必然导致系统的框架结构不稳定。的,必然导致系统的框架结构不稳定。(2)从数据流程图到软件结构图之间的过渡有明显的从数据流程图到软件结构图之间的过渡有明显的断层,导致设计回溯到需求有困难。断层,导致设计回
30、溯到需求有困难。软件开发方法简述软件开发方法简述2 2、面向数据结构的开发方法、面向数据结构的开发方法 面向数据结构的软件开发方法有两种:面向数据结构的软件开发方法有两种:Warnier方法:方法:由由JDWarnier提出的结构化数据系统开提出的结构化数据系统开发方法(发方法(DSSD);Jackson方法:方法:由由M.A.Jackson提出的提出的Jackson系统开发方法系统开发方法(JSD)。面向数据结构的软件开发方法面向数据结构的软件开发方法基本思想基本思想是:从目标系统的输是:从目标系统的输入输出数据结构入手,导出程序的基本框架结构,在此基入输出数据结构入手,导出程序的基本框架结
31、构,在此基础上,对细节进行设计,得到完整的程序结构图。础上,对细节进行设计,得到完整的程序结构图。软件开发方法简述软件开发方法简述3、面向对象的方法、面向对象的方法 面向对象方法的优点:面向对象方法的优点:(1)将现实世界问题向面向对象解空间直接映射,实现对)将现实世界问题向面向对象解空间直接映射,实现对现实世界的直接模拟。现实世界的直接模拟。(2)以数据为中心,而不是基于对功能的分解,)以数据为中心,而不是基于对功能的分解,使得软件使得软件结构相对稳定,软件的重用性、可靠性、可维护等特性都较结构相对稳定,软件的重用性、可靠性、可维护等特性都较好。好。软件开发方法简述软件开发方法简述3 3、面
32、向对象的方法、面向对象的方法 影响较大的影响较大的面向对象方法有:面向对象方法有:(1)Booch方法:该方法的分析能力较弱,是一种偏重设计的方法。方法:该方法的分析能力较弱,是一种偏重设计的方法。(2)OMT方法:通过建立对象模型、动态模型、功能模型,来实方法:通过建立对象模型、动态模型、功能模型,来实现对整个系统分析和设计工作。现对整个系统分析和设计工作。(3)OOSE方法:最大特点是用用例(方法:最大特点是用用例(UseCase)与外部角色的与外部角色的交互来表示系统功能,用例贯穿于整个开发过程。交互来表示系统功能,用例贯穿于整个开发过程。(4)CoadYourdon的面向对象分析和设计
33、方法:即的面向对象分析和设计方法:即OOA和和OOD方法,它是最早的面向对象的分析和设计方法之一。方法,它是最早的面向对象的分析和设计方法之一。(5)UML:统一建模语言统一建模语言,国际对象管理组织国际对象管理组织OMG已批准将已批准将UML1.1作为面向对象技术的标准建模语言。作为面向对象技术的标准建模语言。软件开发方法简述软件开发方法简述4、可视化开发方法可视化开发方法 可视化开发方法是随着图形用户界面的兴起而发展起可视化开发方法是随着图形用户界面的兴起而发展起来的,是通过事件驱动实现应用软件的工作。来的,是通过事件驱动实现应用软件的工作。可视化开发方法的优点:可视化开发方法的优点:(1
34、)简化了图形用户界面的设计和编码工作,将开发的注意力主)简化了图形用户界面的设计和编码工作,将开发的注意力主要集中在程序的执行逻辑和工作流程上。要集中在程序的执行逻辑和工作流程上。(2)软件开发简单,易学、易上手。)软件开发简单,易学、易上手。(3)专业或非专业人员都能参与软件开发活动。)专业或非专业人员都能参与软件开发活动。软件工程的最新发展动向软件工程的最新发展动向 软件形式语言的研究软件形式语言的研究构件技术构件技术质量管理质量管理第二章第二章 软件计划软件计划可行性研究可行性研究系统流程图系统流程图软件计划软件计划成本成本/效益分析效益分析可行性研究可行性研究一、目的一、目的 可行性研
35、究的目的是用最小的代价在尽可能短可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。的时间内确定问题是否能够解决。可行性研究的目的不是解决问题,而是确定问题可行性研究的目的不是解决问题,而是确定问题 是否值得解决。怎样达到这个目的呢?当然不能靠主是否值得解决。怎样达到这个目的呢?当然不能靠主 观猜想而只能靠客观分析,必须分析几种主要的可能观猜想而只能靠客观分析,必须分析几种主要的可能 解法的利弊,从而判定原定的系统目标和规模是否现解法的利弊,从而判定原定的系统目标和规模是否现 实。系统完成后所能带来的效益是否大到值得投资开实。系统完成后所能带来的效益是否大到值得投资开 发这个
36、系统的程度。因此,发这个系统的程度。因此,可行性研究实质上是要进可行性研究实质上是要进 行一次大大压缩简化了的系统分析和设计的过程。行一次大大压缩简化了的系统分析和设计的过程。也也 就是在较高层次上以较抽象的方式进行系统分析和设就是在较高层次上以较抽象的方式进行系统分析和设 计的过程。计的过程。可行性研究可行性研究二、可行性研究集中在如下四个最为敏感的方面二、可行性研究集中在如下四个最为敏感的方面:1.经济可行性经济可行性 这个系统的经济效益能超过它的开发成本吗?这个系统的经济效益能超过它的开发成本吗?2.技术可行性技术可行性 使用现有的技术能实现这个系统吗?分析技术冒险的各种因素,使用现有的
37、技术能实现这个系统吗?分析技术冒险的各种因素,例如有关的技术是否已进步到足以支持该系统?能否有胜任开发该系例如有关的技术是否已进步到足以支持该系统?能否有胜任开发该系统的熟练技术人员?为开发项目的所有硬、软件资源是否能按期得到?统的熟练技术人员?为开发项目的所有硬、软件资源是否能按期得到?可行性研究可行性研究3.操作可行性操作可行性 系统的操作方式在这个用户组织内行得通吗?系统的操作方式在这个用户组织内行得通吗?4.法律可行性法律可行性 确定由于开发软件项目是否会侵犯他人、集体或国家的利益,是否会违反确定由于开发软件项目是否会侵犯他人、集体或国家的利益,是否会违反国家的法律,并由此承担法律责任
38、。可行性研究最根本的任务是对以后的行动国家的法律,并由此承担法律责任。可行性研究最根本的任务是对以后的行动方针提出建议,如果问题没有可行的解,分析员应该建议停止这项开发工程以方针提出建议,如果问题没有可行的解,分析员应该建议停止这项开发工程以避免时间、资源、人力和金钱的浪费。如果问题值得解,分析员应该推荐一个避免时间、资源、人力和金钱的浪费。如果问题值得解,分析员应该推荐一个较好的解决方案,并未工程制定一个初步的计划。较好的解决方案,并未工程制定一个初步的计划。可行性研究可行性研究三、可行性研究需要的时间长短取决于工程的规模。三、可行性研究需要的时间长短取决于工程的规模。一般说来,可行性研究的
39、成本只是工程总成本一般说来,可行性研究的成本只是工程总成本的的510。可行性研究可行性研究四、可行性研究的步骤四、可行性研究的步骤1、复查系统规模和目标复查系统规模和目标 分析员访问关键人员,仔细阅读和分析有关的材分析员访问关键人员,仔细阅读和分析有关的材料,以便改正含糊或不正确的叙述,清晰的描述对目料,以便改正含糊或不正确的叙述,清晰的描述对目标系统的一切限制和约束标系统的一切限制和约束2、研究目前正在使用的系统研究目前正在使用的系统 新系统必须解决旧系统中存在的问题新系统必须解决旧系统中存在的问题 运行使用旧系统所需要的费用是一个重要经济指运行使用旧系统所需要的费用是一个重要经济指标,如果
40、新系统不能增加收入或减少使用费用,那么标,如果新系统不能增加收入或减少使用费用,那么从经济角度看新系统就不如旧系统。从经济角度看新系统就不如旧系统。可行性研究可行性研究 注意了解并记录现有系统和其它系统之间接口情注意了解并记录现有系统和其它系统之间接口情 况,这是况,这是设计新系统时的重要约束条件。设计新系统时的重要约束条件。常见的错误做法是花费过多时间去分析现有的系统。常见的错误做法是花费过多时间去分析现有的系统。3.导出新系统的高层逻辑模型导出新系统的高层逻辑模型 优秀的设计过程通常总是从现有的物理系统出发,导出现优秀的设计过程通常总是从现有的物理系统出发,导出现有系统的逻辑模型(有系统的
41、逻辑模型(数据流图和业务流程图数据流图和业务流程图),在参考现有系),在参考现有系统的逻辑模型,设想目标系统的逻辑模型,最后根据目标系统统的逻辑模型,设想目标系统的逻辑模型,最后根据目标系统的逻辑模型建造新的物理系统。的逻辑模型建造新的物理系统。可行性研究可行性研究4.重新定义问题重新定义问题 新系统的逻辑模型实质上表达了分析员对新系统必须做什么新系统的逻辑模型实质上表达了分析员对新系统必须做什么的看法,用户是否也有同样的看法呢?分析员应该和用户一起再的看法,用户是否也有同样的看法呢?分析员应该和用户一起再次复查问题定义、工程规模和目标。次复查问题定义、工程规模和目标。这次复查应把数据流图和数
42、据字典作为讨论的基础。这次复查应把数据流图和数据字典作为讨论的基础。可行性研究的前四个步骤实质上构成一个循环,分析员定义问可行性研究的前四个步骤实质上构成一个循环,分析员定义问题,分析这个问题,导出一个试探性的解,在此基础上再次定义题,分析这个问题,导出一个试探性的解,在此基础上再次定义问题,再一次分析这个问题,修改这个解,继续这个循环过程,问题,再一次分析这个问题,修改这个解,继续这个循环过程,直到提出的逻辑模型完全符合系统目标。直到提出的逻辑模型完全符合系统目标。可行性研究可行性研究5、导出和评价供选的解法、导出和评价供选的解法 导出供选择的解法的最简单的途径,是从技术角度出发考虑解决问导
43、出供选择的解法的最简单的途径,是从技术角度出发考虑解决问题的不同方案。题的不同方案。依次从技术可行性、操作可行性、经济可依次从技术可行性、操作可行性、经济可 行性三个方面考虑。行性三个方面考虑。6、推荐一个方案并说明理由推荐一个方案并说明理由7、推荐行动方针、推荐行动方针8、书写文档提交审查、书写文档提交审查 请用户和使用部门的负责人仔细审查。请用户和使用部门的负责人仔细审查。可行性研究可行性研究 系统流程图是概括地描绘物理系统的传统工具。它的基本思想是用系统流程图是概括地描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件图形符号以黑盒子形式描绘组成系统的每个部
44、件(程序、文档、数据库和程序、文档、数据库和人工过程等人工过程等)。系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程,它用来表示物理数据流图而不是程序流程图。据进行加工处理的控制过程,它用来表示物理数据流图而不是程序流程图。系统流程图系统流程图1、系统流程图的符号、系统流程图的符号:如表:如表2-1、2-2所示所示(书书)2、系统流程图举例、系统流程图举例:如图:如图2-1、2-2所示所示(书书)3、分层、分层 描绘复杂的系统时,比较好的方法是分层次地描绘这个描绘复杂的系统时,比较好的方法是分层次地
45、描绘这个系统。系统。(1)绘制高层次的系统流程图,描绘系统总体概貌,表明系)绘制高层次的系统流程图,描绘系统总体概貌,表明系统的关键功能。统的关键功能。(2)然后分别对每个关键功能进行详细描述,画在单独的一)然后分别对每个关键功能进行详细描述,画在单独的一页纸上。页纸上。系统流程图系统流程图4、系统流程图的作用:、系统流程图的作用:(1)系统分析员可利用系统流程图直接拟出可以由实现计)系统分析员可利用系统流程图直接拟出可以由实现计算机处理的部分算机处理的部分(2)通过用系统流程图来分析业务流程的合理性。)通过用系统流程图来分析业务流程的合理性。(3)系统流程图还是系统分析员、管理人员和业务操作
46、人)系统流程图还是系统分析员、管理人员和业务操作人员相互交流的工具。员相互交流的工具。系统流程图系统流程图 软件计划以可行性研究报告为基础,由软件人员和用户共同确软件计划以可行性研究报告为基础,由软件人员和用户共同确立软件的功能和限制,提出软件计划任务书。立软件的功能和限制,提出软件计划任务书。一个典型的软件计划计划书的内容应该包括如下四个方面:一个典型的软件计划计划书的内容应该包括如下四个方面:1、软件范围、软件范围 软件计划的第一个任务是确定软件需求描述,主要包括功能、软件计划的第一个任务是确定软件需求描述,主要包括功能、性能、可靠性和接口等问题。性能、可靠性和接口等问题。2、环境资源、环
47、境资源 包括软件、硬件和人,每种资源均从资源的描述,对资源要求包括软件、硬件和人,每种资源均从资源的描述,对资源要求的日程表时间以及对资源应用的持续时间三个方面来说明。的日程表时间以及对资源应用的持续时间三个方面来说明。制定软件计划制定软件计划3、进度安排进度安排 计划者要协调可用资源与项目的工作量,考虑各项任务之间计划者要协调可用资源与项目的工作量,考虑各项任务之间的互相依赖,而在可能时间时就并行地安排工作,预见潜在的问题的互相依赖,而在可能时间时就并行地安排工作,预见潜在的问题或瓶子口,并提供意外事故处理等。或瓶子口,并提供意外事故处理等。进度安排的主要内容进度安排的主要内容 进度安排的主
48、要工作是制定软件进度表,以明确开发各阶段的任进度安排的主要工作是制定软件进度表,以明确开发各阶段的任务和时间安排情况。软件进度表的内容包括:务和时间安排情况。软件进度表的内容包括:软件的任务划分情况;软件的任务划分情况;各任务的起始时间和结束时间;各任务的起始时间和结束时间;各任务的工作量和所需的人数;各任务的工作量和所需的人数;各任务之间的衔接关系;各任务之间的衔接关系;各任务所需的资源情况;各任务所需的资源情况;各任务完成后所应提交的文档;各任务完成后所应提交的文档;对各任务的审查和审查记录等。对各任务的审查和审查记录等。制定软件计划制定软件计划3、进度安排、进度安排 软件进度计划的编制方
49、法软件进度计划的编制方法甘特图法甘特图法 甘特图甘特图(Gantt Chart)又称线条图,是一种对各项活动进行又称线条图,是一种对各项活动进行计划调度与控制的图表,它具有简单、醒目和便于编制等特点。计划调度与控制的图表,它具有简单、醒目和便于编制等特点。一般甘特图的横方向表示时间,纵方向列出工作。一般甘特图的横方向表示时间,纵方向列出工作。甘特图的描述符号和示例如图甘特图的描述符号和示例如图2-4、2-5所示(书)。所示(书)。特点:特点:能够动态反映软件项目开发进展的情况。能够动态反映软件项目开发进展的情况。难以反映多个任务之间存在的复杂的逻辑关系。难以反映多个任务之间存在的复杂的逻辑关系
50、。制定软件计划制定软件计划3、进度安排、进度安排 软件进度计划的编制方法软件进度计划的编制方法网络计划法网络计划法 网络计划法是用网状图表安排与控制各项活动的方法,可网络计划法是用网状图表安排与控制各项活动的方法,可通过对网状图的分析,方便地确定完成整个工程至少需要多少通过对网状图的分析,方便地确定完成整个工程至少需要多少时间,以及哪些子工程是影响工程进度的关键。一般适应于工时间,以及哪些子工程是影响工程进度的关键。一般适应于工作步骤密切相关、错综复杂的工程项目的计划管理。作步骤密切相关、错综复杂的工程项目的计划管理。网络计划法的描述符号和示例如图网络计划法的描述符号和示例如图2-6、2-7所