收藏 分享(赏)

01软件工程引论.ppt

上传人:dzzj200808 文档编号:2260590 上传时间:2018-09-08 格式:PPT 页数:55 大小:1.06MB
下载 相关 举报
01软件工程引论.ppt_第1页
第1页 / 共55页
01软件工程引论.ppt_第2页
第2页 / 共55页
01软件工程引论.ppt_第3页
第3页 / 共55页
01软件工程引论.ppt_第4页
第4页 / 共55页
01软件工程引论.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

1、软件工程,2018/9/8,2,软件工程引论,1.1 软件产品的概念与特征 1.2 软件危机 1.3 软件工程的产生及其发展,2018/9/8,3,对于软件的一种公认的解释是:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。其中,程序是为实现设计的功能和性能要求而编写的指令序列;数据是使指令能够正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文资料。,1.1 软件产品的概念与特征,2018/9/8,4,表1.1 根据规模进行软件分类,2018/9/8,5,表1.2 计算机软件发展的三个阶段及其特点,2018/9/8,6,表1.2 计算机软件发展

2、的三个阶段及其特点,2018/9/8,7,1.2 软件危机,1.2.1 软件危机及其表现1968年,北大西洋公约组织的计算机科学家们在联邦德国召开的国际会议上讨论了软件危机问题,提出了“软件工程”这个名词。 简单地说,所谓软件危机,就是指在软件开发和软件维护过程中所存在的一系列严重问题。具体地说,软件危机具有如下一些表现:,2018/9/8,8,(1) 软件开发没有真正的计划性,对软件开发进度和软件开发成本的估计常常很不准确,计划的制定带有很大的盲目因素,因此工期超出、成本失控的现象经常困扰着软件开发者。(2) 对于软件需求信息的获取常常不充分,软件产品往往不能真正地满足用户的实际需求。(3)

3、 缺乏良好的软件质量评测手段,从而导致软件产品的质量常常得不到保证。,2018/9/8,9,(4) 对于软件的可理解性、可维护性认识不够;软件的可复用性、可维护性不如人意。有些软件因为过于“个性化”,甚至是难以理解的,更谈不上进行维护。缺乏可复用性引起的大量重复性劳动极大地降低了软件的开发效率。(5) 软件开发过程没有实现“规范化”,缺乏必要的文档资料或者文档资料不合格、不准确,难以进行专业维护。,2018/9/8,10,(6) 软件开发的人力成本持续上升,如美国在1995年的软件开发成本已经占到了计算机系统成本的90%(如图1.2所示)。(7) 缺乏自动化的软件开发技术,软件开发的生产率依然

4、低下,远远满足不了急剧增长的软件需求。,2018/9/8,11,六十年代末期,美国的一位著名计算机专家的评论:“我估计,即使细心地编写程序,每200条到300条指令中必定有一个错误。”由于美国当时缺乏软件人员,计算机公司大量招聘程序员,甚至公共汽车司机也被招去,因此粗制滥造软件大量涌向市场。1968年,有人在一次计算机软件学术会上说:“整个事业是建立在一个大骗局上”。可见,软件危机已发展到何种程度,它已明显地影响到社会的发展。计算机科学在软件危机中挣扎,社会在为软件危机付出沉重的代价。,2018/9/8,12,例:IBM公司在1963-1966年开发的IBM360机的操作系统,花了5000人-

5、年工作量,最多时有1000人投入开发工作,写出了近100万行源程序,结果每次发行的新版本都是从前一版本中找出1000个程序错误而修正的。,2018/9/8,13,1.2.2 产生软件危机的原因1、客观上,软件具有明显的“不可视”特征,这就导致在完成编码并且上机运行之前,对于软件开发过程的进展情况较难衡量,软件产品的质量也较难进行先期评价,因此,对于开发软件的过程进行管理和控制比较困难。在客观上造成了软件难以维护的结果。,2、主观上:可以归于早期软件开发的“个体化”特点,主要表现为忽视软件需求分析的重要性、忽视软件的可理解性、文档不完备、轻视软件的可维护性、过分强调编码技巧等等方面。,2018/

