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

下载本文档

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

文档简介

关于(guānyú)课程

软件工程导论课程是继程序设计课程之后,对提高我们软件开发能力有重要作用的一门课程。

软件工程研究的范围非常广,涵盖了软件开发技术、软件工程环境(工具)、软件经济学、软件工程管理等内容。

学习软件工程要把重点放在形式化的软件开发技术上,即以工程化的软件开发技术为主体(zhǔtǐ)。

课程从应用出发介绍有关软件工程管理、开发技术、维护技术等基本知识,并能直接运用这些知识来指导软件的开发工作。说课共八十页关于(guānyú)内容

概述:关于软件工程的诞生、基本原理、生命周期及软件过程。

结构化开发(kāifā)方法:从软件定义时期、开发(kāifā)时期和维护时期分阶段介绍相关工程技术。

面向对象开发技术:从OO概述、OOA、OOD和OOP介绍相关技术。

软件项目管理:介绍有关软件度量、进度计划、质量保证等项目管理知识。说课共八十页关于(guānyú)实践

软件工程强调以工程化的思维来开发和维护软件,是指导软件开发过程的方法和技术。

课程实践是结合软件生命周期的阶段划分,以每阶段形成的文档资料为标志。

不安排定期集中的上机实践,但要分组按项目任务提交阶段规格(guīgé)说明。说课共八十页关于(guānyú)教学

以理论授课(shòukè)为主

自选项目辅以开发实践

自由组合,团队协作说课共八十页软件工程(ruǎnjiànɡōnɡchénɡ)导论(第6版)张海藩牟永敏清华大学出版社(2013)关于(guānyú)教材说课共八十页

SoftwareEngineering,TheoryandPractice(4thEdition),

ShariLawrencePfleeger,Prentice-Hall,Inc.(2009)

软件开发的形式化方法(fāngfǎ),古天龙,高等教育出版社。(2005)

现代(xiàndài)软件工程,张晓龙等,清华大学出版社。(2011)

软件工程导论学习辅导,张海藩等,清华大学出版社。(2013)关于教辅说课

SoftwareEngineering:APractitioner’sApproach,SixthEdition,RogerS.Pressman,郑人杰译,机械工业出版社(2007)

软件工程案例教程,毕硕本,北京大学出版社(2007)

TheMythicalMan-Month:EssaysonSoftwareEngineering(人月神话注释版),[美]FrederickP.Brooks,李琦(注释),人民邮电出版社(2007)共八十页关于(guānyú)考核

平时成绩:上课情况,平时实践,占40%

期末成绩:笔试,提交(tíjiāo)答卷,占60%说课共八十页第1章软件工程学概述(ɡàishù)

主要讲述软件工程产生(chǎnshēng)的历史背景、软件工程的基本原理、软件的生命周期以及几种软件的开发模型。共八十页§0.软件开发的历史(lìshǐ)1、软件的概念

计算机世界的软件软件是能够(nénggòu)完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。

软件=程序+数据+文档程序=算法+数据结构共八十页软件是计算机系统的重要组成部分(zǔchénɡbùfèn);软件是逻辑产品,需要计算机硬件和系统软件的支撑;软件是计算机控制系统的指挥中枢;软件是信息转换器,它能对信息进行加工、处理或变换;软件是工具,在人们的生活、工作、休闲,在社会的经济、军事、政治、文化、科学技术、教育中发挥具大作用。§0.软件开发的历史(lìshǐ)共八十页§0.软件开发的历史(lìshǐ)共八十页2、软件(ruǎnjiàn)的特点

软件是一种逻辑实体,具有抽象性。

软件的生产与硬件不同。

在软件的运行使用期间,没有磨损,老化问题。

软件产品不允许(yǔnxǔ)有误差,虽然实际上不可能没有缺陷。

软件的开发运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。

软件的开发至今尚未完全摆脱手工艺的开发方式。§0.软件开发的历史共八十页软件需求(xūqiú)增加,软件规模增长。§1.软件(ruǎnjiàn)危机(SoftwareCrisis)User

Computer

