1、软 件 工 程课程名称:软件工程课程名称:软件工程 第第1讲讲班班 级:级:日日 期:期:教教 室:室:教学题目:第教学题目:第1章章 概述概述 1.1 软件软件 1.2 软件工程的概念软件工程的概念教学目的:教学目的:1.了解软件、软件危机等概念了解软件、软件危机等概念 2.掌握软件工程的定义、原理、目标和原则掌握软件工程的定义、原理、目标和原则教学重点:软件工程的定义、原理、目标和原则教学重点:软件工程的定义、原理、目标和原则教学难点:软件工程的目标和原则教学难点:软件工程的目标和原则教教 具:多媒体教室、电子教案具:多媒体教室、电子教案作作 业:看书业:看书第一章第一章 软件与软件工程软
2、件与软件工程 1.1 软件软件 1.2 软件工程的概念软件工程的概念 1.3 软件生存周期软件生存周期 1.4 软件开发模式软件开发模式 1.5 软件开发方法、工具及环境软件开发方法、工具及环境1.1 软件(软件(Software)1.1.1 软件与软件的组成软件与软件的组成计算机软件计算机软件与计算机系统操作有关的程序、规程、与计算机系统操作有关的程序、规程、规则及任何与之有关的文档和数据。规则及任何与之有关的文档和数据。软件软件 程序及有关数据程序及有关数据机器可执行;机器可执行;文档(与软件开发、运行、维护、使用、文档(与软件开发、运行、维护、使用、培训有关)培训有关)不可执行。不可执行
3、。程序(程序(program)用程序设计语言描述的,适合用程序设计语言描述的,适合 于计算机处理的语句序列。于计算机处理的语句序列。程序设计语言三种类型:程序设计语言三种类型:1机器语言、汇编语言:依赖于机器,面向机器机器语言、汇编语言:依赖于机器,面向机器 2高级语言:独立于机器,面向过程或面向对象高级语言:独立于机器,面向过程或面向对象 3面向问题语言:独立于机器,非过程式语言(面向问题语言:独立于机器,非过程式语言(4GL)文档(文档(document)一种数据媒体和其上所记录的数据。一种数据媒体和其上所记录的数据。文档记录软件开发活动和阶段成果,具有永久性,可供文档记录软件开发活动和阶
4、段成果,具有永久性,可供 人或机器阅读。人或机器阅读。文档可用于文档可用于 专业人员和用户之间的通信和交流;专业人员和用户之间的通信和交流;软件开发过程的管理;软件开发过程的管理;运行阶段的维护。运行阶段的维护。面向过程1.软件的特点软件的特点软件是逻辑产品,硬件是物理产品。软件是逻辑产品,硬件是物理产品。特点:特点:(1)软件开发更依赖于开发人员的业务素质、智力、)软件开发更依赖于开发人员的业务素质、智力、人员的组织、合作和管理。软件开发、设计几人员的组织、合作和管理。软件开发、设计几 乎都是从头开始,成本和进度很难估计。乎都是从头开始,成本和进度很难估计。(2)软件存在潜伏错误,硬件错误一
5、般能排除。)软件存在潜伏错误,硬件错误一般能排除。(3)软件开发成功后,只需对原版进行复制。)软件开发成功后,只需对原版进行复制。1.软件的特点(续)软件的特点(续)(4)软件在使用过程中维护复杂:)软件在使用过程中维护复杂:1)纠错性维护)纠错性维护改正运行期间发现的潜伏错误;改正运行期间发现的潜伏错误;2)完善性维护)完善性维护提高或完善软件的性能;提高或完善软件的性能;3)适应性维护)适应性维护修改软件,以适应软硬件环境修改软件,以适应软硬件环境 的变化;的变化;4)预防性维护)预防性维护改进软件未来的可维护性和改进软件未来的可维护性和 可靠性。可靠性。(5)软件不会磨损和老化。)软件不
6、会磨损和老化。2.软件的发展软件的发展第一阶段第一阶段20世纪世纪60年代中期以前,软件开发处于年代中期以前,软件开发处于 个体化生产状态。在这一阶段中,软件个体化生产状态。在这一阶段中,软件 还没有系统化的开发方法。目标主要集还没有系统化的开发方法。目标主要集 中在如何提高时空效率上。中在如何提高时空效率上。第二阶段第二阶段从从20世纪世纪60年代中期到年代中期到70年代末期。软年代末期。软 件开发已进入了作坊式生产方式,即出件开发已进入了作坊式生产方式,即出 现了现了“软件车间软件车间”。软件开发开始形成。软件开发开始形成产产 品。到品。到20世纪世纪60年代末,年代末,“软件危机软件危机
7、”变变 得十分严重。得十分严重。2.软件的发展软件的发展第三阶段第三阶段从从20世纪世纪70年代中期到年代中期到20世纪世纪80年代末年代末 期。软件开发进入了产业化生产,即出期。软件开发进入了产业化生产,即出 现了众多大型的现了众多大型的“软件公司软件公司”。在这一。在这一阶阶 段,软件开发开始采用了段,软件开发开始采用了“工程工程”的方的方法,法,软件产品急剧增加,质量也有了很大的软件产品急剧增加,质量也有了很大的 提高。提高。第四阶段第四阶段从从20世纪世纪80年代末期开始的。这是一个年代末期开始的。这是一个 软件产业大发展的时期。也是软件工程软件产业大发展的时期。也是软件工程 大发展的
8、时期,人们开始采用面向对象大发展的时期,人们开始采用面向对象 的技术和可视化的集成开发环境。的技术和可视化的集成开发环境。1.1.2 软件危机软件危机软件危机是指在计算机软件开发、使用与维护软件危机是指在计算机软件开发、使用与维护 过程中遇到的一系列严重问题和难题。过程中遇到的一系列严重问题和难题。1软件危机的表现软件危机的表现1)对软件开发成本和进度的估计常常很不准确。常)对软件开发成本和进度的估计常常很不准确。常 常出现实际成本比估算成本高出一个数量级、实常出现实际成本比估算成本高出一个数量级、实 际进度比计划进度拖延几个月甚至几年的现象,际进度比计划进度拖延几个月甚至几年的现象,从而降低
9、了开发商的信誉,引起用户不满。从而降低了开发商的信誉,引起用户不满。2)用户对已完成的软件不满意的现象时有发生。)用户对已完成的软件不满意的现象时有发生。3)软件产品的质量往往是靠不住的。)软件产品的质量往往是靠不住的。1软件危机的表现软件危机的表现4)软件常常是不可维护的。)软件常常是不可维护的。5)软件通常没有适当的文档资料。文档资料不全或不)软件通常没有适当的文档资料。文档资料不全或不 合格,必将给软件开发和维护工作带来许多难以想合格,必将给软件开发和维护工作带来许多难以想 象的困难和难以解决的问题。象的困难和难以解决的问题。6)软件成本在计算机系统总成本中所占比例逐年上升。)软件成本在
10、计算机系统总成本中所占比例逐年上升。特别是软件维护成本迅速增加,已经占据软硬件总特别是软件维护成本迅速增加,已经占据软硬件总 成本的成本的40%75%,如图,如图1-1-1所示。所示。7)开发生产率提高的速度远跟不上软件需求。)开发生产率提高的速度远跟不上软件需求。硬 件软件开发软件维护1955年 1970年 1985年100%80%60%40%20%图1-1-1 软件、硬件成本变化趋势 2产生软件危机的原因产生软件危机的原因1)用户对软件需求的描述不精确。)用户对软件需求的描述不精确。2)软件开发人员对用户需求的理解有偏差,这将导致)软件开发人员对用户需求的理解有偏差,这将导致 软件产品与用
11、户的需求不一致。软件产品与用户的需求不一致。3)缺乏处理大型软件项目的经验。开发大型软件项目)缺乏处理大型软件项目的经验。开发大型软件项目 需要组织众多人员共同完成。一般来说,多数管理需要组织众多人员共同完成。一般来说,多数管理 人员缺乏大型软件的开发经验,而多数软件开发人人员缺乏大型软件的开发经验,而多数软件开发人 员又缺乏大型软件项目的管理经验,致使各类人员员又缺乏大型软件项目的管理经验,致使各类人员 的信息交流不及时、不准确、容易产生误解。的信息交流不及时、不准确、容易产生误解。2产生软件危机的原因产生软件危机的原因4)开发大型软件易产生疏漏和错误。)开发大型软件易产生疏漏和错误。5)缺
12、乏有力的方法学的指导和有效的开发工)缺乏有力的方法学的指导和有效的开发工 具的支持。软件开发过多地依靠程序员的具的支持。软件开发过多地依靠程序员的 “技巧技巧”,从而加剧了软件产品的个性化。,从而加剧了软件产品的个性化。6)面对日益增长的软件需求,人们显得力不)面对日益增长的软件需求,人们显得力不 从心。从某种意义上说,解决供求矛盾将从心。从某种意义上说,解决供求矛盾将 是一个永恒的主题。是一个永恒的主题。3缓解软件危机的途径缓解软件危机的途径 到了到了20世纪世纪60年代末期,软件危机已相当严年代末期,软件危机已相当严重。这促使计算机科学家们开始探索缓解软重。这促使计算机科学家们开始探索缓解
13、软件危机的方法。他们提出了件危机的方法。他们提出了“软件工程软件工程”的的概念,即用现代工程的原理、技术和方法进概念,即用现代工程的原理、技术和方法进行软件的开发、管理、维护和更新。于是,行软件的开发、管理、维护和更新。于是,开创了计算机科学技术的一个新的研究领域。开创了计算机科学技术的一个新的研究领域。1.2 软件工程的概念软件工程的概念 1.2.1 软件工程的定义软件工程的定义1968年,北大西洋公约组织在原西德召开计算机科学年,北大西洋公约组织在原西德召开计算机科学会议,由会议,由Fritz Bauer首次提出了首次提出了“软件工程软件工程”的概念。的概念。软件工程软件工程用工程、科学和
14、数学的原则与方法用工程、科学和数学的原则与方法 开发、维护计算机软件的有关技术开发、维护计算机软件的有关技术 和管理方法。和管理方法。软件工程由方法、工具和过程三部分组成,称软件工软件工程由方法、工具和过程三部分组成,称软件工程的三要素。程的三要素。1.2.1 软件工程的定义软件工程的定义软件工程中的各种方法是完成软件工程项目的软件工程中的各种方法是完成软件工程项目的技术手段,它们支持软件工程的各个阶段。技术手段,它们支持软件工程的各个阶段。软件工程使用的软件工具能够自动或半自动地软件工程使用的软件工具能够自动或半自动地支持软件的开发、管理和文档的生成。支持软件的开发、管理和文档的生成。软件工
15、程中的过程贯穿于整个工程的各个环节,软件工程中的过程贯穿于整个工程的各个环节,在这一过程中,管理人员应对软件开发的质量、在这一过程中,管理人员应对软件开发的质量、进度、成本等进行评估、管理和控制,包括计进度、成本等进行评估、管理和控制,包括计划跟踪与控制、成本估算、人员的组织、质量划跟踪与控制、成本估算、人员的组织、质量保证、配置管理等保证、配置管理等1.2.2 软件工程的基本原理软件工程的基本原理 著名的软件工程专家著名的软件工程专家B.W.Boehm于于1983年年综合了软件工程专家学者们的意见并总结综合了软件工程专家学者们的意见并总结了开发软件的经验,提出了软件工程的了开发软件的经验,提
16、出了软件工程的7条条基本原理。这基本原理。这7条原理被认为是确保软件产条原理被认为是确保软件产品质量和开发效率的原理的最小集合,又品质量和开发效率的原理的最小集合,又是相互独立、缺一不可、相当完备的最小是相互独立、缺一不可、相当完备的最小集合。下面就简单介绍软件工程的这集合。下面就简单介绍软件工程的这7条原条原理:理:1用分阶段的生存周期计划严格管理用分阶段的生存周期计划严格管理 这条基本原理是应该把软件生存周期划分成这条基本原理是应该把软件生存周期划分成若干个阶段,并相应地制定出切实可行的计若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件开发与维护工划,然后严格按照计划对软件
17、开发与维护工作进行管理。应该制定的计划有项目概要计作进行管理。应该制定的计划有项目概要计划、里程碑计划、项目控制计划、产品控制划、里程碑计划、项目控制计划、产品控制计划、验证计划和运行维护计划等。各级管计划、验证计划和运行维护计划等。各级管理人员都必须严格按照计划对软件开发和维理人员都必须严格按照计划对软件开发和维护工作进行管理。据统计,不成功的软件项护工作进行管理。据统计,不成功的软件项目中,有一半左右是由于计划不周造成的。目中,有一半左右是由于计划不周造成的。2坚持进行阶段评审坚持进行阶段评审 据统计,在软件生存周期各阶段中,编码据统计,在软件生存周期各阶段中,编码阶段之前的错误约占阶段之
18、前的错误约占63%,而编码错误仅占,而编码错误仅占37%。另外,错误发现并改正得越晚,所花。另外,错误发现并改正得越晚,所花费的代价越高。坚持在每个阶段结束前进费的代价越高。坚持在每个阶段结束前进行严格的评审,就可以尽早发现错误,从行严格的评审,就可以尽早发现错误,从而可以最小的代价改正错误。因此,这是而可以最小的代价改正错误。因此,这是一条必须坚持的重要原理。一条必须坚持的重要原理。3实行严格的产品控制实行严格的产品控制 决不能随意改变需求,只能依靠科学的产品控制决不能随意改变需求,只能依靠科学的产品控制技术来顺应用户提出的改变需求的要求。为了保技术来顺应用户提出的改变需求的要求。为了保持软
19、件各个配置成分的一致性,必须实行严格的持软件各个配置成分的一致性,必须实行严格的产品控制。其中主要是实行基准配置管理(又称产品控制。其中主要是实行基准配置管理(又称为变动控制),即凡是修改软件的建议,尤其是为变动控制),即凡是修改软件的建议,尤其是涉及基本配置的修改建议,都必须按规程进行严涉及基本配置的修改建议,都必须按规程进行严格的评审,评审通过后才能实施。格的评审,评审通过后才能实施。这里的这里的“基准配置基准配置”是指经过阶段评审后的软件是指经过阶段评审后的软件配置成分,即各阶段产生的文档或程序代码等。配置成分,即各阶段产生的文档或程序代码等。4采用现代程序设计技术采用现代程序设计技术
20、实践表明,采用先进的程序设计技术既可实践表明,采用先进的程序设计技术既可以提高软件开发与维护的效率,又可以提以提高软件开发与维护的效率,又可以提高软件的质量。多年来,人们一直致力于高软件的质量。多年来,人们一直致力于研究新的研究新的“程序设计技术程序设计技术”。比如,。比如,20世世纪纪60年代末提出的结构程序设计技术;后年代末提出的结构程序设计技术;后来又发展出各种结构分析(来又发展出各种结构分析(SA)和结构设)和结构设计(计(SD)技术;之后又出现了面向对象分)技术;之后又出现了面向对象分析(析(OOA)和面向对象设计()和面向对象设计(OOD)技术)技术等等。等等。5结果应能清楚地审查
21、结果应能清楚地审查 软件产品是一种看不见、摸不着的逻软件产品是一种看不见、摸不着的逻辑产品。因此,软件开发小组的工作辑产品。因此,软件开发小组的工作进展情况可见性差,难于评价和管理。进展情况可见性差,难于评价和管理。为了更好地进行评价与管理,应根据为了更好地进行评价与管理,应根据软件开发的总目标和完成期限,尽量软件开发的总目标和完成期限,尽量明确地规定软件开发小组的责任和产明确地规定软件开发小组的责任和产品标准,从而使所得到的结果能清楚品标准,从而使所得到的结果能清楚地审查。地审查。6开发小组的人员应少而精开发小组的人员应少而精 软件开发小组人员素质和数量是影响软件质量和软件开发小组人员素质和
22、数量是影响软件质量和开发效率的重要因素。实践表明,素质高的人员开发效率的重要因素。实践表明,素质高的人员与素质低的人员相比,开发效率可能高几倍至几与素质低的人员相比,开发效率可能高几倍至几十倍、而且所开发的软件中的错误也要少得多。十倍、而且所开发的软件中的错误也要少得多。另外,开发小组的人数不宜过多,因为随着人数另外,开发小组的人数不宜过多,因为随着人数的增加,人员之间交流情况、讨论问题的通信开的增加,人员之间交流情况、讨论问题的通信开销将急剧增加,这不但不能提高生产率,反而由销将急剧增加,这不但不能提高生产率,反而由于误解等原因可能增加出错的概率。于误解等原因可能增加出错的概率。7承认不断改
23、进软件工程实践的必要性承认不断改进软件工程实践的必要性 遵循上述六条基本原理,就能够较好地实现软遵循上述六条基本原理,就能够较好地实现软件的工程化生产。但是,软件工程不能停留在件的工程化生产。但是,软件工程不能停留在已有的技术水平上,应积极主动地采纳或创造已有的技术水平上,应积极主动地采纳或创造新的软件技术,要注意不断总结经验,收集工新的软件技术,要注意不断总结经验,收集工作量、进度、成本等数据,并进行出错类型和作量、进度、成本等数据,并进行出错类型和问题报告的统计。这些数据既可用来评估新的问题报告的统计。这些数据既可用来评估新的软件技术的效果,又可用来指明应优先进行研软件技术的效果,又可用来
24、指明应优先进行研究的软件工具和技术。究的软件工具和技术。1.2.3 软件工程的目标软件工程的目标 软件工程的目标是在给定成本、进软件工程的目标是在给定成本、进度的前提下,开发出具有可修改性、度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满植性、可追踪性和可互操作性并满足用户需求的软件产品。足用户需求的软件产品。名词解释名词解释1)可修改性()可修改性(modifiability),允许对软件系统进行),允许对软件系统进行 修改而不增加其复杂性。它支持软件调试与维
25、护。修改而不增加其复杂性。它支持软件调试与维护。2)有效性()有效性(efficiency),指软件系统的时间和空间),指软件系统的时间和空间 效率。这是一个应当努力追求的重要目标。效率。这是一个应当努力追求的重要目标。3)可靠性()可靠性(reliability),是指在给定的时间间隔内,),是指在给定的时间间隔内,程序成功运行的概率。可靠性是衡量软件质量的一程序成功运行的概率。可靠性是衡量软件质量的一 个重要目标。个重要目标。名词解释名词解释4)可理解性()可理解性(understandability),指系统具有清晰),指系统具有清晰的结构,能直接反映问题的需求。可理解性有助于的结构,能
26、直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植控制软件系统的复杂性,并支持软件的维护、移植和重用。和重用。5)可维护性()可维护性(maintainability),是指软件产品交付),是指软件产品交付使用后,在实现改正潜伏的错误、改进性能等属性、使用后,在实现改正潜伏的错误、改进性能等属性、适应环境变化等方面工作的难易程度。由于软件的适应环境变化等方面工作的难易程度。由于软件的维护费用在整个软件生存周期中占主要的比重,因维护费用在整个软件生存周期中占主要的比重,因此,可维护性是软件工程中的一个十分重要的目标。此,可维护性是软件工程中的一个十分重要的目标。软件的
27、可理解性和可修改性支持软件的可维护性。软件的可理解性和可修改性支持软件的可维护性。名词解释名词解释6)可重用性()可重用性(reusability),是指软部件可以在多种),是指软部件可以在多种场合使用的程度。场合使用的程度。概念或功能相对独立的一个或一组相关模块可构概念或功能相对独立的一个或一组相关模块可构成一个软部件。软部件应具有清晰的结构和注释、正成一个软部件。软部件应具有清晰的结构和注释、正确的编码和较高的时空效率。可将各种软部件按照某确的编码和较高的时空效率。可将各种软部件按照某种规则放在软部件库中供开发人员选用。种规则放在软部件库中供开发人员选用。广义地讲,可重用性还应包括应用项目
28、、规格说广义地讲,可重用性还应包括应用项目、规格说明、设计、概念和方法等等的重用。一般来说,重用明、设计、概念和方法等等的重用。一般来说,重用的层次越高,带来的效益越大。的层次越高,带来的效益越大。可重用性有助于提高软件产品的质量和开发效率、可重用性有助于提高软件产品的质量和开发效率、降低软件开发和维护费用。降低软件开发和维护费用。名词解释名词解释7)可适应性()可适应性(adaptability),是指软件在不同的系),是指软件在不同的系统约束条件下,使用户需求得到满足的难易程度。统约束条件下,使用户需求得到满足的难易程度。选择广为流行的软硬件支持环境、采用广为流行的选择广为流行的软硬件支持
29、环境、采用广为流行的程序设计语言编码、采用标准的术语和格式书写文程序设计语言编码、采用标准的术语和格式书写文档可增强软件产品的可适应性。档可增强软件产品的可适应性。8)可移植性()可移植性(portability),是指软件从一个计算机),是指软件从一个计算机系统或环境移植到另一个上去的难易程度。系统或环境移植到另一个上去的难易程度。采用通用的运行支持环境和尽量通用的程序设计语采用通用的运行支持环境和尽量通用的程序设计语言的标准部分可提高可移植性。而应将依赖于计算言的标准部分可提高可移植性。而应将依赖于计算机系统的低级(物理)特征部分相对独立、集中起机系统的低级(物理)特征部分相对独立、集中起
30、来。可移植性支持软件的可重用性和可适应性。来。可移植性支持软件的可重用性和可适应性。名词解释名词解释9)可追踪性()可追踪性(traceability),是指根据软),是指根据软件需求对软件设计、程序进行正向追踪,件需求对软件设计、程序进行正向追踪,或根据程序、软件设计对软件需求进行或根据程序、软件设计对软件需求进行逆向追踪的能力。软件开发各阶段的文逆向追踪的能力。软件开发各阶段的文档和程序的完整性、一致性、可理解性档和程序的完整性、一致性、可理解性支持软件的可追踪性。支持软件的可追踪性。10)可互操作性()可互操作性(interoperability),是指),是指多个软件元素相互通信并协同
31、完成任务多个软件元素相互通信并协同完成任务的能力。的能力。1.2.4 软件工程的原则软件工程的原则1抽象(抽象(abstraction),抽取各个事物中共同的),抽取各个事物中共同的最基本的特征和行为,暂时忽略它们之间的差最基本的特征和行为,暂时忽略它们之间的差异。一般采用分层次抽象的方法来控制软件开异。一般采用分层次抽象的方法来控制软件开发过程的复杂性。抽象使软件的可理解性增强发过程的复杂性。抽象使软件的可理解性增强并有利于开发过程的管理。并有利于开发过程的管理。2信息隐藏(信息隐藏(information hiding),将模块内部),将模块内部的信息(数据和过程)封装起来。其他模块只的信
32、息(数据和过程)封装起来。其他模块只能通过简单的模块接口来调用该模块,而不能能通过简单的模块接口来调用该模块,而不能直接访问该模块内部的数据或过程,即将模块直接访问该模块内部的数据或过程,即将模块设计成设计成“黑箱黑箱”。信息隐藏的原则可使开发人。信息隐藏的原则可使开发人员把注意力集中于更高层次的抽象上。员把注意力集中于更高层次的抽象上。1.2.4 软件工程的原则软件工程的原则4局部化(局部化(localization),即在一个物理模块内),即在一个物理模块内集中逻辑上相互关联的计算资源。局部化支持集中逻辑上相互关联的计算资源。局部化支持信息隐藏,从而保证模块之间具有松散的耦合、信息隐藏,从
33、而保证模块之间具有松散的耦合、模块内部有较强的内聚。这有助于控制每一个模块内部有较强的内聚。这有助于控制每一个解的复杂性。解的复杂性。5一致性(一致性(consistency),整个软件系统(包),整个软件系统(包括程序、数据和文档)的各个模块应使用一致括程序、数据和文档)的各个模块应使用一致的概念、符号和术语;程序内部接口应保持一的概念、符号和术语;程序内部接口应保持一致;软件与环境的接口应保持一致;系统规格致;软件与环境的接口应保持一致;系统规格说明应与系统行为保持一致;用于形式化规格说明应与系统行为保持一致;用于形式化规格说明的公理系统应保持一致。说明的公理系统应保持一致。1.2.4 软
34、件工程的原则软件工程的原则6完全性(完全性(completeness),软件系统不丢失任何),软件系统不丢失任何重要成分,完全实现所需的系统功能的程度。为了重要成分,完全实现所需的系统功能的程度。为了保证系统的完全性,在软件的开发和维护过程中需保证系统的完全性,在软件的开发和维护过程中需要严格的技术评审。要严格的技术评审。7可验证性(可验证性(verifiability),开发大型软件系统需),开发大型软件系统需要对系统逐层分解。系统分解应遵循易于检查、测要对系统逐层分解。系统分解应遵循易于检查、测试、评审的原则,以使系统可验证。试、评审的原则,以使系统可验证。v抽象、信息隐藏、模块化和局部化
35、的原则支持可理抽象、信息隐藏、模块化和局部化的原则支持可理解性、可修改性、可靠性等目标,并可提高软件产解性、可修改性、可靠性等目标,并可提高软件产品的质量和开发效率;品的质量和开发效率;v一致性、完全性和可验证性等原则可以帮助软件开一致性、完全性和可验证性等原则可以帮助软件开发人员去实现一个正确的系统。发人员去实现一个正确的系统。课程名称:软件工程课程名称:软件工程 第第2讲讲班班 级:级:日日 期:期:教教 室:室:教学题目:教学题目:1.3 软件生存周期软件生存周期 1.5 方法、工具及环境方法、工具及环境教学目的:掌握软件生存周期的划分,教学目的:掌握软件生存周期的划分,了解各个阶段了解
36、各个阶段 的任务;熟悉几种软件开发模型、了解的任务;熟悉几种软件开发模型、了解 CASE工具及环境。工具及环境。教学重点:软件生存周期、软件开发模型。教学重点:软件生存周期、软件开发模型。教学难点:开发模型教学难点:开发模型教教 具:多媒体教室、电子教案具:多媒体教室、电子教案作作 业:看书业:看书1.3 软件生存周期软件生存周期 软件从定义开始,经过开发、使用和维护,软件从定义开始,经过开发、使用和维护,直到最终退役的全过程称为软件生存周期。直到最终退役的全过程称为软件生存周期。可将软件生存周期划分为可将软件生存周期划分为3个过程共个过程共9个阶段。个阶段。3个过程是:软件定义过程、软件开发
37、过程、个过程是:软件定义过程、软件开发过程、软件使用与维护过程。软件使用与维护过程。9个阶段有:可行性研究、需求分析、概要设个阶段有:可行性研究、需求分析、概要设 计、详细设计、实现、组装测试、计、详细设计、实现、组装测试、验收测试、使用与维护、退役。验收测试、使用与维护、退役。它们之间的关系如图它们之间的关系如图1-3-1所示。所示。图1-3-1 软件生存周期阶段的划分使用与维护验收测试组装测试实现详细设计概要设计需求分析退役开发过程使用与维护过程定义过程可行性研究1.3.1 软件定义软件定义 软件定义的基本任务是确定软件系统软件定义的基本任务是确定软件系统的工程需求,也就是要搞清的工程需求
38、,也就是要搞清“做什做什么么”。软件定义过程可通过软件系统的可行软件定义过程可通过软件系统的可行性研究和需求分析两个阶段来完成。性研究和需求分析两个阶段来完成。1可行性研究可行性研究q本阶段的任务是根据用户提出的工程项目的性质、目本阶段的任务是根据用户提出的工程项目的性质、目标和规模,进一步了解用户的要求及现有的环境及条标和规模,进一步了解用户的要求及现有的环境及条件,从技术、经济和社会等多方面研究并论证该项目件,从技术、经济和社会等多方面研究并论证该项目的可行性。即该项目是否值得去解决,是否存在可行的可行性。即该项目是否值得去解决,是否存在可行的解决办法。的解决办法。q此时,系统分析人员应在
39、用户的配合下对用户的要求此时,系统分析人员应在用户的配合下对用户的要求和现有的环境进行深入调查并写出调研报告。进而进和现有的环境进行深入调查并写出调研报告。进而进行可行性论证。可行性论证包括经济可行性、技术可行可行性论证。可行性论证包括经济可行性、技术可行性、操作可行性、法律可行性等。在此基础上还要行性、操作可行性、法律可行性等。在此基础上还要制定初步的项目计划,包括需要的软硬件资源、定义制定初步的项目计划,包括需要的软硬件资源、定义任务、风险分析、成本任务、风险分析、成本/效益分析以及进度安排等。效益分析以及进度安排等。q可行性研究的结果将是使用部门负责人做出是否继续可行性研究的结果将是使用
40、部门负责人做出是否继续进行该项目决定的重要依据。进行该项目决定的重要依据。2需求分析需求分析 1)需求分析的任务)需求分析的任务 需求分析的任务是确定待开发的软件系需求分析的任务是确定待开发的软件系统统“做什么做什么”。具体任务包括确定软件系统的功能需求、具体任务包括确定软件系统的功能需求、性能需求和运行环境约束,编制软件需性能需求和运行环境约束,编制软件需求规格说明书、软件系统的验收测试准求规格说明书、软件系统的验收测试准则和初步的用户手册。则和初步的用户手册。2需求分析需求分析2)需求分析的实现途径)需求分析的实现途径 软件系统需求一般由用户提出。系统分析员软件系统需求一般由用户提出。系统
41、分析员和开发人员在需求分析阶段必须与用户反复讨和开发人员在需求分析阶段必须与用户反复讨论、协商,充分交流信息,并用某种方法和工论、协商,充分交流信息,并用某种方法和工具构建软件系统的逻辑模型。为了使开发方与具构建软件系统的逻辑模型。为了使开发方与用户对待开发软件系统达成一致的理解,必须用户对待开发软件系统达成一致的理解,必须建立相应的需求文档。有时对大型、复杂的软建立相应的需求文档。有时对大型、复杂的软件系统的主要功能、接口、人机界面等还要进件系统的主要功能、接口、人机界面等还要进行模拟或建造原型,以便向用户和开发方展示行模拟或建造原型,以便向用户和开发方展示待开发软件系统的主要特征。确定软件
42、需求的待开发软件系统的主要特征。确定软件需求的过程有时需要反复多次,最终得到用户和开发过程有时需要反复多次,最终得到用户和开发者的确认。者的确认。2需求分析需求分析3)需求分析的阶段成果)需求分析的阶段成果 需求分析阶段的主要成果有软件需求规格说明、需求分析阶段的主要成果有软件需求规格说明、软件验收测试计划和准则、初步的用户手册等。其软件验收测试计划和准则、初步的用户手册等。其中,软件需求规格说明(中,软件需求规格说明(Software Requirements Specification,即,即SRS),是一个关键性的文档。多),是一个关键性的文档。多数场合,面向开发者的软件需求用需求规格说
43、明语数场合,面向开发者的软件需求用需求规格说明语言来描述,它是软件开发人员进行软件设计的依据;言来描述,它是软件开发人员进行软件设计的依据;另一方面,从某种意义上讲,另一方面,从某种意义上讲,SRS又起到与用户签又起到与用户签定合同的合同书的作用。因此,在定合同的合同书的作用。因此,在SRS中应包括软中应包括软件系统的全部功能需求、性能需求、接口需求、设件系统的全部功能需求、性能需求、接口需求、设计需求、基本结构、开发标准和验收准则等等。计需求、基本结构、开发标准和验收准则等等。1.3.2 软件开发软件开发q软件开发过程由概要设计、详细设计、实现(即编软件开发过程由概要设计、详细设计、实现(即
44、编码与单元测试)、组装测试、验收测试共码与单元测试)、组装测试、验收测试共5个阶段个阶段组成。组成。q其中,概要设计和详细设计统称为设计;编码即编其中,概要设计和详细设计统称为设计;编码即编程;单元测试、组装测试和验收测试统称为测试。程;单元测试、组装测试和验收测试统称为测试。q开发者通常可提出多种设计方案,并对各种方案在开发者通常可提出多种设计方案,并对各种方案在功能、性能、成本、进度等方面进行比较和折衷,功能、性能、成本、进度等方面进行比较和折衷,从中选出一种从中选出一种“最佳方案最佳方案”。q下面将简单地介绍软件开发过程中各阶段的任务,下面将简单地介绍软件开发过程中各阶段的任务,实现的途
45、径和阶段成果。实现的途径和阶段成果。1概要设计概要设计总体设计总体设计q任务:任务:是对需求规格说明中提供的软件系统逻辑模型是对需求规格说明中提供的软件系统逻辑模型进行进一步的分解,从而建立软件系统的总体进行进一步的分解,从而建立软件系统的总体结构和各子系统之间、各模块之间的关系,定结构和各子系统之间、各模块之间的关系,定义各子系统接口界面和各功能模块的接口,设义各子系统接口界面和各功能模块的接口,设计全局数据库或数据结构,规定设计约束,制计全局数据库或数据结构,规定设计约束,制定组装测试计划,进而给出每个功能模块的功定组装测试计划,进而给出每个功能模块的功能描述、全局数据定义和外部文件定义等
46、。能描述、全局数据定义和外部文件定义等。1概要设计概要设计q实现的途径:实现的途径:选择某种方法和工具。设计的软件系统应具有选择某种方法和工具。设计的软件系统应具有良好的总体结构、尽量降低模块接口的复杂度,良好的总体结构、尽量降低模块接口的复杂度,并力争做到各功能模块之间的低耦合度、而功并力争做到各功能模块之间的低耦合度、而功能模块内部具有较高的内聚度。能模块内部具有较高的内聚度。q阶段性成果:阶段性成果:概要设计说明书、概要设计说明书、数据库或数据结构说明书、数据库或数据结构说明书、组装测试计划等文档。组装测试计划等文档。2详细设计详细设计q任务:是将概要设计产生的功能模块进一步细化,任务:
47、是将概要设计产生的功能模块进一步细化,形成可编程的程序模块,然后设计程序模块的内部形成可编程的程序模块,然后设计程序模块的内部细节,包括算法、数据结构以及各程序模块间的接细节,包括算法、数据结构以及各程序模块间的接口信息,并设计模块的单元测试计划。口信息,并设计模块的单元测试计划。q途径:可以采用结构化的设计方法,采用结构化的途径:可以采用结构化的设计方法,采用结构化的程序流程图、程序流程图、N-S图、过程设计语言(图、过程设计语言(PDL,Procedure Design Language)等工具进行描述,也)等工具进行描述,也可以采用面向对象的设计方法等等。可以采用面向对象的设计方法等等。
48、q阶段成果:应提供阶段成果:应提供“详细设计规格说明详细设计规格说明”(或称(或称“模块开发卷宗模块开发卷宗”)和单元测试计划等详细设计文)和单元测试计划等详细设计文档。档。3实现实现编码和单元测试。编码和单元测试。q编码的主要任务是根据详细设计规格说明,用某种编码的主要任务是根据详细设计规格说明,用某种选定的程序设计语言把详细设计的结果转化为机器选定的程序设计语言把详细设计的结果转化为机器可运行的源程序模块,这是一个编程和调试程序的可运行的源程序模块,这是一个编程和调试程序的过程。过程。q一般来说,对软件系统所采用的分析方法、设计方一般来说,对软件系统所采用的分析方法、设计方法、编程方法以及
49、所选用的程序设计语言应尽可能法、编程方法以及所选用的程序设计语言应尽可能保持一致。保持一致。q编码阶段应注意遵循编程标准、养成良好的编程风编码阶段应注意遵循编程标准、养成良好的编程风格,以便编写出正确的便于理解、调试和维护的程格,以便编写出正确的便于理解、调试和维护的程序模块。序模块。3实现实现编码和单元测试。编码和单元测试。q单元测试:每编写出一个程序模块的源程序,调单元测试:每编写出一个程序模块的源程序,调试通过后,即对该模块进行测试,这称为单元测试通过后,即对该模块进行测试,这称为单元测试。试。q实现阶段的成果:实现阶段的成果:按一定规则存在盘上的通过单元测试的各功能模按一定规则存在盘上
50、的通过单元测试的各功能模块的集合块的集合详细的单元测试报告等文档。详细的单元测试报告等文档。4组装测试组装测试组装测试:根据概要设计提供的软件结构、各组装测试:根据概要设计提供的软件结构、各功能模块的说明和组装测试计划,把经过单元功能模块的说明和组装测试计划,把经过单元测试检验的模块按照某种选定的策略逐步进行测试检验的模块按照某种选定的策略逐步进行组装和测试。组装和测试。主要任务:测试系统各模块间的连接是否正确,主要任务:测试系统各模块间的连接是否正确,系统或子系统的正确处理能力、容错能力、输系统或子系统的正确处理能力、容错能力、输入入/输出处理是否达到要求。输出处理是否达到要求。阶段成果:阶