6、9/8,14,一般来说,软件产品从策划、定义、开发、使用与维护直到最后废弃,要经过一个漫长的时期,通常把这个时期称为软件的“生命周期”。 可以将生命周期分作“软件定义”、“软件开发”和“运行与维护”三个阶段。在软件定义阶段中,主要进行软件目标的策划、可行性研究和软件的需求分析工作,统计数据表明,在典型的软件工程过程中,编码工作量大约只占软件开发全部工作量的15%20%。软件的运行与维护阶段在软件生命周期中占据的比例最大。,2018/9/8,15,作为软件,应当有一个完整的配置。Boehm(美国著名的软件工程专家,加州州立大学教授)指出,“软件是程序以及开发、使用、维护程序所需要的所有文档”。

7、所以,软件产品除包括程序之外,应当包括完整、准确、详实的文档资料。主要的文档应当包括“需求规格说明书”、“体系结构设计说明书”、“详细设计说明书”、“安装手册”、“操作手册”、“系统管理员手册”等。缺乏必要的配置文档,将严重影响软件的可理解性,从而给软件的维护造成严重障碍。,2018/9/8,16,值得注意的严重问题是,在软件开发的不同阶段进行修改所付出的代价是极其不同的。图1.4定性地描绘了在不同时期引入一个变动需要付出的代价的变动趋势。,图1.4 变更代价随时间变化的趋势示意,2018/9/8,17,图1.5 改正一个问题需要付出的代价,图1.5是美国贝尔实验室统计得出的定量结果。,201

8、8/9/8,18,1.2.3 解决软件危机的途径从软件工程技术和软件工程管理两方面来采取措施,防范软件危机的发生。软件开发不是某种个体劳动的神秘技巧,而应当是一种组织良好、管理严密,分析、设计、编码、测试、品保等各类人员协同配合、共同完成的工程项目。在软件开发过程中,必须充分吸收和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要注意吸收几十年来在计算机硬件研究和开发中积累的经验、教训。,2018/9/8,19,从管理层面上考虑,应当注意推广和使用在实践中总结出来的开发软件的成功的技术和方法,并且探索更好的、更有效的技术和方法,注意积累软件开发过程中的经验数据财富

9、,逐步消除在计算机系统早期发展阶段形成的一些错误概念和做法。建立适合于本组织的软件工程规范;制定软件开发中各个工作环节的流程文件、工作指南和阶段工作产品模板;实施针对软件开发全过程的计划跟踪和品质管理活动;为每一项工程开发活动建立配置管理库;实施严格的产品基线管理并建立组织的软件过程数据库和软件财富库;为各类员工及时提供必要的培训等等都是加强软件开发活动管理工作的有效手段。,2018/9/8,20,从技术角度考虑,应当开发和使用更好的软件开发工具,提高软件开发效率和开发工作过程的规范化程度。目前广为使用的统一建模语言(UML)、各种配置管理工具、缺陷管理工具和自动测试工具都在软件工程活动中发挥

10、了很好的作用。计算机辅助软件工程(CASE=Computer Aided Software Engineering )更是目前备受重视的一个旨在实现软件开发自动化的新的领域。 (Enterprise Architect用于设计和构建软件系统、业务流程建模及更多通用的建模。),2018/9/8,21,1.3 软件工程的产生及其发展,1968年,北大西洋公约组织的计算机科学家们在原联邦德国召开的国际会议上,针对软件危机的严峻形势,提出了把在其他工程领域中行之有效的一些工程学知识运用到软件开发过程中来,从管理和技术两个方面研究如何更好地开发和维护计算机软件的设想。这也就是软件工程的基本思路。在这次会

