《软件体系结构与设计模式 第一章.ppt》由会员分享,可在线阅读,更多相关《软件体系结构与设计模式 第一章.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章 软件危机 什么是软件什么是软件1.1 1.1 软件软件 软件的分类软件的分类1.1 1.1 软件软件通用软件(Generic SoftwareGeneric Software)通用软件是由软件开发组织开发,面向市场用户公开销售的独立运行系统,有时也被称为套装软件。举例:操作系统、数据库系统、字处理软件等定制软件(Customized SoftwareCustomized Software)定制软件是由某个特定客户委托,软件开发组织在合同的约束下开发的软件。举例:企业ERP ERP 系统、卫星控制系统、空中交通指挥系统等 软件的应用软件的应用1.1 1.1 软件软件 软件的本质特征软件的
2、本质特征1.1 1.1 软件软件复杂性(Complexity Complexity)一致性(Conformity Conformity)可变性(Changeability Changeability)不可见性(Invisibility Invisibility)软件的本质特征软件的本质特征1.1 1.1 软件软件复杂性软件在规模上可能比任何由人类创造的其他实体都要复杂,复杂性是软件的本质特性。软件的复杂性是必要属性大量的组合状态丰富的结构和相互依赖性良好的接口用以封装内部的复杂性开发问题也会增加复杂性高效率的代码通常是复杂的重用通用化的组件意味着复杂的状态连接复杂的代码难以维护,导致设计上的更
3、复杂 软件的本质特征软件的本质特征1.1 1.1 软件软件一致性软件必须遵从人为的惯例并适应已有的技术和系统软件必须遵循各种接口、协议和标准有些情况下,兼容性是软件开发的目标软件需要随接口的不同而改变,随时间的推移而变化,而这些变化是不同的人设计的结果。许多复杂性来自保持与其他接口的一致,对软件的任何再设计,都无法简化这些复杂特性。软件的本质特征软件的本质特征1.1 1.1 软件软件可变性软件产品扎根于文化的母体中,如各种应用、用户、自然及社会规律、计算机硬件等,后者持续不断地变化着,这些变化无情地强迫着软件随之变化。所有成功的软件都会发生变更!当人们发现软件很有用时,会在原有应用范围的边界,
4、或者在超越边界的情况下使用软件;功能扩展的压力主要来自那些喜欢基本功能,又对软件提出了很多新用法的用户们。软件的本质特征软件的本质特征1.1 1.1 软件软件不可见性软件是不可见的和无法可视化的软件的客观存在不具有空间的形体特征定义“需要做什么”成为软件开发的根本问题人们一直试图使用不同的技术进行软件可视化控制流程、数据流、依赖关系、UMLUML、这些技术仍然无法给出准确的、完整的描述软件仍然保持着无法可视化的固有特性,从而剥夺了一些具有强大功能的概念工具的构造思路。这种缺憾不仅限制了个人的设计过程,也严重地阻碍了相互之间的交流。软件工程的定义软件工程的定义1.2 1.2 软件的发展阶段软件的
5、发展阶段Bauer,1972Bauer,1972软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。CMU,1990CMU,1990软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题。IEEE,1993IEEE,1993软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;对中所述方法的研究。软件工程的软件工程的关注焦点关注焦点1.2 1.2 软件的发展阶段软件的发展阶段软件质量(SoftwareSoftware Quality Quality)软件质量是软件产品与明确的和隐含的需求相一
6、致的程度软件质量通常采用一系列质量特性来描述软件成本(SoftwareSoftware Cost Cost)软件开发成本是指软件开发过程中所花费的费用软件维护成本是指软件投入运行后软件变更所需的费用 软件工程的软件工程的三要素三要素1.2 1.2 软件的发展阶段软件的发展阶段 软件工程软件工程面临的挑战面临的挑战1.2 1.2 软件的发展阶段软件的发展阶段遗留系统的问题遗留系统是指那些过时或存在问题的计算机系统,通常是许多年以前开发的挑战:既要以合理的成本维护和更新系统,又要能够继承系统中重要的商业信息和服务异构系统的问题网络环境下包含不同的硬件平台和软件系统挑战:需要提出新的开发技术,能够使
7、所开发的软件系统运行在不同的硬件平台和系统环境下 软件工程软件工程面临的挑战面临的挑战1.2 1.2 软件的发展阶段软件的发展阶段高可信软件开发的要求软件的重要作用要求正确性、可靠性、安全性等可信性质挑战:如何在软件的开发和运行中保证其具有高可信的性质软件开发方式的变化网络时代带来的冲击开源软件开发技术Web 工程挑战:研究分布式的软件体系结构和开发模式,探索与之相适应的软件工程策略 软件危机的表现软件危机的表现 软件成本日益增长软件成本日益增长 开发进度难以控制开发进度难以控制 软件质量差软件质量差 软件维护困难软件维护困难1.3 1.3 软件危机软件危机 软件危机的表现软件危机的表现 软件
8、成本日益增长软件成本日益增长 2020世纪世纪5050年代,软件成本在整个计算机系统成本中所年代,软件成本在整个计算机系统成本中所占的比例为占的比例为10%-20%10%-20%。到。到2020世纪世纪6060年代中期,软件成本在年代中期,软件成本在计算机系统中所占的比例已经增长到计算机系统中所占的比例已经增长到50%50%左右。左右。而且,该数字还在不断地递增,下面是一组来自美国而且,该数字还在不断地递增,下面是一组来自美国空军计算机系统的数据:空军计算机系统的数据:19551955年,软件费用约占总费用的年,软件费用约占总费用的18%18%,19701970年达到年达到60%60%,197
9、51975年达到年达到72%72%,19801980年达到年达到80%80%,19851985年达到年达到85%85%左右。左右。1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 软件危机的表现软件危机的表现 开发进度难以控制开发进度难以控制 由于软件是逻辑、智力产品,软件的开发需建立庞大由于软件是逻辑、智力产品,软件的开发需建立庞大的逻辑体系,这是与其他产品的生产不一样的。的逻辑体系,这是与其他产品的生产不一样的。在在软软件件开开发发过过程程中中,用用户户需需求求变变化化等等各各种种意意想想不不到到的的情情况况层层出出不不穷穷,令令软软件件开开发发过过程程很很难难
10、保保证证按按预预定定的的计计划划实实现,给项目计划和论证工作带来了很大的困难。现,给项目计划和论证工作带来了很大的困难。盲盲目目增增加加软软件件开开发发人人员员并并不不能能成成比比例例地地提提高高软软件件开开发发能能力力。相相反反,随随着着人人员员数数量量的的增增加加,人人员员的的组组织织、协协调调、通信、培训和管理等方面的问题将更为严重。通信、培训和管理等方面的问题将更为严重。1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 软件危机的表现软件危机的表现 软件质量差软件质量差 软件项目即使能按预定日期完成,结果却不尽人意。软件项目即使能按预定日期完成,结果却不尽人
11、意。19651965年至年至19701970年,美国范登堡基地发射火箭多次失败,绝年,美国范登堡基地发射火箭多次失败,绝大部分故障是由应用程序错误造成的。大部分故障是由应用程序错误造成的。在在“软件作坊软件作坊”里,由于缺乏工程化思想的指导,程里,由于缺乏工程化思想的指导,程序员几乎总是习惯性地以自己的想法去代替用户对软件的序员几乎总是习惯性地以自己的想法去代替用户对软件的需求,软件设计带有随意性,很多功能只是程序员的需求,软件设计带有随意性,很多功能只是程序员的“一一厢情愿厢情愿”而已,这是造成软件不能令人满意的重要因素。而已,这是造成软件不能令人满意的重要因素。1.3 1.3 软件危机软件
12、危机1.1 1.1 从软件危机谈起从软件危机谈起 软件危机的表现软件危机的表现 软件维护困难软件维护困难 由于在软件设计和开发过程中,没有严格遵循软件开由于在软件设计和开发过程中,没有严格遵循软件开发标准,各种随意性很大,没有完整的真实反映系统状况发标准,各种随意性很大,没有完整的真实反映系统状况的记录文档,给软件维护造成了巨大的困难。的记录文档,给软件维护造成了巨大的困难。特别是在软件使用过程中,原来的开发人员可能因各特别是在软件使用过程中,原来的开发人员可能因各种原因已经离开原来的开发组织,使得软件几乎不可维护。种原因已经离开原来的开发组织,使得软件几乎不可维护。有资料表明,工业界为维护软
13、件支付的费用占全部硬有资料表明,工业界为维护软件支付的费用占全部硬件和软件费用的件和软件费用的40%-75%40%-75%。1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 软件危机的原因软件危机的原因 用户需求不明确用户需求不明确 缺乏正确的理论指导缺乏正确的理论指导 软件规模越来越大软件规模越来越大 软件复杂度越来越高软件复杂度越来越高1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 用户需求不明确用户需求不明确 在软件开发完成之前,用户不清楚软件的具体需求;在软件开发完成之前,用户不清楚软件的具体需求;用户对软件需求的描述不精确,可
14、能有遗漏、有二义用户对软件需求的描述不精确,可能有遗漏、有二义性、甚至有错误;性、甚至有错误;在软件开发过程中,用户还提出修改软件功能在软件开发过程中,用户还提出修改软件功能、界面界面、支撑环境等方面的要求;支撑环境等方面的要求;开发人员对用户需求的理解与用户本来愿望有差异。开发人员对用户需求的理解与用户本来愿望有差异。1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 软件危机的原因软件危机的原因 缺乏正确的理论指导缺乏正确的理论指导 缺乏有力的方法学和工具方面的支持。由于软件不同缺乏有力的方法学和工具方面的支持。由于软件不同于大多数其他工业产品,其开发过程是复杂的
15、逻辑思维过于大多数其他工业产品,其开发过程是复杂的逻辑思维过程,其产品极大程度地依赖于开发人员高度的智力投入。程,其产品极大程度地依赖于开发人员高度的智力投入。由于过分地依靠程序设计人员在软件开发过程中的技巧和由于过分地依靠程序设计人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化,也是发生软件危机的一创造性,加剧软件产品的个性化,也是发生软件危机的一个重要原因。个重要原因。1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 软件危机的原因软件危机的原因 软件规模越来越大软件规模越来越大 随着软件应用范围的增广,软件规模愈来愈大。大型随着软件应用范围的增广,软件
16、规模愈来愈大。大型软件项目需要组织一定的人力共同完成,而多数管理人员软件项目需要组织一定的人力共同完成,而多数管理人员缺乏开发大型软件系统的经验,而多数软件开发人员又缺缺乏开发大型软件系统的经验,而多数软件开发人员又缺乏管理方面的经验。各类人员的信息交流不及时、不准确、乏管理方面的经验。各类人员的信息交流不及时、不准确、有时还会产生误解。有时还会产生误解。软件项目开发人员不能有效地、独立自主地处理大型软件项目开发人员不能有效地、独立自主地处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误。软件的全部关系和各个分支,因此容易产生疏漏和错误。1.3 1.3 软件危机软件危机1.1 1.1 从
17、软件危机谈起从软件危机谈起 软件危机的原因软件危机的原因 软件复杂度越来越高软件复杂度越来越高 软件不仅仅是在规模上快速地发展扩大,而且其复杂软件不仅仅是在规模上快速地发展扩大,而且其复杂性也急剧地增加。软件产品的特殊性和人类智力的局限性,性也急剧地增加。软件产品的特殊性和人类智力的局限性,导致人们无力处理导致人们无力处理“复杂问题复杂问题”。所谓所谓“复杂问题复杂问题”的概念是相对的,一旦人们采用先的概念是相对的,一旦人们采用先进的组织形式、开发方法和工具提高了软件开发效率和能进的组织形式、开发方法和工具提高了软件开发效率和能力,新的、更大的、更复杂的问题又摆在人们的面前。力,新的、更大的、
18、更复杂的问题又摆在人们的面前。1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 软件危机的原因软件危机的原因 如何克服软件危机如何克服软件危机 人们面临的不光是技术问题,更重要的是管理问人们面临的不光是技术问题,更重要的是管理问题。管理不善必然导致失败题。管理不善必然导致失败 。要提高软件开发效率,提高软件产品质量,必须要提高软件开发效率,提高软件产品质量,必须采用工程化的开发方法与工业化的生产技术。采用工程化的开发方法与工业化的生产技术。在技术上,应该采用基于重用的软件生产技术;在技术上,应该采用基于重用的软件生产技术;在管理上,应该采用多维的工程管理模式。在管理
19、上,应该采用多维的工程管理模式。1.3 1.3 软件危机软件危机1.1 1.1 从软件危机谈起从软件危机谈起 1.4 1.4 软件过程软件过程1.1 1.1 从软件危机谈起从软件危机谈起 1.4 1.4 软件过程软件过程软件过程是软件工程人员为了获得软件产品而在软件工具的支持下实施的一系列软件工程活动。软件过程应该明确定义团队人员的工作和职责所执行的活动及其顺序关系活动的内容和步骤软件过程的目标标准化、预见性、生产率、高质量、计划进度和预算的能力1.4 1.4 软件过程软件过程软件过程的四个基本活动规格说明(SpecificationSpecification)定义软件功能以及对其使用的限制软
20、件开发(DevelopmentDevelopment)设计和实现满足规格说明的软件软件确认(ValidationValidation)验证软件以保证能够满足客户的要求软件演化(EvolutionEvolution)改进软件以适应不断变化的需求不同的组织或软件类型拥有不同的软件开发活动。1.4 1.4 软件过程软件过程软件规格说明软件规格说明1.4 1.4 软件过程软件过程软件设计与实现软件设计与实现1.4 1.4 软件过程软件过程软件确认软件确认1.4 1.4 软件过程软件过程软件演化软件演化1.4 1.4 软件过程软件过程软件过程模型软件过程模型软件过程模型软件过程模型是对实际过程的抽象描述
21、包括软件过程的活动、软件产品以及参与人员的不同角色常见的软件过程模型瀑布模型快速原型模型增量模型螺旋模型形式化方法模型基于组件的开发模型1.4 1.4 软件过程软件过程瀑布模型瀑布模型1.4 1.4 软件过程软件过程瀑布模型瀑布模型适用在开发的早期阶段软件需求被完整确定挑战实际的项目开发很少是线性的过程,客户很难明确地描述软件需求缺点各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量开发过程中很难响应客户的变更要求早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果1.4 1.4 软件过程软件过程快速原型模型快速原型模型1.4 1.4 软件过程软件过程快速原型模型
22、快速原型模型目的减少开发风险和需求不确定性缺点原型系统的内部结构可能不好开发人员需要掌握建立快速原型的开发技术和工具适用小型或中等规模的交互式系统大型系统的某些部分,例如用户界面生命周期较短的系统1.4 1.4 软件过程软件过程增量模型增量模型1.4 1.4 软件过程软件过程增量模型增量模型优点整个产品被分解成若干个构件逐步交付,用户可以不断地看到所开发软件的可运行中间版本将早期增量作为原型有助于明确后期增量的需求降低开发风险重要功能被首先交付,从而使其得到最多的测试缺点需要软件具备开放式的体系结构需求难以在增量实现之前详细定义,因此增量与需求的准确映射以及所有增量的有效集成可能会比较困难容易
23、退化为边做边改方式,使软件过程的控制失去整体性1.4 1.4 软件过程软件过程螺旋模型螺旋模型1.4 1.4 软件过程软件过程螺旋模型螺旋模型螺旋回线每一个回线表示开发过程的一个阶段例如最中心的第一个回线可能与系统可行性有关,接着第二个回线与需求定义有关,第三个回线与软件设计有关等四个步骤确定该阶段目标、完成这些目标的可选方案及其约束条件从风险角度分析方案的开发策略,努力排除各种潜在的风险,在需求不适当的情况下可能需要建造原型系统软件开发和验证工作评价该阶段的结果,并规划下一个开发阶段1.4 1.4 软件过程软件过程螺旋模型螺旋模型优点关注软件的重用关注早期错误的消除将质量目标放在首位将开发阶
24、段与维护阶段结合在一起缺点契约开发通常需要事先指定过程模型和发布产品需要风险评估的经验1.4 1.4 软件过程软件过程形式化方法模型形式化方法模型1.4 1.4 软件过程软件过程形式化方法模型形式化方法模型适用特别适合于那些对安全性、可靠性和保密性要求极高的软件系统,这些系统需要在投入运行前进行验证优点由于数学方法具有严密性和准确性,形式化方法开发过程所交付的软件系统具有较少的缺陷和较高的安全性缺点开发人员需要具备一定技能并经过特殊训练形式化描述和转换是一项费时费力的工作现实应用的系统大多数是交互性强的软件,但是这些系统难以用形式化方法进行描述1.4 1.4 软件过程软件过程基于组件的开发模型基于组件的开发模型1.4 1.4 软件过程软件过程基于组件的开发模型基于组件的开发模型组件开发技术的两个重要因素基于组件的软件体系结构基于组件的开发过程优点充分体现软件复用的思想实现快速交付软件缺点商业组件的修改受到限制,影响系统的演化