上海交通大学计算机系1第四讲项目方法选择上海交通大学计算机系2内容技术选择考虑风险方法选择:过程模型上海交通大学计算机系3技术选择技术选择将影响:开发人员的训练需要人员招聘开发环境——硬件和软件系统维护安排步骤:分析项目是目标驱动的还是产品驱动的分析项目其他特征面向数据还是面向控制通用还是专用是否涉及需要专用工具支持的专门技术是否有特殊的安全性要求对软硬件有何要求上海交通大学计算机系4练习对下列系统进行分类工资支付系统饮料灌装企业的控制系统供水企业管理对企业供水计划的系统支持项目管理的软件供律师查询法律条文的系统面向数据或特定领域的应用系统包含嵌入式软件的过程控制或者工业系统使用图形的信息系统通用信息系统软件包信息收集的通用软件包上海交通大学计算机系5识别项目中的高风险产品不确定性:系统需求理解的准确性。用户在开始时有可能对系统应该什么样都无法确定。在某些环境中,精确而有效的需求描述可能迅速变得过时。过程不确定性:在项目开始时需要选择方法或过程模型,或者一种新的工具,任何对原先采用的开发方法的变化都将引入不确定性资源不确定性:项目进行中资源的数量可能发生变化上海交通大学计算机系6练习识别学院工资系统中的风险金融和职员之间的矛盾职员对系统不接受缺少运行该系统的经验缺少管理系统的计算机专业人员需求变化上海交通大学计算机系7选择方法考虑用户关于实现的需求用户可能在合同中限定了有关实现方面的方法。例如,规定了企业必须具有相应的CMM等级,或者通过了ISO9000方法选择通用的生命周期方法控制系统:一般为实时系统,比如需要Petri网技术信息系统:……上海交通大学计算机系Toooften,softwareworkfollowsthefirstlawofbicycling:Nomatterwhereyou’regoing,it’suphillandagainstthewind上海交通大学计算机系9过程模型的选择开发一个软件需要选择开发策略(包括过程,方法和工具)以及通用阶段,这些策略和阶段被称为过程模型“过程”:相关联的活动过程模型的选择基于项目和应用的特性,使用的工具和方法,所需要的控制方法和交付物。上海交通大学计算机系10软件过程的概念软件过程由关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及相关对象(计划、文档、模型、编码、测试、手册等)组成。一个过程定义了为达到某个确定的目标,需要什么人在什么时间以何种方式做何种工作软件需要一个可用于指导顾客、用户、开发人员和项目经理等参与者的过程上海交通大学计算机系11软件开发过程软件工程的核心是过程。产品、人员、技术通过过程关联起来。软件开发过程能够将技术集成在一起从而使软件的开发能够以一种合理而及时的方式完成。过程技术人员产品客户特性业务条件开发环境上海交通大学计算机系12有效的软件过程有效的软件过程可以提高组织的生产能力保证软件开发的基本原则的实现,辅助软件项目管理者作出明智的决定;使软件开发活动标准化,提高软件的可重用性和Team间的协作;有效的软件过程也可以改善软件组织对软件的维护能力通过有效地定义如何管理需求变更,使得变更部分能够在未来的版本中恰当分配,实现平滑过渡;在具体操作和相关支持中定义如何平滑地改造软件,并且这种具体操作和支持是可实施的;不可实施的软件过程被剔除。上海交通大学计算机系13问题求解的一般过程问题求解的一般过程实际问题并不能简单划为四个阶段,各个阶段会在问题的不同层次上同时并存软件开发实际上是一个“混沌”(chaos)过程(Raccoon)问题定义方案集成技术开发现状上海交通大学计算机系14编码修正模型CodeandFixCodelikeHell(鲁莽编码)从一个大致的想法开始工作,然后经过非正规的设计、编码、调试和测试方法,最后完成工作可能有可能没有的规范发布(可能)上海交通大学计算机系15编码修正模型好处:成本可能很低只需要很少的专业知识,任何写过程序的人都可以对于一些非常小的、开发完后就会很快丢弃的软件可以采用对于规模稍大的项目,采用这种模型是很危险的上海交通大学计算机系16瀑布模型(WaterfallModel)所有过程模型的祖宗项目从开始到结束按照一定的顺序执行瀑布模型是文档驱动的,各个阶段不连续也不交叉上海交通大学计算机系17瀑布模型发瀑布模型适应于什么场合?有何优缺点?上海交通大学计算机系18瀑布模型当有一个稳定的产品定义和很容易被理解的技术解决方案时,纯瀑布模型特别合适当你对一个定义得很好的版本进行维护或将一个产品移植到一个新的平台上,瀑布模型也特别合适。纯瀑布模型能够降低管理费用,因为你可以预先完成所有计划。对于那些容易理解但很复杂的项目,采用纯瀑布模型比较合适,因为可以用顺序方法处理问题。在质量需求高于成本需求和进度需求的时候,它尤为出色。当开发队伍的技术力量比较弱或者缺乏经验时,瀑布模型更为适合。上海交通大学计算机系19瀑布模型纯瀑布模型的缺点是在项目开始的时候,在设计工作完成前和代码写出来前,很难充分描述需求。瀑布模型最主要的问题是缺乏灵活性。必须在项目开始前说明全部需求。但这恰恰是非常困难的。上海交通大学计算机系20瀑布模型变种:V型模型该方法是对瀑布模型的修正,强调了验证活动上海交通大学计算机系21瀑布模型变种:生鱼片模型把阶段重叠起来的瀑布模型起源于日本硬件开发模型(富士通—施乐)软件概念需求分析架构设计详细设计编码和调试系统测试上海交通大学计算机系22瀑布模型变种:生鱼片模型传统的瀑布模型强调阶段之间最小的重叠,而生鱼片模型强调大幅度的重叠,即在需求分析完成之前就可以进行架构设计和部分详细设计纯瀑布模型强调在任意两个阶段交接时,文档从一个团队交给另一个完全隔离的团队,但是如果一个团队完成各个阶段任务时,可以没有那么多文档。问题:缺点是什么?生鱼片模型因为阶段重叠,因而里程碑不明确,很难有效地进行过程跟踪和控制。上海交通大学计算机系23瀑布模型变种:具有子项目的瀑布模型纯瀑布模型的一个问题是必须完成全部的架构设计后才能进行详细设计,但是,整个系统中有些部分可能有些特殊性,可以有自己的步骤,即将这些部分划分为为子项目。问题:该模型有何问题?这种方法的主要风险是相关性无法预料。上海交通大学计算机系24瀑布模型变种:能够降低风险的瀑布模型纯瀑布模型要求在开始架构设计前,必须将用户的所有需求都搞清楚,但是实际中是很困难的。可降低风险的瀑布模型是在顶端,即需求分析和架构设计阶段引入螺旋以便降低风险。在该螺旋中,先开发一个用户界面原型,采用系统情节串联图版(systemstoryboarding)引导用户提出需求,记录用户与系统的交互操作方式,或者采用其它需求获取方法。上海交通大学计算机系25螺旋模型Spiral模型(Boehm提出)以风险为导向的生命期模型从一个小范围的关键中心地带开始寻找风险因素,制定风险控制计划,并交付给下一步骤,如此迭代,每次迭代将项目扩展到一个更大的规模上海交通大学计算机系26ReviewCommitmentPartitionRiskanaly-sisPrototype1Simulations,models,benchmarksRequirementsplan,life-cycleplanConceptofoperationPrototype2RiskanalysisSoftwarerequirementsRequirementsvalidationDevelop-mentplanRiskanalysisPrototype3SoftwareproductdesignDesignvalidationandverificationIntegrationandtestplanRiskanalysisOperationalprototypeDetaileddesignUnittestCodeIntegrationandtestAcceptancetestImplementationPlannextphasesDevelop,verifynext-levelproductDetermineobjectives,alternatives,constrainsEvaluatealternatives,identify,resolverisksCumulativecostProgressthroughstepsThespiralmodel问题:有何优缺点?上海交通大学计算机系27螺旋模型优势:随着迭代的增加(成本的增加),风险程度随之降低缺陷:比较复杂,需要责任心,专注和管理方面的知识。上海交通大学计算机系28WINWIN螺旋模型在螺旋模型中,通过与客户的通信获取客户的需求,实际上,客户的需求与最终确定的需求是不一致的,客户与开发者之间需要进行协商,最终达到双赢的局面。Boehm提出的WINWIN螺旋模型中,客户与开发者之间需要识别系统或子系统的关键涉及者(stakeholders)确定涉及者的“winconditions”对这些条件进行协商获得互赢条件上海交通大学计算机系29WINWIN螺旋模型WINWIN螺旋模型还引入了三个过程的里程碑,被称为定位点(Anchorpoints)生命周期目标(lifecycleobjectives)定义了每个主要活动的目标生命周期体系结构(lifecyclearchitecture)定义了系统和软件的体系结构目标初步操作能力(initialoperationalcapability)定义了软件安装,发布的目标。上海交通大学计算机系30并行开发模型并行开发模型(concurrentdevelopmentmodel)又被称为并行工程(concurrentengineering)(ByDavisandSitaram)软件开发中的所有活动可能同时并存,但是都处于不同的状态中并行开发模型定义了活动从一个状态转化为另一个状态的事件上海交通大学计算机系31并行开发模型NoneAwaitingchangesUnderrevisionUnderreviewBaselinedDoneUnderdevelopmentAnalysisactivity上海交通大学计算机系32并行开发模型并行过程模型经常被用于开发C/S系统。该系统的活动可以被分为系统维和部件维。系统维包含了设计,装配和使用三个活动,而部件维包含了设计和实现两个活动。并发性表现在两个方面:系统和部件的活动同时发生各个部件可以并行设计和开发上海交通大学计算机系33原型法原型法原型是项目系统中的一个方面或者多个方面的工作模型。抛弃型原型:用于试验某些概念,试验完系统将无用处进化型原型:原型系统不断被开发和被修正,最终它变为一个真正的系统。上海交通大学计算机系34原型法原型的好处从实践中学习(Learningbydoing)改善的通信改善的用户参与使部分已知的需求清晰化展示描述的一致性和完整性可能可以减少文档减少了维护成本特征约束(利用工具构造原型可以将某些特性落到实处,而非在纸上写的那样容易失误)试验是否能产生期待的结果上海交通大学计算机系35原型法原型法的缺点用户有时误解了原型的角色,例如他们可能误解原形应该和真实系统一样可靠缺少项目标准,进化原型法有点像编码修正缺少控制,由于用户可能不断提出新要求,因而原型迭代的周期很难控制额外的花费:研究结果表明构造一个原型可能需要10%额外花费运行效率可能会受影响原型法要求开发者与用户密切接触,有时这是不可能的。例如外包软件。上海交通大学计算机系36从另外的角度看待原型从中学到什么?学生经常会做一些软件作业,这些作业也被称为原型问题:这些原型和软件系统原型是否相同?作为一个原型必须:描述他们希望从中学到的东西,规划原型评价的方法,