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

下载本文档

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

文档简介

第一章

软件工程导论

2本章目标掌握软件的定义,软件工程的定义及三要素。掌握软件生存周期的概念和内容,8种软件开发模型。了解软件危机的表现及解决途径,软件开发方法。31.1软件的概念

计算机软件的发展与进步,与计算机硬件的发展和计算机的普及是分不开的。同其他事物的发展规律一样,它也经历了从产生、发展到成熟的过程。在这个过程中也经历了软件的危机,为吸取历史经验教训,应该认真研究产生软件危机的原因,探讨消除软件危机的途径。阿塔纳索夫-贝瑞计算机(Atanasoff-BerryComputer,简称ABC)是法定的世界上第一台电子计算机。是爱荷华州立大学的约翰·文森特·阿塔纳索夫(JohnVincentAtanasoff)和他的研究生克利福特·贝瑞(CliffordBerry)在1937年设计,不可编程,仅仅设计用于求解线性方程组,并在1942年成功进行了测试。【特点】这台计算机是电子与电器的结合,电路系统中装有300个电子真空管执行数字计算与逻辑运算,机器使用电容器来进行数值存储,数据输入采用打4世界第一台计算机孔读卡方法,还采用了二进位制。因此,ABC的设计中已经包含了现代计算机中四个最重要的基本概念,从这个角度来说它是一台真正现代意义上的电子计算机。5艾奥瓦州立大学DurhamCenter一楼的ABC6世界第二台计算机ENIAC是第二台(中文名:埃尼阿克)(电子数字积分计算机的简称,英文全称为ElectronicNumericalIntegratorAndComputer),事实上它是世界上第一台电子多用途计算机,它于1946年2月14日在美国宣告诞生。承担开发任务的“莫尔小组”由四位科学家和工程师埃克特、莫克利、戈尔斯坦、博克斯组成,总工程师埃克特在当时年仅24岁。7ENIAC诞生于二战时期,最初是作为辅助炮兵计算炮弹轨迹的工具,在盟军登陆西欧前一年开始制造,但直到1945年停火时还没完成。在冷战初期军方就发现了ENIAC的大量用途,它的17468根真空管被用来测试氢弹的早期设计的可行性。这台计算机每秒能执行5000条指令,在当时的情况下它的运算速度比电动式计算机快1000倍。当然,现在iPhone6每秒能响应250亿条指令。89ENIAC重达27吨,占地1800平方英尺,101815年世界上首位程序员AugustaAdaKing诞生她是英国诗人拜伦的独生女,师从计算机数学基础布尔代数的创始人之一摩根,因第一个为分析机编出了程序即“第一套计算机软件”,被誉为“世界上第一位软件工程师”。

11补充

软件发展历程

软件的发展主要经历了以下3个发展阶段:第一阶段(20世纪50年代初期至20世纪60年代中期)特点:(1)称为程序设计阶段(2)软件生产以个体化为主(3)编写程序的工具只有低级语言(4)软件规模小,几乎没有系统化的标准可循12(5)软件由软件使用者自己开发和编写,适合个人应用(6)没有“软件”概念,对于程序有关的文档的重要性认识不足,开发主要围绕硬件进行(7)工程规模小,使用工具单一,开发者之间没有明确分工第二阶段(20世纪60年代中期至70年代末期)称程序系统阶段13特点:(1)大容量存储器的出现(2)出现了高级程序设计语言(3)多道程序设计、用户系统引入了人机交互的新概念(4)出现了实时系统和第一代数据库管理系统(5)软件产品的使用和软件作坊的出现(6)软件的应用范围更广14缺乏有效的工程化方法指导,很多软件不能按计划完成,纠正源代码错误变更程序功能等软件维护花费了人们更多的精力和资源,到了20世纪60年代中期,出现了所谓的软件危机。15第三阶段(20世纪70年代末至今)特点:(1)计算机硬件向巨型机和微型机两个方向发展(2)计算机网络的出现,Internet的飞速发展(3)出现了软件工程(4)分布式系统、高带宽数字通信系统、实时数据访问控制系统等应用技术的迅速发展,对计算机软件的需求要求更高16补充之二:

软件的定义

软件是计算机系统中与硬件(hardware)相互依存的另一部分,与硬件合为一体完成系统功能。软件定义包括如下几点:(1)功能和性能的指令集(即程序);(2)程序能正常操纵信息的数据结构(即相关数据);(3)与程序开发维护和使用有关的各种图文数据(即说明文档)。软件=程序+数据+相关文档(1)程序是能够完成预定功能和性能的可执行的指令序列(2)数据是使程序能够适当地处理信息的数据结构(3)文档是开发、使用和维护程序所需要的图文资料17【注意】【1】软件开发不是某种个体劳动的神秘技巧,而是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。【2】应推广使用在实践中总结出来的开发软件的成功的技术和方法【3】应该开发和使用更好的软件工具1819

