需求分析是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
需求分析要实现以下目标:
1、准确理解并描述客户需求
2、帮助客户挖掘需求
3、分析客户需求的可行性
4、剔除不合理的客户诉求
5、将离散需求进行整合
良好的需求分析有助于避免或尽早剔除项目早期错误,从而提高生产率、降低开发成本、改进系统质量。
需求分析的过程
1、明确建设目的
明确客户建设IT系统或功能的目的是什么,明确了目的才能明确方向和范围。
2、识别功能模块
划分功能大块:明确客户要通过系统做哪几件事,对应的将需求划分为几个大功能模块;
业务场景分析:分析每个功能模块都有哪些业务场景;
3、需求识别
本步骤是将客户提出的需求点进行评估和分拣,分类纳入功能模块、业务场景中。包括需求评估、需求分拣两个任务。
需求评估:评估哪些需求能做,哪些不能做。不能做的需求主要有这几种情形:
无用需求:包括用户提的非系统实现功能等;
逻辑不符:逻辑与整体功能矛盾、不符;
技术上无法实现:现有技术无法实现或实现成本非常大;
超出范围或边界:超出约定范围或使用频率小、不重要但开发难度大。
需求分拣:
按功能模块分拣、归类功能性需求;
将非功能性需求单独列出,如性能要求、可靠性要求、安全要求等。
4、功能模块分析
将需求点归类到功能模块、业务场景后,每个模块、场景就有了基本的需求要素和轮廓。
此时需要先识别功能模块的类型——是一个子系统、APP,还是一个业务流程、统计报表?功能类型不同,采用的分析方法不同。
常用的分析方法如下:
功能分解法:最常用的方法,按照经验将功能进行逐层分解。这种方法可以快速输出需求文档,但缺点也很多:如容易遗漏需求、需求有机结合程度低、对开发不友好等。
快速原型法:适合重视界面的需求,如软件系统、APP,优点是可以形象的与客户进行需求明确,缺点是输出难度大、无法取代文档、与底层数据逻辑未关联。
建模分析法:针对不同的功能类型,借助流程图、UML统一建模语言等工具,分析出需求的参与者、用户、数据流动、状态、操作等信息,提升需求分析效果。同一个功能,可以借助不同的工具,从多个视角进行分析。这类方法的缺点是费时费力。
通过选用以上方法对功能模块逐一分析,要进一步剔除客户不合理需求,发现并补充调研阶段未想到的需求。
5、需求组织
将每个模块或场景分析后的需求进行梳理、简化、整合等处理,组织成有机整体,最后综合成系统的解决方案。
建模分析方法
本节简要介绍两个常用的软件建模分析方法。(要掌握这两个方法需读者成体系的学习和练习。相关资料可在网上查找,“IT售前圈”粉丝也可通过公众号获取)
面向对象分析法
面向对象分析 OOA(Object- Oriented Analysis)采用UML进行建模,是一种非常接近开发思想的分析方法。常用的有9种模型,可根据不同需求层次、类型进行选用。
OOA需求分析步骤如下:
确定系统范围和系统边界;
确定系统的约束(环境和条件);
定义活动者;
确定系统的综合要求(功能、性能、运行);
确定系统的数据要求(名称、范围、类型、数量、特点)
建立USE CASE模型、绘制USE CASE图;
绘制主要交互图;
结构化分析法
结构化分析法SA(Structured Analysis),采用自顶向下,逐层分解的方式分析系统,用数据流图(Data Flow Diagram,DFD)、数据字典(Data Dictionary,DD)描述系统。
其基本策略是研究问题域中数据如何流动以及在各个环节上进行何种处理, 从而发现数据流和加工。问题域被映射为由数据流、加工以及文件、端点等成份构成的数据流图, 并用数据字典对数据流和加工进行详细说明。这种方法的关键是动态跟踪数据流动,也叫“数据流法”。
SA法容易迷失在数据流细节,不适合做需求宏观理解,建议与OOA搭配使用。
SA需求分析步骤如下:
画出数据流图。
决定哪些部分需要计算机化和怎样计算机化
描述数据流细节,大型软件可以使用数据字典描述所有数据元素;
定义处理逻辑(加工逻辑:每个加工处理做什么);
定义数据存储,即定义每个存储的确切内容及其表示法(格式);
定义物理资源:如是文件需指定:文件名、组织结构(排序、索引等)、存储介质和记录;如是数据库需指定每个表的相关信息;
确定输入输出规格说明,如输入内容、输入屏幕、打印输出格式、输出长度等;
确定硬件所需有关数值,如输入量、打印频率、CPU、记录大小、数据量大小、文件大小等等;
确定软硬件接口和环境需求。
以上两种模型可采用Visio、EdrawMax等图示工具绘制。
需求分析与设计的界限
需求分析阶段的目的是分析系统在功能上需要“做什么”,而不是考虑“怎么做”,后者是设计阶段的事。但在实际工作中,需求分析和设计的界限比较模糊,那么该如何进行界定呢?
设计有三种类型:功能设计、界面设计、技术实现设计;
功能设计:如系统业务流程、操作、功能的设计等,这部分应由产品经理完成;
界面设计:UI设计,应由美工完成;
技术实现设计:包括系统架构、数据模型、技术实现方式等的设计,应由研发人员完成。
在分工完全的公司或部门,从业务前线往后端应配备售前(或需求分析师)、产品经理、美工、研发,可以依照以上分工进行。但很多公司或部门缺少产品经理或美工,那么此时:功能设计一般由售前完成,界面设计则根据实际情况 ,由售前代劳或研发“脑补”了。
领取专属 10元无门槛券
私享最新 技术干货