SoftwareEngineering软件工程第一章软件工程概述本章内容软件工程的历史软件工程的概念软件生存周期软件开发过程模型场景互动请谈谈你在进行软件开发过程中都遇到过什么样的问题?软件的开发经常伴随着一些问题软件开发成本估计不准,开发成本超出预算开发进度不能保证,交付时间一再拖延开发出来的产品不符合用户的需求软件产品质量无法保证软件的可维护程度低软件开发生产率的发展跟不上硬件的发展速度和人们需求的增长这就是软件危机!软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。即包含两方面的问题:如何开发软件、如何维护软件。是什么原因导致的这个结果?软件危机产生原因【软件开发成本估计不准,开发成本超出预算】【开发进度不能保证,交付时间一再拖延】【开发出来的产品不符合用户的需求】忽视软件开发前期的调研和分析工作【软件产品质量无法保证】没有统一的、规范的方法论指导忽视测试阶段的工作【软件的可维护程度低】文档资料不齐全,忽视人与人的交流忽视测试阶段的工作忽视软件的维护【软件开发生产率的发展跟不上硬件发展速度和人们需求的增长】没有统一的、规范的方法论指导一、软件工程历史“软件工程”的诞生1968年北大西洋公约组织的计算机科学家在联邦德国召开国际科学会议,讨论软件危机问题,在这次会议上正式启用“软件工程”这个名词。消除软件危机的途径软件工程以软件产品化、系列化、工程化、标准化为特征。采用工程化方法和工程途径来研制与维护软件。摆脱软件危机的途径就是软件工程生成的过程消除软件危机,既要有技术措施又要有必要的组织管理措施软件工程出现在软件发展的阶段程序设计阶段—20世纪50至60年代程序系统阶段—20世纪60至70年代软件工程阶段—20世纪70年代以后软件发展阶段中最根本的变化人们改变了对软件的看法软件的需求是软件发展的动力软件工作的范围从考虑程序的编写扩展到设计整个软件生存期二、软件工程概念及原理软件工程的定义软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术和管理方法。软件工程三要素过程•为建造高质量的软件所需完成的任务框架方法•为软件开发提供了“如何做”的技术工具•为软件工程方法提供了自动的或半自动的软件支撑环境质量保证工具方法过程以质量保证为根本动力的软件工程三要素组织实施软件工程项目,从技术上和管理上采取了多项措施以后,最终希望得到项目的成功。软件工程项目的基本目标能按时完成开发任务,及时交付使用;付出较低的开发成本;需要较低的维护费用;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;开发的软件可靠性高。三、软件生命周期软件生命周期的概念软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程称为软件生存周期软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生命周期生命周期阶段的划分原则各阶段的任务相对独立同一阶段任务的性质相同软件的生存期划分的几个阶段软件定义:•问题定义•可行性研究(软件计划)•需求分析软件开发:•系统设计•软件实现•软件测试软件使用、维护和退役编码构思如何编码要解决什么具体问题这种解决方案行吗是谁提出的哪些问题客户检验使用过程中,对出现的问题进行修改淘汰软件软件产品问题定义可行性分析需求分析系统设计测试编码使用及维护升级或退役软件定义软件开发软件维护软件生命周期中各阶段负责的任务软件的生命周期周期序号周期名称周期序号周期名称1立项(或签订合同)、下达任务书6编码实现2可行性分析7软件测试3需求分析8软件发布与实施4概要设计9软件维护5详细设计10版本更新或退役五、软件开发过程模型软件开发过程模型软件开发(过程)模型或软件工程规范,是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架.常用的开发过程模型瀑布模型原型(演化)模型螺旋模型统一过程模型RUP1.瀑布模型瀑布模型(生存周期模型)就是传统的生命周期方法学(既自顶向下结构化开发模型方法)。优点奠定了软件工程方法的基础;流水依赖;便于分工协作;推迟实现;文档易修改;有复审质量保证。缺点用户需求明确困难;用户见面晚;纠错慢;难于克服系统分析员不懂专业领域的知识,用户不懂计算机的困难,成功率低。适合于系统要求明确的小系统软件生存期的瀑布模型2.原型模型原型模型(rapidprototypemodel)是为了确定需求而提出的实际模型。打破传统的自顶向下结构化开发模型方法,在计划和需求分析后,把系统主要功能接口做为设计依据,快速开发出软件样机,及时征求用户意见,正确确定系统需求,然后再进一步准确地进行系统设计与实现。优点与用户见面快;开发成功率高,适合于需求不确定的大系统。缺点周期长,开发成本高。原型模型3.螺旋模型螺旋模型(spiralmodel)沿着螺线旋转(一个螺旋式周期),在四个象限上分别表达四个方面的活动制定计划•确定软件目标,选定实施方案,弄清项目开发的限制,选定完成目标的策略风险分析•分析所选方案,考虑如何识别和消除风险,风险角度分析该策略实施工程•实施软件开发,启动一个开发阶段客户评估•评价前一步开发工作,提出修正建议,计划下一轮的工作特点瀑布模型+快速原型+风险分析迭代过程4.统一过程模型-RUP统一过程是一个通用的过程框架,可用于各种不同类型的软件系统,各种不同的应用领域,各种不同类型的组织,各种不同功能级别以及不同的项目规模。RUP可以根据项目的具体情况进行适当裁减,以适应不同规模的开发。一个完整的RUP过程是很庞大的(重量级)。统一过程是基于构件的(component-based)所构造的软件系统是由软件构件通过明确定义的接口相互连接所建造起来的统一过程使用统一建模语言来制定软件系统的所有蓝图统一过程的特点用例驱动•基于用例模型,开发人员可以创建一系列实现这些用例的设计和实现模型。开发人员可以审查每个后续建立的模型是否与用例模型一致。测试人员测试实现以确保实现模型的构件正确实现了用例。因此用例不仅开启了开发过程,而且使其结合成一体。以构架为中心•以构架为中心的含义是指,从主要用例入手,先建立一个粗略的框架,然后处理已确定的重要用例子集,并通过子系统、类和构件来实现;最后随着用例的不断完善使框架的更多部分显示出来,直到获得一个稳定的构架为止。迭代和增量的•迭代是指工作流中的步骤,增量是指产品中增加的部分。•统一过程是在重复一系列组成系统生命周期的循环,每次循环向用户提供一个产品版本作为终结,每次循环包括四个阶段:初始、细化、构造和移交,每个阶段分为多次迭代。讨论我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。软件生命周期中的哪个阶段可以实现以下任务?分析员演示一个用于预订公司车辆的Windows用户界面原型。分析员观察订单输入职员的工作,以确定客户的订单是如何处理的。分析员指定支持生产进度的数据库结构。分析员教工厂经理如何使用微机生成一份新的预定义报告。工厂主管描述一份新的采购报告的内容,这份采购报告将简化购买订单的跟踪过程。索赔调解员向一位分析员描述由于索赔处理系统的延误失去客户业务的后果。分析员正在为学生入学联系系统准备初步的进度表和预算,该系统最近才由指导委员会通过。分析员正在安装运行零用现金管理系统所需的微机和数据库管理系统。分析员回顾公司的组织结构图,确定由哪些人参与认可工资单和批准病假。分析员正在比较两个软件包的优点和缺点,这两个软件包都可以实现设备维护和翻修的管理需求。分析员正在测试一个计算机程序的最新版本,这个程序将根据使用该材料生产产品的计划更快地确定缺货的材料。假设你开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应该精确到小数点后4位,一旦实现并测试完之后,该产品将被抛弃。你打算选用哪种生命周期模型,请说明理由。假设你要为一家生产和销售长统靴的公司开发一个软件,该产品将监控该公司的存货:跟踪从购买橡胶开始,到靴子生产,发货给各个连锁店,直至卖给顾客的全过程。你在为这个项目选择生命周期模型时使用什么准则。列出在开发上述软件产品过程中可能遇到的风险。本章知识点总结软件危机的表象及软件工程历史软件工程的概念及其要素软件工程的基本目标软件生命周期的概念软件开发过程模型