早期软件规模小,不重视开发方法,没有相应的文档资料,设计和使用通常为同一个人或小组。阿波罗登月计划的软件1000万行代码Windows951500万行代码WindowsXP3500万行代码WindowsVista5000万行代码;项目经理约250人;开发人员约1700人;测试人员约3200人共八十页

上世纪60、70年代,出现“软件作坊”,但软件的开发基本上沿用早期的开发方法,很少考虑(kǎolǜ)软件的维护。

例:美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。……据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正(xiūzhèng)的结果。……Programmer(Software)User

Computer

§1.软件危机共八十页

这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛(chéntòng)教训时说:“……正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。……程序设计工作正像这样一个泥潭,……一批批程序员被迫在泥潭中拼命挣扎,……谁也没有料到问题竟会陷入这样的困境……”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。SoftwareCrisis!§1.软件(ruǎnjiàn)危机共八十页

软件危机(wēijī)(SoftwareCrisis)是指在计算机软件的开发和维护过程中所遇到的一系列的严重问题。满足(mǎnzú)日益增长的需求对不断膨胀的已有软件的维护§1.软件危机概括说,软件危机包含两方面的问题:如何开发软件,以满足不断增长、日趋复杂的需求。如何维护数量不断膨胀的软件产品。共八十页§1.软件(ruǎnjiàn)危机软件危机(wēijī)的典型表现:P2软件成本日益增长硬件和软件所占费用的比例图共八十页1968年,美国花费于软件的投资高达60亿美元,有些系统,特别是军用系统,软件费用要高出硬件费用好几倍,例如美国全球军事指挥(zhǐhuī)控制系统的计算机硬件费用为1亿美元,而软件费用高达7.2亿美元。1980年美国政府的财政年度当中,计算机系统方面(软、硬件与服务)共耗资达570亿美元,其中320亿美元(占总数的56%)用于计算机软件方面(与同年的美国汽车行业进行简单的比较,美国是当时的世界第一汽车生产大国,汽车的年销售量为900万辆,总的销售额仅为720亿美元)。§1.软件(ruǎnjiàn)危机共八十页技术的进步使得计算机硬件的成本持续降低,而软件成本则不断增长,软件成本在计算机系统总成本中所占的比例呈现日益扩大的趋势.来自美国空军计算机系统的数据表明,1970年,软件费用约占总费用的60%,1975年达到72%,1980年达到80%,1985年计达到85%。这种增长的速度是惊人的。(1979年,美国的国防(guófáng)预算为1258亿美元,其中9%用于计算机领域,约113亿美元。在这113亿美元当中,91亿美元(约占80%)用于软件投资,仅有22亿美元用于硬件设备)。§1.软件(ruǎnjiàn)危机共八十页难于(nányú)控制开发进度

在研究大型系统时,遇到越来越多的困难。有的系统干脆失败了,损失了大量金钱和人力;有的系统虽然完成了,但性能不理想,或推迟了许多年,经费大大超过预算。如一个大项目负责人所说:

“软件人员太像皇帝新衣故事中的裁缝了。当我来检查软件开发工作时,所得到的回答好像对我说我们正忙于编织这件带有魔法的织物,只要等一会儿,你就会看到这件织物是极其美丽的。但是我什么也看不到,什么也摸不到,也说不出任何(rènhé)一个有关的数字;没有任何(rènhé)办法得到一些信息说明事情确实进行得非常顺利,而且我已经知道许多人最终已经编织了一大堆昂贵的废物而离去,还有不少人最终什么也没有作出来。”§1.软件危机共八十页

为软件开发制定进度是很困难的事情:通常我们对一个任务根据其复杂性、工作量及进度要求安排人力。如有10人月的工作量,则由一个人完成需要10个月,由10个入完成则需要一个月。但这种工作量估计方式仅对各部分工作互不干扰的情况下才适用,例如(lìrú)当各部分工作尚能很好地划分时,安排由不同人完成不同部分的工作。但作为整体,尚需讨论合作,这种讨论交流活动就增加了工作量。软件系统的结构很复杂,各部分附加联系极大。增加更多人工作,往往不是缩短时间进度,而是会延缓进度。§1.软件(ruǎnjiàn)危机共八十页

