干货!如何做好软件需求分析
在 2021-09-22 14:55 发布
软件需求分析,是项目经理经过深入细致的调研和分析,准确了解项目的功能、性能、面对客户群体等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
用户需求或业务需求都是用通俗语言描述的,即与用户沟通的语言;产品需求是用技术语言描述的,是跟技术人员沟通的语言。用户和技术人员是站在不同的角度观察需求的,他们看到的内容是不一样的。就软件而言,这里的产品需求就是软件需求。
一、软件需求分析步骤
1.需求获取
从用户获取、挖掘需求。常见的需求获取方法有:客户交流、竞品分析、市场调研、问卷调查等。
客户交流是最重要的需求获取方法。大多数情况下,用户虽然知道自己的需求,但他们并不一定能准确表达出他们的需求是什么。如果用户告诉你需求就是这些了,不要轻信,要继续刨根问底,直到你们都筋疲力尽。
产品经理作为一个需求分析者,必须透过客户的表面需求来理解他们的真实需求,避免理解不同而带来期望的差异。尽量把客户所持的假设解释清楚,特别是那些有冲突的部分,一定要逐字逐句去理解,以明确客户没有表达清楚但必需要有的功能。
2.需求分析
最常用且最直观的方法是设计项目原型。
设计项目原型的目的是为了解决在产品开发早期需求不确定的问题,利用这些不确定来判断系统中那一部分需要建立原型和希望从用户对原型的评价中获得什么信息。其优点是能减少软件项目失败风险,加快开发进度,增加用户满意度,减少需求错误,尤其是界面错误。其风险是当用户看到一个正在运行的原型,会以为产品即将完成。
3.需求定义
把分析得到的需求文档化,编制需求规格说明书。
4.需求验证
确定需求准确、完整,得到实现,对应测试活动。
5.需求变更控制
对需求的变更进行控制,降低成本影响。
6.需求跟踪
监控需求在开发过程中不走样、不遗漏。
二.软件需求分析原则
需求分析通常来讲它们应符合以下一般原则:
1. 能够表达和理解问题的信息域
信息域反映的是用户业务系统中数据的流向和对数据进行加工的处理过程,因此信息域是解决“做什么?”的关键因素。根据信息域描述的信息流、信息内容和信息结构,可以较全面地(完整地)了解系统的功能。
2.能够对所建模型按一定形式进行分解
分解是为了降低问题的复杂性,增加问题的可解性和可描述性。分解可以在同一个层次上进行(横向分解),也可以在多层次上进行(纵向分解)。
3.分清系统的逻辑视图和物理视图
软件需求的逻辑视图描述的是系统要达到的功能和要处理的信息之间的关系,这与实现细节无关,而物理视图描述的是处理功能和信息结构的实际表现形式,这与实现细节是有关的。
三.软件需求分析内容
需求分析的内容是针对待开发软件提供完整、清晰、具体的要求,确定软件必须实现哪些任务。
具体分为功能性需求、非功能性需求与设计约束三个方面:
1. 功能性需求
功能性需求即软件必须完成哪些事,必须实现哪些功能,以及为了向其用户提供有用的功能所需执行的动作。
功能性需求是软件需求的主体,开发人员需要亲自与用户进行交流,核实用户需求,从软件帮助用户完成事务的角度上充分描述外部行为,形成软件需求规格说明书。
2. 非功能性需求
作为对功能性需求的补充,软件需求分析的内容中还应该包括一些非功能需求。
主要包括软件使用时对性能方面的要求、运行环境要求,软件设计必须遵循的相关标准、规范、用户界面设计的具体细节、未来可能的扩充方案等。
3. 设计约束
一般也称做设计限制条件,通常是对一些设计或实现方案的约束说明。
四.如何确定软件需求
经过大量的需求调研工作之后,手上可能有客户提出的大量的、各种各样的需求。
这些需求有的是技术上可以实现的,有的是技术上不可以实现的;有些是管理上需要的,有的是管理上不需要的;有些是合理的,有些是不合理的,如何处理这些需求呢?
以“实现用户正确的需求”为原则,对于用户提出的需求进行严格的分析、甄别。
1. 将抽象的需求具体化
在需求调研的时候会发现,用户提出自己的需求时总是不会按照你希望方式去提出来,有的人因为不知道你想要什么,只为了应付领导布置的任务,有的是处于比较高的职位,习惯了从宏观的角度去讲问题,所以我们在整理需求的时候要将抽象的要求具体化。
2. 将自然语言描述的需求结构化
用户描述需求总是非常随意的,他们使用平常正常沟通的语言描述,这种需求的主要特点就是不严谨,容易有其一,这种需求不能直接让开发者处理的,开发者需要的需求是描述明确的、精准的、没有歧义的。
需求分析分析者作为用户与开发者的桥梁,有义务将用户用自然语言描述的需求结构化。将用户的描述转换成更精确的语言,更接近技术人员使用的语言。
3. 注意避免理解偏差
理解偏差主要是需求分析者对用户所提的需求没有理解到位,用户明明想表达的是这个意思,却被理解成了另外一个意思。
这是一个沟通问题,说的人觉得自己说的很清楚了,可偏偏双方就是没有真正理解对方,所以下面是我们需要注意的:
a.提高沟通能力:多从对方的立场考虑问题,当双方描述某件事时,要从对方的角度思考这些描述;
b.提高沟通频次:一方面要引导对方多说话,另一方面对不理解的或者觉得理解起来有困难的内容,多向对方询问,换成你的表达方式让对方确认是不是这个意思;
c.学习对方领域的知识:用户有自己的知识领域,需求分析者也有自己的知识领域,前者满脑子是业务术语,后者满脑子是IT术语,有的时候两者真难沟通。每个人的知识面不同,要想沟通顺畅,两个人的知识面重叠的地方越多越好。
4. 识别超出项目范围的需求
用户的需求不能是漫无边际的,所有的需求都应该在项目范围之内,做需求分析的时候首先要确定好项目目标,要让用户知道需求边界在什么地方。
这个项目应该在项目启动时双方经过讨论达成共识,后面所有的工作都应该围绕这个目标展开。原则是即使在这个阶段的目标实现了以后再设置新目标,也不要不停的修改一个目标。