浅谈需求分析与管理
需求分析是架构设计的基石,方向错了,后面的努力可能都白费。虽然需求分析工作在业界很多公司中通常由产品经理主导,但还需项目经理、架构师、开发代表、测试等关键角色一起深度参与。而架构师在其中的主要职责包括:1)了解项目的范围或系统的边界,了解用户的核心诉求,确保架构设计解决真正的问题,即“做正确的事”;2)评估技术可行性和风险;3)基于自身技术功底和业务经验,在方案选型中作出合理的技术权衡,并支撑工作量评估。对需求的敏感性和把控能力也是架构师的一项基本素质。
可能有人会说,需求分析不就是走访一下客户,把获取到的客户诉求记录下来就可以了吗?甚至还可以直接让客户把需求描述远程发过来。这当然是不够的,只能算作需求分析中的初级阶段——需求信息收集。由于人和人之间沟通时存在认知和理解偏差,很可能导致信息在传递过程中失真或遗漏,因此做好需求分析需要一套有效方法,规范分析过程、并将分析结果结构化,从而正真做到与利益相关者达成一致,避免表达失真。
需求分析得到的需求清单在后续各开发环节中还需持续进行管理,包括优先级排序,计划制定和变更控制等,确保按照预期落地实现。
1、背景
1)基本概念
需求分析: 需求分析是软件开发过程中的关键阶段,旨在明确系统或产品需要实现的功能、需要满足的性能及其他约束条件。其核心在于理解用户或利益相关者的真实需求,并将其转化为清晰、可执行的技术规格。需求分析不仅是技术活动,更涉及沟通、协调与验证。
需求管理: 需求管理是跟踪和把控项目或产品需求的实现过程,确保最终交付物满足利益相关者的期望。其核心在于平衡需求的范围、时间、成本和质量约束。
2)需求的分类
- 功能需求: 系统应具备的行为和能力,即在特定情形下,针对特定的输入,系统如何响应。
- 非功能需求: 系统应具备的质量属性和约束,包括:
- 用户视角质量属性——性能、可靠性、安全性、易用性等质量属性
- 厂商自身视角质量属性——可扩展性、可定位性、可维护性、复用性等质量属性
- 约束——如部署规格,网络环境等。
3)需求的特点
需求具有以下特点,在需求分析时可根据情况采取相应的策略:
- 双重性: 一般来说,需求描述既包括问题场景,又包括期望目标
- 颗粒度: 需求描述的层级可大可小。分析时需要根据场景、意图,结合支撑开发的目标来确定合适的颗粒度(并非越细越好,那会造成额外的开销和成本)。
- 潜在性: 收集到的原始需求,往往表面看到的冰山一角。需要通过深挖信息,分析潜藏的因素,推敲用户真实意图,而不仅仅是客户说什么就照做什么。
- 多维性: 事物本身具有多个方面,需求往往也会表达多方面的意图。需求分析则需要采用结构化的手法,每次只分