您好,欢迎访问三七文档
软件工程导论(第4版)普通高校本科计算机专业特色教材精选张海藩编著第一章软件工程学概论1.1软件危机1.软件Software=Program+Data+Document软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。软件特征软件是一种逻辑实体,而不是具体的物理实体软件的生产与硬件不同在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题软件技术的发展落后于需求时间软件复杂性软件需求差距软件技术硬、软件成本比例的变化年份成本%软件1950197019851995硬件2、软件危机软件危机包含两方面问题:–-如何开发软件,以满足不断增长,日趋复杂的需求;–-如何维护数量不断膨胀的软件产品。鉴于软件危机的长期性和症状不明显的特点,近年来有人建议将软件危机更名为:Softwaredepression(软件萧条)Softwareaffliction(软件困扰)“慢性的苦恼”软件危机主要有以下表现:•对软件开发成本和进度的估计常常不准确。开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见。•用户对“已完成”系统不满意的现象经常发生。•软件产品的质量往往靠不住。Bug一大堆,Patch一个接一个。•软件的可维护程度非常之低。•软件通常没有适当的文档资料。•软件的成本不断提高。•软件开发生产率的提高赶不上硬件的发展和人们需求的增长。软件开发工作量分配比例测试程序其它40%~50%10%~20%费用分配比例其它软件维护55%~70%引入同一变化付出的代价随时间变化的趋势3、消除软件危机的途径•对计算机软件有一个正确的认识(软件≠程序)•必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。•推广使用在实践中总结出来的开发软件的成功技术和方法。•开发和使用更好的软件工具。软件工程----SoftwareEngineering于1968年NATO组织在德国召开的一次会议上提出是把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。1.2软件工程围棋与软件工程的感想围棋围棋棋谱拿过来的时候,大师问“后面应该走哪里?”十个初级爱好者选择的落点散布在棋盘各处……十个职业棋手说的落子点都差不多,甚至包括后面的几步……这就是高手和低手的差别……软件工程当一个小程序拿过来的时候,项目经理让大家编写……十个中国软件工程师写出来的程序各有“特色”、千差万别,十个印度软件工程师写出来的程序差不多,以至于怀疑是“抄袭”。项目经理也不清楚中国软件业和印度软件业的差距是多少年只是觉得差了好远好远……2、软件工程定义•Softwareengineering.(1)Theapplicationofasystematic,disciplined,quantifiableapproachtothedevelopment,operation,andmaintenanceofsoftware;thatis,theapplicationofengineeringtosoftware.(2)Thestudyofapproachesasin(1).(IEEEStd610-1990.)软件工程是:(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径。软件工程技术的两个明显特点:•强调规范化•强调文档化•转变对软件开发的认识:上升程序系统•转变思维定式:上升程序员系统工程师(系统分析员)1.3软件生命周期问题定义软件定义可行性研究需求分析总体设计详细设计软件生命周期软件开发编码单元测试综合测试运行维护持续满足用户需求软件开发模型软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件开发模型也常称为:软件过程模型软件生存周期模型软件工程范型1.4软件过程1.瀑布模型(WaterfallModel)——传统的瀑布模型需求分析验证规格说明验证设计验证编码测试综合测试维护定义时期开发时期维护时期传统瀑布模型开发软件的特点1.阶段间具有顺序性和依赖性。2.每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。传统瀑布模型存在什么问题?•传统的瀑布模型过于理想化。事实上,人在工作过程中不可能不犯错误。•在设计阶段可能发生规格说明文档中的错误。•而设计上的缺陷或错误可能在实现过程中显现出来。•在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。——瀑布模型的优缺点•瀑布模型有许多优点:可强迫开发人员采用规范的方法(例如,结构化技术);严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。•“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成;开发者常常被不必要地耽搁。2.原型模型---快速原型模型(RapidPrototypeModel)快速建立起来的可以在计算机上运行的程序,他所能完成的功能往往是最终产品能完成的功能的一个子集。听取用户意见建造/修改原型用户测试运行原型快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证维护过程开发过程原型模型—适用情况•用户定义了一组一般性目标,但不能标识出详细的输入、处理及输出需求;•开发者可能不能确定算法的有效性、操作系统的适应性或人机交互的形式;•……原型模型可能是最好的选择3.增量模型(渐增模型)(IncrementalModel)先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部系统需求。系统的总体设计在初始子集设计阶段就应作出设想。增量模型需求分析验证规格说明验证设计验证维护针对每个构件完成详细设计、编码和集成,经测试后交付给用户增量模型的优点在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。使用增量模型的困难1.在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。2.开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。3.多个构件并行开发,具有无法集成的风险。4.螺旋模型(SpiralModel)•产品交付给用户后用户可能不满意;•到了预定的交付日期软件可能还未开发出来;•实际的开发成本可能超过预算;•产品完成前一些关键的开发人员“跳槽”了;•产品投入市场之前竞争对手发布了一个功能相近、价格更低的软件等。软件风险是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。例如:螺旋模型的基本思想•使用原型及其他方法来尽量降低风险。快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证风险分析风险分析风险分析风险分析风险分析风险分析可看作在每个阶段之前都增加了风险分析过程的快速原型模型。简化的螺旋模型图1.8完整的螺旋模型螺旋模型•优点–对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;–减少了过多测试或测试不足;–维护和开发之间并没有本质区别。•特点–风险驱动•主要适用于内部开发的大规模软件项目•要有具有丰富风险评估专门知识的开发人员,否则风险更大。5.面向对象模型可重用部件组装模型(构件集成模型)(ComponentIntegrationModel)基于构件的软件工程(CBSE)过程模型构件开发分析设计编程测试领域分析系统测试构件提交领域专家经验现有系统资料领域构件需求构件/构架库领域构架领域构件系统开发系统专用构件应用系统构件生产线领域构架领域构件问题域用户需求系统生产线系统组装分析设计编程构架细化专用构件开发分析设计编程测试软件生产线应用构件提取车间构件生产车间标准规范与质量保证1基础构件,2功能构件3接口构件,4用户界面构件应用构件库构件库组装车间领域1领域2应用系统...1234
本文标题:25第1章 概述
链接地址:https://www.777doc.com/doc-3471601 .html