一、管理需求
- 为什么要管理需求?避免失败,提高项目的成功率和需求管理所带来的其他好处
- 软件生命周期中,一个错误发现得越晚,修复错误的费用越高
- 许多错误是潜伏的,并且在错误产生后很长一段时间才被检查出来
- 在需求阶段,代表性的错误为舒服、不一致和二义性
- 需求错误是可以被检查出来的,很多错误没有在前期被发现
- 需求管理的困难性,需求不是总是显而易见的,并不总是能容易用文字明白无误地表达
- 存在不同种类的需求,详细程度各不相同,如不加以控制,需求的数量将难以管理
- 有些需求之间相互关联,有些需求有位移的特征或特征值
- 软件需求是为用户解决问题或达到目标所需的条件或权能
- 优秀需求的特性:完整性、正确性、可行性、必要性、划分优先级、无二义性、可验证性
二、项目方法的选择
- 识别项目中的高风险,产品的不确定性和过程的不确定性
- 选择方法:考虑用户关于实现的需求、选择通用的生命周期方法
- 开发一个软件需要选择开发策略(包括过程、方法和工具)以及通用阶段,这些策略和阶段被称为过程模型
- 软件过程由关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及相关对象(计划、文档、模型、编码、测试和手册)组成
- 软件工程的核心是过程,产品、人员、技术通过过程关联起来。软件开发过程能够将技术集成在一起从而使软件的开发能够以一种合理而及时的方式完成。
- 问题求解的一般过程:现状->问题定义->技术开发->方案集成
- 瀑布模型:所有过程模型的组中,项目从开始到结束按照一定的顺序执行,文档驱动,各个阶段不连续也不交叉,强调最小的重叠
- V型模型:对瀑布模型的修正,强调了验证活动
- 生鱼片模型:把阶段重叠起来的瀑布模型,强调大幅度的重叠
- 螺旋模型:以风险为道姓的生命周期模型。从小范围的关键中心地带开始寻找风险因素,制定风险控制计划,并交付给下一步骤,如此迭代,每次迭代将项目扩展到一个更大的规模。
- 并行开发模型:软件开发中的所有活动可能同时并存,但是都处于不同的状态中,定义了活动从一个状态转化为一个状态的事件
- 原型法:项目系统中的一个方面或多个方面的工作模型
- 阶段交付:持续地在确定的阶段向用户展示软件,分段将有用的功能交付给用户
三、软件评估
- 准确(accuracy)是结果与目标之间有多近
- 精确(precision)是结果有多少有意义的位数
- 软件工作量评估困难:软件的本质造成的,软件的复杂性和不可见性
- 策略计划:选择合适的项目
- 可行性分析
- 系统描述:实现各个需求的工作量需要被衡量
- 项目计划,项目进行中,估算越来越准确
- 软件估算:历史数据的需要、工作度量、复杂性
- 自下而上:各个部分的工作量先估算出来,然后进行合成
- 自顶而下:首先定义整个项目的工作量,然后分解到各个部分
- 大致的进度估算
- 可能的最短进度(非常乐观)、有效的进度、普通进度
- 估算修正:先给出大的区间,逐步缩小区间
- 避免无准备的估算
- 留出估算的时间,并做好计划
- 开发人员参与估算