一个软件项目估计需要12人月工作量。指定由3个人,在4个月内完成。假定第1个月的任务花了两个月才完成,如仍需按时完成该怎么办呢?(1)假定此任务只有第一个月的工作量是估计错了,则到第二个工作月结束时,尚有9个人月工作量必需在两个月内完成,则需用4.5个人。需要增加(zēngjiā)2个人来进行这项工作;(2)假定此任务的工作量在每个月都是估计低了。第二月后,尚有18个人月的工作量要在两个月内完成,则需要9个人工作,即应增加6个人。一个(yīɡè)例子:

§1.软件危机共八十页

增加人力的结果(jiēguǒ)如何呢?在第一种情况下,不论新增加的人的适应能力有多强,总需要有人去帮助他了解熟悉情况。如果这些工作占用了一个月的时间,这样又有2个人月工作量是在新的计划外。同时,为了由5人共同完成工作,又需要花时间把任务重新划分成五个部分。这样,又可能损失一部分已经完成的工作,所以到第三个月结束时实际上虽有5人在工作,而余留下也许至少是7个人月的工作量,使任务仍不能按时完成。如果你仍想按时完成任务,用投入更多人力的方法可能造成更坏的后果。对于一项复杂的任务,通常难于通过增加人力来缩短开发时间。Brook提出的法则“在已拖延的软件项目上增加人力只会使其更难按期完成”。这对于一般的工业产品来说是难于想象的!§1.软件(ruǎnjiàn)危机共八十页软件质量(zhìliàng)无法保证1985年11月21日,由于计算机软件的错误,造成纽约银行与美联储电子结算系统收支失衡,发生了超额支付,而这个问题一直到晚上才被发现,纽约银行当日帐务出现了230亿的短款。Therac-25是加拿大原子能公司AECL和一家法国公司CGR联合开发的一种(yīzhǒnɡ)医疗设备,它产生的高能光束或电子流能够杀死人体毒瘤而不会伤害毒瘤附近的人体健康组织。该设备于1982年正式投入生产和使用,在1985年6月到1987年1月的不到两年的时间里,因为软件缺陷引发了6起由于电子流或X-光束的过量使用的医疗事故,造成4人死亡、2人重伤的严重后果。§1.软件危机共八十页美国Florida州的福利救济系统用于处理数百万受抚养儿童、食品券、医疗援助等受资助家庭接受者的资格认证,其基于巨型机系统,支持84个数据库、1390个程序、12000多个终端和个人计算机。1992年,该系统的错误使得成千上万的人收到了他们无权收到的救济,而其他成千上万急需食品券的人却排着长队等待了好几天。据后来统计,该错误导致了多支付(zhīfù)2.6亿美元以及少支付5800万美元医疗补助的后果。§1.软件(ruǎnjiàn)危机共八十页1996年,欧洲航天局阿丽亚娜5型(Ariane5)火箭在发射后40秒钟后发生爆炸,发射基地上2名法国士兵当场死亡,损耗资产达10亿美元之巨,历时9年的航天计划因此严重受挫。事后专家的调查分析报告指出,爆炸原因(yuányīn)在于惯性导航系统软件技术要求和设计的错误。2002年,美国商务部的国立标准技术研究所(NIST)发表了一个有关软件缺陷的损失的调查报告。该报告表示:“据推测,由于软件缺陷而引起的损失额每年高达595亿美元。这一数字相当于美国国内生产总值的0.6%”。对于一些安全悠关的系统,软件的缺陷更是造成了灾难性的后果。§1.软件(ruǎnjiàn)危机共八十页软件(ruǎnjiàn)修改、维护困难

软件的维护任务特别重。事实上,正式投入使用的商用软件,总是存在着一定数量的错误。随着时间的延伸,在不同的运行条件下,软件就会出现故障,就需要维护。这种维护与通常意义下的设备(硬件)维护是完全不同的。因为软件是逻辑元件,不是一种实物(shíwù)。软件故障是软件中的逻辑故障所造成的,不是硬件的“用旧”、“磨损”之类问题。软件维护不是更换某种部件,而是要纠正逻辑缺陷。当软件系统变得庞大,问题变得复杂时,常常会发生“纠正一个错误带来更多新的错误!”的问题。

