软件开发过程模型综述

1. 软件过程

  1. 软件过程的基本活动:软件描述、软件设计与实现、软件有效性验证、软件进化(软件过程描述还包括:产品、角色、前置条件与后置条件)
    2. 软件过程模型(software process model)
    2.1瀑布模型:
    主要阶段直接映射基本的活动开发活动:
    需求分析预定
    系统和软件设计
    实现与单元测试
    集成与系统测试
    运行与维护
    主要优点:顺序性和依赖性:前结束,后开始;前输出,为后输入。
    推迟实现的观点:前阶段工作必须做扎实,方可开展后续工作
    质量保证的观点:必须完成规定文档;对文档进行评审,以便尽早发现问题。
    缺点:不适应需求变化;最后才能看见系统,风险高
    总结:瀑布模型适用于在系统开发中不太可能发生重大变化的多数情况。
    2.2增量式开发:
    先完成一个系统子集的开发,再按同样的步骤增加功能(系统子集),如此递增下去直至满足全部系统要求。
    主要优点:
    降低了适应用户需求变更的成本;
    在开发过程中更容易得到用户对于已做的开发工作的反馈意见
    是更快地交付和部署有用的软件到客户方变成了可能,虽然不是全部功能都包括
    缺点;
    过程不可见,管理者需要经常交付文档来把握进度
    伴随着新的增量的添加,系统结构在逐渐退化
    总结:可以进化式地开发一个系统,并展示给客户,征求客户意见,而不是实际的交付给用户在客户的环境里面部署运行
    2.3面向复用的软件工程
    主要步骤:
    组件分析
    需求修改
    使用复用的系统设计
    开发与集成
    3种类型的软件组件可能用于面向复用的过程;
    通过标准服务开发的Web服务,可用于远程调用
    对象的集合,作为一个包和组件框架
    独立的软件系统,通过配置在特定的环境下使用,
    总结:面向复用的模型明显的优势是它减少了需要开发的软件数量,从而降低了软件开发成本,同时也降低了开发中的风险。通常也可以是软件快速的交付。
    2.3原型模型
    原型是一个软件系统的初级版本,用于展示概念,验证设计方案,发现存在的问题,寻找可能的解决方案
    主要优点;
    通过快速开发工具时间构造出可运行的“样品”;
    通过运行原型可更好地解决开发中的不确定性因素;
    原型的最终结局: 被抛弃;作为最终版本发布
    缺点;
    原型的快速开发往往忽略了非功能方面的因素,如性能、健壮性和可靠性等
    缺乏必要的开发文档,不利于后期维护。
    2.4螺旋模型特点
    主要优点;
    将风险分析与处理引入软件开发中,有利于减低软件的开发风险,适合于大型软件开发
    缺点;
    螺旋模型强调风险分析,并作出相关反应是不容易的。往往内部的大规模开发
    软件开发人员应该擅长寻找可能的风险,否则将带来更大的风险
    在大型软件开发中对变更的应对策略
    系统原型:借助工作系统明确系统要求,避免不必要变更。
    增量交付:将系统分解为更多个子系统增量式发布给用户,避免容忍变更
    系统重建;根据代码对开发好的系统尽心优化
  2. 统一软件开发过程
    2.1 RUP的核心工作流
    商业建模 需求分析 实施 测试 部署 配置 和变更管理 项目 管理 环境
    2.2 RUP的四个阶段
    初始阶段: 构思未来系统的概貌、确定项目 的必要性 可行性
    细化阶段;进一步分析问题领域,捕获系统大部分的功能需求,建立系统框架,找出项目实施时遇到的风险和应对措施。
    构造阶段:完成所有需求、分析设计
    交付阶段
    2.2 特点
    面向对象
    Use Case驱动
    以体系结构为中心
    迭代式、增量式的开发过程
    以增量控制和风险管理为目标
    与UML配套
    实用性强
    3. 敏捷开发
    敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态
    ***:
    1个体和交互胜过过程和工具
    2. 可工作的软件胜过面面俱到的文档
    3. 客户协作胜过合同谈判
    4. 响应变化胜过遵循计划
    基本原则;

我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
欣然面对需求变化,即使在开发后期也一样。善于掌控变化,帮助客户获得竞争优势。
经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
业务人员和开发人员必须相互合作,项目中的每一天都不例外。
激发个体的斗志,以他们为核心搭建项目。提供他们所需的环境和支持,相信他们能够达成目标。
不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
可工作的软件是进度的首要度量标准。
敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续
对技术精益求精,对设计不断完善,将提高敏捷能力。
以简洁为本,极力减少不必要工作量。
最好的架构、需求和设计出自于自组织的团队。
团队定期地反思如何能提高成效,并依此调整团队的行为
极限编程
如:迭代式开发,结对编程、测试驱动开发等。适用于小团队开发
敏捷项目管理;Scrum
团队组成:产品负责人 Scrum主管 开发团队
实施过程:产品规划 冲刺循环 反思会

全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务