来自《代码大全2》的摘抄
来自众多组织的数据显示,在大型项目中,如果在架构阶段检测到需求错误,那么修复它的成本通常“在需求阶段检测并修复该错误”的成本的3倍。如果在编码阶段检测到需求错误,修复成本是5至10倍:在系统测试阶段,成本是10倍:在发布之后,成本陡增为10至100倍(以在需求分析阶段检测并修复错的成本为基数)。对于小型项目,管理成本较低,那么发布之后的修复成本倍数更接近5~10,比100小得多
问题定义
需求是解决问题的,首先需要一个问题定义,问题定义只定义“问题是什么”而不涉及解决方案
例如:我们不知道订单流转各个阶段的时效
问题定义是为随后的过程打下基础
[图片上传失败...(image-522936-1701747476255)]
需求定义
然后才能列出相应的需求,需求用来描述软件系统应该做什么是达成解决方案的第一步
需求检查清单
这个需求检查清单包含一系列的问题,用于检查项目的需求工作做得如何
具体的功能需求
- 是否指定了系统的所有输入,包括其来源、精度、值的范围和出现的频率
- 是否指定了系统的所有输出,包括其来源、精度、值的范围、出现的频率和格式
- 是否为Web页面和报表等指定了所有输出格式
- 是否指定了所有外部硬件和软件接口
- 是否制定了所有外部通讯接口,包括握手、错误检查和通讯协议
- 是否指定了用户想要执行的所有任务
- 是否指定了每个任务中使用的数据和每个任务产生的数据
特定的非功能性(质量)需求
- 从用户的角度来看,是否为所有必要的操作指定了预期的响应时间
- 是否指定了其他时间考虑因素,比如处理时间、数据传输速率和系统吞吐量
- 是否指定了安全级别
- 是否指定了可靠性,包括软件故障的后果、需要在故障中得到保护的重要信息以及错误检测和恢复策略
- 是否指定了最小机器内存和空闲磁盘空间
- 是否指定了系统的可维护性,包括适应特定功能的更改、操作环境的更改以及与其他软件接口的更改能力
- 是否包括了成功和失败的定义
需求质量
- 需求是用用户的语言编写的么?用户这么认为么?
- 每个需求都避免了与其他需求的冲突么
- 是否详细说明了竞争属性之间的可接受的这种,例如健壮性和正确性的折中
- 是否避免了在需求中规定设计
- 需求在详细程度上是一致的么,是否有需求需要更详细的说明?是否有需求不需要那么详细的说明
- 需求是否足够清晰,以至于可以移交给一个独立的团队进行构建,且不会产生误解?开发人员这么认为么?
- 每个条款都与待解决的问题及其解决方案相关么?能从每个条款上溯到在问题域中对应的根源么
- 每个需求都是可测试的么?是否有可能通过独立测试来确定每个需求都被满足了
- 是否说明了需求的所有可能变更以及每种变更的可能性
需求的完整性
- 对于在开发中无法获得的信息,是否详细描述了信息不完整的区域
- 需求的完备程度是否可以达到这种高度:如果产品满足了所有需求,就说明它是可以接受的
- 对全部需求都感到满意么?是否已经去掉了那些不可能实现的需求,那些只是为了安抚客户和老板的东西
网友评论