§1.软件危机共八十页BEGINNumber=0Totaltime=0Message=1WHILEMessageGETstatusIFstatus=S Totaltime=Totaltime

Current-time Number=Number+1ELSETotaltime=Totaltime+Current-time ENDIFGETMessage/”1-startthestream;0-endofthestream”ENDWHILEPRINTNumber,Totaltime/Number END软件并不像人们想象(xiǎngxiàng)的那么易于修改!§1.软件(ruǎnjiàn)危机共八十页⑴项目没有(méiyǒu)被很好地理解;计划不周,最终导致进度拖延,预算超支。

软件规模(guīmó)越来越大,结构越来越复杂,管理和控制软件开发过程变得困难,软件开发费用、维护费用不断增加。问题出在哪里?⑵软件生产方式、开发技术落后,没有充分的文档资料(documentation)

软件≠程序,应包含各种开发文档资料。缺少与用户的交互,忽视需求分析;人与人的交流比写程序困难得多;自动化软件开发工具落后,生产率提高缓慢。§1.软件危机共八十页⑶软件可靠性(reliability)缺少(quēshǎo)度量的标准,质量无法保证。

如何(rúhé)保证软件产品的质量,是非常复杂困难的问题,特别对于规模庞大的软件;一个能正确运行的软件,不一定是可靠的、高质量的软件。⑷软件难以维护(maintainability),不易升级(evolvability)

修改原来的设计或发现更正原来的错误是非常困难的,尤其是在软件投入运行以后;据统计,用于软件维护的费用占软件总费用的55%-70%

。§1.软件危机共八十页§1.软件(ruǎnjiàn)危机

必须认识到软件开发是一种组织良好,管理控制严密,各类人员协同配合、共同完成的工程项目;

注重吸取经验教训。前人行之有效的技术和方法、开发的经验教训,有助于提高软件开发效率、可靠性和质量保证;

探索(tànsuǒ)新的软件开发技术和方法;

使用和开发更好的软件工具。消除软件危机的途径:共八十页我们(wǒmen)必须意识到:

“软件”

编程,它有自己的生命周期

(lifecycle)。大型软件系统的开发与其它工程项目如建造桥梁、制造飞机、轮船等的开发是同理的。

软件是程序、数据以及相关文档的完整集合,它必须由一系列的完整的配置组成。

我们应当澄清传统软件开发中的错误认识,建立起软件开发和维护的正确概念。

目前没有(méiyǒu)完全解决软件危机的途径和方法。§1.软件危机共八十页软件危机(wēijī)仍在继续

---影响软件质量的糊涂认识在项目的初始阶段对系统若明若暗就开始写程序认为软件是灵活的容易(róngyì)修改,对软件需求的改变不以为然程序调试成功标志着工作的结束程序运行前无法评价程序的质量一个软件项目给客户提交的主要是程序,而软件文档则认为可有可无、可多可少等等。§1.软件危机共八十页虽然发布了软件标准和规范,但在实践中执行需要额外的开销(kāixiāo),划不来虽然开发了许多软件工具,但很多开发者对使用这些工具兴趣不大为了开发软件人们不惜用重金购买最新型号的主机和工作站而不愿意购买软件工具在软件开发过程中,进度迟后就增派更多的程序员突击,赶进度………§1.软件(ruǎnjiàn)危机共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)(SoftwareEngineering)1、软件工程(ruǎnjiànɡōnɡchénɡ)介绍

FritzBauer在NATO会议上给出的定义:软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。

IEEE【IEE83】给出的软件工程定义:软件工程是开发、运行、维护和修复软件的系统方法。

IEEE【IEE93】给出了一个更加综合的定义:

将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。