软件的特点(1)软件是一种抽象的逻辑实体。人们无法看到其具体形态,而必须通过观察、分析、思考、判断等方式去了解它的特性功能。(2)软件是通过人们的智力活动,把知识与技术转化为信息的一种产品,是在研制、开发中被创造出来的。一旦某一软件被研制成功,只需复制即可,但其维护的工作量大。(3)软件具有“复杂性”,开发和运行经常受到计算机系统的限制。20(4)软件成本昂贵,开发方式目前尚未摆脱手工生产方式。(5)在软件的运行和使用期间,不存在硬件那样的机器磨损、老化问题。但是软件也存在退化问题,也需要维护。21图1-1是硬件的失效率曲线,它是一个“U型”曲线,说明随使用时间的增加,失效率急剧上升。图1-2是软件失效率曲线,表明软件随使用时间的增加,失效率降低;因为软件虽然不存在磨损和老化问题,但存在退化问题。22

软件的分类1.基于软件的功能划分(1)系统软件系统软件是与计算机硬件紧密配合居于计算机系统中最靠近硬件的一层。例如,设备驱动程序、操作系统等。(2)支撑软件支撑软件是协助用户开发软件的工具性软件。例如,网络软件、数据库管理程序等。23(3)应用软件应用软件是特定领域内开发、为特定目的服务的软件。例如,工程与科学计算软件、系统仿真和人工智能软件等。2.基于软件规模划分(1)微型软件是指一个人在几天内完成、程序不超过500行语句且供个人专用的软件。没有严格的分析和完整的设计与测试。24

软件的分类(2)小型软件是指由一个人在半年内完成的2000行语句以内的程序。具有一定的标准化技术、正规的数据书写以及定期的系统审查,但没有大型软件那样严格。(3)中型软件是指由5个人以内在一年多的时间里完成的5000-50000行语句的程序。开始出现软件人员之间、软件人员与用户之间的协调、联系的配合方面的问题。25(4)大型软件是指由5-10个人在两年多的时间里完成的50000-100000行语句的程序。在大型软件中采用软件工程方法进行规划可以有效解决和避免突发事件,减少危害性。(5)甚大型软件是指由100-1000个人在4-5年里完成的100万行语句规模的程序的软件项目。26(6)极大型软件是指由2000-5000人在10年里完成的1000万行语句以内规模的程序的软件项目。这类软件一般用于军事指挥、弹道防御系统等项目。3.基于软件工作方式划分(1)实时处理软件是指在事件或数据产生时,立即处理,并及时反馈信号,以控制需要检测的部分和控制过程的软件。27软件的分类(2)分时软件允许多个联机用户同事使用计算机的软件,系统把处理事件轮流分配给联机用户,但用户感觉是只有自己在使用计算机。(3)交互式软件能实现人机通信的软件,能接收用户给出的信息,但在时间上没有严格的限定。(4)批处理软件把一组输入作业或一批数据以批处理的方式一次运行,按顺序逐个处理的软件。281.1软件危机1.2.1软件危机的定义软件危机是计算机软件在它的开发和维护过程中所遇到的一系列严重问题。主要包含两方面的问题:一方面是如何开发软件,怎样满足对软件日益增长的需求;另一方面是如何维护数量不断膨胀的已有软件。291.1.2产生软件危机的原因(1)软件是计算机系统的逻辑部件,缺乏“可见性”,且软件产品往往规模庞大,给软件的开发和维护带来客观的困难。(2)软件一般要使用5~10年,在这段时间里,可能会出现当初没有预料的问题。如系统运行的环境发生变化,软件需求发生等,都需要及时地对软件进行维护和更新,以延长软件的使用寿命。(3)软件的开发技术落后,生产方式和开发工具落后。(4)软件开发人员忽视软件需求分析的重要性,轻视软件的维护,也是造成软件危机的原因。30311.1.3软件危机的表现形式软件发展速度跟不上硬件的发展和用户的实际需求对软件开发成本和进度估计不准确使用户不满意软件产品的质量差软件产品的可维护性差软件文档资料不完整321.1.4解决软件危机的途径(1)加强软件开发过程的管理,创造良好的组织、严密的管理和协调工作的机制。(2)推广使用开发软件的成功技术与方法,探索更好的更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的错误概念。(3)开发和使用好的软件工具。在适当的软件工具支持下,开发人员可以更好的完成工作。331.2软件工程的产生和发展【软件工程】是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。1.2.1软件工程的定义及特征1.著名的软件工程专家B.W.Boedhm对软件工程的定义“软件工程”是开发、运行、维护和修复软件的系统方法。这个定义概括了软件工程是一种系统方法,而不是单独的个人技巧的体现。34352.FrizeBauer在NATO(北大西洋公约组织North

Atlantic

Treaty

Organization简称北约组织或北约)会议上对软件工程的定义尽力并使用完善的工程化原则,以较经济的手段获得在实际机器上有效运行的可靠软件的一系列方法。3.IEEE(电气和电子工程师协会)在软件工程术语汇编中的定义软件工程是把系统化的、规范化的、可度量36的途径应用于软件开发、运行和维护的过程,即把工程化的方法应用于软件中。【软件工程的本质特征】:(1)软件工程关注于大型程序的构造(2)软件工程的中心课题是控制复杂性软件所解决的问题十分复杂,不能把问题作为一个整体通盘考虑,常用的方法是把问题分解,使得分解后的问题是可理解的,需要各个部分之间保持简单的通信关系。(3)软件经常变化(4)开发软件的效率非常重要(5.)和谐地合作是开发软件的关键(6.)软件必须有效地支持它的用户开发软件的目的就是支持用户的工作,满足用户对软件的需求(7.)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品3738

