需求工程简析

已剪辑自: https://zhuanlan.zhihu.com/p/36145396

什么是需求工程

需求工程是指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。需求工程通过合适的工具和记号系统地描述待开发系统及其行为特征和相关约束,形成需求文档,并对用户不断变化的需求演进给予支持。

需求工程的概述

需求分析是介于系统分析和软件设计阶段之间的桥梁。一方面,需求分析以系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对它们进行检查与调整;另一方面,需求规格说明又是软件设计、实现、测试直至维护的主要基础。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。

需求工程的主要内容

需求工程是一个不断反复的需求定义、文档记录、需求演进的过程,并最终在验证的基础上冻结需求。80年代,HerbKrasner定义了需求工程的五阶段生命周期:需求定义和分析、需求决策、形成需求规格、需求实现与验证、需求演进管理。近来,MatthiasJarke和KlausPohl提出了三阶段周期的说法:获取、表示和验证。

综合了几种观点,可以把需求工程的活动划分为以下5个独立的阶段:

  1. 需求获取:通过与用户的交流,对现有系统的观察及对任务进行分析,从而开发、捕获和修订用户的需求;
  2. 需求建模:为最终用户所看到的系统建立一个概念模型,作为对需求的抽象描述,并尽可能多的捕获现实世界的语义;
  3. 形成需求规格:生成需求模型构件的精确的形式化的描述,作为用户和开发者之间的一个协约;
  4. 需求验证:以需求规格说明为输入,通过符号执行、模拟或快速原型等途径,分析需求规格的正确性和可行性;
  5. 需求管理:支持系统的需求演进,如需求变化和可跟踪性问题。

需求工程的基本活动

基本活动

  • 抽取需求;
  • 模拟和分析需求;
  • 传递需求;
  • 认可需求;
  • 进化需求。

项目失败原因

  • 缺少用户参与
  • 不完整的需求
  • 需求或需求文档的变更
  • 缺少管理
  • 技术能力不足
  • 缺少资源
  • 不现实的期望
  • 预算不足
  • 实现不必要的功能
  • 不能适应变化和重新定向

问题 vs. 解决问题

做什么 vs. 怎么做

  • “做什么” 和 “怎么做” 之间的区别经常被用于将系统的需求定义和系统设计区分开来。 或者可以说, 需求用来定义问题并说明 “要开发什么”; 而系统设计用来定义解决方案并说明 “系统应如何开发出来”
  • 做什么 -> 问题描述
  • 怎么做 -> 解决方案描述

需求类型

  • 功能性需求
  • 质量需求
  • 约束

功能性需求

比如:注册登陆,下单等

质量需求

质量需求主要是性能、稳定性、可靠性。

用户关心

  • 可用性
  • 效率
  • 灵活性
  • 完整性
  • 互操作性
  • 可靠性
  • 健壮性
  • 易用性

开发者关心

  • 可维护性
  • 可移植性
  • 可复用性
  • 可测试性

非功能性需求

  • 不明确的功能性需求:不推荐精化,可列为一组功能性需求
  • 质量需求

约束

通过来源区分

  • 文化约束 (即约束来源于系统用户的文化背景)
  • 法律约束 (即约束来源于法律和标准)
  • 组织约束
  • 物理约束
  • 项目约束

通过影响的主体区分

  • 影响系统本身(例如:功能限制、权限等)
  • 影响系统的开发过程(例如:工作量、开发人数等)

需求工程方法

需求工程包括需求开发和管理,而需求开发又包括这几个过程:需求获取,需求分析,需求规格说明和需求验证。

需求获取

需求包括业务需求,用户需求和功能需求以及非功能需求,在需求开发之前,我们需要先定义好需求开发的过程,形成文档,内容包括:需求开发的步骤,每一个步骤如何实现,如何处理意外情况,如何规划开发资源等。

需求获取包括以下方法和技能:

  • 项目范围确定:开需求开发前期,我们应该获取用户的业务需求,定义好项目的范围,使得所有的涉众对项目有一个共同的理解。
  • 用户确定:确定用户群和分类,对用户组进行详细描述,包括使用产品频率,所使用的功能,优先级别,熟练程度等等。对每一个用户组确定用户的代言人。对于大型项目,我们需要先确定中心客户组,中心客户组的需求具有高级别的优先级,需要先实现的核心功能。
  • 用例确定:与用户代表沟通,了解他们需要完成的任务,得到用例模型。同时根据用例导出功能需求。用例描述应该采用标准模板。
  • 系统事件和响应:业务事件可能触发用例,系统事件包括系统内部的事件以及从外部接受到信息,数据等等,或者一个突发的任务。
  • 获取方法:召开需求讨论会议,观察用户的工作过程,采用问答式对话,采用诱发式需求诱导等等。检查完善:问题报告和补充需求建议

