什么是软件需求?以及需求的最佳实践?

什么是软件需求

业务需求是反应企业组织对软件系统的高层次目标要求,换句话说就是软件系统的建设目标,常常体现在这两个方面:问题和机会。

要记住:出发点不同,精神面貌就完全不一样,当然如果目标过于夸大也是不行的。可能会导致不必要的资源浪费。

用户需求

用户需求是指描述的是用户使用软件需要完成什么样的任务,怎样完成的需求。通常是在业务需求定义的基础上进行用户访谈、调查、,对用户的使用场景进行整理,从而建立用户角度的需求。换句话说就是用户需求是需求捕捉的产物,所具有的特点如下:

软件需求

正如前面所说到的,用户需求具有零散、存在矛盾的特点。以需求分析人员还需要对其进行分析、整理和提炼,从而生成知道代发的、更精确的软件需求。换句话说就是软件需求是需求分析与建模的产物。

  • 问题:解决企业运作的过程中遇到的问题。
  • 机会:抓住外部环境变化所带来的机会,以便为企业带来新的发展。
  • 零散:用户会提出不同角度和不同层面不同粒度的需求,而且通常是以一句话的实行表示出来。
  • 存在矛盾:由于用户处于企业的不同层面,因此难免出现盲人摸象的现象。

需求的三种类型

功能需求

对于软件需求而言最为关键的就是如何进行组织否则一句话、一句话地描述就会显得十分零散。而且很难保证开发人员注意满足这些需求。

非功能需求

其中典型的问题有两个:

  • 信息传递的无效性:很多需求规格说明书里面会通过一个名为设计原则的小节来说明非功能需求。
  • 忽略了非功能需求的局部性:更为科学的做法是抓住具体的场景来描述

设计约束

  • 非技术因素决定的技术类型:对于软件开发而言,有些技术选型并不是由技术团队决定,而会受到企业实际情况的影响。

  • 预期的软硬件环境:技术开发团队在决定架构、选择实现技术时会受到企业实际的软硬件环境的影响。

优秀需求的标准

完整性:就是使需求没有遗漏,也就是在需求变更中,新需求所占的比例的量不大。而且这些新需求都是因为外部环境的变化而产生的。

不失真:需求的正确性和无歧义性是一组相关的要求,指的是确保需求在信息传递的过程中不失真。

有优先级:想要更好地对项目进行管理就需要有效的区分优先级。

需求工程解析

需求工程的范畴

需求工程包括需求开发和需求管理两大范畴,需求开发是收集、分析、整理、编写、验证需求的全过程。重点在于开发出高质量的需求规格说明。需求管理则是对需求的实现、变化进行追踪的全过程,重点在于确保开发的软件满足这些需求。

需求工程工作要点

需求获取:需求获取也是需求捕获,但是其中出现的问题主要体现在捕获范围不足、缺乏计划性、捕获对象不明确、捕获手段不明确。

需求分析:需求分析是需求开发过程中的核心任务。

编写规范:编写规范就是将需求分析结果文档化的过程,对于比较规范化的开发组织而言,都会重视这个活动。

需求验证:对于需求验证工作,大多数组织都不够重视,有时只是找一个客户代表签字确认,有时甚至直到交付系统通过测试系统来验证。

需求管理工作要点

具体来说,需求管理工作包括基线管理、变更管理和需求跟踪。

统一、明确的需求项划分标准:要对需求进行有效的管理、就必须有清晰、统一、明确的标准将需求划分为具体的需求项。

引入基线管理:就会把需求分为两大类,一类是已经开始的基线内的需求、另一类就是还没有安排开发的待处理项目。

引入变更管理:引入变更管理是十分重要的,就需求管理的范畴而言,重点在于完成业务影响分析、技术影响分析、项目影响分析三方面。

引入需求跟踪:在对变更的影响进行分析时,就会发现很难精确的评价变更将影响那些需求项、那些设计元素、只能凭借印象和经验。而要想真正的做到精确的量化评估,就需要通过跟踪活动来积累信息。

需求分析人员的技能组成

需求分析人员的来源

他的三大技能是横跨文、理两大学科的,因此想要找集三方面特长于一身的人 很难,因此通常需求通过团队协作来解决这一矛盾。

各种能力培养的要点

沟通能力是最重要的,通过改变思维模式不断训练是可以提高的。

SERU模型概述

需求定义阶段

需求定义阶段就是项目的立项阶段,也与RUP的初始化阶段相对应。

理清脉络阶段

相当于需求捕获、分析和建模的阶段一,对应RUP中细化阶段的第一次迭代。

填充细节阶段

相当于需求捕获、分析与建模的阶段二、在RUP中将从细化阶段的第二次迭代开始直到构建阶段完成。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
HY小宝F3 小时前
职场沟通的深层智慧:从对抗到协作的自我修炼
职场和发展
愚者游世3 小时前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it
AI职业加油站4 小时前
职业提升之路:我的大数据分析师学习与备考分享
大数据·人工智能·经验分享·学习·职场和发展·数据分析
郝学胜-神的一滴5 小时前
Python 列表 vs 数组:深入解析与最佳选择指南
开发语言·python·程序人生
草履虫建模11 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
软件检测小牛玛18 小时前
具备软件功能测试资质的机构哪家更权威?山东软件测评机构 中承信安
功能测试·单元测试·软件测试报告·软件测评机构
daopuyun20 小时前
CNAS/CMA软件检测实验室源代码漏洞测试工具选型要求与比对
软件测试·测试工具·软件检测·cnas认可·cma认定
学历真的很重要20 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程管理(详解版)
学习·职场和发展·系统架构·系统架构师
VT.馒头1 天前
【力扣】2722. 根据 ID 合并两个数组
javascript·算法·leetcode·职场和发展·typescript
执着2591 天前
力扣hot100 - 108、将有序数组转换为二叉搜索树
算法·leetcode·职场和发展