版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容简介软件工程作为支撑软件产业的新学科,其发展正方兴未艾。作者针对软件工程学科的特点,系统讲解软件工程的基本概念、原理与方法,全面介绍了软件工程的由来和软件开发模型,传统软件工程和面向对象软件工程的软件开发过程。全书内容组织分为准备篇、实施篇和实践篇,全书结构以项目为中心,以活动为基本单位,通过完成若干活动最终达到任务的完成,并以多个任务的完成而实现了项目的完成。全书共设计36个任务,每部分目标明确,重点突出。全书内容丰富,组织结构严谨,原理与方法相结合,丰富的图表与实例应用相结合,讲解由浅入深,既体现知识点的连贯性,完整性,又体现知识在实际中的应用,适合作为本科院校软件工程、计算机科学技术、计算机应用、信息管理及相关专业的教材,也可供从事软件开发人员、科研人员以及有关大专院校师生的参考书。PAGEPAGE2前言随着计算机技术的不断发展及其在各领域的广泛应用,对软件产品出现供不应求的现象,因此我国目前急需开发高质量的软件产品,这样就需要大量的软件开发型人才。而软件工程这门学科就是为了培养软件开发的高级人才而开设的,它是指导软件生产和管理的一门新兴的、综合性的应用科学。但在软件工程教学方面,在沿袭了传统的教学手段、教学方法的基础上,作为一门新兴学科,必须要有不同于其他行业独特的一面,在教学方法和教材编写上需要推陈出新。然而,虽然目前国内软件工程教材品种繁多,但大部分不符合培养技能型紧缺人才的需求,与软件企业实际开发相脱节。本书编著者从事软件开发与软件教学30余年,结合长期教学经验和工程项目实践,参考国内外众多最新(版本)教材和论文精选内容,改变现有的教材侧重理论、书中实例较少、内容不够集中的现状,以视野独特,构思新颖,内容风趣,不落窠臼,令人耳目一新的框架结构;注重基础性、系统性、实用性、新颖性,结合大量的软件项目分析实例,深入浅出的阐述了软件工程的具体内容。堪称难得,以至回味无穷。本教材力图做到改变软件工程教学抽象、单调、死板的现状的编写方法,以“任务驱动”教学为核心,构建了以“项目”为中心,以“任务”为中枢,以“活动”为最小单元来组织实施教学。将一个任务分解成若干个活动,每一个教学活动有明确的目的,只有这些活动完成了,教学任务也就完成了,同时所有的任务完成也就使一个子项目结束了,只有将所有的子项目完成了,也就完成了整个软件工程的教学内容。在教材编写中,每一个子项目都有相应的目标和能力,同时给出了本项目的学习要点。对于项目的每个任务都包括需要解决的主要问题、任务目标及完成任务的途径;对于最小的教学单位活动都有活动内容和目标,同时对于每一活动、任务均有相应的习题和测评,用于评价学生的学习效果。在结构上通过引例创设教学情境,在强烈的问题动机驱动下,趣味性导入任务、活动或是项目,可以更大地激发学生们的求知欲望,逐步形成一个感知心智活动的良性循环,从而培养学生独立探索、勇于开拓进取的自学能力。本教材由3篇共36个任务所构成,共包含着103个活动内容。第1篇准备篇,讲述了软件工程的由来,软件工程的重要性及软件开发模型。第2篇实施篇,分别讲述了软件工程的原理、方法和技术,包括传统的软件工程学和面向对象的软件工程中需求分析-软件设计-软件实现-软件测试及项目管理,并以实例说明。第3篇实践篇,完成了书后部分习题的解答,另一方面给出了一个实例完成了软件计划、分析、设计和测试的文档,这一部分对于提高学生软件工程实践起到了关键性的作用。本书主要有以下特点:在保证体系完整性的基础上,不过度强调基础理论的深度和难度,坚持“够用为度”的原则。(2)采用“任务驱动”的编写方式,任务以活动来构成,并以活动为最小教学单位,在部分内容上设置引例,以此增加教材的实用性和趣味性,这样能够活跃课堂气氛,又能达到满意的教学效果。(3)教材内容生动活泼,改变一般软件工程教材学生学起来枯燥的情况。(4)每一项目、任务和活动都有其目标和测评,学习有目的,并且能自己检验学习的效果。本教材是作者多年从事该领域工作,并参阅了大量文献和论著、期刊文献,以及与相关专家、学者及学生的交流中编写而成。本书由张兆印策划。任务1~任务8由张兆印编写;任务9~任务18由邓琨编写;任务19~任务25由金英编写;任务26~任务36由惠丽编写;其余部分由张兆印编写。全书由张兆印统一修改定稿。由于作者水平有限,加上时间仓促,难免有错误和不妥之处,恳请读者批评指正。PAGEPAGEVI1-目录准备篇 1项目准备软件工程概述 1任务1软件工程课程的重要性 2活动1软件的定义 2活动2软件危机 3活动3软件工程的定义 5活动4软件工程方法学的重要性 6任务2软件生存周期的基本任务 8活动1软件生存周期的定义与划分 8活动2软件生存周期各阶段的主要任务 10任务3软件开发模型 13活动1软件开发模型的定义 13活动2瀑布模型 14活动3快速原型模型 16活动4增量模型 17活动5螺旋模型 23活动6喷泉模型 26活动7构件集成模型 27项目小结 29习题 29传统软件工程篇 33项目-1软件项目计划 33任务4问题定义 34任务5可行性研究 36活动1可行性研究的重要性 36活动2系统流程图 37活动3成本-效益分析 39活动4可行性研究的内容 43活动5可行性研究的步骤及相关技术 44项目小结 50习题 51项目-2结构化分析 53任务6需求分析的任务与步骤 53活动1需求分析的任务 54活动2需求分析的步骤 55任务7识别系统需求 58活动1识别系统相关者 59活动2访谈的技术 60活动3观察系统物理工作流程 61活动4建立联合分析小组 62活动5快速原型 63任务8分析建模 64活动1结构化分析模型 65活动2面向对象分析模型 66活动3数据流图 67活动4数据字典 73活动5加工说明(加工逻辑) 76活动6实体关系图 80活动7控制流图(CFD)与控制说明(CSPEC) 82活动8状态转换图 85活动9结构化分析实例 88项目小结 90习题 92项目-3结构化设计 97任务9结构化分析与设计的关系 97任务10结构化设计的概念 99活动1模块化 99活动2抽象 101活动3逐步求精 102活动4信息隐藏 104活动5内聚 105活动6耦合 107活动7模块独立性 110任务11结构化设计方法 110活动1SC图 111活动2数据流图的类型与SD方法的步骤 113活动3变换映射 115活动4事务映射 120活动5结构化设计的优化规则 123项目小结 126习题 126项目-4过程设计 129任务12过程设计的目的和任务 129任务13过程设计的表达工具 130活动1程序流程图 131活动2N-S图 133活动3PAD图 135活动4PDL 138任务14面向数据结构的分析设计方法 140活动1Jackson方法的应用范围 140活动2Jackson图基本结构 141活动3Jackson伪代码 143活动4Jackson方法的设计步骤 144活动5Jackson方法实例分析 145项目小结 148习题 149项目-5编码 151任务15编码和语言选择 153活动1编码语言的选择 154活动2编码风格 156项目小结 164习题 164项目-6测试与纠错 165任务16软件测试基础 166活动1测试的目的和任务 166活动2测试的特性 168活动3测试准则 169活动4测试的种类 170任务17黑盒测试技术 172活动1黑盒测试的功能及应该考虑的几个问题 172活动测评 173活动2等价分类法 173活动3边界值分析法 177活动4错误猜测法 180任务18白盒测试法 181活动1逻辑覆盖测试法 181活动2路径测试法 185活动3程序测试实例分析 193任务19多模块程序的测试策略 199活动1测试的层次性 199活动2程序错误的类型 201活动3单元测试 203活动4集成测试 207活动5确认测试 211活动6系统测试 212活动7终止测试的标准 213任务20软件纠错 214活动1纠错的策略 214活动2调试(纠错)的原则 217活动3常用的纠错技术 217项目小结 220习题 221面向对象软件工程篇 225项目-7面向对象分析 225任务21面向对象的相关概念 226活动1对象 226活动2类 229活动3实例 230活动4消息 230活动5方法(Method) 231活动6属性(Attribute) 231活动7封装(Encapsulation) 232活动8继承(Inheritance) 233活动9多态性(Polymorphism) 234活动10重载(Overloading) 235活动11结构与连接 235任务22面向对象分析过程 237活动1三个子模型和五个层次 238活动2OOA过程 239活动3需求陈述 241任务23建立对象模型 243活动1确定类与对象 244活动2确定对象关系模型 247活动3划分主题 249活动4确定属性 251活动5识别结构 253任务24建立动态模型 255活动1编写脚本 256活动2建立事件跟踪图 258活动3确定状态转换图 260任务25建立功能模型 262活动1画出基本系统模型图 262活动2画出功能级数据流图 263活动3描述处理框功能 264活动4定义服务 265活动5面向对象分析实例 266项目小结 272习题 273项目-8面向对象设计 275任务26面向对象设计的准则 276任务27优化规则 278任务28系统分解与组织 281任务29问题域子系统(PDC)的设计 283任务30人—机交互子系统(HIC)的设计 285任务31任务管理子系统的设计 288任务32数据管理(DMC)子系统设计 291任务33类中服务的设计 295项目小结 297习题 297项目-9面向对象实现 299任务34面向对象编程 299活动1非面向对象的语言与面向对象的语言 300活动2面向对象语言的选择 300活动3面向对象概念的编程实现 301任务35面向对象测试 304项目小结 307习题 307项目-10软件工程管理 308任务36软件工程管理软件估算模型 308活动1软件估算模型 308活动2人员的分配与组织 312活动3项目进度安排 315项目小结 317习题 317实践篇 319习题答案 319软件工程实验 337附录一中英文对照表 365参考文献 368准备篇项目准备软件工程概述本项目学习目标本项目是软件工程的基础,通过学习项目准备内容,可为后续项目的学习打下坚实的基础。通过对本项目内容的讲解,使学生在理解软件工程学重要性的基础上,掌握软件、软件工程的定义;掌握软件危机产生的原因,并知道如何预防软件危机;软件生存周期由哪些阶段组成,了解各阶段要完成的主要任务;深入了解有哪些软件开发模型,并清楚知道对于一个要开发的软件,究竟使用哪种软件开发模型更加合理。阅读本项目后,应具备如下能力深刻体会软件工程学的重要性明确软件生存周期各个阶段要完成的主要任务对相关概念的理解能力软件开发模型的应用能力本项目学习要点软件危机的主要表现学习软件工程学的目的软件开发生存周期软件开发模型引例提到软件开发,很多人认为就是坐在计算机前面编写代码。其实,编写代码仅仅是软件开发过程中一个很小的部分。举个例子来说,盖一座大楼时所涉及的工作不仅仅是砌砖和垒墙,还必须对建筑进行主体设计、绘制图纸、估算建筑成本、安排任务、验收建筑质量等。相同的道理,软件开发过程所涉及的环节和活动也不仅仅是编写代码这样简单。比如:在编码前,要了解编写的程序是为了解决一个什么样的问题,即实现什么样的功能,对于规模较大的软件,应该对该软件的系统架构进行整体的规划;编码完成之后,还要考虑采用什么样的方法和途径来减少软件系统中存在的错误。软件产品交付给用户后,要考虑怎样对软件系统进行维护,以及在这个过程中如何保证软件产品质量等一系列问题。软件工程就是一门将所有与软件开发相关的活动归纳在一起,并形成系统的方法和理论的一门学科。项目准备这一部分主要讲述了软件工程的基本概念和软件工程学的重要性,软件生存周期的基本任务和软件开发模型这3个任务。任务1软件工程课程的重要性需解决的主要问题你开发过软件吗?你知道应该如何开发一个软件吗?在一个软件开发活动中最重要的是什么呢?你知道为什么要学习软件工程这门学科吗?要想知道这些内容就需要认真学习本任务。任务目标通过对本任务的学习,掌握软件、软件工程、软件危机和软件生存周期的定义,同时理解软件工程方法学的重要性。完成任务的途径主要以提出概念为主,适当的时候以客观世界存在的已知事实或生活中的实例加以说明,以此增强其趣味性和适用性。活动1软件的定义活动内容:有人认为程序就是软件,你认为这样对吗?程序又是什么呢?程序一定是可以执行的吗?文档就是文字资料吗?它的作用是什么呢?数据又指的是什么呢?活动目标:掌握软件和文档的含义;了解软件和文档的意义。计算机通过运行程序来实现各种不同的应用。把各种不同功能的程序,包括用户为自己特定目的而编写的应用程序、检查和诊断机器系统的程序、支持用户应用程序运行的系统程序、管理和控制机器系统资源的程序等通常称为软件。它是计算机系统中与硬件相互依存的另一部分,与硬件合为一体完成系统的功能。在上世纪90年代之前,有些初学者认为软件就是程序,其实这个理解是不完全正确的,软件离不开程序,但程序并不是软件的全部。这里引用著名的美国软件工程教材作者R.S.Pressman对于软件的定义:“软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需的数据,加上描述程序的操作和使用的文档”。简明地表述,可以写作“软件=程序+数据+文档”。软件:软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需的数据,加上描述程序的操作和使用的文档。文档(即各种报告、说明、手册的总称):是软件开发的记录,主要供人们阅读,既可以用于专业人员和用户之间的通信与交流,也可以用于软件开发过程的管理和运行阶段的维护。数据:使程序正常运行所需要的输入信息。活动测评何为软件?何为文档?活动2软件危机活动内容:你知道什么是软件危机吗?软件危机主要表现在哪些方面呢?活动目标:掌握软件危机的定义;熟知软件危机的主要表现。引例1963年,美国用于控制火星探测器计算机软件中的一个“,”号被误写为“.”,最终致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。美国IBM公司于1963-1966年开发了IBM360系列机的操作系统,该操作系统花了约5000人-年的工作量,最多时,有1000人投入开发工作,写出近100万行的源程序。尽管投入了这么多的人力和物力,得到的结果却极其糟糕。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。该项目负责人在项目结束后的总结中写到:“……正像一只逃亡的野兽落到泥潭中做垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中挣扎……谁也没有料到问题竟会陷入这样的困境……”。上面提到的两个事件,在软件开发历史进程中可谓赫赫有名,直到今天,软件开发者仍然常常提起它们。遗憾的是,这并非是因为它们给软件开发者带来荣耀或灵感,而是因为人们要借助于它们的失败,给后世的软件开发者以警醒和教训。在20世纪70年代之前,这类事件并不罕见。并且随着软件规模的扩大、软件复杂度的增强,类似事件越来越多。后来,人们知道,这一切都是由游荡在软件世界里的幽灵“软件危机”造成的。软件危机:软件危机是指软件开发和维护过程中遇到的一系列严重问题,长期找不到解决这些问题的办法,使得问题逐渐积累起来,形成了尖锐的矛盾,从而导致了软件危机。软件危机包含下面两方面的问题:其一是如何开发软件来满足软件日益增长的需求;其二是如何维护软件。具体的说,软件危机有以下主要表现:对软件开发成本和进度的估计常常不是很准确。大型软件的开发费用经常超出预算,完成时间也常常脱期,延期几个月甚至几年的现象并不罕见。用户对“已完成的”软件系统不满意的现象经常发生。①为了赶进度或是节约成本所采取的一些办法往往损害了软件产品的质量。②软件开发人员在对用户的需求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下就着手编程序。③软件开发人员和用户之间的信息交流往往很不充分,“闭门造车”必然导致最终产品不符合用户的实际需要。软件产品的质量往往靠不住。软件可靠性和质量保证的定量概念刚刚出现不久,软件质量保证技术还没有坚持不懈地应用到软件开发的全过程中,这些都导致软件产品发生质量问题。软件规模的增长,增加了它的复杂度。【例1.1】1968年美国航空公司订票系统达到30万条指令。【例1.2】IBM360OS第16版达到100万条指令,花了5000个人—年。【例1.3】1973年美国阿波罗计划达到1千万条指令。软件开发生产率提高的速度,远远跟不上计算机应用普及深入的趋势,软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。软件维护费用急剧上升,直接威胁计算机应用的扩大。软件维护费用大约占到软件总花费的2/3,比开发费用高出一倍。维护费用既耗费财力,也耗费人力。软件成本在计算机系统总成本中所占的比例逐年上升,如图1.1所示。图1.1硬件/软件成本变化趋势以上列举的仅仅是软件危机的一些明显的表现,与软件开发和维护有关的问题远远不止这些。活动测评何为软件危机?软件危机有哪些主要表现?活动3软件工程的定义活动内容:软件工程这个概念是在有软件之日起就有了吗?它是怎么形成的呢?活动目标:准确掌握软件工程的确切定义并理解其含义。首先,采用工程化方法和途径来开发与维护软件。软件开发应是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,必须充分吸收和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法。应该推广使用在实践中总结出来的软件开发的成功技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。下面给出软件工程在不同阶段的几个定义:1983年IEEE给软件工程定义是:“软件工程是开发、运行、维护和修复软件的系统方法。”这个定义主要强调软件工程是系统方法而不是某种神秘的个人技巧。Fairly认为:“软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统生产和维护技术及管理学科。”这个定义明确指出了软件工程的目标是在成本限额内按时完成开发和修改软件的工作,同时也指出了软件工程包含技术和管理两方面的内容。FritzBauer给出了下述定义:“软件工程是为了经济地获得可靠的且能在实际机器上有效运行的软件,而建立和使用完善的工程化原则。”这个定义不仅指出软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,它应该建立并使用完善的工程化原则。1993年IEEE进一步给出了一个更全面的定义:软件工程是:①把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;②研究①中提到的途径。认真研究上述这些关于软件工程的定义,有助于我们建立起对软件工程这门工程学科全面的整体性认识。活动测评软件工程的含义是什么?软件工程:采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以便经济地开发出高质量的软件并有效地维护它,这就是软件工程。活动4软件工程方法学的重要性活动内容:应该知道软件工程方法学的三要素,弄清楚为什么要学习软件工程。活动目标:掌握软件工程在软件开发,运行和维护过程中的重要性;掌握软件工程在日常生活中的重要性。引例有这样一个笑话:一个旅客走进硅谷的一家宠物店,浏览展示的宠物。这时,走进一个顾客,对店主说:“我要买一只C猴。”店主点了点头,走到商店一头的兽笼边,抓出一只猴,递给顾客,说:“总共5000美元。”顾客付完款,然后带走了他的猴子。有位顾客非常惊讶,走到店主跟前说:“那只猴子也太贵了!”店主说:“那只猴子能用C编程,非常快,代码紧凑高效,所以值那么多钱。”这时,这位旅客看到了笼子中的另一只猴子,它标价10000美元。于是又问:“那只更贵了!它能做什么?”店主回答:“哦,那是一只C++猴,它会面向对象的编程,会用VisualC++,还懂得一点Java,是非常有用的。”顾客又逛了一会儿,发现了第三只猴子,它独占一个笼子,脖子上的标价是50000美元。旅客倒抽一口气,问道:“那只猴子比其他所有猴子加起来都贵!它究竟能做什么?”店主说:“它一种语言也不会,不过它是系统分析师。”系统分析师为什么这样重要,在本活动中介绍的软件工程学就是为了培养软件系统分析师所做的准备。但首先要弄清楚为什么要学习软件工程学。软件工程方法学的三个要素软件工程方法学包括三个要素,即方法、工具和过程。软件工程过程定义了技术方法的采用、工程产品(包括模型、文档、数据、报告、表格等)的产生、质量的保证和变更的管理,从而将人员、技术、组织与管理有机地结合在一起,实现在规定的时间和预算内开发高质量软件的目标。软件工程方法为软件开发提供了“如何做”的技术,通常包括某种语言或图形的模型表示方法、良好的设计实践以及质量保证标准等。软件工程工具为软件工程方法提供了自动的或半自动的软件支撑环境,辅助软件开发任务的完成。现有的软件工具覆盖了从需求分析、系统建模、代码生成、程序调试和软件测试等多个方面,形成了集成化的软件工程开发环境CASE。软件工程的三要素:即方法、工具和过程。为什么要学习软件工程学计算机专业包括两大方向,一个是硬件,一个是软件。硬件专业主要就业方向是从事计算机维护、计算机控制系统电路设计以及计算机硬件系统的设计。可计算机硬件维护需用人才相对很少,一般情况下硬件很少出故障,又由于计算机的高集成度,所以出现故障也难以修复,一般来说只是利用新的硬件进行替换处理。计算机硬件系统的设计所需要的人力非常少。随着科学技术的不断发展,对于软件,尤其是对应用软件需要不断增加,所以需要大量的软件开发型人才。有人错误的认为软件开发就是编程序。这可是错误的理解,软件离不开程序,而程序只是软件的一个主要载体。想像一下,假如一个软件有几万行、几十万行、甚至是百万行和千万行的源程序呢,一个人或几个人是无法完成的,需要的时间也有长达几年的。这样的软件只会编程能完成吗?可以做个不恰当的比喻,现在盖一栋大楼,会编程序就相当于会砌砖,你能说会砌砖就能建起摩天大厦吗?其实建一个摩天大厦最主要的是设计人员。做为软件开发行业主要有程序员,系统分析员,软件设计工程师,软件工程师,以及项目经理等多种职业。要想当一个好的程序员就要学习软件工程的编码这一部分。要当好系统分析员,就要认真学习软件需求分析,要想做好软件设计工程师就得学好软件设计,要想做好软件测试工程师就得学好软件测试的内容,要想做好项目经理就要学习项目计划、可行性研究和项目管理这些内容。总之只有学好软件工程学才有可能胜任这些工作。其实编程除了计算机专业外,理工科学生都能编程序,你的特长在哪里呢?那就是你学习了怎样开发软件和维护软件及怎样对软件开发过程进行控制。活动测评软件工程的三要素是什么?为什么要学习软件工程学?任务小结本任务围绕着为什么要学习软件工程而给出了相关的定义,理解软件危机、软件工程的概念,开设软件工程这门学科的重要性,了解软件危机主要有哪些表现,以及软件工程学在软件开发、运行和维护中的重要作用,它对人们的日常生活有什么样的意义。任务测评文档在软件开发和维护过程中的重要作用是什么?怎样才有可能降低或消除软件危机?任务2软件生存周期的基本任务当你确定要开发一个软件时,你就得首先知道开发一个软件的全过程需要经过哪些阶段,每一阶段的主要任务是什么,只有知道了这些才有可能确定开发计划的安排。需解决的主要问题弄清软件生存周期的基本概念和各阶段的基本任务。任务目标熟练掌握软件生存周期分哪几个时期,熟知每个时期有哪几个阶段,明确每个阶段的主要任务。完成任务的途径通过现实生活中的实例来说明并理解软件生存周期及软件生存周期各个阶段要完成的主要任务。活动1软件生存周期的定义与划分活动内容:活动目标:熟练掌握软件生存周期有哪几个阶段?各阶段间的关系是什么?表1-1人的生存周期周期序号周期划分周期名称周期的主要活动1妊娠和分娩胎儿定期到妇幼保健院或妇产科医院检查20-3岁婴儿请保姆看护或上托儿所33-6岁幼儿上幼儿园46-12岁儿童上小学,好好学习,天天向上512-18岁少年上中学,参加中考、高考,自古英雄出少年618-30岁青年上大学、攻读硕士、博士学位、应聘就业730-60岁中年上班,追求事业上的成就、成功、贡献860岁以上老年退休,老有所乐,写回忆录,立遗嘱9因故因病去世死亡丧事从简,长眠于地下即使是没有生命的事物或实体,例如,计算机、汽车、房子等都有一个生存周期,这个生存周期就是它们的使用寿命,即使用周期。软件生存周期就是从提出计划开发软件产品开始,直到该软件产品被淘汰的全过程。软件生存周期一般划分为计划、开发和运行3个时期,每个时期又区分为若干阶段。计划时期有问题定义和可行性研究两个阶段。开发时期有需求分析、系统设计(包括总体设计和详细设计)、编码和测试4个阶段,后两个阶段为系统实现。运行时期主要是系统维护阶段。这个阶段的主要任务是使软件持久地满足用户的需要。具体地说,当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的新需要。软件生存周期:从提出计划开发软件产品开始,直到该软件产品被淘汰的全过程。图1.2列出了一个典型的软件生存周期。研究软件生存周期是为了更科学、更有效地组织和管理软件的生产,从而使软件产品更可靠、更经济。采用软件生存周期来使软件开发分阶段依次进行。前一个阶段任务的完成是后一个阶段任务的前提和基础,而后一阶段的开始与结束都有严格的标准,每一个阶段结束之前都要接受严格的技术和管理评审。每一阶段的任务相对独立,有利于简化问题且便于不同人员分工协作。其严格而科学的评审制度保证了软件的质量,提高了软件的可维护性,从而大大提高了软件开发的成功率和生产率。活动测评软件生存周期的定义?各阶段之间的关系是什么?图1.2典型的软件生存周期活动2软件生存周期各阶段的主要任务活动内容:活动目标:熟练掌握软件生存周期各个阶段的主要任务。问题定义这是计划时期的第一步,这一阶段的主要任务是弄清“用户需要计算机解决什么问题”,如果不知道问题是什么就试图解决这个问题,显然这种做法是盲目的,只会白白浪费时间和金钱,最终得出的结论可能是毫无意义的。例如,在专业设置上,如果培养目标不明确,则培养出来的学生也一定难以符合社会的需要与认可。只有在向社会做了大量的调研,了解就业需求后,根据需求设置专业,并制定培养目标、设计培养方案和教学计划,按照教学计划组织教学与管理,才可能培养出社会需要的人才。相反如果不做调研,盲目开设专业必然导致培养的学生就业难或无法就业的现象。对于一个软件来说,首先通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改,这份报告在得到客户的确认后,才可进入到下一阶段的可行性研究。可行性研究这个阶段是为前一步提出的问题寻求一种到多种在技术上可行、且在经济上有较高效益的可操作解决方案。为此,系统分析员应在高层次上作一次大大简化了的需求分析与概要设计,并写出“可行性论证报告”是最为重要的。这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决方法。例如,一个人想研发一个给自行车安装计程器的产品,没有研究经济效益,结果生产出来了没有人买,只有自己的自行车安装上了,所有的投入一去不复返。这说明经济上是不可行的。又如,一个人想炒股票,但没有炒股票的方法与技术,看到别人炒股票挣钱,他也去炒,结果将自己多年的积蓄全部赔了进去。这说明了技术上是不可行的。可行性研究的结果是让部门负责人做出是否继续进行这项工程决定的重要依据,一般来说,只有投资可能获得较大效益的那些工程项目才值得继续进行下去,可行性研究以后的那些阶段将需要投入更多的人力和物力。及时终止不值得投资的工程项目,可以避免更大的浪费。需求分析这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题目标系统必须做什么”,这个阶段的主要任务是确定目标系统必须具备哪些功能。对于用户来说,通常不能准确地表达出他们的要求,更不知道应该怎么利用计算机来解决他们的问题,另一方面,软件开发人员虽然知道怎样用软件实现用户的要求,但对用户的具体要求并不完全清楚。因此在分析阶段系统分析员必须与用户合作,相互配合,充分交流与交换意见,最终获得用户对软件的需求,并由系统分析员来完成系统逻辑模型的建立。对于传统的软件工程来说系统逻辑模型通常包括数据流图、数据字典和简要的算法逻辑说明。而对于面向对象的软件工程来说是用例图、类/对象模型、对象关系模型、以及事件轨迹图和状态转换图等。这个阶段的一项重要任务是必须准确完整地体现用户的要求,并用正式文档准确地记录对目标系统的需求,这份文档就称为需求规格说明书。概要设计这一阶段解决的主要问题是“应该怎样实现这个目标系统”,建立可行性设计方案。首先,应该设计出实现目标系统的几种可能方案,方案的制定可根据软件开发的成本来划分,应该设计出低成本、中等成本和高成本3种设计方案,软件工程师应该能用适当的表达工具描述每种方案,分析每种方案的优缺点,并在充分权衡各种方案的基础上,推荐一个最佳方案。此外还应该制定出实现最佳方案的详细计划。如果客户接受所推荐方案,则应该进一步完成下述的另一项主要任务。这一阶段要解决的另一个主要任务是“软件体系结构的设计”。即将需求分析阶段建立的逻辑模型转换成设计阶段的体系结构模型,软件体系结构设计的一条基本原则就是“程序模块化”,也就是把一个程序划分为若干个规模适中的模块,按合理的层次结构组织而成一个软件系统。详细设计这个阶段的任务还不是编写程序,它的关键问题是“应该怎样具体实现这个目标系统”。设计每个模块,确定实现模块功能所需要的算法和数据结构。可以使用程序流程图、PAD图、PDL语言及伪代码等表达工具进行描述。编码和单元测试编码的目的是选定确定的程序设计语言,将模块的过程性描述翻译成用该语言所书写的源程序。这个阶段的主要任务是写出正确的、容易维护的程序模块。单元测试是对每一个程序模块按照某种测试策略给出测试用例。单元测试是非常重要的,这部分的测试用例选择主要由程序员来完成,因为这些程序模块是由他们完成的,他们最清楚模块的程序结构和模块功能。综合测试最基本的测试包括集成测试和确认测试。集成测试是根据设计的软件结构,把经过单元检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。验收测试:按照规格说明书的规定(通常在需求分析阶段确定),由用户(或在用户积极参与下)对目标系统进行验收。应该用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一个组成部分。软件维护维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有4类维护活动,他们分别是:改正性维护:诊断和改正在使用过程中发现的软件错误适应性维护:修改软件以适应环境的变化完善性维护:根据用户的要求改进或扩充软件使它更完善预防性维护:修改软件为将来的维护活动预先做准备虽然没有把维护阶段进一步划分成更小的阶段,但是实际上每一项维护活动都应该经过提出要求(或问题报告)——分析维护要求——提出维护方案——审批维护方案——确定维护计划——修改软件设计——修改程序——测试程序——复查验收等一系列步骤,因此实质上是经历了一次压缩和简化了的软件定义和开发的全过程。每一项维护活动都应该准确地记录下来,作为正式的文档资料加以保存。活动测评软件生存周期各阶段的主要任务?任务小结本任务围绕着软件生存周期这8个阶段说明了各阶段主要完成的任务。前一个任务的完成是后一个阶段的开始。强调可行性研究的重要性,而可行性要有几套可行的设计方案,对于商业软件要重点研究其软件开发的经济可行性。对于软件需求分析,主要弄明白需求分析它对于软件是否能开发成功所起的关键作用,不进行需求分析就开发软件其成功性会低之又低。弄清软件设计对于软件结构好坏的影响是非常重要的,这方面包括体系结构的设计,算法设计及用户界面设计等内容。软件测试对于软件的可靠性起到了重要的作用。任务测评文档在软件开发和维护过程中的重要作用是什么?怎样才有可能降低或消除软件危机?任务3软件开发模型需解决的主要问题任务目标熟知具体软件开发模型的特点;了解其适用范围;重点掌握每种软件开发模型的特点。完成任务的途径首先给出瀑布模型,通过介绍瀑布模型,找出瀑布模型的优点与不足,从而给出快速原型的软件开发方法。说明这种方法就是为了解决瀑布模型的不足问题,继而提出对于大型软件可以使用增量模型和螺旋模型,讲清楚在什么情况下可以使用这两种模型。最后给出面向对象的软件开发模型—喷泉模型和构件集成模型,并说明这些模型的特点及适用范围。活动1软件开发模型的定义活动内容:软件开发模型的定义。活动目标:掌握软件开发模型的定义;熟知软件开发模型的作用。软件开发模型是软件开发全部过程、活动和任务的结构框架。软件开发模型能清晰、直观地表达软件开发的全部过程,明确规定要完成的主要活动和任务,它是作为软件项目工作的基础。是在软件开发实践中总结出来的软件开发方法和步骤。软件开发模型对于不同的应用系统,允许采用不同的开发手段和方法,使用各种不同的程序设计语言以及各种不同技能的人员参与工作,还应允许采用不同的软件工具或各种不同的软件工程环境。最早出现的软件开发模型是1970年W.Royce提出的瀑布模型,而后随着软件工程学科的发展和软件开发的实践,相继提出了快速原型、螺旋模型、增量模型和喷泉模型等。软件开发模型:是跨越整个软件生存周期的系统开发、运行、维护所实施的全部工作和任务的结构框架。活动测评软件开发模型的定义和作用?活动2瀑布模型活动内容:瀑布模型的特点及适应范围。活动目标:掌握瀑布模型的特点及应用范围;发现其存在的问题;并运用所学的知识解决这些问题。软件过程的瀑布模型(WaterfallModel)也称线性顺序模型或是生存周期模型,其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作。采用结构化分析与设计方法,将逻辑实现与物理实现分开。瀑布模型规定了各项软件工程活动,包括:制定开发计划,进行需求分析与说明,软件设计,程序编码,测试及运行维护。并且规定了软件生存周期的各个阶段如同瀑布流水,逐级下落,自上而下、相互衔接的固定次序。如图1.3所示。瀑布模型的特点1.阶段间具有顺序性和依赖性顺序性:只有前—阶段的工作完成之后,才能开始后一阶段的工作;第二,前一阶段的输出文档就是后一阶段的输入文档。依赖性:只有前一阶段的输出文档正确,后一阶段的工作才有可能获得正确的结果。如果在生存期某一阶段出现了问题,往往要追溯到在它之前的一些阶段,必要时还要修改前面已经完成的文档。2.推迟实现的观点软件开发人员在接受到任务后,往往急于求成,总想早一点开始编写程序。实践表明,对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。因为过早地考虑程序的实现,常常导致大量的返工,有时甚至给开发人员带来灾难性的后果。瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。能够清楚地区分逻辑设计与物理实现,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。3.质量保证的观点优质和高产是软件工程的基本目标。为了保证质量,在瀑布模型的每个阶段都应坚持两个重要做法:第一,每个阶段都必须完成规定的文档,没有完成文档就是没有完成该阶段的任务。完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。第二,每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,消除隐患。从图1.3可以看出,愈是早期潜伏下来的问题,暴露出来的时间愈晚,排除故障需付出的代价会愈高。及时复审是保证软件质量、降低开发成本的重要措施。例如,在对孩子教育的问题上,有的家长对于孩子小时候所犯的一些错误不加以教育和纠正,而孩子无法辨别是非,随着年龄的增长,这些错误却成了孩子认为是正确的东西,这时家长意识到这个问题,想再纠正这个错误,会花费很大的代价,甚至一生都难以挽回原本很容易纠正的错误。又如,有的人在平时不注意身体检查,有些小问题忽视了,到后来病情加重时才发现不得不治疗了,可这时再去治疗所付出的代价会是相当大的。图1.3瀑布模型瀑布模型:规定了各项软件工程活动,包括:制定开发计划,进行需求分析与说明,软件设计,程序编码,测试及运行维护。并且规定了软件生存周期的各个阶段如同瀑布流水,逐级下落,自上而下、相互衔接的固定次序。4.存在的问题按照瀑布模型来开发软件,只有当分析员能够做出准确的需求分析后,才能够得到预期的正确结果。可惜的是,对于多数用户来说是不熟悉计算机的,因而对计算机系统的工作流程也不了解;另一方面系统分析员对用户的专业领域往往也了解不深,由此很难准确的在软件开发初期阶段就能清楚地给出用户的所有需求。F.Brooks甚至断言,“在对软件产品的某个版本试用之前,要用户(即使有软件工程师的配合)完全、精确和正确地对一个现代软件产品提出确切的需求,在实际上是不可能的。”为了解决这一问题,人们提出了“快速原型模型”。瀑布模型适合于需求明确的软件系统的开发。活动测评何为瀑布模型?瀑布模型的特点?什么样的软件适应使用瀑布模型?活动3快速原型模型活动内容:快速原型的定义;快速原型的主要做法;快速原型的适应范围。活动目标:熟练掌握快速原型的特点及应用范围;同时要弄清楚存在的问题;通过什么方法可以解决这些问题;怎么能够生成实际系统。当一个机械工程师接到一个设计任务后,通常会根据要求和自己的理解在较短的时间内按照一定的比例设计并制造一台样机,交给用户确认,成功后再批量生产,这台样机就是原型。所谓快速原型是快速建立起来的能够在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型模型(RapidPrototypeModel)的主要做法(见图1.4)是:图1.4快速原型法的生存周期1.首先建立一个能够反映用户主要需求的原型,让用户实际看一看未来系统的概貌,以便判断哪些功能是符合用户需要的,哪些方面还需要改进。然后将原型反复改进,最终建立完全符合用户要求的新系统。图1.4快速原型法的生存周期2.快速建立起来的可以在计算机上运行的程序,能完成的功能往往是最终产品的一个子集。3.原型系统仅包括未来系统的主要功能,以及系统的重要接口。它不包含系统实现的细节,例如异常处理,对系统无效输入的反应等,对系统的性能需求,如硬件的运行速度等也推迟考虑。4.为了尽快向用户提供原型,开发原型系统时应尽量使用能缩短开发周期的语言和工具。快速原型模型的特点是不带反馈环,基本上按线性顺序开发(见图1.4所示)。能做到线性顺序开发的主要原因如下:(1)原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,不会因为规格说明文档的错误而进行较大的返工。(2)开发人员通过建立原型系统已经学到了许多东西,在设计编码阶段发生错误的可能性比较小,自然减少了反馈。5.怎样生成最终的实际系统?一种方法是将原型系统作为基础,通过补充与修改获得最终的实际系统。实际上,由于原型系统使用的语言往往存在效率低等原因,所以大多数原型都会废弃不用,仅把原型当作定义软件需求的一种手段。原型模型的适应范围为:特别适用于需求分析不明确的软件开发。设计人机界面。当作同步培训工具。原型模型系统可作为培训环境,有利于用户培训和开发同步,开发过程也是学习过程。“一次性”的应用。低风险引入新技术。快速原型模型:是快速建立起来的能够在计算机上运行的程序,它所能完成的功能往往是最终产品能完成功能的一个子集。活动测评何为快速原型?怎样开发快速原型?实际系统怎样生成?活动4增量模型活动内容:增量模型的相关技术。活动目标:熟知增量模型的特性;掌握划分每个增量的依据;了解增量模型的优缺点。增量模型又称渐增模型(见图1.5)。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码和测试。每个构件由多个相互作用的模块构成,能完成特定的功能。图1.5增量模型增量模型融合了瀑布模型的顺序特征和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布“增量”。当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终完善的产品。增量模型强调了每一个增量均发布一个可操作的产品。增量模型与原型实现模型方法一样,本质上是迭代的,但与原型实现不一样的是其强调每一个增量均发布一个可操作产品。早期的增量是最终产品的“可拆卸”版本,不但提供了为用户服务的功能,而且为用户提供了评估的平台。例如,使用增量模型开发字处理软件时,第一个增量构件可能提供基本的文件管理、编辑和文档生成功能;第二个增量构件提供更完善的编辑和文档生成功能;第三个增量构件实现拼写和语法检查功能;第四个增量构件完成高级的页面排版功能。把软件产品分解成增量构件时,应该使构件的规模适中,规模过大或过小都不好。最佳分解方法因软件产品特点和开发人员的习惯而异。分解时唯一必须遵守的约束条件是当把新构件集成到现有软件中时,所形成的产品必须是可测试的。1.增量模型的优点:(1)采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。(2)能在较短的时间内向用户提交可完成部分功能的产品。(3)逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,减少一个全新的软件可能给客户带来的冲击。2.增量模型的缺点:(1)由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。(2)本身具有矛盾性,一方面要求开发人员把软件看作一个整体,另一方面要求开发人员把软件看作构件序列,且构件间彼此独立。图1.5所示的增量模型表明,必须在开始实现各个构件之前就全部完成需求分析、规格说明和概要设计工作。由于在开始构建第一个构件之前已经有了总体设计,因此风险较小。图1.6描绘了一种风险更大的增量模型:一旦确定了用户需求之后,就着手拟定第一个构件的规格说明文档。完成后,规格说明组将转向第二个构件的规格说明,与此同时设计组开始设计第一个构件……用这种方式开发软件,不同的构件将并行地构建,因此有可能加快工程进度。但是,使用这种方法将冒构件无法集成到一起的风险,除非密切地监控整个开发过程,否则整个工程可能毁于一旦。图1.6风险更大的增量模型【例1.4】《校务通管理系统》的生存周期模型选择过程:针对本项目的开发特点,参考企业的生存期说明和软件过程体系,决定采用增量式模型(见图1.7),理由如下:图1.7项目生存周期1)校务通系统的全部功能分成通用功能和日常业务管理功能两大类,因此可以先基于通用功能做出一个最小的使用版本,再逐步添加其余的功能。这样一来,用户可以在先试用最小版本的同时,提出更多明确的需求,这有助于下一阶段的开发,大大减小了开发的风险。2)在校务通系统需求中,要求系统有可扩充性。若使用增量式模型,可以保证系统的可扩充性。用户明确了大部分的需求,但也存在不很详尽的地方,如:“关于教师档案,只有按照所提供资料进行设计,因为现在没有一个成形的产品”。这样,只有等到一个可用的产品被开发出来,通过客户使用这个可用产品.然后进行评估,评估结果作为下一个增量的开发计划,下一个增量发布一些新增的功能和特性,直至产生最终完善的产品。3)“系统要求有可扩充性,可以在现有系统的基础上,通过前台就可加挂其他功能模块”这也说明用户可能会增加新的需求。4)对一个管理方式已经比较成熟的学校,要完全舍弃原有的管理方式,用校务通系统替代全部管理,这有些不大切合实际。但是,可以从最基础的做起,根据需要逐步扩充其应用,所以选用增量式模型来开发校务通系统。5)本项目具备增量式模型的其他特点:项目复杂程度为中等。预计开发软件的成本为中等。产品和文档的再使用率会很高。项目风险较低。生存期中的各阶段定义如下:项目规划阶段阶段目标:根据合同和初步的需求分析,确定项目的规模、时间计划和资源需求输入:合同文本过程:项目规划,计划确认输出:项目计划需求分析阶段阶段目标:确定客户的需求输入:项目计划过程:需求获取,需求分析,需求控制输出:原型系统,需求规格设计阶段阶段目标:总体系统结构设计输入:原型系统,需求规格过程:总体设计输出:系统设计说明书,数据库结构定义增量1实现阶段目标:实现系统的通用功能输入:系统设计说明书.数据库结构定义过程:详细设计,编码,代码走查,代码评审,单元测试输出:详细设计说明书,源代码,可运行版本-1增量2实现阶段目标:实现系统的招生管理功能输入:系统设计说明书,数据库结构定义过程:详细设计,编码,代码走查,代码评审,单元测试输出:详细设计说明书,源代码,可运行版本-2增量3实现阶段目标:实现系统的学生日常管理功能输入:系统设计说明书,数据库结构定义过程:详细设计,编码,代码走查,代码评审,单元测试输出:详细设计说明书,源代码,可运行版本-3增量4实现阶段目标:实现系统的教务管理功能输入:系统设计说明书,数据库结构定义过程:详细设计,编码,代码走查,代码评审,单元测试输出:详细设计说明书,源代码,可运行版本-4增量5实现阶段目标:实现系统的教师辅助功能输入:系统设计说明书,数据库结构定义过程:详细设计,编码,代码走查,代码评审,单元测试输出:详细设计说明书,源代码,可运行版本-5增量6实现阶段目标:实现系统的聊天室/论坛功能输入:系统设计说明书,数据库结构定义过程:详细设计,编码,代码走查,代码评审,单元测试输出:详细设计说明书,源代码,可运行版本-6集成测试阶段目标:通过集成环境下的软件测试输入:测试计划,测试用例过程:集成测试,系统测试输出:系统软件包.测试报告,产品说明书产品提交阶段目标:产品可投入使用输入:系统软件包过程:产品提交输出:验收报告.注:生存期模型中的过程定义可以参照企业的质量保证体系并结合项目的具体特点来决定,因为公司的流程已覆盖到项目开发、管理的所有方面,包括从最开始的合同到最后软件的产品提交,都有相应的过程规定,基本上已形成一种工业化的软件开发,所以为形成一个良好的软件开发环境奠定了基础。例如,系统设计过程及产品标准的定义如下:参与角色Rl:项目经理R2:开发经理R3:设计人员进入条件E1:项目计划规定的系统设计时间到输入I1:需求规格活动A1:设计人员了解业务需求并仔细阅读需求规格A2:设计人员收集并了解同类项目的技术框架A3:开发经理领导设计人员通过具体的业务分析和企业成熟的技术框架进行系统设计A4:设计人员在进行系统设计时,应按照系统设计的标准模板进行,要求如下:完整、正确、如实地说明每个模块的流程和数据库表用中文进行描述,并用小四号字体A5:开发经理负责监督设计人员设计文档的同行评审A6:开发经理主持设计正式评审,同时要求项目经理和质量经理参加A7:设计人员根据评审结果进行修订和补充,并形成最终系统设计文档A8:开发经理负责将系统设计过程中无法解决的问题以事件报告形式提交给项目经理,由项目经理进行跟踪解决输出Ol:系统设计文档(格式标准见企业质量体系)完成标志Fl:系统设计评审通过,纳入配置库活动测评什么样的软件开发适合于增量模型?增量模型的每一个增量是怎么构造的?活动5螺旋模型活动内容:螺旋模型的相关技术。活动目标:熟知螺旋模型的基本思想;掌握划分每一个螺旋的依据;了解螺旋模型的优缺点。螺旋模型(SpiralModel)是目前实际开发中最常用的一种软件开发模型,它是在结合瀑布模型的顺序性和快速原型的迭代性的基础上又增加了风险分析。因为软件开发总是会冒一定风险的,例如,产品交付给用户之后用户可能不满意,到了预定的交付日期软件可能还未开发出来,实际的开发成本可能超过预算,产品完成前一些关键的开发人员可能“跳槽”了,产品投入市场之前竞争对手发布了一个功能相近、价格更低的软件等等。软件风险是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。因此,在软件开发过程中必须及时识别和分析风险,并且采取适当措施以消除或减少风险的危害。构建原型是一种能使某些类型的风险降至最低的方法。正如活动2所述,为了降低交付给用户的产品不能满足用户需要的风险,一种行之有效的方法是在需求分析阶段快速地构建一个原型。在后续的阶段中也可以通过构造适当的原型来降低某些技术风险。当然,原型并不能“包治百病”,对于某些类型的风险(例如,聘请不到需要的专业人员或关键的技术人员在项目完成前“跳槽”),原型方法是无能为力的。螺旋模型沿着螺线进行若干次迭代,图1.9中的四个象限代表了以下活动:(1)制定计划:确定软件目标,选定本周期所定目标的实施方案,弄清项目开发的限制条件;(2)风险分析:分析评估所选方案,考虑如何识别和消除风险,必要时通过建立一个原型确定风险的大小,然后据此决定是按照原定目标执行,还是修改目标或终止项目;(3)实施工程:实施软件开发和验证;(4)客户评估:评价本螺旋周期目标,并且制定下一轮计划。(1)螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发。(2)如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。(3)软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险对于每一螺旋首先是确定该螺旋的目标,完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 支气管哮喘急性发作护理培训方案
- 插画场景设计讲解
- 企业文化建设实施路径
- 毕业设计模型设计方法与实现
- 自助餐服务员工作流程及标准
- 2025-2026学年6.4 用图象表示变量之间的关系同步练习北师大版数学七年级下册 含答案
- 水中总硬度检测与处理设计研究
- 参数化设计概念
- 慢性肾炎血液透析护理培训
- 品牌插画设计规范与实施
- 数学活动切割后组拼正方形
- 2026年事业单位考试公文改错专项训练测试
- 2026年芯片设计DFT工程师高频面试题包含详细解答
- 2026年上海市静安区社区工作者招聘考试参考题库及答案解析
- 数字化时代下TC保险公司内部审计信息化建设路径探析
- 2026年心血管内科医疗质量控制方案
- 中粮粮食采购管理制度
- 公司防疫应急演练记录
- 2025年一级造工程师(交通)案例分析真题及答案
- 2026年天津市公务员录用考试《申论》真题及答案
- 2026江苏南京大学物理学院助理招聘笔试备考题库及答案解析
评论
0/150
提交评论