11、议上首次提出并使用了“软件工程”这一术语。简单地说,软件工程是指导软件开发和维护的工程学科。它的核心思想是采用工程的概念、原理、技术和方法来开发和维护软件,把经过实践考验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,从而大大提高软件开发的成功率和生产率。,2018/9/8,22,后来又有一些从事软件工程方法学研究的人陆续提出了许多更为完善的软件工程的定义,但主要思想都是强调软件开发过程中需要应用工程化原则的重要性。IEEE给出了关于软件工程的一个更加综合的定义:(1) 将工程化方法应用于软件开发与维护过程中。(2) 对上述方法的研究。,1983年,IEEE(电气和电子工程师协会

12、)给出的软件工程定义为:“软件工程是开发、运行、维护和修复软件的系统方法”。,2018/9/8,23,就内容来看,软件工程应当包括三个要素:方法、工具和过程。软件工程方法为软件开发提供了“如何做某项工作”的技术指南。它包括了多方面的任务。例如项目策划和估算方法、软件需求分析方法、体系结构的设计方法、详细设计方法、软件测试方法等等。使得整个开发过程的每一种阶段任务都能够“有章可循”。软件工程工具为软件工程方法提供了自动的或半自动的软件支撑环境。目前这样的工具已经有许多种,而且已经有人把诸多软件工程工具集成起来,使得一种工具产生的信息可以为其他工具所使用,形成了一种称之为计算机辅助软件工程(CAS

13、E)的软件开发支撑环境。CASE把各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来,形成了一个完整的软件工程环境。,2018/9/8,24,软件工程中的“过程”是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。可以将软件工程过程理解为软件工程的工艺路线。过程定义了各种方法使用的顺序、各阶段要求交付的文档资料、为保证质量和控制软件变更所需要的管理环节和在软件开发各个阶段完成的里程碑。针对软件工程的基本要件,有许多计算机科学家进行了诠释,先后提出了100多条有关软件工程的相关原则。著名软件工程专家B.W.Boehm集众家所长,并总结了TRW公司多年开发软件

14、的经验,在1983年提出了软件工程的七项基本原则,作为保证软件产品质量和开发效率的最小集合。具体包括:,2018/9/8,25,软件工程的七项基本原则: (1) 用分阶段的生命周期计划严格管理软件工程过程。 (2) 坚持在软件工程过程中进行阶段评审。 (3) 实行严格的产品控制。 (4) 采用现代的开发技术进行软件的设计与开发。 (5) 工作结果应当是能够清楚地审查的。 (6) 开发小组的人员应该“少而精”。 (7) 承认不断改进软件工程实践的必要性。,2018/9/8,26,软件工程过程模型,2.1 软件工程的技术基础 2.2 软件工程过程 2.3 软件过程模型 一 线性顺序模型 二 快速原

15、型模型 三 演化软件过程模型 四 快速应用开发模型 五 面向对象模型 2.4 软件开发方法 2.5 软件过程工具,2018/9/8,27,2.1 软件工程的技术基础,一、软件工程框架 对质量的关注构成了软件工程的根基。,Software engineering layers,2018/9/8,28,软件工程框架,软件工程框架,29,软件工程框架,(1)软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。(2)通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。,二、软件工程方法学,软件工程框架,3)包

16、含3个要素:方法、工具和过程。方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。,2018/9/8,31,1、结构化方法(生命周期方法学或结构化范型) (1)指导思想:自顶向下、逐步求精。 (2)基本原则:功能的分析与抽象。 (3)构成:由结构化分析、结构化设计和结构化程序设计构成。它是一种面向数据流的开发方法。 结构化分析:根据分解与抽象的原则,用数据流图来建立系统的功

17、能模型, 从而完成需求分析。 结构化设计:根据模块独立性准则、软件结构准则,将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计。 结构化程序设计:根据结构程序设计原理,将每个模块的功能用相应的标准控制结构表示出来,从而实现详细设计。,软件工程的方法,2018/9/8,32,(4)特点: 简单实用, 应用较广,技术成熟。适合于数据处理领域的问题。 对于规模大的项目及特别复杂的项目不太适应,难于解决软件重用问题,难于适应需求变化的问题,难于彻底解决维护问题。,2018/9/8,33,2、面向对象的开发方法=对象+类+继承+用消息通信 (1)基本出发点:尽可能按照人

