版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
现代软件工程
主讲(zhǔjiǎng):刘念
liu-nian@
05一月2025共四百零一页课程(kèchéng)概述一、软件工程学科介绍(jièshào)二、学习目标三、部分参考资料四、课程特点和学习的注意事项五、教材简介共四百零一页一、软件工程(ruǎnjiànɡōnɡchénɡ)学科介绍软件程学科发展历史三个阶段(jiēduàn):概念提出、学科雏形、学科确立第一阶段:概念提出1968年NATO会议(北大西洋公约组织的计算机科学家的国际会议)提出“软件工程”概念。当时对“软件工程”代表性定义:为了经济地获得在真实机器上可靠工作的软件而制定和使用的合理工程原则和方法。1972年IEEE学会的计算机分会IEEE一CS第一次出版了“软件工程学报”共四百零一页第二阶段:学科(xuékē)雏形上世纪70年代末,美国将软件工程教程列入研究生教育计划。1980年代末和1990年代初,软件工程教育得到卡内基一梅隆大学软件工程研究所(CMU/SEI)的支持。1991年,“软件工程”被ACM(美国计算机协会)和IEEE/CS列为计算学科的九个知识领域之一。
1993年,IEEE一CS和ACM为了把软件工程建设成为一个专业(zhuānyè),建立了IEEE一CS/ACM联合指导委员会。共四百零一页第三阶段:学科(xuékē)确立2004年8月,IEEE一CS和ACM给出:软件工程知识体(SWEBOK,SoftwareEngineeringBodyofKnowledge)软件工程教育知识体(SEEK)最终版,标志着软件工程学科在世界范围正式确立。软件工程(gōngchéng)、计算机科学、计算机工程(gōngchéng)、信息系统、信息技术并列成为计算学科下的独立学科。软件工程知识体(SWEBOK):全面描述了软件工程实践所需的知识。共四百零一页SWEBOK(软件工程知识(zhīshi)体》10个领域软件需求(xūqiú)软件设计软件构造软件测试软件维护软件配置管理软件工程管理软件工程过程软件工程工具和方法软件质量参考资料:[1]白征.SWEBOK:软件工程知识体,计算机科学,2001年07期[2]万江平.软件工程知识体系指南综述,计算机应用研究,2006年10期共四百零一页SWEBOK详细(xiángxì)结构(1)共四百零一页共四百零一页软件工程与其他(qítā)学科的关系1、软件工程是计算学科9个领域之一.算法和数据结构计算机系统结构人工智能和机器人学数据库和信息检索人一机交互操作系统(cāozuòxìtǒnɡ)程序设计语言软件方法学和软件工程数字和符号计算共四百零一页2、8个相关(xiāngguān)学科知识域计算机工程计算机科学数学(shùxué)管理学项目管理质量管理系统工程学软件人类工程学其中:计算机科学、数学是基础工程学科、管理学科也非常重要共四百零一页软件工程是一门(yīmén)什么样的学科?
是指导计算机软件开发与维护的一门工程学科。工程:将科学及数学原理运用于实际用途(yòngtú)的应用手段,如:设计、制造、机器操纵、构架等。典型的传统工程:建筑工程、机械工程、电力工程等。概括的说,软件工程即用工程、科学和数学的原则和方法研制、维护计算机软件的有关技术及方法,其优点是以较小的代价开发高质量的软件并有效地维护它。共四百零一页二、学习(xuéxí)目标(1)
掌握软件工程的基础知识和理论,对软件工程学有一个全貌的了解(liǎojiě);熟悉软件项目开发和维护的一般过程;熟练掌握软件需求分析、设计、编码和测试等阶段的主要思想和技术方法;共四百零一页二、学习(xuéxí)目标(2)
通过学习,真正运用和深刻(shēnkè)体会软件工程的思想方法,转变对软件开发的认识:从个人的单纯编程活动转移到进行系统分析与设计方面上来转变思维定式:程序员―系统工程师(系统分析员)共四百零一页教材(jiàocái)现代(xiàndài)软件工程清华大学出版社~张晓龙(编者)共四百零一页三、部分(bùfen)参考资料《软件工程理论与实践》许家冶等编著,高等教育出版社,2005年《软件工程》(第二版),齐治昌等,高等教育出版社,2004年《面向对象的系统分析》,杨芙清等编著,清华大学出版社,2001年《UML用户(yònghù)指南》GBooch等著,邵维忠等译,机械工业出版社2002年共四百零一页四、课程(kèchéng)特点和学习的注意事项1、知易行难要将理论知识与实践运用结合,进行对照,以加深理解和掌握。2、内容纷杂软件工程涉及计算机科学、数学、工程科学和管理科学等多个领域。其中:计算机科学和数学用于构造模型与算法(suànfǎ);工程科学用于制定规范、设计范型、评估成本及确定权衡管理科学用于计划、资源、质量和成本的管理。共四百零一页五、教材(jiàocái)总目录第1章现代(xiàndài)软件工程概述第2章面向对象软件开发方法第3章面向对象分析与设计技术第4章UML建模技术第5章软件复用基础第6章基于组件与WebService的软件开发技术第7章软件设计模式第8章软件体系结构第9章敏捷软件过程第10章软件测试技术与工具第11章软件项目管理第12章面向对象实现软件成熟度模型与软件过程共四百零一页第1章现代软件工程(ruǎnjiànɡōnɡchénɡ)概述1.1软件1.2软件危机(wēijī)
1.3软件工程1.4软件的生命周期1.5软件过程的目标和原则1.6本章小结共四百零一页学习(xuéxí)重点1、软件危机、软件工程产生的原因2、软件工程过程和软件生命周期3、软件生命周期模型(móxíng)掌握几个基本概念软件危机软件工程软件过程软件生命周期软件生命周期模型共四百零一页§1.1软件(ruǎnjiàn)§1.1.1软件的概念计算机软件(ComputerSoftware)是指计算机系统中的程序及其文档。程序是计算(jìsuàn)任务的处理对象和处理规则的描述;文档是为了便于了解程序所需的阐明性资料。程序必须装入机器内部才能工作,文档一般是给人看的,不一定装入机器。软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须通盘考虑软件与硬件的结合,以及用户的要求和软件的要求。共四百零一页§1.1软件(ruǎnjiàn)§1.1.2软件的特点是一种逻辑实体,具有抽象性;生产方式不同;依赖于计算机系统;没有像硬件(yìnɡjiàn)那样的机械磨损和老化;手工开发为主;复杂性;成本高;涉及社会因素。共四百零一页§1.1软件(ruǎnjiàn)§1.1.3软件的分类计算机软件总体(zǒngtǐ)分为系统软件和应用软件两大类:系统软件是各类操作系统,如windows、Linux、UNIX等,还包括操作系统的补丁程序及硬件驱动程序,都是系统软件类。应用软件可以细分的种类就更多了,如工具软件、游戏软件、管理软件等都属于应用软件类。
共四百零一页§1.1软件(ruǎnjiàn)§1.1.3软件的分类系统软件系统软件是负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户(yònghù)身份验证,驱动管理,网络连接等方面的工具)。共四百零一页§1.1软件(ruǎnjiàn)§1.1.3软件的分类应用软件应用软件是为了某种特定(tèdìng)的用途而被开发的软件。它可以是一个特定(tèdìng)的程序,比如一个图像浏览器。也可以是一组功能联系紧密,可以互相协作的程序的集合,比如微软的Office软件。也可以是一个由众多独立程序组成的庞大的软件系统,比如数据库管理系统。较常见的有:
文字处理软件如WPS、Word等信息管理软件
辅助设计软件如AutoCAD实时控制软件教育与娱乐软件
共四百零一页软件(ruǎnjiàn)危机与软件(ruǎnjiàn)工程学软件工程学的产生要从“软件危机”说起1968年,第一届NATO(北大西洋公约组织的计算机科学家的国际会议)会议,“软件工程”的慨念作为一种有效(yǒuxiào)解决“软件危机”的途径被正式提出。什么是软件危机?软件危机有什么典型表现?为什么会产生软件危机?怎么解决软件危机?共四百零一页§1.2软件(ruǎnjiàn)危机§1.2.1软件危机的出现什么是软件危机?软件危机指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。软件危机主要包括的问题(两方面(fāngmiàn)):
①如何开发软件②如何维护软件共四百零一页软件危机有什么典型(diǎnxíng)表现?(1)开发费用和进度难以估算和控制,大大(dàdà)超过预期的资金和规定日期;软件需求分析不够充分,用户不满意“已经完成”的软件系统。软件质量难于保证;软件维护困难;难以改正程序中的错误;难以根据用户的需要在原有程序中增加一些新的功能。共四百零一页软件危机有什么典型(diǎnxíng)表现?通常没有保留适当的文档资料。文档的作用:软件开发管理人员:用于管理和评价软件开发工程的进展状况软件开发人员:用于开发人员对各个阶段的工作都进行周密思考(sīkǎo)、全盘权衡、从而减少返工。并且可在开发早期发现错误和不一致性,便于及时加以纠正软件维护人员:软件维护的依据开发成本逐年上升,软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。共四百零一页共四百零一页几个软件(ruǎnjiàn)危机的著名案例①1966年,IBM360机的操作系统。花费5000人一年的工作量,写了近1万行代码。错误百出,每次的新版本就是从前一版本中找1000个程序错误而修正的结果。②1963年,美国用于控制火星探测器的计算机软件中的一个“
,”号被误写为“.”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。③美国丹佛新国际机场自动化行李系统软件。投资1.93亿美元,计划1993年万圣节启用。但开发人员一直为系统错误困扰,屡次推后启用时间,直到(zhídào)
1994年6月,机场计划者承认无法预测何时能启用。④1996年,欧洲阿里亚纳5型运载火箭坠毁,造成5亿美元损失。原因是控制软件中的一个错误。共四百零一页§1.2.2产生软件危机(wēijī)的原因主要两个原因:
1、与软件本身的特点有关(yǒuguān)
2、与软件开发与维护的方法不正确有关。共四百零一页一、软件(ruǎnjiàn)本身的特点(1)软件与硬件、一般程序存在很多不同之处。
1、软件与硬件不同抽象性。软件生产没有明显的制造过程,难以衡量开发进展,也难以控制软件质量。问题的隐蔽性。没有硬件的磨损、老化问题,但存在开发早期在分析、设计阶段的错误(cuòwù),修改难度较大。共四百零一页失效率蜘线共四百零一页改正(gǎizhèng)一个问题需付出的代价共四百零一页2、软件与一般(yībān)程序不同(1)①软件远比一般程序规模庞大,复杂性高软件所反映的实际问题(wèntí)的复杂性程序逻辑结构的复杂性。例1:Windows95,1000万行代码;
Windows2000,5000万行代码例2:Exchange2000和windows2000开发人员共四百零一页软件(ruǎnjiàn)的规模软件产品的特殊性和人类智力的局限性,导致(dǎozhì)人们无力处理“复杂问题”。共四百零一页2、软件与一般(yībān)程序不同(2)②大型软件开发既有技术问题,还有社会问题。社会因素:组织(zǔzhī)机构、体制、管理方式、观念、人的心理素等。开发团队成员分工合作技术与管理的矛盾软件开发人员对软件应用的领域知识的了解共四百零一页二、软件开发维护方法中存在(cúnzài)的问题(1)①对用户(yònghù)需求的获取不正确用户的原因分析人员的原因
对分析人员的要求:沟通能力、归纳总结能力、经验越是早期产生的错误,付出的代价越大。图:不同时期引入同一变动的代价共四百零一页二、软件开发维护方法(fāngfǎ)中存在的问题(2)②软件开发就是编写程序。一个完整的软件产品由一整套完整的配置组成,程序只是其中的一个组成部分。软件开发过程包括多个阶段,每个阶段的产品都是最终的完整的软件产品的一部分。③软件开发只要依靠个别编程高手(gāoshǒu)就能完成。④轻视软件维护软件维护约占软件费用55一75%,包括修改软件运行的错误;对软件进行改进和功能扩充。共四百零一页软件维护在软件费用(fèiyong)的比例共四百零一页三、其他(qítā)产生软件危机的原因①软件开发尚未完全摆脱手工艺的开发方式。②软件成本相当昂贵,主要(zhǔyào)依靠大量复杂的、高强度的脑力劳动③软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。软件的“可移植性”就是指的软件对硬件的依赖程度。好的可移植性依赖少。共四百零一页§1.2.3消除(xiāochú)软件危机的途径1、彻底消除“软件(ruǎnjiàn)就是程序”的错误观念。2、充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,不是个人独立的劳动。
3、推广和使用在实践中总结出来的软件开发的成功技术和方法。
4、开发和使用更好的软件工具共四百零一页总结:“软件工程”的方法理论是摆脱软件危机的一个主要出路(chūlù)。计算机和软件科学家为解决软件危机问题,尝试将在其它领域中行之有效的工程学知识运用到软件开发工作中来,经过不断实践和总结,最后得出一个结论;按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。共四百零一页思考题(1)1)只要是编程高手,即使是不懂软件工程,也能编出很好的软件。软件是服务于大众,却是由个性化的开发人员完成的。如果(rúguǒ)个性化太强,程序就无法阅读,其他人员也就无法维护。例:国内80年代涌现出来的众多汉字操作系统均是由编程高手完成的。共四百零一页思考题(2)2)只要拥有一套讲述如何开发软件的书籍,并了解了书中的标准与示例,就可以解决软件开发中遇到的任何问题。软件是用来解决现实问题的,现实问题的特殊性对规范提出了挑战(要进行(jìnxíng)适应)。软件技术是发展的,没有祖传秘方。就像拥有食谱并不能成为名厨一样,软件开发需要实践。共四百零一页思考题(3)3)只要拥有最好的开发工具、最好的计算机,一定能做出优秀的软件(ruǎnjiàn)。硬件环境只是必要条件,人才是充分条件,软件是人在一定的约束条件下创造出来的。因人因事而异。共四百零一页思考题(4)4)软件开发时,如果进度慢,落后于计划,可以增加更多的程序员来解决。增加人力可以减少开发时间吗?新手!任务的重新划分!沟通更加复杂!必须依靠(yīkào)科学地计划来解决这样的问题。共四百零一页思考题(5)5)争议:如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?软件的性能问题;应用级别→算法的合理性;系统级别→操作系统、数据库系统、系统软件(xìtǒnɡruǎnjiàn)等;硬件级别→机器性能共四百零一页§1.3软件工程(ruǎnjiànɡōnɡchénɡ)§1.3.1软件工程介绍一、“软件工程”的典型定义1)1968年,第一届NATO会议为了经济地获得可靠的且能在实际机器上有效(yǒuxiào)地运行的软件,而建立和使用完善的工程原理。2)IEEE/CS(电气电子工程师协会/计算机科学分会)①1993年,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。②对①中提到的各种方法的研究共四百零一页3)其他学者(xuézhě)的定义Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。FritzBauer:建立并使用(shǐyòng)完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法所有定义都强调在软件开发过程中,应用工程化原则的重要性共四百零一页二、软件工程(ruǎnjiànɡōnɡchénɡ)本质特性(2)1)软件工程关注于大型程序(chéngxù)的构造。
2)软件工程的中心课题是控制复杂性主要考虑:如何分解和集成为什么要分解:G.Miller,“7士2”
原则3)软件经常变化4)开发软件的效率非常重要5)和谐地合作是开发软件的关键6)软件必须有效地支持它的用户7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品扩展定义:软件=知识+程序+数据+文档共四百零一页§1.3.2软件工程(ruǎnjiànɡōnɡchénɡ)的基本原理B.W.Boehm,1983年提出:
1)用分阶段的生命周期计划严格管理
2)坚持(jiānchí)进行阶段评审
3)实行严格的产品控制基线基线(baseline)控制
4)采用现代程序设计技术
5)结果应能清楚地审查
6)开发小组的人员应该少而精7)承认不断改进软件工程实践的必要性共四百零一页§1.3.3软件工程(ruǎnjiànɡōnɡchénɡ)方法学软件工程包括“管理”和“技术”两方面内容(nèiróng):管理——对人、财、物的合理使用和配置;技术——指软件开发中采用的方法、工具和过程。什么是软件工程方法学?通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。共四百零一页一、软件工程方法学三要素:工具(gōngjù)、方法和过程要素一:软件工程过程规定了完成各项任务的工作步骤(bùzhòu)。要素二:软件工程方法完成软件开发的各项任务的技术方法,为软件开发提供了“如何做”的技术。如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。要素三:软件工程工具计算机辅助软件工程CASE(computerAidedsottwareEngineering),为软件工程方法提供自动或半自动的软件支撑环境。共四百零一页二、软件工程(ruǎnjiànɡōnɡchénɡ)方法学思想两种:1、传统方法学(生命周期方法学或结构化范型(fànxínɡ))
2、面向对象方法共四百零一页1.传统(chuántǒng)方法学(生命周期方法学或结构化范型)采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务;把软件生命周期划分为若干个阶段,按顺序完成每个阶段的任务;每个阶段开始和结束都有严格的标准,对任何两个相邻的阶段而言,前一个(yīɡè)阶段的结束标准就是后一阶段的开始标准;每一个阶段结束之前都必须进行正式严格的技术审查和管理复审共四百零一页传统(chuántǒng)方法学的优点:分解任务,分工合作(fēngōnghézuò),降低整个软件开发工程的困难;采用科学的管理技术和良好的技术方法对每个阶段成果都进行严格的审查。保证了软件的质量。传统方法学的缺点:把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;共四百零一页2、面向对象方法学(OO,Object-oriented)
模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现(shíxiàn)解法的解空间(也称为求解域)在结构上尽可能一致。共四百零一页面向对象方法学4要点(yàodiǎn)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。把所有对象都划分(huàfēn)成类(class)。按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。对象彼此间仅能通过发送消息互相联系。共四百零一页优点(yōudiǎn)面向对象方法是主动地多次反复迭代的演化过程。优点(yōudiǎn):降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。共四百零一页3软件(ruǎnjiàn)生命周期一、什么是软件生命周期(lifecycle)指软件孕育、诞生、成长(chéngzhǎng)、成熟、衰亡的生存过程
GB一8567中将软件生命周期分为7个阶段:可行性研究和项目开发计划;需求分析;慨要设计;详细设计;编码;测试;维护其他分法,5个阶段:需求定义、设计、编码、测试及维护;需求定义阶段包括可行性研究和项目开发计划、需求分析;设计阶段包括慨要设计和详细设计。共四百零一页本教材(jiàocái)对软件生命周期的划分共四百零一页1、软件(ruǎnjiàn)定义时期任务:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该(yīnggāi)采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。通常分为问题定义、可行性研究和需求分析三个阶段。共四百零一页软件定义(dìngyì)时期的三个阶段①问题定义阶段回答:
回答:“要解决的问题是什么?”
②可行性研究阶段回答:“对于(duìyú)上一个阶段所确定的问题有行得通的解决办法吗?
③需求分析(RequirementAnalysis)回答“为了解决这个问题,目标系统必须做什么?
用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。共四百零一页2、软件开发时期(shíqī)具体(jùtǐ)设计和实现前一个时期定义的软件,通常分为四个阶段:①总体设计(概要设计)回答:“概括地说,应该怎样实现目标系统?”根据需求分析,设计软件的体系结构;定义结构中的组成模块。②详细设计(模块设计)回答:“应该怎样具体地实现这个系统呢?”对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。编写设计说明书,提交评审。二者统称系统设计
共四百零一页软件开发时期(shíqī)四个阶段③程序编写(Coding,Programming):把软件设计转换成计算机可以(kěyǐ)接受的程序代码。④软件测试(Testing):按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,包括单元测试和组装测试。二者统称系统实现共四百零一页3、运行维护(wéihù)(软件维护(wéihù))时期使软件持久的满足用户的需要。包括:改正性维护:运行中发现了软件中的错误需要修正。适应性维护:为了适应变化了的软件工作环境(huánjìng),需做适当变更。完善性维护:当用户有新的要求时,应该及时改进软件以满足用户的要求。预防性维护:即修改软件为将来的维护活动预先做准备。共四百零一页1.4软件(ruǎnjiàn)的生命周期1、什么是软件过程为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
ISO9000的定义:使用资源将输入转化为输出的活动所构成的系统。“系统”是相互关联或相互作用的一组要素。过程是软件工程(ruǎnjiànɡōnɡchénɡ)三要素之一。通常用软件生命周期模型来描述。共四百零一页2、什么(shénme)是软件生命周期模型又称:软件开发模型/软件过程模型/软件工程范型。指软件项目(xiàngmù)从需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。常见的有:瀑布模型、演化模型、螺旋模型、喷泉模型、智能模型共四百零一页瀑布(pùbù)模型(waterfallmodel)1970年,由W.Royce提出
一、瀑布模型的过程
1、传统的瀑布模型从上一阶段接受本阶段
的工作对象,作为输入;利用输入,完成本阶段活
动的内容.本阶段的工作成果作为输出(shūchū)
传入下一阶段。共四百零一页瀑布模型(móxíng)
—实际的瀑布模型
需求(xūqiú)分析验证规格说明验证设计验证编码测试综合测试维护变化的需求验证
增加了一个评审活动,评审每个阶段完成的活动,若得到确认,则进行下一阶段的活动;否则返回前一阶段,甚至更前阶段返工;共四百零一页二、瀑布(pùbù)模型特点阶段间具有顺序性和依赖性推迟(tuīchí)实现的观点质量保证的观点共四百零一页三、瀑布(pùbù)模型优缺点优点:可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段的所有产品都必须经过质量保证小组的仔细验证(yànzhèng);缺点:无法解决软件需求不明确或不准确的问题;可能导致最终开发的产品不能真正满足用户需要。瀑布模型比较适合开发需求明确的软件。共四百零一页快速原型(yuánxíng)模型1、什么是“原型”?
原型是快速实现和运行的早期版本,反映最终系统部分重要特性。常见的原型实例:人机界面;系统主要(zhǔyào)功能。
优点:
1、通常能反映用户真实需求;
2、软件产品的开发基本上是线性顺序进行的。共四百零一页2、快速原型(yuánxíng)的过程如右图。获得用户的基本需求说明,据此快速建立一个小型软件系统.用户试用,对其评价;开发人员按照用户的意见快速地修改原型系统,获得新的原型版本(bǎnběn),再请用户试用,如此反复,直到满足用户的要求;用户确认原型系统之后,开发人员据此书写规格说明文档,进行下一步开发。共四百零一页增量(zēnɡliànɡ)(渐增)模型
把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且(bìngqiě)能够完成特定的功能。使用增量模型时,第一个阶段的增量构件往往实现软件的基本需求,提供最核心的功能;后面的增量构架逐渐添加系统的功能。共四百零一页图:增量(zēnɡliànɡ)(渐增)模型需求(xūqiú)分析验证规格说明验证设计验证维护针对每个构件完成详细设计、编码和集成,经测试后交付给用户共四百零一页增量(zēnɡliànɡ)模型注意事项增量构件规模适中;分解的约束条件是当把新构件集成到现有软件中时,所形成的产品必须是可测试的;软件体系必须是开放(kāifàng)的,即在对现有系统添加新增量构件时,不能破坏系统原有功能。共四百零一页增量(zēnɡliànɡ)模型优缺点优点:能在较短的时间内,提供可完成部分工作的初步产品给用户;用户有较为充裕的时间学习和适应新产品。缺点:对开发人员技术能力要求较高,要求能从系统整体出发正确划分增量(zēnɡliànɡ)构件,并进行分别开发,最后能很好地集成这些构件。共四百零一页各种模型(móxíng)的比较模型优点缺点瀑布模型规范,文档驱动系统可能不满足客户真正的需求快速原型克服了瀑布型的缺点增量模型开发早期回报明确,易于维护要求开放的软件体系结构80
共四百零一页1.5.1软件工程的基本(jīběn)目标1.5软件工程的目标(mùbiāo)和原则低成本开发易于维护按时交付高可靠性高性能互斥关系互补关系软件工程目标之间的关系共四百零一页1.5.2软件工程(ruǎnjiànɡōnɡchénɡ)的原则§1.5软件工程(ruǎnjiànɡōnɡchénɡ)的目标和原则抽象互斥关系互补关系信息隐蔽模块化局部化确定性一致性完备性可验证性共四百零一页第一章小结(xiǎojié)共四百零一页第2章面向对象软件开发方法(fāngfǎ)2.1面向对象基本思想2.2面向对象基本概念2.3面向对象方法2.4面向对象开发(kāifā)统一过程2.5本章小结面向对象开发方法(ObjectOriented,OO)又称:快速原型法共四百零一页面向对象方法概述——背景(bèijǐng)传统开发方法由一整套过程、方法和工具作为支撑,在一定时期内对解决软件危机起了很大作用,曾指导开发出很多成功的系统,但其缺点也日益显现传统软件开发方法不能完全消除软件危机,并且生产率的提高不能满足需要从50年代到80年代,美国的软件生产率翻了两翻。但社会对软件的需求每年以两位数字的百分比在增长。软件的开发已成为影响(yǐngxiǎng)计算机应用的瓶颈共四百零一页面向对象方法概述——背景(1)传统开发方法存在的问题软件维护系统是围绕着如何实现(shíxiàn)一定的行为来进行的,当系统行为易变,需要常常修改时,修改极为困难软件结构严重依赖于系统功能,基于功能分解的系统结构将很难进行修改和扩充用户功能需求的改变将导致软件结构的相应改变,给软件的开发及维护造成很大困难数据和对数据的处理操作是分离的,对数据的修改将影响某个功能的实现传统开发方法的软件维护比软件开发效率低几十倍。80年代,美国一年花费的软件维护费用(fèiyong)高达300多亿美元。90年代,软件维护费用占系统研制、开发总费用的70%。共四百零一页面向对象方法概述——背景(2)传统开发方法存在的问题自顶向下功能分解的分析方法极大地限制了软件的可重用性结构化分析、设计技术的本质是功能分析从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,层层分解下去(xiàqù),直至仅剩下若干个容易实现的子处理为止传统方法通过建立标准函数库和子程序库实现软件的可重用性,然而标准函数库等只是对建立在数学模型基础上的应用(yìngyòng)问题有可重用的功效,而对其它实际应用(yìngyòng)问题则不能很好地进行软件重用共四百零一页面向对象方法概述——背景(3)传统开发方法存在的问题以输入-处理-输出为核心的分析和设计方法不符合人类的思维(sīwéi)方式软件不能真正了解用户的需要,以致开发出的软件系统与用户预期的系统不一致,不能满足用户的需要功能与数据分离的软件设计结构与人类的现实世界环境很不一样,和人的自然思维也就很不一致,因此对现实世界的认识与编程之间存在着一道很深的理解上的鸿沟Standish94报告中指出:31%软件项目没有完全完成,53%的项目花费最先预算的200%之多,并且(bìngqiě)估计美国的公司和政府机构在1995年为了取消软件项目的生产而花费了810亿美元共四百零一页面向对象方法概述——背景(4)传统开发方法存在的问题系统中模块之间控制作用的重要影响在系统中,实际控制发生(fāshēng)的根源来自分散的各个模块之中时,由于在“好的模块结构”中的模块间的控制作用只能通过上下之间的调用关系来进行,造成信息传递路径过长,效率低,易受干扰,甚至出错共四百零一页面向对象方法概述——背景(5)为了解决传统开发方法的问题,在软件开发实践中人们提出了许多针对具体开发的方法快速原型法面向对象方法…….诞生了面向对象程序设计语言(yǔyán),并基于面向对象思想诞生了面向对象软件开发方法共四百零一页面向对象分析(OOA)OOA主要考虑与一个特定应用有关的对象及对象与对象之间在结构与相互作用上的关系OOA的关键是识别出问题域内的对象,并分析它们相互之间的关系,最终建立起问题域的精确、可理解的正确模型OOA阶段主要是明确问题中存在哪些数据实体,它们的意义是什么,而不考虑对它们的处理OOA最终目的(mùdì)是产生一个符合用户需求,并能够直接反映问题域的OOA模型及其软件需求规格说明共四百零一页面向对象分析OOA基本任务运用OO方法,对问题域进行分析和理解形式地说明所面对的应用问题,最终成为软件系统(xìtǒng)基本构成的对象,还有系统(xìtǒng)所必须遵从的,由应用环境所决定的规则和约束明确地规定构成系统的对象如何协同合作,完成指定的功能找出描述问题域所需的对象及类定义这些对象和类的属性与服务定义对象和类之间所形成的结构、静态联系和动态联系共四百零一页面向对象分析——建立分析模型描述系统的功能以面向对象思想为基础,通过构造一组相关模型获得关于问题的全面认识(即问题领域模型)对象模型(objectmodel)代表(dàibiǎo)了系统的静态的、结构方面的特性动态模型(dynamicmodel)代表了系统对象之间的时间的、行为的、控制方面的特性功能模型(functionalmodel)主要描述值与值之间的函数关系共四百零一页面向对象分析——建立分析模型描述系统的功能(1)上述三个模型从不同角度对系统进行描述,分别描述系统的一个重要方面,组合起来构成对系统的完整描述对象(duìxiàng)模型指出事件要发生在什么方面动态模型指出什么时候发生功能模型则指出要发生什么共四百零一页面向对象分析——建立分析模型描述系统的功能(2)对象模型对象模型描述了系统中对象的结构对象的标识、对象与其它对象之间的关系、属性以及操作对象模型为动态模型和功能模型提供了重要(zhòngyào)的框架只有当事物变化时,动态模型和功能模型才有存在的意义对象模型用包含对象及对象的关系图表示共四百零一页面向对象分析——建立分析模型描述系统的功能(3)对象模型的5个层次第一个层次主要是识别类和对象,是整个分析模型的基础第二层和第三层是属性(shǔxìng)层和服务层,用以说明前面已识别的类和对象共四百零一页面向对象分析——建立分析模型描述系统的功能(4)对象模型的5个层次第四层是结构层OOA允许两种类型的基本结构:1)整体(zhěngtǐ)与部分结构(组装结构),表示聚合,即由属于不同类的成员聚合而成新的类;2)泛化与特化结构(分类结构),特化类是泛化类的子类,泛化类是特化类的父类。分类结构具有继承性。第五层是主题层,是一些类和对象的特定组合表示,用来帮助和指导模型的读者共四百零一页面向对象分析——建立分析模型描述系统的功能(5)动态模型动态模型描述系统中与时间有关的方面以及操作执行的顺序包括引起(yǐnqǐ)变化的事件、事件的序列、定义事件序列上下文的状态、以及事件和状态的主次动态建模中的主要概念是事件和状态一个对象的状态是指对象所拥有的属性值和连接关系动态模型由多个状态图组成每个用来描述一个类的重要动态行为,并表明整个系统的活动方式,不同类的状态图通过共享的事件组成一个动态模型共四百零一页面向对象分析——建立分析模型描述系统的功能(6)功能模型功能模型表示怎样从输入值得到输出值包括(bāokuò)函数、映射、约束和功能性依赖功能是由动态模型的动作引起,并在对象模型里表示对对象的操作共四百零一页面向对象分析——建模工具用例(UseCase)将客户需求收集起来之后,分析员可以创建一组标识(biāozhì)一串待构造系统的使用场景,这些场景就被称为“用例”(use-case)CRC共四百零一页面向对象分析——用例建模用例提供了系统将被如何使用的描述(miáoshù)用例从终端用户的观点对系统进行建模共四百零一页面向对象分析——OOA目标实现关键USECASE都已获得适当的解析和描述已经提取了大部分关键对象和类为OOD做好了充分的准备在OOA阶段,重点在于分析ACTOR与系统的交互,并把业务逻辑(luójí)充分体现出来在OOD阶段,在OOA模型的基础上进行层次的分离和责任的再分配,这时候的重点是业务逻辑的封装OOA的注释和说明是OOD和OOP的重要提示共四百零一页面向对象设计(OOD)OOD是用OO观点建立求解域模型的过程OOA到OOD实际上是一个逐渐扩充模型的过程面向对象分析主要模拟问题空间和系统(xìtǒng)任务而面向对象设计则是对其进行扩充,主要是增加各种组成部分OOA识别和定义的类/对象,是一些直接反映问题空间和系统任务的而OOD识别和定义的类/对象则是附加的,反映需求的一种实现共四百零一页面向对象设计——OOD的目标提高生产率OOD是一种系统设计活动OOD使用重用类机制来改进效率,类库是这种结构的主要组成部分提高质量OOA和OOD过程能够减少开发后期发现(fāxiàn)的错误,大大提高系统的质量提高可维护性OO方法开发的系统中,稳定的是类,可变的是服务,服务的复杂程度、外部接口是最可能变化的部分,把系统中稳定的部分和易变的部分分离开来共四百零一页面向对象设计——面向对象设计的准则模块化对象就是模块抽象支持过程抽象、数据抽象、规格(guīgé)说明抽象和参数化抽象信息隐藏通过封装性实现共四百零一页面向对象设计——面向对象设计的准则弱耦合对象间有两类耦合“交互耦合”(消息传递)和“继承偶合”(父、子类间的联系)强内聚服务内聚(一个服务完成(wánchéng)一个功能)类内聚(一个类应只有一个用途)一般-特殊内聚(这是对领域知识的正确抽取)可重用尽量使用已有类;设计新类时要考虑可重用共四百零一页OOA与OOD环境OOA过程中与具体工程环境有关的不太多,与最终(zuìzhōnɡ)系统实现环境关联不太密切OOD过程与具体工程环境相关的已经很多相关部分也正是OOD所包括的内容共四百零一页OOA与OOD(1)定义OOA过程是知道系统要做什么的过程USECASE定义了系统为使用者提供的服务通过OOA过程来定义系统要做什么才能(cáinéng)达到提供服务的目的,也就是定义系统目标的过程OOD过程是知道系统怎么做的过程实现系统目标的过程,与具体的实现环境密切相关共四百零一页OOA与OOD(2)作用OOA把UseCase映射为系统目标,并把责任绑定到将来实际系统中的关键对象(duìxiàng)上去,为OOD的细化提供基础OOD结合系统体系结构等具体实现因素进一步把责任分解或绑定到系统的对象上,并按照环境配置规律生成所需要的代码框架共四百零一页OOA与OOD(3)协作从OOA到OOD平滑过渡,无缝连接,保留OOA、OOD两阶段的作用主要是提供不同的复用层次OOA阶段定义的对象和责任,在OOD阶段通过分解或细化得到进一步落实OOA通过描述性方法定义了系统对象的目标(mùbiāo),OOD用形式化表示方法精确定义了系统对象及责任实现接口共四百零一页本章(běnzhānɡ)小结面向对象分析方法使得软件分析人员能够通过对对象、属性和操作的表示来对问题建模。OOA中引入了许多面向对象的概念和原则;并利用这些概念和原则将客观世界中的实体抽象为问题域中的对象,明确为完成系统功能,对象间应具有的联系(liánxì)和相互作用。
当OOA建模完成后,便可以开始设计整个系统。OOA侧重于用户需求的分析和对问题域的理解,OOD则侧重于系统的实现。OOD首先从OOA的结果开始,从问题域映射到实现域;还要增加一些类、结构及属性和服务,并对原有类及属性进行调整。还要完成任务管理、人机交互界面的设计等。共四百零一页UML建模技术(jìshù)共四百零一页4.1面向对象建模及UML简介4.2用例视图4.3动态(dòngtài)模型图4.4静态模型图4.5本章小结共四百零一页面向对象建模及UML简介(jiǎnjiè)面向对象建模建模是为了能够更好地理解正在开发的系统。所谓模型,就为了理解事物而对事物作出的一种抽象模拟,是对事物的一种无歧义的书面描述。通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。更进一步讲,模型是一种思考工具,利用这种工具可以把知识规范(guīfàn)地表示出来。模型可以帮助思考问题、定义术语、在选择术语时作出适当的假设,并且可以保持定义和假设的一致性。共四百零一页面向对象建模及UML简介(jiǎnjiè)通过建模,可以达到四个目的:有助于按照(ànzhào)实际情况或按照(ànzhào)所需要的样式对系统进行可视化能够规约系统的结构或行为给出指导构造系统的模板对做出的决策进行文档化面向对象建模共四百零一页面向对象建模及UML简介(jiǎnjiè)统一建模语言UML是一种标准的建模语言,是用为面向对象开发系统的产品进行说明、可视化和编制文档的方法。它主要以图形的方式对系统进行分析、设计。软件工程领域在1995年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和(zǒnghé)。其中最重要的、具有划时代重大意义的成果之一就是UML的出现。UML简介共四百零一页4.1面向对象建模及UML简介(jiǎnjiè)从第一个UML语言标准1.0于1997年推出以来,软件产业界支持UML的各种工具和平台也被迅速推出,UML及其平台已被广泛应用于软件开发的各个阶段,包括分析、设计、测实现、配织置和维护过程。由于UML已由国际对象管理组OMG(ObjectManagementGroup)标准化为软件建模的统一语言,因此在工业界、学术界已被广泛(guǎngfàn)承认与采用。在世界范围内,UML是面向对象技术领域内占主导地位的标准建模语言。UML简介共四百零一页面向对象建模及UML简介(jiǎnjiè)UML简介(jiǎnjiè)图4.1UML建模结构图共四百零一页4.2用例视图(shìtú)用例视图中可以包含若干个用例(UseCase)。用例图用来表示系统能够提供的功能(用法),一个用例是系统功能(用法)的一个通用描述。用例视图是其它视图的核心和基础,其它视图的构造和发展依赖于用例图中所描述的内容。因为系统的最终目标是提供用例视图中描述的功能,同时附带一些非功能的性质,因此用例视图影响(yǐngxiǎng)着其它的视图。同时,用例视图还可用于测试系统是否满足用户的需求和验证系统的有效性。共四百零一页用例视图(shìtú)在UML中,用例用椭圆来表示,它用来(yònɡlái)记录用户或外界环境从头到尾使用系统的一系列事件。用户被称为“执行者”(Actor),执行者可以是人,也可以是另一个系统。它与当前的系统进行交互,向系统提供输入或从系统中获得输出,用一个人形(Stickman)来表示。用例图显示了用例和执行者、用例与用例之间以及执行者与执行者之间的关系。关系描述模型元素之间的语义连接;在UML中,关系使用实线来表示,实线可以有箭头,也可以没有箭头。共四百零一页用例视图(shìtú)(1)执行者执行者是指在系统外部与系统交互的人或其它系统,他以某种方式参与系统内用例的执行。当划分了系统的范围并明确了系统边界后,从系统应用的角度出发,找寻那些与系统进行信息交换(包括数据信息和控制信息)的外部事物,包括系统使用人员、硬件设备及外部系统,来确定执行者。我们(wǒmen)可以从以下角度来寻找和确定执行者:
1)使用系统主要功能的人。
2)需要借助于系统完成日常工作的人。共四百零一页4.2用例视图(shìtú)3)维护、管理系统,保证系统正常工作的人。4)系统是否使用使用外部资源。5)系统和已经存在的系统是否存在交互。例如在学生成绩管理系统中,除了查询成绩的学生之外,还有以下执行者:1)系统管理员对系统的更新(gēngxīn)和维护。2)老师对学生成绩查询和更新数据共四百零一页4.2用例视图(shìtú)(2)用例用例代表的是一个完整的功能,是执行者想要系统做的事情;它是特定执行者对系统的“使用情况”。
用例一般具有以下的特征1用例总是从执行者的角度来编写的用例所代表的功能必须(bìxū)由执行者激活,然后才能执行。2用例总是从执行者的角度来编写的由于用例描述的是用户的功能需求,只能从用户的角度出发才能真正了解用户需要什么样的功能。共四百零一页4.2用例视图(shìtú)3用例具有完全性用例是一个完整的描述。虽然在编程实现时,一个用例可以被分解成为多个小用例(函数(hánshù)或方法),用例之间可以互相调用执行,但是只有最终产生了返回给执行者的结果值,才能说用例执行完毕。共四百零一页4.2用例视图(shìtú)(3)用例图内元素的关系一般将执行者和用例之间的关系称为通信,而用例与用例之间可以存在(cúnzài)的关系分为泛化(eneralization)包含(Include)、扩展(Extend)和使用(Use)四种。另外执行者与执行者之间也可以存在泛化关系。共四百零一页4.2用例视图(shìtú)(1)泛化关系UML中的泛化关系就是通常所说的继承关系,表示几个元素某些共性。它是通用元素和具体元素之间的一种分类(fēnlèi)关系。在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。例如在买票系统中,个人购买和团体定购都是买票的特例,肯有一些共同的特征,将这些共同的特征抽象出来,定义一个“买票”的基本用例(基用例),个人购买和团体定购从“买票”的基用例继承。可以用图4.3所示的用例图来表示。共四百零一页4.2用例视图(shìtú)图4.3用例的泛化关系(guānxì)图4.4执行者的泛化关系共四百零一页4.2用例视图(shìtú)如果多个执行者之间存在很多共性,就可以使用泛来分解共性行为。比如学生成绩管理系统中,涉及用户包括(bāokuò)系统管理员(Admin)和学生(Student),他们都是用例图中的执行者,他们的主要特征相似,都具有姓名、账号等信息,所以可以抽象出“基”执行者。用例图可以表示为图4.4的形式。共四百零一页4.2用例视图(shìtú)(2) 包含关系包含关系指的是两个用例之间的关系,其中一个(yīɡè)用例(基用例)的行为包含了另一个用例的功能。如果两个以上的用例有相同的功能,则可以将这个功能分解到另一个用例中,基用例则包含了分解出来的新用例的功能。例如在学生成绩管理系统中,学生和系统管理员都需要先登录然后才能进行相关的操作。这时就可以分解一个登录用例出来,让学生和系统管理员都包含它。在UML中使用<<include>>表示包含关系,如图4.5所示。共四百零一页4.2用例视图(shìtú)
包含关系(guānxì)是比较特殊的依赖关系(guānxì),它们比一般的依赖关系多了一些语义。在包含关系中,箭头的指向是从基本用例到包含用例,也就是说,基本用例依赖于包含用例。图4.5学生成绩管理系统用例图中的包含关系共四百零一页4.2用例视图(shìtú)(3)扩展关系扩展关系的基本含义与泛化关系类似,但对扩展用例有更多的限制,即基用例必须具有“扩展点”。而扩展用例只能在扩展点上增加新的行为和含义。也就是说,扩展关系允许一个用例(可选)扩展另一个用例(基用例)提供的功能。与包含关系一样,扩展关系也是依赖(yīlài)关系,而包含关系是特殊的依赖关系,这两个关系都是把相同功能分离到另一个用例中。共四百零一页4.2用例视图(shìtú)在UML中使用<<extend>>表示扩展关系,箭头(jiàntóu)的方向是从扩展用例到基用例。例如,在自动售货机系统中,“售货”是一个基本的用例,如果顾客购买罐装饮料,售货功能可以顺利完成。但是,如果顾客要购买用纸杯装的散装饮料,则不能执行该用例提供的常规动作,而要做些改动。我们可以修改售货用例,使之既能提供售罐装饮料的常规动作又能提供售散装饮料的非常规动作。我们可以把常规动作放在售货用例中,把非常规动作放置于售散装饮料用例中,这两个用例之间的关系就是扩展关系,如图4.6所示。共四百零一页4.2用例视图(shìtú)图4.6自动售货系统(xìtǒng)用例中的扩展关系共四百零一页4.2用例视图(shìtú)(4)使用关系使用关系也是一种继承关系。在使用关系中,一个用例使用另一个用例的功能和行为。在UML中,用例之间的使用关系的图形描述和用例的继承关系一样,用一条带空心箭头的实线连接一个子用例和一个父用例,实线上方标明构造型<<use>>表明(biǎomíng)两个用例是使用关系。如图4.7所示:共四百零一页4.2用例视图(shìtú)图中表明,子用例在使用父用例的功能(gōngnéng)和行为。如果有多个子用例使用同一个父用例,表明这些子用例在共享父用例的功能和行为。图4.7用例之间的使用关系共四百零一页
本章(běnzhānɡ)小结统一建模语言UML是国际对象管理组织OMG批准的基于面向对象技术的标准建模语言。通常,使用UML的类图来建立对象模型(móxíng),使用UML的状态图来建立动态模型,使用UML的用例图来建立功能模型。在UML中把用例图建立起来的系统模型称为用例模型。
共四百零一页
软件(ruǎnjiàn)复用基础共四百零一页
主要(zhǔyào)内容软件复用技术软件构件基于构件的软件开发三种(sānzhǒnɡ)特殊的构件模型共四百零一页一位程序员编写了一些排序程序,通过不同参数调用多次使用;C程序员编写了解三角方程的程序,整个程序共调用了12次正弦函数;一位Ada程序员编写了一段模拟程序,涉及处理(chǔlǐ)队列和一个处理(chǔlǐ)器数组,为此查找通用Ada队列和数组程序包,并将其插入运行Ada环境中,并实例化队列两次(就绪队列和阻塞队列),实例化数组一次(处理器数组).共四百零一页为什么软件复用会成为一个问题(wèntí),而硬件复用不会成为问题(wèntí)?软件复用在那些方面与软件设计不同?共四百零一页…..复用(fùyònɡ)(Reuse)既不是杀手锏,也不是神奇的减肥药.
复用是一种食谱和锻炼程序……PaulG.Basset,1997共四百零一页软件复用是在软件开发中避免重复劳动的解决方案。通过软件复用,可以提高软件开发的效率和质量。它通常可分为(fēnwéi)产品复用和过程复用两条途径。基于构件(Components)的复用是产品复用的主要形式,也是当前复用研究的焦点。当前软件构件技术被视为实现成功复用的关键因素之一。共四百零一页
软件复用是在软件开发中避免重复劳动的解决方案,其出发点是应用系统(Application)的开发不再采用一切“从零开始”的模式,而是以已有的工作为基础
,充分利用过去应用系统开发中积累的知识和经验,如:需求分析结果、设计方案、源代码、测试计划及测试案例等,从而将开发的重点集中于应用的特有构成成分。通过软件复用,在应用系统开发中可以充分地利用已有的开发成果,消除了包括分析、设计、编码、测试等在内的许多重复劳动,从而提高了软件开发的效率,同时,通过复用高质量的已有开发成果,避免了重新开发可能(kěnéng)引入的错误,从而提高了软件的质量。共四百零一页复用(fùyònɡ)的基本概念
软件复用是指重复使用“为了复用目的而设计的软件”的过程。相应地,可复用软件是指为了复用目的而设计的软件.与软件复用的概念相关,重复使用软件的行为还可能是重复使用“并非为了复用目的而设计的软件”的过程,或在一个应用系统的不同版本间重复使用代码的过程,这两类行为都不属于(shǔyú)严格意义上的软件复用。
共四百零一页软件复用的发展过程子程序的概念也体现了复用的思想.1968年NATO软件工程会议上,Mcilroy的论文“大量生产的软件构件”中第一次提出(tíchū);在其后的发展过程中,有许多复用技术的研究成果和成功的复用实践活动.但是,复用技术在整体上对软件产业的影响却并不尽如人意;近十几年来,面向对象技术出现并逐步成为主流技术,为软件复用提供了基本的技术支持;软件构件技术(及Web服务等)的产生,为软件复用提供了更高层次的支撑。共四百零一页分析传统产业的发展,其基本模式均是符合标准的零部件(构件)生产以及基于标准构件的产品生产(组装),其中,构件是核心(héxīn)和基础,“复用”是必需的手段.软件产业要发展并形成(xíngchéng)规模经济,标准构件的生产和构件的复用是关键因素.这正是软件复用受到高度重视的根本原因共四百零一页为什么要复用
通常应用软件系统的开发过程包含以下几个阶段:
需求分析、设计(shèjì)、编码、测试、维护等.
应用系统通常包含三类成分:①通用基本构件:是特定于计算机系统的构成成分。②领域共性构件:是应用系统所属领域的共性构成成分。③应用专用构件:是每个应用系统的特有构成成分。从这些内容是不是可以找到一些(yīxiē)提高软件效率的方法呢?共四百零一页
长期以来,由于多数软件都是针对某个具体的应用(yìngyòng)开发的,所以大量的软件开发都是从头开始的,即从需求分析开始,经过设计,编写每一行代码,测试,最后交付使用,从而出现了大量的同类软件(如财务软件、MIS软件等)的重复开发,造成了大量人力、财力的浪费,而且软件的质量也不高软件复用(fùyònɡ)的需求共四百零一页工业界大多数新产品的生产离不开已有的部件(通过组装完成)在软件生产领域,也希望有一些软件工厂或车间专门生产软件组件(Component),在软件的生产中模拟工业产品设计及生产的经验,大量复用已有的构件(gòujiàn),降低成本,提高生产率软件(ruǎnjiàn)复用的需求共四百零一页软件的复杂性持续增长计算机技术变化的速度增加了具有较长生命周期项目的风险,早期技术过时了十年前开发的关键(guānjiàn)系统仍在运行软件开发过程(guòchéng)面临的挑战共四百零一页软件复杂性的增长主要表现在:功能需求:
计算机解决方案成为各领域技术创新核心非功能需求:出错率、并发用户数、事务吞吐量等要求技术需求:分布式计算机网络软件需求量增大;中央计算机及端到端系统的普及使目标执行平台具有多样性组织需求:需要分布式开发团队和远程办公第三方产品和软件包的使用中经常遇到定义问题(wèntí)、说明问题(wèntí)、开发维护费用问题(wèntí)软件(ruǎnjiàn)复杂性持续增长共四百零一页业务变化(biànhuà)政府政策变化破坏了传统供应链的垄断,导致新的竞争形式出现商业界面临越来越多的组织之间的收购和兼并对原有系统的评估和升级成为一种趋势技术变化:新领域的出现牵引软件行业自身的发展组织变化:人员流动;兴起了外包和第三方服务;出现了系统集成者组织软件开发要求(yāoqiú)能快速适应变化软件开发面临环境的变化共四百零一页存在哪些分布式系统构架(ɡòujià),优点和不足是什么?什么样的开发方法适合基于Web的分布式应用?原有的数据和程序能否复用?有什么好的工具包,软件包,设计模板库和例子?
未来(wèilái)程序开发的关键问题基于上述问题,提出:移动的、面向服务的解决方案!共四百零一页过去应用程序构架(ɡòujià)和应用程序支持工具功能典型的工具功能生成数据库模式数据库优化用户界面设计(shèjì)数据分布和复制
服务器应用程序如数据库
局域网胖客户客户端共四百零一页当前应用程序构架和应用程序支持(zhīchí)工具功能典型的工具功能(gōngnéng)生成数据库模式数据库优化用户界面设计数据分布和复制
局域网Web服务器和应用程序代理Internet/Intranet客户端
服务器应用程序如数据库提供对服务器的远程访问生成浏览器界面服务器到Web页面的转换共四百零一页未来(wèilái)应用程序构架
局域网Web服务器和应用程序代理Internet/Intranet客户端
服务器应用程序如数据库
可复用构件外部服务共四百零一页生成(shēnɡchénɡ)数据库模式数据库优化用户界面设计数据分布和复制分类可复用构件智能(zhìnénɡ)构件搜索浏览/查询构件现有构件的更新远程构件集成未来应用程序典型的工具功能提供对服务器的远程访问生成浏览器界面服务器到Web页面的转换
共四百零一页(1)简化(jiǎnhuà)大规模分布式软件构架的设计,管理和演化任务在最抽象(chōuxiàng)层—构架层,开发者决定解决方案的基本“形状”(构架风格)在机制层—考虑分布式系统的实现、部署和运行时的管理等未来程序开发关键问题的解决共四百零一页在服务层—考虑构架成员之间的接口及交互(jiāohù)一种观点:集中解决方案的逻辑构架,系统由抽象服务组成,这些抽象服务通过接口来访问。开发者考虑提供服务可以访问的操作、服务的特征描述及抽象行为另一种观点:这些服务是为了提供某些要求的行为而在一起工作的协同代理。因此,主要问题是这些服务的交互方式的协调或结构.在这个层次上要解决的问题:服务的复制、对某些错误的容错以及数据的无效处理等共四百零一页(2)为系统的可复用(fùyònɡ)部分建模软件(ruǎn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年生物样本库建设与运营合同
- 小班语言教案
- 半导体照明光源项目可行性研究报告申请报告
- 美术组教学工作计划
- 写给妈妈的感谢信模板集合5篇
- 护理学生自我鉴定大专(9篇)
- 关于坚持高二记叙文作文
- 小学三年级安全教育工作计划
- 网络实习报告范文合集六篇
- 云南省昭通市昭阳区2024-2025学年八年级上学期1月期末考试历史试卷(无答案)
- 2023-2024学年广东省深圳市光明区高二(上)期末地理试卷
- 【8地RJ期末】安徽省芜湖市弋江区2023-2024学年八年级上学期期末考试地理试卷(含解析)
- 期末(试题)-2024-2025学年人教PEP版英语六年级上册
- 2024年公安基础知识考试题库及答案
- 三创赛获奖-非遗文化创新创业计划书
- 教你成为歌唱达人智慧树知到期末考试答案2024年
- 2024分娩镇痛ppt课件完整版
- 酒店水单模板
- SCI论文写作课件
- 典型6B燃机技术协议书A_Rev_0527
- 曲式分析演唱技巧情感运用
评论
0/150
提交评论