需求分析

需求分析是对用户的需求获取之后的一个粗加工过程,需要对需求进行推敲和润色以使所有涉众都能准确理解需求。分析过程首先需要对需求进行检查,以保证需求的正确性和完备性,然后将高层需求分解成具体的细节,创建开发原型,完成需求从需求获取人员到开发人员的过渡。

  • 绘制关联图:关联图确定系统和外部的交互。划分了系统的范围和界限,构建了系统对外的接口。
  • 原型开发:对于敏捷方法,推荐完成一个界面的原型,一个初步的系统实现,通过原型,让所有涉众对开发的项目有了一个初步的映像,同时可以提供对需求的检验。
  • 需求优先级别:采用分析的方法确定产品的功能,用例和单项需求的优先级别,以优先级为基础,确定各项功能和需求都包括在哪个版本中,在项目开发过程中,需求的优先级别根据实际情况进行调整。
  • 需求建模:图形分析模型对需求描述更加抽象。主要可以采用UML的建模分析。
  • 数据字典创建:建立系统中所用到的数据项和结构的定义,数据字典可以使参与项目开发的每一个人都使用统一的定义。
  • 子系统:建立系统的结构,同时将需求分配到各个子系统和模块中 。

需求工程过程能力评估与改进

过程能力评估

通过比较现有需求工程过程与过程参考模型之间的差别,可以评估现有过程的能力水平。具体而言,首先以调查表、面谈等方式收集组织中需求相关实践的执行情况;然后,与过程参考模型中的实践进行映射和比较,统计各能力等级下实践的执行情况;根据统计结果判定当前所处的能力等级。

需求工程过程参考模型,当“已执行级”的基础实践被全部规范执行时,需求工程过程达到“已执行”能力等级,否则,需求过程处在“不完整”能力等级;当执行了全部的“已管理级”实践时,需求工程过程达到“已管理”能力等级;当执行了全部的“已定义级”实践时,需求开发工程达到“已定义”能力等级。

过程改进策略

确定了组织需求过程所处的能力水平后,可以通过引入新实践或提高已有实践的性能,实现过程的改进。首先要明确过程改进的目标;然后分析组织的资源条件,确定过程改进的主要内容和手段。要遵循渐进的过程改进策略。一般来说,按照“由低到高”、“先规范后引入”的顺序逐提高过程能力,即先改进低能力等级的实践再改进高能力等级的,先规范已有实践再引入新实践,这样可以降低组织进行需求工程过程改进的风险。

需求工程的验证准则

需求分析阶段的工作结果是开发软件系统的重要基础,大量统计数字表明,软件系统中15%的错误起源与错误的需求。因此,软件需求规格说明书完成以后,需要认真进行技术评审和修改。作为需求分析阶段工作的复查手段,在需求分析的最后一步,应该对功能的正确性、完整性和清晰性,以及其他需求给予评价,可按以下准则评价和验证。

正确性

正确性是最基本的要求之一,一般是指杂需求规格说明书中对于待开发系统的功能、行为、性能的描述必须与用户对目标软件产品的期望相吻合,正确性是相对与用户的应用需求而言的,由于具体应用的千差万别,需求规格说明书的正确性的判断标准也应各不相同。正确性检查属于技术问题,它并不能说明需求模型是否完全表达了用户需求。评价正确性时,可以按照建模规则去检查,或使用软件工具(如CASE)自动检查。当然,也可以请其他不参与该项目的同行校对,发现错误及时更正。

完整性

完整性是指需求模型中是否包含了用户所需的所有功能,这是最基本的要求,若不能满足,其它任何质量问题都无从谈起。因为需求分析的不完全,即使后面的设计与实现再好,也不能满足用户的要求。并且,在系统开发后期增加或更改用户需求,将会成倍地增加开发代价。因此,完整性评价是需求工程质量的关键。改进需求分析的完整性将有助于提高软件开发的生产率,但评价完全性问题却很难。因为用户有时不能完全表达其所有需求,开发者又没有预见,致使软件完成后才发现,维护代价相当大。为了及时发现问题,开发者最好跟班作业,对用户的业务进行深入地了解,从而对需求模型的完全性作出评价。具体评价方法可采用用户审阅、样例分析、业务规则验证、进程映像等方法。

