第01章软件工程概述_第1页
第01章软件工程概述_第2页
第01章软件工程概述_第3页
第01章软件工程概述_第4页
第01章软件工程概述_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章,第1章 软件与软件工程 导读: 软件工程产生; 软件工程的定义、内容、目标、原则和原理; 软件、软件生命周期基本概念; 软件开发模型。, 1软件工程的产生和发展, 1软件工程的产生和发展,软件工程(Software Engineering)是在克服20世纪60年代末所出现的“软件危机”的过程中逐渐形成与发展的。在不到40年的时间里,在软件工程的理论和实践两方面都取得了长足的进步。 软件工程是一门指导计算机软件系统开发和维护的工程学科,是一门新兴的边缘学科,它涉及到计算机科学、工程科学、管理科学、数学等多学科,研究的范围广,主要研究如何应用软件开发的科学理论和工程技术来指导大型软件系统的

2、开发。例如,现代操作系统的开发,如果不采用软件工程的方法是不可能的。 在我国加入WTO后,大力推广、应用软件工程的开发技术及管理技术,提高软件工程的应用水平,对促进我国软件产业与国际接轨,推动我国软件产业的迅速发展起着十分重要的关键作用。,1软件工程的发展过程, 1软件工程的产生和发展,自从第一台计算机诞生以来,就开始了软件的生产,到目前为止,软件发展经历了三个阶段: 1. 程序设计时代(19461956年) 采用“个体生产方式”,即软件开发完全依赖于程序员个人的能力水平。 2. 程序系统时代(19561968年) 由于软件应用范围及规模的不断扩大,个体生产已经不能够满足软件生产的需要,一个软

