01软件工程概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件工程北京工业大学·计算机学院·软件系苏航主讲suhang@bjut.edu.cn1软件工程概述软件的概念软件=程序?“软件开发就是编程序”软件的定义软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序:是按事先设计的功能和性能要求执行的指令序列。数据:是使程序能正常操纵信息的数据结构。文档:是与程序开发,维护和使用有关的图文材料。不同的视角软件更像是一种嵌入式的数字化知识软件也可以看作是问题领域和计算机系统之间的接口软件的特性形态特性软件是无形的、不可见的逻辑实体智能特性软件是复杂的智力产品开发特性软件开发工作尚未实现自动化,包含相当的个体劳动质量特性软件产品质量控制存在着许多实际困难,并难于克服生产特性软件与硬件或传统的制造产业产品的生产不同软件的特性管理特性软件开发管理更为重要,更为独特环境特性软件的开发和运行离不开相应的计算机系统环境维护特性软件产品与传统产业产品的维护在概念上有很大差别废弃特性软件不是由于“用坏”而废弃应用特性软件应用极为广泛,已进入各个领域软件的故障率曲线6故障率时间生命初期磨损后硬件的故障率曲线修改由于副作用造成故障率的提高实际曲线原来的软件已经面目全非了!软件故障率的理想曲线软件不会用坏(wearout).软件会退化(decommission)!软件的分类按照软件的作用,一般可将软件做如下分类:1.系统软件与计算机硬件频繁交互;多用户支持;需要精细调度、资源共享及灵活的进程管理的并发操作;复杂的数据结构;及多种外部接口。2.应用软件满足特定业务需要的独立应用程序3.支撑软件协调用户开发软件的工具性软件4.可复用软件标准函数库;数据结构;由代码复用发展到体系结构的复用,开发过程复用软件的发展195019601970198019902000早期阶段:•面向批处理•有限的分布•自定义软件第二阶段:•多用户•实时•数据库•软件产品第三阶段:•分布式系统•嵌入“智能”•低成本硬件•消费者的影响第四阶段:•强大的桌面系统•面向对象技术•专家系统•人工神经网络•并行计算•网络计算机程序设计程序系统软件工程软件危机软件危机出现于20世纪60年代末软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题软件开发的成本和进度难以准确估计,延迟交付甚至取消项目的现象屡见不鲜软件存在着错误多、性能低、不可靠、不安全等质量问题软件维护极其困难,而且很难适应不断变化的用户需求和使用环境软件项目成功率1994年,美国StandishGroup调查了350多家公司的8000多个软件项目,了解它们的进展情况。典型案例美国IBM公司在1963年至1966年开发的IBM360机的操作系统。共约100万条指令,花费了5000个人年;经费达数亿美元,错误多达2000个以上,系统根本无法正常运行。这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“…正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深。最后无法逃脱灭顶的灾难,……程序设计工作正像这样一个泥潭,……一批批程序员被迫在泥潭中拼命挣扎,……谁也没有料到竟会陷入这样的困境…”如何解决类似的问题?如何摆脱软件危机?1968年10月在北大西洋公约组织(NATO)召开的计算机科学会议上提出了“软件工程”和“软件危机”的术语彻底消除“软件就是程序”的错误观念充分认识到软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目推广和使用在实践中总结出来的开发软件的成功技术、方法和工具按工程化的原则和方法组织软件开发工作。工程的含义工程是将理论和所学的知识应用于实践的科学,以便经济有效地解决实际问题工程的含义规模上的差异花园小道vs.汽车高速公路树上小屋vs.摩天大楼加法程序vs.医院档案系统手工(Craft):小规模的设计与建造简单问题与单一目标个人控制与个人技能工程(Engineering):大规模的设计与建造复杂问题与目标分解多人参与,需要考虑运营、管理、成本、质量控制、安全等软件工程定义1968年德国人Bauer在NATO会议上首次提出软件工程的定义:“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。1983年IEEE的软件工程定义:“软件工程是开发,运行,维护和修复软件的系统方法”1993年IEEE的一个更加综合的定义:“软件工程是:①将系统的、规范的、可度量的方法应用于软件开发、运行和维护过程,也就是把工程应用于软件;②对①中提到的方法的研究”。软件工程框架可用性性性确正合算选取适宜的开发模型采用合适的设计方法提供高质量的工程支持重视软件工程的管理基本过程支持过程组织过程目标过程原则软件工程的主要方面软件工程目标运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要以较短的周期、较低的成本生产出高质量的软件产品,并昀终实现软件的工业化生产软件工程过程包含的基本活动有需求、分析与设计、实现、确认与测试、维护与支持软件工程的四条原则采用适宜的开发模型,使用恰当的开发方法,提供高质量的工程支持,实施有效的工程管理,从四个方面指导每一项工程的活动,以实现软件工程目标软件生存期软件也有一个孕育、诞生、成长、成熟和衰亡的生存过程,我们称这个过程为软件生命周期或软件生存期软件生存期由软件定义、软件开发和运行维护3个时期组成,每个时期又可划分为若干个阶段软件生存期存在的矛盾High-QualitybutSlowtoMarketNotaLeaderSpeedQuality软件开发质量和速度的矛盾FasttoMarketbutLowQualityLowCustomerSatisfaction为何要关注过程“产品的质量在很大程度上取决于用以开发和维护该产品的过程的质量。”BasedonTQMprinciplesastaughtbyShewhart,Juran,DemingandHumphrey.人过程技术Q&P软件过程软件过程是支持软件生命周期的所有活动为实现预定目的而执行的一组实践;过程包含工具,方法,材料及人员软件过程规定了实现预定目的或成果所要完成的一系列活动/任务-要做什么;执行活动相关的角色和职责–谁来做;完成活动所要采用的技术、方法和步骤–如何去做一个混沌的过程Theworkisdonequitewell输入可接受的产品返工顾客妥善定义的过程InOut/软件生命期/////质量门质量目标和支持活动的计划软件过程模型软件工程过程定义了:方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑软件过程模型是软件工程思想的具体化,是跨越软件生存周期的系统开发、运行、维护所实施的全部活动和任务的过程框架软件过程模型瀑布模型快速原型模型增量模型螺旋模型喷泉模型统一过程模型瀑布模型在20世纪80年代之前,瀑布模型一直是唯一被广泛采用的生命周期模型传统的瀑布模型如图所示瀑布模型特点各项活动按自上而下,相互衔接的固定次序,如同瀑布逐级下落,每项活动均处于一个质量环(输入-处理-输出-评审)中阶段间具有顺序性和依赖性推迟实现的观点每个阶段必须完成规定的文档;每个阶段结束前完成文档审查为什么瀑布模型有时候会失败?瀑布模型实际的瀑布模型实际的瀑布模型是带“反馈环”的,如图所示图中实线箭头表示开发过程,虚线箭头表示维护过程瀑布模型优缺点瀑布模型的优点可强迫开发人员采用规范化的方法严格地规定了每个阶段必须提交的文档要求每个阶段交出的所有产品都必须是经过验证的瀑布模型的缺点很可能导致昀终开发出的软件产品不能真正满足用户的需要瀑布模型只适用于项目开始时需求已确定的情况快速原型模型快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是昀终产品能完成的功能的一个子集快速原型模型如图所示快速原型开发结果抛弃式原型演化式原型快速原型模型先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,昀终获得满意的软件产品需求的采集与细化客户评价原型快速设计建造原型加工原型产生样品停止开始快速原型模型优点1.有助于满足用户的真实需求2.原型系统已经通过与用户的交互而得到验证,产生的规格说明文档能够正确地描述用户需求3.软件产品的开发基本上是按线性顺序进行4.因为规格说明文档正确地描述了用户需求,在开发过程的后续阶段不会因为规格说明文档的错误而进行较大的返工增量模型增量模型是迭代和演进的过程增量模型把软件产品分解成一系列的增量构件,在增量开发迭代中逐步加入每个构件由多个相互作用的模块构成,并且能够完成特定的功能早先完成的增量可以为后期的增量提供服务增量开发方法的新演进版本叫做“极限程序设计(eXtremeProgramming)”增量模型增量模型如图所示定义基本需求将需求对应到各增量设计系统架构开发其中一个增量检验和确认该增量将增量集成到系统中确认集成后的系统增量构件开发每个增量应当实现某种系统功能,因此增量构件的开发可以采用瀑布模型的方式,如图所示增量模型的优点1.能在较短时间内向用户提交可完成一些有用的工作产品,即从第1个构件交付之日起,用户就能做一些有用的工作2.逐步增加产品的功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给用户组织带来的冲击3.项目失败的风险较低,虽然在某些增量构件中可能遇到一些问题,但其他增量构件将能够成功地交付给客户4.优先级昀高的服务首先交付,然后再将其他增量构件逐次集成进来。因此,昀重要的系统服务将接受昀多的测试快速实现和提交一个有限的版本,可以应付市场竞争的压力螺旋模型螺旋模型昀初是Boehm于1988年提出来的该模型将瀑布模型与快速原型模型结合起来,并且加入两种模型均忽略了的风险分析螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险螺旋模型沿着螺线旋转,自内向外每旋转一圈便开发出更完善的一个新版本,表示过程的一个阶段目标设定风险估计与弱化开发与验证(实施工程)计划(评价开发工作)集成测试螺旋模型的优缺点优点:对可选方案和约束条件的强调,有利已有构件的重用减少了过多测试或测试不足带来的风险缺点:螺旋模型是风险驱动的,对软件开发人员要求高,必须具有丰富的风险评估经验和专门知识喷泉模型“喷泉”体现了迭代和无间隙的特性系统某个部分常常重复工作多次,相关对象在每次迭代中随之加入演进的软件成分无间隙是指在各项开发活动,即分析、设计和编码之间不存在明显的边界喷泉模型是对象驱动的过程,是典型的面向对象生命周期模型统一过程模型由Booch、Jacobson及Rumbaugh提出统一过程的工作流在统一过程中,有6个核心工作流1.业务建模工作流用商业用例为商业过程建立文档2.需求工作流目标是描述系统应该做什么,确保开发人员构建正确的系统为此,需明确系统的功能需求和非功能需求(约束)3.分析和设计工作流其目标是说明如何做。结果是分析模型和设计模型统一过程的工作流4.实现工作流用分层的方式组织代码的结构,用构件的形式来实现类,对构件进行单元测试,将构件集成到可执行的系统中5.测试工作流验证对象之间的交互、是否所有的构件都集成了、是否正确实现了所有需求、查错并改正6.部署工作流制作软件的外部版本、软件打包、分发、为用户提供帮助和支持统一过程的阶段统一过程有4个阶段,分别是初始阶段、细化阶段、构造阶段和移交阶段1.初始阶段初始阶段主要关注项目计划和风险评估,其目的是确定是否值得开发目标信息系统2.细化阶段细化阶段关心定义系统的总体框架,其目标是:细化初始需求(用况)、细化体系结构、监控风险并细化它们的优先级、细化业务案例以及制订项目管理计划。统一过程的阶

1 / 76
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功