《{管理信息化信息化知识}软件工程2》由会员分享,可在线阅读,更多相关《{管理信息化信息化知识}软件工程2(37页珍藏版)》请在金锄头文库上搜索。
1、软件工程,第二章 软件过程 软件生命周期的基本任务(重点) 瀑布模型(重点) 快速原型模型 增量模型 螺旋模型(重点) 喷泉模型,软件过程 定义:软件工程过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 主要包括: 软件规格说明:规定软件的功能及其运行的限制; 软件开发:产生满足规格说明的软件; 软件确认:确认软件能够完成客户提出的要求; 软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。,软件过程定义了: 方法使用的顺序 要求交付的文档资料 为保证质量和适应变化所需要的管理 软件开发各个阶段完成的里程碑 软件过程特性: 易理解性 可见性 可支持
2、性 可接受性 可靠性,健壮性 可维护性 速度,2.1 软件生命周期的基本任务 1.软件生存期 Software life cycle 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存周期。 软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程称为软件生存周期。 软件生存周期主要包括以下3个部分: 1.软件定义(系统分析):问题定义、可行性研究(软件计划)、需求分析; 2.软件开发(系统设计):概要设计、详细设计、软件实现(编码、单元测试)、综合测试(组装测试、确认测试); 3.软件运行、维护。,可行性研究、制定 初步软件项目计划,需求分析、制定 需求
3、规格说明,概要设计,详细设计,实 现,组装测试,确认测试,使 用,维 护,退 役,一、问题定义 问题定义阶段必须回答的关键问题:“要解决的问题是什么”。 通过调研,系统分析员应该提出关于问题性质、工程目标和工程规模的书面报告,并且得到客户对这份报告的确认。 这一阶段应该完成的书面报告立项建议书、立项调查报告。,二、可行性研究 这个阶段要回答的关键问题是:“上一阶段所确定的问题是否有行得通的解决办法”。 确定要开发软件系统的总目标; 给出功能、性能、可靠性以及接口等方面的要求; 完成该软件任务的可行性研究; 估计可利用的资源 (硬件,软件,人力等)、成本、效益、开发进度; 制定出完成开发任务的实
4、施计划,连同可行性研究报告,提交管理部门审查; 编写软件可行性分析报告。,三、需求分析 这个阶段要准确的回答:“目标系统必须做什么”。 需求分析的任务还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作,对系统目标提出完成、准确、清晰、具体的要求。 对用户提出的要求进行分析并给出详细的定义; 编写软件需求说明书或系统功能说明书及初步的系统用户手册; 最后完成产品需求定义,编写产品需求规格说明书; 提交管理机构评审。,四、概要设计 这个阶段要概括地回答:“怎样实现目标系统”。 概要设计也可以说是体系结构的设计,根据软件需求规格说明建立软件系统的总体结构和模块间的关系,定义个功能模块的
5、接口,规定设计约束,确定设计策略、制定组装测试计划。 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应,编写设计说明书,评审。,五、详细设计 这个阶段要概括地回答:“怎样具体地实现这个系统”。 详细设计阶段的任务就是对概要设计产生的功能模块逐步细化,形成若干个可编程的程序模块,用某种过程设计语言设计程序模块的内部细节,包括算法、数据结构和各程序模块之间的详细接口信息,为编写源代码提供必要的说明,并拟定模块测试方案。 整个阶段包括用户界面设计、数据库设计、模块设计,编写设计说明书,提交评审。,需求开发,实现与 测试,体系结 构设计,用户界 面设计,
6、数据库设计,模块设计,系统设计,概要设计,详细设计,六、编码和单元测试 这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块,并对这些程序进行调试和程序单元测试。,准 备,编 程,代码审查,单元测试,组装 测试,缺陷管理与改错,模块,七、综合测试 这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求。最基本的测试时集成测试和验收测试。 集成测试:根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过成程中队程序进行必要的测试。 验收测试:按照规格说明书的规定,由用户(或在用户积极参与下)对目标系统进行验收。,八、软件维护 这个阶段的关键任务是通过各种必要的维
7、护活动使系统持久地满足用户的需要。 改正性维护:诊断和改正在使用过程中发现的软件错误; 适应性维护:修改软件以适应环境的变化; 完善性维护:根据用户的要求改进或扩充软件,使它更完善; 预防性维护:修改软件为将来的维护活动预先准备。,软件生命周期基本原则: (1)用户参与的原则; (2)“先逻辑,后物理”的原则; (3)“自顶向下”的原则; (4)工作成果描述标准化的原则。 软件生命周期核心思想: (1)严格区分工作阶段。 (2)自顶层向下层逐层开发,结构化,模块化。 (3)建立面向用户的观点,充分预料可能发生的外部环境、内部处理、用户需求的变化。 (4)加强调查研究和系统分析,推迟编程和保证开
8、发质量。,软件开发模型 软件开发模型 是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型,2.2 瀑布模型 瀑布模型(生存周期模型)就是传统的生命周期方法学(既自顶向下结构化开发模型方法)。 特点: 1.阶段间具有顺序性和依赖性; 2.推迟实现的观点; 3.质量保证观点。 优点:奠定了软件工程方法的基础;流水依赖;便于分工协作;推迟现实;文档易修改;有复审质量保证。 缺点:用户需求明确困难;用户见面晚;纠错慢;难于克服系统分析员不懂专业领域的知识,用户不懂计算机的困难,成功率低。适合于系统要求明确的小系统。,问题
9、定义,可行性研究,需求分析,概要设计,详细设计,编 码,测 试,运行维护,评 价,返回计划,维护阶段,开发阶段,定义阶段,定义做什么的问题结构,设计如何做的体系结构,修改设计,需求说明书,设计说明书,源程序清单,测试报告,维护报告,2.3 快速原型模型 原型模型(prototype model) 是为了确定需求而提出的实际模型。打破传统的自顶向下结构化开发模型方法,在计划和需求分析后,把系统主要功能接口做为设计依据,快速开发出软件样机,及时征求用户意见,正确确定系统需求,然后再进一步准确地进行系统设计与实现。 优点:与用户见面快;开发成功率高,适合于需求不确定的大系统。 缺点:周期长,开发成本
10、高。,计划,需求分析,原型开发,原型评价,最终系统设计,最终系统实现,用户反馈意见,开发思路 对需求简单快速分析后,利用先进的开发工具,尽快构造出一个原型,直至系统提供给用户评价、试用,在试用中不断修改完善原型,直至用户满意为止,否则重新构造一个原型。,2.4 增量模型 增量模型 也称渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。 增量模型由若干个开发序列构成,每个序列均采用瀑布模型来开发可以发行的“增量”,每个“增量”都是在原有软件基础上开发出来的,每产生一个“增量”相当于推出一个软件新版本。 增量模型是一种分段的线性模型。它与瀑布模型没有实质性的
11、区别。,优点: 1.抗变化能力比瀑布模型强; 2.每一个“增量”实现后就可以交给用户使用,开发新的“增量”不会花费太长的时间。 难点: 1.在把每个增量构件集成到现有软件体系结构中时,必须不破坏原来已经发布出的产品。 2.必须把软件的体系机构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程简单、方便。,2.5 螺旋模型 螺旋模型(spiral model) 它是瀑布模型与原型模型的结合,不仅体现了两个模型的优点,而且还增加了新的成分风险分析。 螺旋模型沿着螺线旋转(一个螺旋式周期 ),在四个象限上分别表达四个方面的活动,即: 制定计划确定软件目标,选定实施方案,弄清项目开发的限制,选
12、定完成目标的策略; 风险分析分析所选方案,考虑如何识别和消除风险,风险角度分析该策略; 实施工程实施软件开发,启动一个开发阶段; 客户评估评价前一步开发工作,提出修正建议,计划下一轮的工作。,特点 瀑布模型+快速原型+风险分析 迭代过程 边开发、边评审 缺点 执行风险分析的费用较高,会大大降低项目的利润; 使用该模型要求开发人员具备相当丰富的风险分析经验; 螺旋模型过于复杂,不及瀑布模型那么容易理解。,2.6 喷泉模型 喷泉模型(spiral model) 喷泉模型是一种“逐步求精”的面向对象生命周期模型。喷泉模型其实是瀑布模型的另一种表述,其中的各个活动仍然按照分析、设计、实现这样的顺序来执
13、行。 迭代、无缝,组合模型 软件开发模型是针对软件开发的某些问题和要求设计的,他们都有各自的优点和不足,在实践中,经常把几种模型组合在一起配套使用,形成组合模型。 以一种模型为主,潜入另外一种或几种模型; 建立软件开发的组合模型。,小 结 软件生命周期:问题定义、可行性研究、需求分析、概要设计、详细设计、编码和单元测试、综合测试以及维护八个阶段。 瀑布模型:规范、文档驱动的方法,适合于项目管理。 原型模型(快速原型):适于需求不稳定情形。 增量模型:在早期阶段使投资获得明显回报,适于需求不稳定情形,它能够有计划地管理技术风险,易于维护。体系结构必须是开放的。 螺旋模型:适合于大型的内部开发项目。 喷泉模型:适用于C/S模式的开发模型,是一种面向对象范型的过程模型。,讨 论 1.对于大型软件系统的开发,当缺乏系统开发经验时,通常采用什么开发方法?为什么? 2.开发一决策支持系统不适宜选用哪个方法?请说明理由,并给出适宜的开发方法。 3.某一实际项目要求尽量避免编程,减少设计、测试、安装和维护的工作量,选用什么过程模型较为适宜?为什么?,