在众多定义中,其核心思想均是:把软件当作一种工业产品,要求采用工程化的原理与方法对软件进行计划、开发和维护。共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)软件工程(ruǎnjiànɡōnɡchénɡ)的目标

实现预期的软件开发进度。

实现预期的经费完成开发计划。

提高软件的生产效率和可靠性。

总之,是实现软件的“优质、高产”。即开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)

适用性:软件在不同的系统约束条件下,使用户需求得到满足的难易程度。

有效性:软件系统能最有效的利用计算机的时间和空间资源。

可修改性:允许对系统进行修改而不增加原系统的复杂性。

可靠性:能防止因概念、设计(shèjì)和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。

可理解性:系统具有清晰的结构,能直接反映问题的需求。共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)

可维护性:软件交付后,能够对它进行修改,以改正潜在的错误,改进性能和其它属性,使软件产品适应环境的变化等。

可重用性:把概念或功能相对独立的一个或一组相关模块定义为一个软部件。

可移植性:软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。

可追踪性:根据(gēnjù)软件需求对软件设计、程序进行正向追踪,或根据(gēnjù)软件设计、程序对软件需求的逆向追踪的能力。

可互操作性:多个软件元素相互通信并协同完成任务的能力。共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)软件工程(ruǎnjiànɡōnɡchénɡ)的本质特征

软件工程关注于大型软件的构造。

软件工程的中心课题是控制复杂性。

软件产品交付使用后仍需要经常修改。

开发软件的效率非常重要。

开发人员和谐地合作是成功开发软件的关键。

软件必须有效地支持它的用户。

在软件工程领域中通常由一种文化背景的人替另一种文化背景的人开发产品。共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)软件工程(ruǎnjiànɡōnɡchénɡ)的研究内容

软件开发技术

软件工程管理软件开发方法学软件开发过程软件工具和软件工程环境软件管理学软件经济学软件心理学

软件工程是一门交叉学科,是技术与管理紧密结合的工程学科。它所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解,应用发展的眼光看待它。共八十页2、软件工程(ruǎnjiànɡōnɡchénɡ)发展简史20世纪60年代开发方法--“功能性程序设计”,编程无章法,随意性很大类似于智力游戏,依赖于才智与技巧。软件开发远远满足不了社会发展的需求,出现(chūxiàn)了一场“软件危机”。在理论上--1968年10月北大西洋公约组织(NATO)的科学委员会提出了软件危机问题,认为这将是影响计算机应用发展的瓶颈,从而提出“软件工程”问题。技术的目标--如何扩大程序系统的规模,以适应更复杂的应用。§2.软件工程共八十页20世纪70年代(niándài)开发技术:1)从程序中分离出数据结构与算法。2)进一步把结构化程序设计方法发展成结构化开发方法,包括结构化分析方法及结构化设计方法。在理论上:1)数据结构,算法理论。2)形式方法——用推理及逻辑断言等对程序正确性进行验证。3)软件工程方法:开始提出软件开发模型——瀑布模型及相应的结构化分析、设计、编程及测试方法。技术的目标:要解决软件危机。要求在时间、费用、质量三要素的工程要求下有序地完成项目。§2.软件工程(ruǎnjiànɡōnɡchénɡ)共八十页20世纪80年代开发方法:由单纯的编程技术转向构造(gòuzào)系统的方法。提出一套记号表示法及步骤来描述、定义、分析、验证系统的结构。而管理复杂的文档资料及规格说明成为了管理系统结构的主要手段。理论成就:关系数据库的关系理论。此外,软件开发技术中的度量问题受到重视。最著名的有软件工作量估计COCOMO,软件过程改进模型CMM(软件过程能力成熟度模型)等。技术的目标:要求大幅度提高个人的生产率(Windows所提供的能力);提倡发展软件复用;面向对象技术的重新崛起。§2.软件工程(ruǎnjiànɡōnɡchénɡ)共八十页20世纪90年代开发方法:基于部件的开发方法;Internet是遍布全世界的一个巨大的计算机网络,Java语言的诞生正是应允了这个要求。Java语言有着很好的网上移植性、安全性、并且在编程难度上,也较C,C++语言简单。基于Internet/web技术的软件开发成为这一时期的最主要特点。开发技术的研究焦点是部件的互连及集成问题。因此,研究软件体系结构、软件设计模式、标准化问题、协议、集成等,已成为焦点。理论成就:以研究封闭的系统转向一个开放的不断进化的系统。提出了一类“交互模型”作为计算(jìsuàn)的基础。目标--JUSTINTIMEINFORMATION。即要在正确的时刻,把正确的信息,安全地送到正需要信息的人处。§2.软件工程(ruǎnjiànɡōnɡchénɡ)共八十页

