大话软工笔记—需求工程概述
需求工程,是构建系统的第一步工作,是对客户的现状和需求进行调研,并按照工程化的方法和标准完整、准确地记录和分析客户的需求,它的成果是进行后续设计工程的基础。
需求工程在软件工程中的位置图
1. 定义
需求工程,是指采用工程化的方法和标准,收集、记录和分析客户对信息化的需求,并最终确定系统需要实现的功能以及功能的相关特征和约束。
需求工程主要包含需求调研、需求分析和需求管理。
2. 作用
需求工程即:收集客户想要做什么,最终确定实际做什么。
需求工程成果的质量极大地影响着这个软件的设计结果,是决定成败的主要环节,从客户那里完整地获取、记录、分析与确认需求,并正确地传递给后续设计与开发的依据,同时也是客户对完成系统评估、验收的依据。
需求工程的内容也极大的影响着软件开发的成本、技术、周期、资源、质量以及最终客户的满意度等诸多方面。
3. 角色
(1)售前咨询
主要工作是通过售前咨询活动,提出解决方案,协助销售部门签下合同,需要具备以下能力:
- 沟通能力
沟通的对象有客户的决策层,生产、财务的中间管理层。既要能理解,能够理解高层的谈话要旨、隐含的需求;又要能展示,能够充分地展示出软件企业的服务能力、产品能力;还具有说服,能够说服客户,例如导入系统后在组织和管理制度上的相应改变。
- 专业能力
需掌握行业咨询的基本知识,熟悉客户的主营业务和辅营业务知识,清楚软件行业的最新技术、匹配的案例、解决方案等。
(2)需求分析师
主要工作是进入客户现场,对已经确定的合同内容进行详细的调研。
优秀的需求分析师,需要掌握需求分析的方法和工具,还需构建相应的需求体系、知识库(案例、场景、原型、模板)。
4. 需求来源
需求来源有多个,可以从客户、咨询、需求、设计、开发、实施等提案。
- 基本需求
基本需求来自于对客户进行的“调研”,这类需求以功能为主,基本上按客户意愿进行设计和开发,内容大部分在需求调研、需求分析阶段内确定。
- 中级需求
中级需求不是客户直接提出的功能需求,而是在需求分析阶段、业务设计阶段通过对客户提出来的业务需求进行转换、优化、补缺、提升的过程中产生的需求,也就是为完善业务而产生的需求。
- 高级需求
高级需求主要来自于软件工程师根据本次客户的目标需求、新的设计理念、新技术等而提出(即软件工程师设计出来的需求)。
综上,软件工程师要认识到,需求工程(调研与分析)完成了,并非是需求获取的工作全部完成了,只是由客户直接提出来的需求完成了,而通过设计工程的需求发掘尚未开始。
5. 交付成果
(1)需求调研成果(需求调研资料汇总)
从客户收集的需求资料,包括用图形、文字和表格等方式记录的原始资料,形成需求调研资料汇总。
(2)需求分析成果(需求规格说明书)
基于调研资料进行分析,识别出最终需要进行开发的全部内容,并且通过客户确认,最终形成需求规格说明书,这是后续设计、开发过程的依据。
6. 需求分类
需求通常包含功能性需求和非功能性需求。
6.1 功能性需求
功能性需求是系统必须要提供的业务处理功能,也是软件需求的主体,通常没有形容词修饰的都是功能性需求。
- 目标需求
客户提出的信息化的目标、理念、希望、价值。
- 业务需求
客户提出的系统要对应业务的内容、过程、规则等。
- 功能需求
确定系统必须提供的处理业务需求的功能及功能的具体描述。
6.2 非功能性需求
非功能性需求是指建立一些指标性的条件来判断系统运行情况,而不是针对某个业务处理的具体功能需求,被用来判断运行的系统是否可以满足以下的条件:安全性、可靠性、互操作性、健壮性、易使用性、可维护性、可移植性、可重用性、可扩充性等。