18、类认识世界的方法和思维方式来分析和解决问题。客观世界是由许多具体的事物、事件、概念和规则组成,这些均可看成对象。 以对象作为最基本的元素,它也是分析问题、解决问题的核心。符合人类的认识规律。面向对象开发方法包括面向对象分析、面向对象设计和面向对象实现。 为了统一各种面向对象方法的术语、概念和模型,1997年推出了统一建模语言,即UML(Unified Modeling Language)。 它是面向对象的标准建模语言,可通过统一的语义和符号表示, 使各种方法的建模过程和表示统一起来,将成为面向对象建模的工业标准。,2018/9/8,34,ISO 9000定义:软件过程是把输入转化为输出的一组彼

19、此相关的资源和活动。 软件工程过程包含四种基本的过程活动:Plan 软件规格说明:规定软件的功能、性能及其运行限制。Do 软件开发:产生满足规格说明的软件,包括设计与编码等工作。Check 软件确认:确认软件能够满足客户提出的要求,对应于软件测试。Action 软件演进:为满足客户的变更要求,软件必须在使用的过程中演进,以求尽量延长软件的生命周期。,2.2 软件工程过程,2018/9/8,35,2.3 软件过程模型,通常使用软件生存期模型描述软件过程:它是软件工程思想的具体化,是跨越软件生存期的系统开发、运行、维护所实施的全部活动和任务的过程框架。 常用的软件生存期模型有瀑布模型演化模型螺旋模

20、型增量模型喷泉模型智能模型 等等,2018/9/8,36,一、线性顺序模型(瀑布模型),各项活动按自上而下,相互衔接的固定次序,如同瀑布逐级下落。每项活动均处于一个质量环(输入-处理-输出-评审)中。虽然瀑布模型支持带反馈的循环,但大多数使用者均把它视为是严格线性的。,2018/9/8,37,1、优点: (1)强迫开发人员采用规范的技术方法; (2)严格规定每个阶段必须提交的文档-“由文档驱动”; (3)每个阶段结束前必须正式进行严格的技术审查和管理复审。 2、缺点: (1)不适应需求经常发生变更的环境。“在沙滩上盖楼房”。 (2)线性顺序模型也经常不能接受项目开始阶段自然存在的不确定性。在采

21、用线性顺序模型的时候,用户只有到项目的开发晚期才能够得到程序的可运行版本。某些项目组成员不得不等待组内其他成员先完成前驱任务才可能展开自己的工作。,2018/9/8,38,3、适用范围 对于需求确定、变更相对较少的项目,线性顺序模型仍然是一种可以考虑采取的过程模型。但在“用户驱动”的商业软件开发中,采用线性顺序模型并不是一个好的选择。,2018/9/8,39,二、快速原型模型,建立一个简化了的样品程序并使之运行,引导用户通过对样品运行情况的观察,进一步明确需求或验证算法的正确性。这种开发模式就称之为“原型模型” 。,2018/9/8,40,使用原型模型前提: 其一是用户必须积极参与原型的建造。

22、 其二是必须有快速开发工具可供使用。 ,2018/9/8,41,三、演化过程模型(迭代),1、基本思想:“分期完成、分步提交”。,2、主要特点:“迭代”,使工程师们渐进地开发,生产出逐步完善的软件版本。用户的支持、理解和全程参与是成功采用演化模型的重要前提,不能“一步到位”。 3、演化模型分为“增量”模型和“螺旋”模型两种。,2018/9/8,42,(1)增量模型(渐增模型)增量模型融合了线性顺序模型的基本成分(重复的应用这些成分)和原型模型的迭代特征。包括增量开发和增量提交。增量开发是以一定的时间间隔增量方式向用户提交工作软件及相应文档. 和原型模型不一样的是,增量模型虽然也具有“迭代”特征