可以预料软件工程的重要性还要继续增加经济原因:全球的软件开销已经从1985年的1400亿美元上升到2000年的8000亿美元。软件渗透到整个社会中,越来越多的软件用于控制各种机器(如飞机、医疗设备等)的关键功能,支持全球范围的关键功能(如电子商务等),这一事实保证了社会越来越对可靠的软件感兴趣。毫无疑问,如何更好地构造更加完美的软件仍然(réngrán)是一个重要的问题。§2.软件工程(ruǎnjiànɡōnɡchénɡ)共八十页⑴用分阶段的生命周期计划严格管理⑵坚持进行阶段评审⑶实行严格的产品控制——基准配置管理(Baselineconfigurationmanagement)⑷采用现代程序设计(chénɡxùshèjì)技术⑸结果应能清楚地审查—setstandards⑹开发小组的成员应该少而精⑺承认不断改进软件工程实践的必要性§2.软件工程(ruǎnjiànɡōnɡchénɡ)3、软件工程的基本原理(Principles)共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)4、软件工程(ruǎnjiànɡōnɡchénɡ)方法学(Methodology)

软件工程方法学(又称范型)是指在软件的定义、开发、维护全过程中使用的一整套技术方法的集合。

软件工程方法学包含三个要素

方法:完成软件开发“如何做”的技术方法

工具:提供自动或半自动的软件工程支撑环境

过程:一系列开发任务的框架(工作步骤)共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)传统(chuántǒng)方法学

传统方法学又称生命周期方法学或结构化范型。

采用结构化技术(结构化分析、设计、实现)来完成软件开发各项任务;

将软件生命周期划分为若干个阶段,顺序完成各阶段的任务;

每个阶段的开始和结束有严格的标准;

每个阶段要形成完整的文档资料;

每个阶段结束之前都必须进行严格的技术审查和管理复审。共八十页§2.软件工程(ruǎnjiànɡōnɡchénɡ)面向对象方法学

为模拟(mónǐ)人类习惯的思维方式,在软件开发过程中,将系统的数据以及对数据的操作封装为对象,利用对象的继承和消息传递机制实现软件功能的开发方法,称为面向对象方法。

把对象(Object)作为融合了数据及在数据上的操作的软件构件,用对象分解代替了功能分解;

把所有对象都划分成各种对象类(Class);

按照子类与父类的关系,把若干相关的类组织成一个层次结构的系统;

对象彼此之间仅通过发送消息互相联系;共八十页

相对于自顶向下顺序完成开发的结构化开发方法,面向对象方法学的出发点和基本原则是:

尽可能模拟人类习惯的思维方式,使软件开发过程尽量接近人们认识世界、解决问题的方法(fāngfǎ)和过程,从而使描述问题的问题空间与实现解法(软件系统)的解空间在结构上尽可能一致。§2.软件工程(ruǎnjiànɡōnɡchénɡ)

因此,使用面向对象方法学开发出的软件产品是由许多小的、相对独立的单元(对象)组成,每个对象相当于一个微型程序,且与现实世界的实体相对应。因此,面向对象方法学降低了软件产品的复杂度,提高了可理解性,简化了软件的开发和维护工作,同时促进了软件的重用。共八十页§3.软件(ruǎnjiàn)生命周期(SoftwareLifeCycle)

软件生命周期是指一个软件从定义、开发、使用、维护直到最终废弃的整个(zhěnggè)时期。

软件生命周期由软件的定义、软件的开发、软件的运行维护三个时期组成,每个时期又进一步划分为若干阶段。