软件工程的研究内容391.2.2软件工程的基本原理巴利.玻姆(B.W.Boehm)提出的7条软件工程原理:(1)用分阶段的生存周期计划严格管理把软件生存周期划分为若干阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。(2)坚持进行阶段评审,以确保软件产品质40量。(3)实行严格的产品控制,以适应软件规格的变更(4)采用现代程序设计技术(5)结果应能清楚地审查(6)开发小组人员应该小而精(7)承认不断改进软件工程实践的必要性411.3软件生存周期

软件生存周期(SoftwareLifeCycle):一个软件产品从定义、开发、维护到废弃的时间总和称为软件的生存周期。软件生存周期的划分:(1)软件定义阶段:该阶段必须要回答的问题是“需要软件解决的问题是什么”,通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。(2)可行性研究提交“可行性研究报告”,要回答“对于上一个阶段所确定的问题有行得通的解决方法吗?”(3)软件需求分析主要确定目标系统必须具备哪些功能,提交“需求规格说明书”,描述软件的功能和性能,确定软件设计的限制和软件与其他系统元素的接口,定义软件的其他有效性需求。42432.软件开发阶段:该阶段的任务是设计实现已定义的并经过需求分析的软件系统。(4)总体设计(概要设计)需要解决的问题是“应该如何宏观地解决问题”确定软件德模块功能,得出意义明确的功能模块,确定每个模块的输入、输出以及44相互联系。(5)详细设计(模块设计)给出具体实现这个系统的步骤,但还不是编写程序,而是设计出程序的详细规格说明(类似于工程师的工程蓝图),它们包含必要的细节,程序员可以根据它们写出实际的程序代码。(6)编码和单元测试写出正确的容易理解、容易维护的程序模块。45程序员应该根据目标系统的性质和实际环境选取一种适当的高级程序设计语言把详细设计的结果翻译成用选定的语言书写的程序,并仔细测试编写出的每一个模块。(7)综合测试关键任务是通过各种类型的测试及相应的调试使软件大道预定的要求。此阶段最重要的测试是:集成测试、验收测试。(1)集成测试:是根据设计的软件结构,把经过单元测试的模块按照某种选定的策略装配起来。(2)验收测试:按照规格说明书的规定,由用户(或在用户积极参加下)对目标系统进行验收。46(8)软件维护运行阶段的任务是保障软件的正常运行以及对软件进行维护。为了排除软件系统中可能隐含的错误,适应用户需求及系统操作环境的变化,需要继续对系统进行修改或扩充。47481.4软件过程1.4.1软件过程软件过程(SoftwareProcedure)是为了获得高质量软件所需要完成的一系列任务的框架,规定了完成各项任务的工作顺序,在完成开发任务时必须进行一些必要的活动。其中活动的执行可以是顺序的、重复的、并行的、嵌套的或者是有条件引发的。49软件过程的分类:(1)基本过程类:包括获取过程、供应过程、开发过程、运作过程、维护过程和管理过程。(2)支持过程:包括文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程以及问题解决过程。(3)组织过程类:包括基础设施过程、改进过程以及培训过程。50软件过程是整个软件生存周期中一系列的软件生产活动的流程。把软件生存周期中各项开发活动的流程用一个合理的框架-开发模型来规范描述,这就是软件过程模型,或称为软件生存周期模型。1.4.1瀑布模型也称为线性顺序模型或软件生存周期模型,是W.Royce于1970年提出的。511970年温斯顿·罗伊斯(WinstonRoyce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。从本质来讲,它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好“返回”上一个阶段并进行适当的修改,开发进程从一个阶段“流动”到下一个阶段,这也是瀑布开发名称的由来。521.4软件过程模型1.4.1瀑布模型传统的瀑布模型过于理想化,人们在工作中不可能不犯错误,在设计阶段可能发现规格说明文档中的错误,设计上的缺陷或错误可能在实现过程中显现出来,在综合测试阶段将发现需求分析、设计或编码阶段的许多错误,因此,实际的瀑布模型是带“反馈环”的,如图所示,当在后阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品之后再回来继续完成后面的任务。535455瀑布模型的优缺点

1、瀑布模型有以下优点:

1)为项目提供了按阶段划分的检查点。

