【愚公系列】软考高级-架构设计师 074-需求工程
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
需求工程(Requirements Engineering)是指软件工程中的一个重要领域,专注于确定用户需求、系统需求和软件需求,并确保这些需求被正确地捕获、分析、规范和管理。需求工程是软件开发生命周期的早期阶段,关注于确保软件系统开发过程中对需求的准确理解和有效管理。
需求工程的主要目标包括:
-
需求获取:识别、理解和记录系统用户和利益相关者的需求。
-
需求分析:分析需求,识别需求之间的关系、优先级和约束条件。
-
需求规范:将需求转化为可验证、可跟踪的需求规范,确保需求清晰、完整和一致。
-
需求验证:确保需求规范符合用户和利益相关者的期望,并满足系统和业务需求。
-
需求管理:跟踪和控制需求变更,确保需求在软件开发过程中的有效管理和更新。
通过有效的需求工程实践,软件开发团队能够更好地理解客户需求、降低开发过程中的风险,并提高最终软件产品的质量和用户满意度。
🚀一、需求工程
软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望。是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。
分为需求开发和需求管理两大过程,如下所示:
🔎1.软件需求分类
在软件工程中,需求工程涉及不同类型的需求,包括业务需求、用户需求和系统需求。这些需求在软件开发过程中起着关键作用,帮助确保软件系统能够满足用户和利益相关者的期望。
-
业务需求:
- 来源于企业或客户,反映系统的高层次目标要求。
- 确定项目的视图和范围。
- 通常由项目投资人、客户、市场营销部门或产品策划部门提出。
-
用户需求:
- 描述用户的具体目标和要求系统必须完成的任务。
- 用户需求确定了用户如何使用系统。
- 通过用户访谈、问卷调查等方式整理用户使用场景,建立用户需求。
-
系统需求:
-
从系统角度说明软件的需求,包括功能需求、非功能需求和设计约束。
-
功能需求:
- 规定开发人员必须在系统中实现的软件功能。
- 用户利用这些功能来完成任务,满足业务需要。
-
非功能需求:
- 包括软件质量属性(如可维护性、可靠性、效率等)、性能需求以及其他非功能需求。
-
设计约束:
- 也称为限制条件或补充规约,对系统的一些约束进行说明。
- 例如,必须采用国有自主知识产权的数据库系统,必须在UNIX操作系统上运行,金钱相关要求需精确到小数点后2位等。
-
🔎2.需求获取
需求获取是一个确定和理解不同项目干系人的需求和约束的过程。
-
用户访谈
- 形式:1对1至1对3,找有代表性的用户进行访谈。
- 要求:对提问者的水平有要求。
- 类型:
- 结构化访谈(有剧本)
- 非结构化访谈(随意发挥)
-
问卷调查
- 适用场景:用户数量多,无法一一访谈。
- 优缺点:
- 优点:能够快速收集大量数据。
- 缺点:收集到的需求不够精准,比较杂乱,考验问卷编写者的水平。
-
采样
- 定义:从种群中系统地选出有代表性的样本集的过程,类似于数学中的数理统计。
- 样本数量计算公式:样本数量 = 0.25 * (可信度因子 / 错误率)^2
-
情节串联板
- 形式:通过一系列图片来叙述需求。
- 优缺点:
- 优点:生动形象,容易理解。
- 缺点:耗时较长。
-
联合需求计划 (JRP)
- 形式:通过联合各个关键用户代表、系统分析师、开发团队代表一起,通过有组织的会议来讨论需求。
-
需求记录技术
- 常见形式:
- 任务卡片
- 场景说明
- 用户故事
- Volere白卡
- 常见形式:
🔎3.需求分析
需求分析是软件工程中的关键阶段,旨在将混乱的用户需求和期望转化为清晰、可管理的用户需求,以确保软件系统开发的成功。
🦋3.1 特性要求
- 无二义性
- 完整性
- 一致性
- 可测试性
- 确定性
- 可跟踪性
- 正确性
- 必要性
🦋3.2 需求分析工作内容
-
转化用户要求为用户需求:将用户提出的需求和期望整理转化为清晰的用户需求。
-
常见需求分析任务:
- 绘制系统上下文范围关系图(数据流图)
- 创建用户界面原型
- 分析需求的可行性
- 确定需求的优先级
- 为需求建立模型
- 创建数据字典
- 使用QFD(质量功能部署)将需求与QFD进行关联
🦋3.3 结构化的需求分析
结构化特点:自顶向下,逐步分解,面向数据。
三大模型:功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)以及数据字典。
☀️3.1.1 数据流图
数据流图DFD基本图形元素:外部实体、加工、数据存储、数据流
数据流:由一组固定成分的数据组成,表示数据的流向。在DFD中,数据流的流向必须经过加工。
加工:描述了输入数据流到输出数据流之间的变换,数据流图中常见的三种错误如图所示:
- 加工3.1 .2有输入但是没有输出,称之为“黑洞”
- 加工3.1 .3有输出但没有输入。称之为“奇迹”。
- 加工3.1 .1 中输入不足以产生输出,我们称之为“灰洞”。
数据存储:用来存储数据。
外部实体(外部主体):是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地(源)和系统所产生的数据的归宿地(宿)。
☀️3.1.2 分层数据流图
☀️3.1.3 数据字典DD
数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明,即为了描述数据流图的。
数据字典有以下4类条目:数据流、数据项、数据存储和基本加工。(注意这里没有描述外部实体,因为外部实体不是系统内部的内容)
加工逻辑也称为“小说明”。常用的加工逻辑描述方法有结构化语言、判定表和判定树3种。
🔎4.需求定义
需求定义(SRS)概述:
- 定义:需求定义,即软件需求规格说明书(SRS),是需求开发活动的产物,旨在确保项目干系人和开发团队对系统的初始规定有共同理解,成为整个开发工作的基础。
- 重要性:SRS是软件开发过程中最重要的文档之一,任何规模和性质的软件项目都应该具备。
需求定义方法:
-
严格定义:
- 也称为预先定义或结构化定义。
- 基本假设:所有需求能被预先定义,开发人员与用户能准确交流。
- 采用图形或文字体现最终系统,适用于需求明确的情况。
-
原型方法:
- 迭代循环型开发方式。
- 需注意并非所有需求能在系统开发前准确说明。
- 原型解决项目干系人之间交流困难问题。
- 特点:需要实际、用户参与的系统模型,合适的开发环境。
- 重复是必要的,一旦需求确定,应遵从严格方法。
需求定义方法,可以确保在软件开发过程中,需求明确、项目干系人理解一致,为开发团队提供清晰的工作基础,从而保障软件项目的顺利开展。
🔎5.需求验证
需求验证概述:
需求验证,也称为需求确认,旨在与用户一同确认需求的准确性,评审和测试需求规格说明书(SRS)。该过程包括以下两个步骤:
-
需求评审:
- 分为正式评审和非正式评审。
-
需求测试:
- 设计概念测试用例和场景,用以测试需求,不牵涉到编写代码。
一旦需求验证通过,需要邀请用户签字确认,作为验收标准之一。此时,需求规格说明书成为需求基线,不得随意更新。若需更改,必须经过需求变更流程。通过需求验证确保了软件开发过程中需求的准确性和一致性,为后续开发工作提供了稳定的基础。
🔎6.需求管理
定义需求基线:通过了评审的需求说明书就是需求基线,下次如果需要变更需求,就需要按照流程来一步步进行。需求的流程及状态如下图所示:
🦋6.1 需求变更和风险
需求变更和风险管理概述:
在需求变更过程中,需求风险管理至关重要。以下是主要关注的点以及带有风险的做法和变更产生的原因:
-
关注点:需求变更过程中的需求风险管理。
-
带有风险的做法:
- 无足够用户参与
- 忽略用户分类
- 用户需求不断增加
- 模棱两可的需求
- 不必要的特性
- 过于精简的SRS
- 不准确的估算
-
变更产生的原因:
- 外部环境变化
- 需求和设计不完整
- 新技术出现
- 公司机构重组导致业务流程变化
-
变更控制委员会CCB:
- 也称为配置控制委员会。
- 任务:评价、审批建议的配置项变更,监督已批准变更的实施。
通过对需求变更过程中的风险管理和变更控制的关注,可以有效应对变更带来的挑战,确保软件开发过程中的稳定性和高效性。
🔎7.需求跟踪
需求跟踪概述:
需求跟踪是编制每个需求与系统元素之间联系的文档,又称为双向跟踪。它包括两种方式:
-
正向跟踪:
- 用于确认用户原始需求是否全部实现,以判断产品是否存在遗漏。
-
反向跟踪:
- 用于验证软件实现是否符合用户需求,不多不少。
使用方式:
- 正向跟踪:若原始需求和用例对应,打上对号;若某行无对号,表示原始需求未实现,存在问题。
- 反向跟踪:若某列无对号,说明有多余功能用例,软件实现了多余功能,需要审查。
通过需求跟踪,可以确保软件开发过程中的需求与实现之间的对应关系清晰明了,帮助团队确保产品开发的准确性和完整性,同时避免遗漏或过度实现的问题。
🔎8.题目
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)