影响软件生命周期阶段划分的因素:软件规模、开发方式、开发环境、开发使用的方法论。

软件生命周期的阶段划分不是千篇一律的,而是要根据软件工程化的需要而定。对我们来说,重要的不是去研究具体的划分细节,而是着重理解把生命周期划分为阶段的目的与实质:

便于控制开发工作的复杂性。

通过有限的步骤,把需要解决的问题从抽象的逻辑概念逐步转化为具体的物理实现。共八十页§3.软件(ruǎnjiàn)生命周期软件定义时期的任务:

确定软件开发项目的总目标

确定项目的可行性

导出采用的策略及必须完成的功能

估计需要的资源与成本(chéngběn)

制定工程进度表通常进一步划分为问题定义、可行性研究、需求分析三个阶段。共八十页§3.软件(ruǎnjiàn)生命周期软件开发时期的任务:

具体(jùtǐ)设计和实现在定义时期定义的软件系统通常进一步划分为总体设计、详细设计、编码和单元测试、综合测试四个阶段。软件维护时期的任务:

通过对已交付使用的软件做必要的修改,使软件持久地满足用户需要(当发现错误时、当环境改变时、当有新需求时等等)通常不再划分阶段,但每一次维护都是大大压缩和简化了的定义与开发过程。共八十页§3.软件(ruǎnjiàn)生命周期软件生命周期各阶段(jiēduàn)的基本任务:

问题定义:通过访问调查,明确关于问题的性质、工程目标和工程规模,回答“要解决的问题是什么”,形成《系统目标与范围说明书》

可行性研究:在较高抽象层次研究问题的范围,判断是否值得去解,回答“是否有行得通的解决办法”,形成《可行性报告》和《项目实施计划》

需求分析:与用户密切配合、充分交流,得出经用户确认的系统逻辑模型,回答“系统必须做什么”,形成《需求规格说明书》共八十页§3.软件(ruǎnjiàn)生命周期软件生命周期各阶段的基本(jīběn)任务:

总体设计:设计出实现目标系统的可能方案(策略),进而设计程序的体系结构,回答“概括讲该怎样实现目标系统”,形成《总体设计说明书》

详细设计:把解法具体化,确定实现模块功能的算法及数据结构,回答“怎样具体实现这个系统”,形成《详细设计说明书》

编码和单元测试:根据目标系统的性质和环境,选择语言编写容易理解和维护的程序模块,并进行模块测试,形成《模块开发卷宗》共八十页§3.软件(ruǎnjiàn)生命周期软件(ruǎnjiàn)生命周期各阶段的基本任务:

综合测试:进行集成测试、验收测试、现场测试等,使软件达到预定的要求,并分析其可靠性,形成《测试报告》和《用户手册》

软件维护:通过改正性维护、适应性维护、完善性维护或预防性维护,使系统持久地满足用户需求,形成《维护记录报告》共八十页§4.软件(ruǎnjiàn)过程(SoftwareProcess)

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定(guīdìng)了完成各项任务的工作步骤。

描述了3WH:Who、When、What、How

软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。

通常使用生命周期模型概括地描述软件过程,生命周期模型规定了软件过程包含的各阶段,以及完成这些阶段的顺序。

典型的生命周期模型如下:共八十页§4.软件(ruǎnjiàn)过程1、瀑布(pùbù)模型(WaterfallModel)

维护开发定义DefinitionFeasibilityStudyRequirementsAnalysisProgramDesignCoding&ModuleTestingIntegration&SystemTestingDelivery&MaintenanceSystemDesign共八十页需求分析验证规格说明验证设计验证编码测试综合测试维护§4.软件(ruǎnjiàn)过程包括(bāokuò)问题定义和可行性研究从需求分析中独立(考虑获取用户需求的不同)包括总体、详细设计共八十页

实际的瀑布(pùbù)模型需求分析验证规格说明验证设计验证编码测试综合测试维护变化的需求验证§4.软件(ruǎnjiàn)过程共八十页

各阶段之间的顺序性、依赖性;