23、,但是每一个增量都发布一个可操作的产品,不妨称之为“产品扩充迭代”。,2018/9/8,43,图2.8 增量模型,从实现软件的基本需求到逐步完善,2018/9/8,44,主要优点: (1)能在较短时间内向用户提交可完成的部分工作的产品; (2)用户有较充裕的时间学习和适应新产品 。,2018/9/8,45,(2)螺旋模型,2018/9/8,46,(2)螺旋模型,是在每个都增加了风险分析过程的快速原型模型。 和增量模型不同,它并不要求每一个增量都是可以运行的程序。 螺旋模型沿着螺线旋转,自内向外每旋转一圈便开发出更完善的一个新版本。 有利于已有软件的重用 有利于把软件质量作为软件开发的一个重要目

24、标 减少了测试不足带来的风险 软件维护和软件开发无本质区别 要求开发人员具有丰富的风险评估知识和经验 螺旋模型能够适应于计算机软件产品的整个生命周期,而不是当软件交付后就结束过程。对于大型系统及软件的开发工作来说,螺旋模型是一种很好的模型方法。,2018/9/8,47,四、快速应用开发模型,快速应用开发(RAD)模型是线性顺序模型的一个“高速”变种,强调极端的开发周期。,系统的每一个主要功能部件可以由一个单独的RAD工作组完成,最后再将所有的部件集成起来形成完整的软件。,2018/9/8,48,1、特点: (1)通过使用基于构件的建造方法达到快速开发的效果。 (2)支持多小组并行工作以缩短整体

25、工期。 2、前提:需求得到很好理解、项目的范围约束明晰下(通常不容易保证这样的条件), 3、适用范围:RAD过程主要用于信息应用软件的开发。它不适用于技术风险很高的、要采用很多新技术的项目。,五、面向对象模型,1、喷泉模型(Fountain Model) 2、可重用部件组装模型 (构件集成模型Component Integration Model),2018/9/8,50,1、喷泉模型,迭代:系统某个部分常常重复工作多次,相关对象在每次迭代中随之加入演进的软件成分(增量,逐步精炼)。 无间隙:指在各项开发活动之间不存在明显的边界。 喷泉模型是对象驱动的过程。,2 可重用部件组装模型(构件集成模

26、型),构件(components):可重用的软件成份 可复用性(Reusability) 集成化软件开发环境(ISEE),软件需求,标识构件,检索构件库,开发构件,取出构件,存入构件库,集成目标系统,无,有,2018/9/8,52,2.5 软件开发工具,1. 软件工具的重要性软件工具一般是指为了支持软件人员开发和维护活动而使用的软件。例如,项目估算工具、需求分析工具、设计工具、 编码工具、 测试工具和维护工具等。 使用了软件工具后,可大大提高软件生产率。2. 工具箱将各种工具简单组合起来就构成工具箱。 但是,工具箱的工具界面不统一,工具内部无联系,工具切换由人工操作。因此,它们对大型软件的开发

27、和维护的支持能力是有限的,即使可以使用众多的软件工具,但由于这些工具之间相互隔离、 独立存在, 无法支持一个统一的软件开发和维护过程。,2018/9/8,53,3. 软件开发环境由于工具箱存在的问题,人们在工具系统的整体化及集成化方法展开了一系列研究工作,目的是使软件工具支持整个生存周期。不仅支持各阶段中的技术工作,还要支持管理和操作工作, 保持项目开发的高度可见性、 可控制性和可追踪性。,2018/9/8,54,4. 计算辅助软件工程可以简单地定义为软件开发的自动化, 通常简称为CASE(Computer Aided Software Engineering)。 CASE的实质是为软件开发提供一组优化集成的且能大量节省人力的软件开发工具,其目的是实现软件生存周期各环节的自动化并使之成为一个整体。 (Enterprise Architect用于设计和构建软件系统、业务流程建模及更多通用的建模。),2018/9/8,55,一个软件项目的开发中,要采用一种生存周期模型,要按照某种开发方法, 使用相关的工具系统进行。 (1)结构化方法可使用瀑布模型、增量模型和螺旋模型进行开发; (2)面向对象的开发方法一般是采用喷泉模型,也可用瀑布模型、 增量模型进行开发,,总 结,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报