3、件需要由几个人协同完成,采用“生产作坊方式” 。 该阶段的后期,随着软件需求量、规模及复杂度的增大,生产作坊的方式已经不能够适应软件生产的需要,出现所谓“软件危机”。 3. 软件工程时代(1968年至今) 这阶段的主要任务是为了克服软件危机,适应软件发展的需要,而采用“工程化的生产” 方式。,软件工程的产生和发展是与软件的发展紧密相关的。,软件危机,20世纪60年代末70年代初,西方工业发达国家曾出现过软件危机事件,所谓软件危机是指在软件开发和维护过程中所遇到的一系列严重问题。 “软件危机”(Software crisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件

4、开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。 例如: IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。 OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。” 1963年,美国飞往火星的火箭因为一个软件错误而爆炸。 1967年8月23日,原苏联”结盟一号”载人宇宙飞船也因软

5、件错误烧毁。,2 软件危机,2 软件危机,“软件危机”主要表现在两个方面: (1)软件产品质量低劣,甚至开发过程就夭折; (2)软件生产率低,不能满足需要。 具体: 对软件开发成本和进度的估计不准确; 用户对“完成的”软件系统不满意; 软件产品质量不稳定; 软件常常不可维护; 软件没有文档或文档不足; 软件成本逐年上升; 软件供不应求; 软件本身十分复杂。 结论: (1)如何开发新的软件,以满足对软件日益增长的需求; (2)如何维护数量不断膨胀的软件。,软件工程的定义 1968年北大西洋公约组织在联邦德国的一次学术会议上,首次提出软件工程的概念,从而形成一门新兴的学科软件工程学,从此软件生产开

6、始了一个新的飞跃。 自从提出软件工程这个术语,对于软件工程就有了各种各样的定义,但是它们的基本思想都是强调在软件开发过程中应用工程化原则的重要性。 Boehm曾为软件工程下了定义:“运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料”。这里的“设计”应包括软件的需求分析和对软件修改时所进行的再设计活动。 Fairley认为:“软件工程学是为在成本限定以内按时完成开发和修改软件产品所需的系统生产以及维护的技术和管理的科学”。 Fritz Bauer则给出一个软件工程学的定义:“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的

7、一系列方法”。 1983年IEEE的定义:“软件工程是开发、运行、维护和修复软件的系统方法”。 1993年IEEE又有进一步的定义:“(1)把系统化的、规范化的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;(2)研究(1)中提到的途径。”,软件工程的定义,软件工程研究的内容 软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广。归结起来软件工程研究的主要内容有以下几方面:软件质量、软件工程的过程、软件开发方法和技术;软件开发工具及环境;软件管理技术;软件规范(软件工程标准和规范)。传统软件工程把方法、工具和过程称为3要素。,软件工程研究的内容,软件质量是软件工

8、程的基础。全面质量管理的理念产生了软件过程的文化。即:软件开发组织在软件开发过程要遵守一系列规约和质量承诺。 软件开发过程。过程定义就是一系列活动以及它们的关系。它把软件工程方法与软件工具相结合,实现合理、及时地进行软件开发的目的。过程给出了软件开发要遵循的基本路线。 方法与技术。软件工程方法是解决“怎样做”的技术问题,是完成软件工程项目的技术手段。例如分析、设计、测试等活动。 工具与环境。工具为软件工程的过程和方法提供了自动或半自动的支持。当一系列的工具被有效的集成,便形成了“工具箱”,工具箱提供的是一个工具产生的信息被另一个工具所使用的支持。软件工具的集成环境称为计算机辅助软件工程CASE

9、, CASE集成了软件、硬件和工程数据库(包括分析、设计、测试等重要信息),它提供了一个支持软件开发的环境。,软件工程层次,软件工程研究的内容,对软件正向工程的研究还可以从3方面(3条主轴)考虑: 软件开发(包括软件开发方法与技术); 软件测试与评估(包括软件测试方法与技术); 软件管理(包括软件管理方法与技术) ; 人员组织上相应有3套马车。,软件工程项目具有多目标特性,其基本目标如图所示:,可见,软件工程所追求的目标是: 多、快、好、省,. 软件工程的基本目标,软件工程的基本目标在于使软件系统向高性价比发展,在给定的成本、进度的前提下,最终获得项目的成功。成功指的是达到以下几个主要目标:

10、付出较低的开发成本; 达到要求的软件功能; 取得较好的软件性能; 开发的软件易于移植; 需要较低的维护费用; 能按时完成开发工作,及时交付使用。,软件工程的原则和原理,所谓原则就是一些经验总结、依据的标准、基本的事实、规则和假定。原则应该是实践的结晶,是普遍适用的。例如,选择适宜的开发模型;采用好的、适合的开发方法和技术;提供高质量的工程支持,使用好的软件工具和环境,提高软件的生产率;重视开发过程的管理,要有良好的组织、严格的管理、各类人员协同配合共同完成项目等等。 软件工程的基本原则 抽象 (abstractian) 模块化(modularity) 信息隐蔽(information hidi

11、ng ) 局部化 (localization) 一致性(consistency) 完备性(completeness) 可验证性(verifiability),软件工程的基本原理 所谓原理是带有普遍性的、最基本的基础规律(道理)。具体可以考虑以下的7条: 用分阶段的生命周期计划严格管理; 坚持进行阶段评审; 实行严格的产品控制; 采用现代软件开发技术; 结果应该能审查 ; 开发小组的人员应该少而精; 承认不断改进软件工程实践的必要性。,2软件与软件生命周期,、软件及特点 软件 首先,要纠正软件就是程序,开发软件就是编写程序的错误观念。 有两种较为普遍的定义: 软件是与计算机系统操作有关的程序,规

12、程、规则及任何与之相关的文档和数据。 软件是程序以及开发,使用和维护程序所需要的文档, 包括机器运行所需要的各种程序及有关资料。 其中: 程序,由应用程序、系统程序等构成。 文档,由面向用户的文档及面向开发者的文档构成。 软件的基本特点 计算机软件产品是一种逻辑产品部件而不是物理产品部件。 软件产品的生产主要是研制,是通过人们的智力活动,把知识与技术转化成信息的一种产品。 软件具有“复杂性”,其开发和运行常受到计算机系统的限制。而且,软件投入使用后,仍需要进行维护,这就带来软件维护复杂性的问题。 软件不存在磨损,物理上不会老化,但存在软件退化问题 。 软件成本昂贵,其开发方式目前尚未完全摆脱手

13、工生产方式。,硬件失效率曲线,是一U型曲线(即浴盆曲线)。软件失效率曲线,它没有U型曲线的右半翼。因为软件不存在磨损和老化问题,然而存在退化问题。,软、硬件失效情况的对比,软件特点,2. 按照软件规模划分,软件分类,1. 按照软件功能划分 系统软件 如操作系统、设备驱动程序等。 支撑软件(实用软件) 协助用户开发的工具软件,如编辑程序、程序库、图形软件包等。 应用软件 如工程与科学计算软件、CAD/CAM软件、CAI软件、信息管理系统等。,3. 按照软件工作方式划分 实时处理软件交互式软件批处理软件 4. 按照软件服务对象的范围划分 项目软件 由客户委托开发的软件。 产品软件 由软件开发机构开

14、发,提供给市场的。,此外,还可以按照软件使用的频度及按照软件失效的影响进行划分。,软件分类,软件生命周期,1.软件生命期的概念 传统的软件生命期( software life cycle )是指软件产品从形成概念(构思)开始,经过定义、开发、使用和维护,直到最后被废弃(不能再使用)为止的全过程。GB 8567中规定,软件生命周期分为7个阶段: (1)可行性研究和项目开发计划 (2) 需求分析(3) 概要设计 (4) 详细设计(5) 编码 (6) 测试(7) 维护 按照传统的软件生命周期方法学,可以把软件生命期划分为软件定义、软件开发、软件运行和维护3个阶段。 软件定义时期 软件开发时期 软件运

15、行和维护 在大部分文献中将生存周期划分为5个阶段,即需求定义、设计、编码、测试及维护。 其中: 需求定义阶段包括可行性研究和项目开发计划、需求分析, 设计阶段包括概要设计和详细设计。,2软件过程模型的基本概念,软件过程 软件过程是制作软件产品的一组活动以及结果,这些活动主要由软件人员来完成。 通常包括以下类基本过程: 1. 软件规格说明(软件描述):规定软件的功能及其运行环境(使用的限制)。 2. 软件开发:也就是软件的设计和实现,软件工程人员制作产生满足规格说明的软件。 3. 软件确认(有效性验证):软件必须经过严格的验证,以保证能够满足客户的需求;即确认软件能够完成客户提出的要求。 4.

16、软件演进(进化):为满足客户的变更要求,软件必须在使用的过程中演进。软件随着客户需求的变化不断地改进。 软件过程模型 软件生存周期模型又称软件开发模型(software develop model)或软件过程模型(software process model),它是从某一个特定角度提出的软件过程的简化描述。模型的主要特点是简单化。软件过程模型是软件开发实际过程的抽象与概括,它应该包括构成软件过程的各种活动,也就是对软件开发过程各阶段之间关系的一个描述和表示。,瀑布模型 瀑布模型(waterfall model)可以说是最早使用的软件生存周期模型之一。由于这个模型描述了软件生命的一些基本过程活动

17、,所以它称为软件生命周期模型。这些活动从一个阶段到另一个阶段逐次下降,它的工作流程形式上又很像瀑布,人们更多的把它称为瀑布模型,该模型如图所示。,瀑布模型,循环模型,循环模型 为了描述软件开发过程中可能的回溯,尤其是维护阶段往往要经历上述各个阶段,采用循环模型描述。,需求分析,设计,编码,测试,运行,评价,计划,循环模型,原型模型 原型模型(prototype model) 又称快速原型。由于瀑布型的缺点,人们借鉴建筑师或是工厂中的工程师建造原型的经验,提出了原型模型。该模型如图所示。,原型模型,快速原型法的工作模型是一个循环的模型。 循环执行步骤: 1.快速分析 快速确定软件系统的基本要求,

18、确定原型所要体现的特征(界面,总体结构,功能,性能)。 2.构造原型 在快速分析的基础上,根据基本规格说明,忽略细节,只考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型、功能原型和性能原型。 3.运行和评价原型 用户试用原型并与开发者之间频繁交流,发现问题,目的是验证原型的正确性。 4.修改与改进 对原型进行修改、增删。,原型的工作模型,评价,构造,快速分析或修改,运 行,原型模型,构造原型,运行/评价原型,原型完成,需要细部说明,严格说明细部,效果满意,整理原型提供文档,修 正 改 进 原 型,Y,Y,N,N,快速分析,确定初步规格说明,Y,N,细化的快速原型模型,螺旋模型

19、螺旋模型(spiral model)是在快速原型的基础上扩展而成,也有人把螺旋模型归到快速原型,实际上,它是生命周期模型与原型模型的一个结合,该模型如图所示。,软件开发模型,螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤: (1)确定目标、方案和限制条件; (2)评估方案、标识风险和解决风险; (3)开发确认产品;(4)计划下一周期工作。,基于四代技术的模型 四代语言(4GL)是在大型数据库管理系统的基础上发展起来的程序设计语言。 4GL目前还没有统一的定义,它的描述定义: 用于快速开发应用软件的高产工具(重点强调了提高软件开发的生产率)。 用于快速事务处理系统的高产工具(

20、突出了主要应用领域)。 主要特征描述: (1)它是非过程化的语言,目的在于高效,直接地实现各种应用系统。在完成了常见的功能时,它却完全不用编程的方式来构造应用系统。例如,菜单生成器、报表生成器、屏幕生成器、图形软件包等等。程序员可以不再使用通常编程的方法、算法等来完成某一个功能,而是利用一些生成器,在屏幕上以对话的交互方式;通过填表或操作屏幕上的窗口、按钮图标;或者在某一个按钮定义时加上适当的一段程序等等。从而,构造用户需要的应用系统生成器自动生成源程序。 (2)它与数据库的关系密切,能够对大型数据库进行高效处理。它被广泛地应用于数据管理系统中。,基于四代技术的模型,以4GL为核心的软件开发技

21、术称为四代技术。使用四代技术,可以带来许多的方便,在软件开发的时间,成本和质量等方面都会取得较好的效果,但它毕竟在系统开发全过程中所占有的比例是很少的。 基于四代技术的模型,如图示:,基于四代技术的模型,构件组装模型 事实上,在许多的软件项目中,都存在一些重用软件,当软件人员意识到某一个项目中的设计或者代码是另一个项目重复出现时,重用就自然地发生了,构件也正是基于这一思想而产生的。构件的重用又导致软件的可靠性和易维护性,程序在进行修改时产生较少的副作用。近几年来,以组件为基础的软件工程方法出现了,基于构件组装的软件过程模型也随之产生,并且逐渐地被广泛使用,该模型如图所示。,构件组装模型,基于面

22、向对象的模型 自从面向对象技术问世后,很快被人们所接受,并得到广泛的应用。面向对象技术确实有很多的优点,其中构件重用是非常重要的技术之一。对象技术强调了类的创建与封装,一旦一个类创建与封装成功,就可以在不同的应用系统重用。 对象技术为基于构件的软件过程模型提供了更强的技术框架,基于面向对象的模型,是综合了面向对象和原型方法以及重用技术的一种模型。该模型如图所示。,基于面向对象的模型,基于知识工程的模型 基于知识工程模型简称智能模型,该模型是知识工程与软件工程结合的产物。 如图所示。,基于知识工程的模型,变换模型 变换模型 (transformational model)是基于形式化规格说明语言

23、及程序变换的软件开发模型,又称自动程序设计模型,在这个模型中,应用系统是自动生成。该模型如图所示。,变换模型,3软件工程面临的问题1.软件价格问题,由于计算机硬件的功能和质量在不断地提高,成本却大幅度降低。软件的研制工作往往要投入大量的、高强度的脑力劳动,它的成本比较高,而又常常是估计不准确的。从20世纪的80年代开始,软件的开销大大超过硬件的开销,美国每年投入软件开发的经费有几百亿美元。另一方面,软件不能完全摆脱硬件单独活动,当新一代的计算机硬件取代旧的硬件时,相应的软件也要随之更新,软件的发展往往滞后于硬件,软件的需求量在不断的上升,软件成本也逐年上升,2.可靠性问题,软件的可靠性是指:“

24、在给定的时间间隔及给定的环境条件下,按设计要求,成功地运行程序的概率”。软件可靠性还应包括安全性和健壮性。 软件系统的测试是一件复杂和费时的工作,为了提高软件的可靠性,软件人员在完成设计和编码后,要花费很大的代价进行测试和排错,不幸的是,尽管如此,也不能保证一个软件系统没有任何的错误。 另一方面,可能存在软件开发者没有了解清楚用户的需求,急于编写程序,导致完成的系统不符合要求;也可能是用户当时不清楚或表达不清楚系统的目标,到完成后发现有差异而发生争执,最终使得软件产品发生质量问题。,3.维护性问题,软件维护是指修改已经运行了的软件系统所需要的工作。例如,改正潜伏错误所进行的“纠错性维护”;提高

25、和完善软件性能所进行的“完善性维护”;为了使软件适应新的运行环境所进行的“适应性维护”等。由于软件本身的抽象性和复杂性,软件在维护过程中可能产生新的错误,软件的维护就显得更为复杂。 现在使用的软件,可能是许多年前开发的,到现在依然承担着重要责任。由于早期许多程序是以“个体”手工编写的,往往都带有一些个人特性,这些程序常常是不可维护,错误非常难修改。另一方面,由于软件没有文档或文档不足带来的软件不可维护是明显的。对于软件维护人员来说,文档是至关重要的资料,缺乏文档或文档不合格都会给软件维护带来严重的困难。文档应该是在软件开发过程产生出来,而且要保证文档与程序的一致性。 对于维护和更新这些遗留系统,所面临的问题是,既要避免过高的维护费用,又要交付基本的业务服务。,4.生产率问题,随着计算机的广泛应用,软件的需求量也在迅速的上升,软件生产率的提高,远远跟不上计算机应用的发展。目前,软件产品大多数是“定做”的,近年来,虽然软件技术和开发方法都取得很大的进展,例如,重用技术、自动生成技术等,也有一些比较成熟的软件开发工具和开发环境,但软件仍不能像工业上的产品一样大批量生产。另一方面,至今软件仍然以传统的手工编程开发方式为主,软件的生产率自然受到限制,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论