实现性

实现性是指需求模型可以在规定的时间、经费预算和项目的技术约束下完成整个软件开发。这就要求我们在需求模型中不要出现这样或那样的假设,不要忽略各种实际因素,特别是技术和经费,以免到开发后期追悔莫及。评价可实现性主要应用下面两种方法:

\1. 应用开发人员审阅。他们会重点审查系统实现的一些潜在问题,从技术和经济角度分析系统实现的可行性,发现问题可及早修改。

\2. 开发代价估计。这是对需求模型的实现性进行定量测量的方法,通常质量越好代价越大,降低代价就要牺牲质量。只有权衡两者的关系,才能使系统的可实现性达到最佳。

总之,实现性是需求工程质量的最重要因素之一,实现可能性极小的需求模型,其它质量因素再好也无用。

适应性

适应性可以看作需求模型与用户的独立性,即当用户需求发生变化时,需求模型可以不做修改或只进行微小调整。

适应性是需求工程质量评价的最关键因素之一,但在实际系统开发中往往不被重视。很多需求分析人员就事论事,以完成系统的基本功能为目标,而忽略了其功能扩充或改变的可能性,这将会给系统维护造成困难。适应性评价要分析哪些需求将来可能改变、它们出现的可能性及其对需求模型的影响。由于系统未来可能发生的变化很难预测,所以适应性评价有一定困难。具体评价可采用如下方法:

\1. 高层管理者评审。因为适应性评价涉及组织发展的战略目标,一般的业务工作人员无能为力,只有高层决策者才能把握企业未来的发展方向。

\2. 行业专家评审。这些行业专家应该是业务咨询或学术专家,他们能更好地把握企业的发展方向,能够对潜在的市场变化及其可能性作出预测分析。

\3. 技术专家评审。有经验的需求分析专家可以基于系统结构对系统的适应性作出评估,虽然他们并不一定熟悉企业的业务,但是可以从需求分析的技术角度评价系统的适应性。

集成性

在一个大的企业信息系统开发中,通常包括多个应用子系统,这些子系统之间的数据一致性问题显得格外重要。集成性就是指某个应用子系统与企业信息系统中其它应用系统之间的数据一致性,以减少应用系统之间的数据冲突。由于在某些项目开发中,各应用子系统的需求分析是相对独立的,这就不可避免地造成数据重复、系统之间接口复杂等问题。要防止出现类似情况,应尽可能地重复利用已有的数据资源或者进行适当的扩充,以适应新系统的要求。其次,对数据项的定义要保持命名和格式上的一致。

特别强调的是要用全局的观点看待数据,使需求模型具有通用性。

集成性的评价可采用如下几种方法:

\1. 通过局部应用与全局应用模型的比较,发现数据冲突和结构冲突。

\2. 将数据项向已有的数据源做映像,查看是否存在数据共享和重用的可能。

\3. 让该应用系统以外的其它业务部门审阅,检查数据定义是否具有共性。

一致性

需求规格说明书的一致性要求:系统中不存在显式的或隐含的矛盾,也就是说,需求规格说明书中各个需求的描述必须不能相互矛盾,矛盾主要为:术语使用方面的冲突,功能冲突,以及时序方面的前后不一致等。一致性的评价可采用如下几种方法:

\1. 同一意思要用相同的术语来表达。

\2. 需求规格说明书中的各个部分的产品功能不得相互矛盾。

理解性

顾名思义,理解性是指需求模型的结构和描述易于理解。只有通俗易懂,才能更好地同用户交流。如果用户很难理解需求分析结果,他们就不可能检验需求模型是否完全准确地表达了他们的需求内容。另外,应用开发人员对需求模型的理解也至关重要,因为他们负责系统的设计与实现,不充分理解系统的需求,会使软件系统的实现结果同用户要求出现偏差,造成软件生产率下降。评价理解性常可采用以下方法:

\1. 用户审阅。这是最常用的一种方法,检验需求模型的可理解性。但这种方法有一个缺点,用户可能只关心他们所熟悉的业务操作,而没有充分理解模型所表达的含义。

\2. 样例分析。更有效的方法是让用户去使用这个模型,分析一个业务样例,来检验他们对模型的理解程度。

\3. 应用开发人员审阅。虽然系统设计和编程人员不像需求分析人员那样熟悉用户的业务要求,但他们能有针对性地找出哪些地方描述得不清楚。同时,这一步也是应用开发人员认识需求模型的过程

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值