本文来自微信公众号“产品班花”,作者:北伐,纷传经授权发布。
需求分析(Software Reguirement Analysis)是研究用户需求得到的东西,完全理解用户对软件需求的完整功能,确认用户软件功能需求,建立可确认的、可验证的一个基本依据。
需求分析是一个项目的开端,也是项目实施最重要的关键点。据有关的机构分析结果表明,我们设计的软件产品存在不完整性、不正确性等问题80%以上是需求分析错误所导致的,而且由于需求分析错误造成根本性的功能问题尤为突出。因此,一个项目的成功需求分析是关键的一步。
一、需求分析理论
如果我们用数学方法来描述需求分析,可以将一个应用软件定义为S,可能应用软件涉及功能性问题非常广,我们用抽象化理论分析,可以划分为各个功能域,可以用D1、D2、… Dn表示,那么,我们可以用一个表达式描述为:
S={D1,D2,D3,…Dn}
但是,功能域Di依然存在着有若干个问题P1、P2、P3、… Pm组成,并且每个功能对应于子系统中的一个软构件,我们可以表示为:
Di={P1,P2,P3,…Pm}
同样,功能Pj有若干个行为F1、F2、F3、… Fk,每个行为对应于软构件中的实现方法:
Pj={F1,F2,F3,…Fk}
一个软件包含了所有功能的集合,同时包含了实现所有功能的所有方法和算法描述。
需求分析是依据于用户需求,经过需求问题识别,进行分析、消化与综合,制订规格说明,评审,分为四个阶段,形成用户需求与设计同步,设计满足用户需求目标。
需求分析方法始终贯穿着吸收、同化、贯彻方法和手段,用商业化行为解决需求与实现中存在的矛盾,解决用户需求与商业化产品融通,解决规范与个性化追求。
二、 需求分析目标
需求分析的主要实现目标:
1)对实现软件的功能做全面的描述,帮助用户判断实现功能的正确性、一致性和完整 性,促使用户在软件设计启动之前周密地、全面地思考软件需求;
2)了解和描述软件实现所需的全部信息,为软件设计、确认和验证提供一个基准;
3)为软件管理人员进行软件成本计价和编制软件开发计划书提供依据;
需求分析的具体内容可以归纳为六个方面:软件的功能需求,软件与硬件或其他外部系统接口,软件的非功能性需求,软件的反向需求,软件设计和实现上的限制,阅读支持信息。
需求分析应尽量提供软件实现功能需求的全部信息,使得软件设计人员和软件测试人员不再需要需求方的接触。
这就要求需求分析内容应正确、完整、一致和可验证。此外,为保证软件设计质量,便于软件功能的休整和验证,需求表达无岔意性,具有可追踪性和可修改性。
2.1、功能需求
软件的功能需求是整个需求分析最主要、最关键和最复杂的部分,它描述软件的各种可能的条件下,对所有可能输入的数据信息,应完成那些具体功能,产生什么样的输出。描述软件功能需求是应注意下面几点:
1)功能需求的完整性和一致性
对功能的描述应包含与功能相关的信息,并应具有内在的一致性(即各种描述之间不矛盾、不冲突)。应注意以下几点:
(1)给出触发功能的各种条件(如:控制流、运行状态、运行模式等);
(2)定义各种可能性条件下的所有可能的输入(包括合法的输入空间和非法的输入空间);
(3)给出各种功能间可能的相互关系(如各个功能间的控制流、数据流、信息流,功能运行关系:顺序、重复、选择、并发、同步);
(4)给出功能性的主要级别(如:基本功能、可由设计者选择逐步实现的功能、可由设计者改变实现的功能等);
(5)尽可能不使用“待定”这样的词。所有含有待定内容的需求都不是完整的文件,如果出现待定的部分,必须进行待定部分内容说明,落实负责人员、落实实施日期。
2)功能描述的无岔意性和可追踪性
需求功能描述的无岔意性、可追踪性和规范化:
(1)功能描述必须清晰地描述出怎样输入到怎样输出,并且输入、输出描述应对应有数据流描述、控制流描述图,这些描述必须与其它地方描述一致;
(2)可以用语言、方程式、决策表、矩阵或图等对功能的描述。如果选用语言描述必须使用结构化的语言,描述前必须说明该步骤(或子功能)的执行是顺序,选择,重复,还是并发,然后说明步骤逻辑。整个描述必须单入单出。
(3)描述时,每一个功能名称和参照编号必须唯一,且不要将多个功能混在一起进行描述,这样便于功能的追踪和修改。
(4)功能描述应注意需求说明和程序设计的区别。需求设计仅仅是软件的功能设计,它给出软件运行的的外部功能描述,以及为了实现这一外部功能必须做哪些事情(采用和种数据结构,定义多个模块,接口间的接口等)是设计阶段的事情,功能描述不应涉及到那些细节问题,以避免给软件设计带来不必要的约束。
2.2、软件与硬件或其他外部系统接口
软件与硬件或其它外部系统接口包括下述内容:
(1)人机接口:说明输入、输出的内容、屏幕安排、格式等要求;
(2)硬件接口:说明端口号,指令集,输入输出信号的内容与数据类型,初始化信号源,传输通道号和信号处理方式。
(3)软件接口:说明软件的名称、助记符、规格说明、版本号和来源;
(4)通讯接口:指定通讯接口和通讯协议等描述。
2.3、 软件的非功能性需求
软件非功能性需求是指软件性能指标,容限等功能以外的需求。一般指下述内容:
(1)时间需求:输入、输出频率,输入、输出响应时间,各种功能恢复时间等;
(2)处理容限、精度、采样参数的分辨率,误差处理等;
(3)可靠性的MTBF要求,可维护性、安全性要求等。(对可能的不正常的输入给以正常响应是可靠性的重要内容,这属于功能性需求。)
2.4、软件反向需求
软件的反向需求描述软件在那些情况下不能做什么。
这一条是随软件实际要求而定。有两类情形需要采用反向需求的形式。
第一种情况:某些用户需求适宜采用反向形式说明,如数据安全性要求属于这类形式。
第二种情况:对一些可靠性和安全性要求较高的软件,有些必须描述软件不能做些什么。如控制点火时序,我们必须交代清楚在那些情况下不能点火,否则会造成故障。
2.5、软件设计和实现上的限制
软件设计和实现上的限制主要指对软件设计者的限制。如软件运行环境的限制(选择计算机类型,使用配置,操作系统的限制等)、设计工具的限制(使用语言、执行的标准)和保密要求等。
2.6、阅读支持信息
这部分内容是为了更好的帮助我们理解用户需求,也是为了使需求便于修改和追踪。其本身并不是对需求的描述,但它影响到需求分析的可读性,也属于需求分析的一个重要部分。
一般目录、需求背景信息、内容索引、交叉引用表、注释等均属于这个部分的内容。
三、 需求分析人员组织
需求分析其根本性问题是理解用户功能需求,由此需求分析实际上是与客户间交流过程完成的目标。要求我们组织适当的参与人员进行交流活动。
需求分析是一个综合团队的工作,是在需求分析理论的指导下,对用户需要进行渐进方式逐步深化;通过不断变化方式形成具体约束;努力实现需求功能目标形成特色效果的商业化产品。
需求分析是一个商业行为,完全是一个商业化操作,要求有商业、技术等结合的团队共同合作,解决需求和设计的同步,设计符合需求。
项目涉及内容,项目大小都需要我们考虑参加需求分析工作团退的人数,配置合理的参与人员。
一般我们必须有商务活动人员,项目管理人员,设计技术人员等参加,而且要求组织人员必须明确负责范围,以及明确工作目标,保证实施的有效性。
本文由作者授权纷传发布,建圈子、做付费社群用纷传。