2)当前一阶段完成后,您只需要去关注后续阶段。

3)可在迭代模型中应用瀑布模型。2、瀑布模型有以下缺点:

1)在项目各个阶段之间极少有反馈。

2)只有在项目生命周期的后期才能看到结果。

3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。561.4.2快速原型模型1.4.2快速原型模型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型模型又称原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。57例如,客户需要一个ATM机软件,可以先设计一个仅包含刷卡、密码检测、数据输入和账单打印的原型软件提供给客户,此时还不包括网络处理与数据库存取以及数据应急、故障处理等服务。

快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。58591.4.3增量模型增量模型是一种非整体开发模型。把软件产品作为一系列的增量构件来设计、实现、集成和测试。开发时分批向用户提交产品,每次提交一个满足用户需求子集的增量构件,直到最后一次得到满足用户全部需求的完整产品为止根据增量的方式和形式不同,分为基本瀑布模型的渐增模型和基于原型的快速原型模型。60增量模型融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。61采用增量模型的软件过程如图所示

62增量模型631、增量模型的优点采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。2.增量模型存在以下缺陷:

1)由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。64

2)在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。

3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。651.4.4螺旋模型1988年,巴利·玻姆BarryBoehm正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。螺旋模型采用一种周期性的方法来进行系统开发。这会导致开发出众多的中间版本。使用它,项目经理在早期就能够为客户实证某些概念。66该模型是快速原型法,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。螺旋模型基本做法是在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。简化的螺旋模型6768完整的螺旋模型69螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于庞大、复杂并具有高风险的系统。对于这些系统,风险是软件开发不可忽视且潜在的不利因素,它可能在不同程度上损害软件开发过程,影响软件产品的质量。减小软件风险的目标是在造成危害之前,及时对风险进行识别及分析,决定采取何种对策,进而消除或减少风险的损害。70

1、螺旋模型的优势包括:

1)设计上的灵活性,可以在项目的各个阶段进行变更。

2)以小的分段来构建大型系统,使成本计算变得简单容易。

3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。

4)随着项目推进,客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互。

5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。711.4.5喷泉模型喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。72喷泉模型的概述喷泉模型是由B.H.Sollers和J.M.Edwards于1990年提出的一种新的开发模型。喷泉模型主要用于采用面向对象技术的软件开发项目,喷泉一词本身就体现了迭代和无间隙的特征。无间隙指在各项活动之间无明显边界,如分析、设计和编码之间没有明显的界限。在编码之前再进行需求分析和设计,期间添加有关功能,使系统得以演化。喷泉模型在系统某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的系统。由于对象概念的引入,需求分析、设计、实现等活动只用对象类和关系来表达,从而可以较为容易地实现活动的迭代和无间隙,并且使得开发过程自然地包括复用。73741.4.5喷泉模型751、喷泉模型的优点喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。2、喷泉模型的缺点由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。761.4.6基于构件的开发模型基于构件的开发是指利用预先包装的构件来构造应用系统。构件可以是组织内部开发的或者是商品化、现存的软件构件。基于构件的开发模型如图所示:领域工程的目的是构建领域模型、领域基准体系结构和可复用构件库。应用系统工程的目的是使用可复用构件组装应用系统。771.4.6基于构件的开发模型1.4.6Rational统一过程

统一软件开发过程(RUP)又称为统一软件过程,是一个面向对象且基于网络的程序开发方法论。根据Rational(RationalRose和统一建模语言的开发者)的说法,好

温馨提示

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

评论

0/150

提交评论