推迟程序的物理实现(shíxiàn);

质量保证的观点——阶段文档与评审的要求,利于尽早发现错误。传统瀑布(pùbù)模型的特点:§4.软件过程共八十页§4.软件(ruǎnjiàn)过程

强迫开发人员采用规范的技术方法;

严格地规定了每个阶段必须提交的文档;

每个阶段结束前必须正式进行严格的技术审查(shěnchá)和管理复审。瀑布模型的主要优点:瀑布模型的主要缺点:

在可运行的软件产品交付给用户之前,用户只能通过文档来了解未来产品的概貌。开发人员和用户之间缺乏有效的沟通,很可能导致最终开发出来的软件产品不能真正满足用户的需求。共八十页2、快速原型(yuánxíng)模型§4.软件(ruǎnjiàn)过程快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证

原型系统是软件开发人员与用户沟通强有力的工具共八十页§4.软件(ruǎnjiàn)过程

使用这种软件过程开发出的软件通常能满足用户真实需求;

软件产品的开发过程基本上是线性的顺序过程;

原型系统可以采用更高级(gāojí)的语言实现;

原型系统所完成的功能往往是最终产品的功能的子集,但其中的某些部分可以用到最终产品中。快速原型模型的主要优点:共八十页3、增量(zēnɡliànɡ)模型(渐增模型)§4.软件(ruǎnjiàn)过程需求分析验证规格说明验证总体设计验证针对每个构件,完成详细设计、编码和集成,经测试后交付给用户维护

把软件产品作为一系列增量构件来设计、编码、集成和测试。每个构件由若干相互协作的模块构成,并且能够完成相对独立的功能。共八十页§4.软件(ruǎnjiàn)过程

能在较短时间内向用户(yònghù)提交可完成部分工作的产品;

逐步增加产品功能,从而使用户易于学习和适应新的软件产品;

所开发出的软件产品具有较好的可扩充性。增量模型的主要优点:注意:用增量模型来开发软件,对软件工程师有较高的要求:必须具备足够的技术能力。因为设计的软件体系结构要求具有开放性,要处理好软件作为整体和构件序列的矛盾。共八十页4、螺旋(luóxuán)模型§4.软件(ruǎnjiàn)过程

在软件开发过程中,必须认识到及时识别和分析风险。

螺旋模型可看作是每个阶段之前增加了风险分析过程的快速原型模型共八十页§4.软件(ruǎnjiàn)过程

有利于已有软件的重用;

有助于把软件质量作为软件开发的一个重要目标;

减少了过多测试或测试不足(bùzú)所带来的风险;

软件维护与软件开发没有本质区别。螺旋模型的主要优点:注意:

用螺旋模型来开发软件,要求软件开发人员具有丰富的风险评估知识和经验;

螺旋模型所描述的软件过程主要适用于内部开发的大型软件项目。共八十页5、喷泉(pēnquán)模型§4.软件(ruǎnjiàn)过程进一步开发运行状态集成和测试阶段编码阶段面向对象设计阶段面向对象分析阶段陈述需求阶段维护期

喷泉模型是典型的面向对象生命周期模型,充分体现了面向对象软件开发过程迭代和平滑过渡的特性。

整个开发过程使用统一软件概念“对象”

对象模型适用于分析、设计、实现阶段

维护时间缩短

向上的中心线避免过度无序共八十页6、Rational统一(tǒngyī)过程RUP§4.软件(ruǎnjiàn)过程RUP是有Rational软件公司推出的一中软件过程,其有效的开发经验(最佳实践):

迭代式开发;

管理需求;

使用基于构件的体系结构;

可视化建模;

贯穿于开发过程的软件质量验证;

控制软件变更。共八十页初始阶段细化阶段构造阶段移交阶段产品版本时间周期1消亡周期2周期n诞生产品版本时间§4.软件(ruǎnjiàn)过程RUP软件开发生命周期划分(huàfēn)共八十页RUP软件开发生命周期模型(móxíng)§4.软件(ruǎnjiàn)过程

RUP重复一

温馨提示

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

评论

0/150

提交评论