【需求工程】EU 3.2 基于自然语言的制品(L2)

EO 3.2.1 了解基于自然语言的制品以及它们的优点和缺点(L1)

自然语言的效果:

  1. 名词化
  2. 无参考索引的名词
  3. 全称量词
  4. 未完全规格说明的条件
  5. 未完全规格说明的动词

优点和缺点

为什么自然语言是需求工程中最常用的工具,却又永远无法被单独信任?

结合现实项目中的血泪教训 ,让你彻底吃透为什么需要自然语言 + 图形模型双管齐下:


一、优点(为什么我们离不开它?)------ 主打"低门槛"与"高包容"

1. 不受约束、具有极强的表现力和灵活性

现实意义:你可以用自然语言描述任何天马行空的想法,比如"系统界面风格要像苹果官网一样简洁大气",或者"支付失败时的报错要带点幽默感"。这些东西你用形式化语言(如数学公式或严格的代码逻辑)根本没法写,但自然语言可以。

2. 几乎任何可以想象到的需求都可以表达

现实意义:无论是描述复杂的业务流程("审批人出差时,自动转交其直属上级"),还是描述模糊的愿景("我们要打造一个全球领先的生态平台"),自然语言都能覆盖。它没有"语法死角"。

3. 阅读和理解不需要专项训练

现实意义(最重要)业务方(客户、老板)不需要学UML(统一建模语言)或数理逻辑 ,就能看懂需求文档。这保证了需求工程师能把写好的文档直接扔给用户确认,用户能马上反馈:"不对,这个地方不是我想要的。"------这是模型图(如类图、状态图)永远做不到的沟通效率。


二、缺点(为什么它"成也萧何,败也萧何"?)------ 主打"高成本"与"高风险"

1. 经常能够以不同的方式解释(歧义性)

血的教训 :你写"系统应支持多用户登录",开发理解为"允许多人同时登录同一账号",产品经理理解为"一人一个账号,但能切后台"。双方都觉得对方懂自己,结果验收时炸锅。

本质 :自然语言的上下文依赖太强,而需求文档往往无法穷尽所有上下文。

2. 检测歧义、遗漏以及不一致是困难且代价高昂的

为什么难且贵? 因为靠人眼去读几百页的纯文本 ,就像玩"大家来找茬"。前10页写的"订单金额=商品总额+运费",后面第80页写的"VIP免运费且打9折",这两条在逻辑上可能冲突,但纯文本很难通过肉眼扫描自动发现。

代价高昂 :这种矛盾通常不会在写文档时被发现,而是在编码阶段 程序员发现写不下去了,或者在测试阶段 测试人员写了两条矛盾的用例,才暴露出来。发现得越晚,改需求的成本呈指数级上升(从改一行字,变成改代码、改数据库、重测)。


三、终极解决方案(IREB的推荐策略):不做选择题,做"组合题"

正是基于上述优缺点,IREB才反复强调(正如你之前学到EU 3.1.4那样):

自然语言用来"定大局、讲人话",图形/形式化模型用来"定细节、堵漏洞"。

使用场景 推荐用自然语言 推荐用模型(如用例图/状态机/类图)
跟业务方确认业务目标 首选(老板只看得懂这个) ❌ 老板看不懂图,会觉得你在炫耀技术
描述系统边界和参与者 ✅ 辅助(写文字说明) 首选(用例图一眼看清谁跟谁交互)
描述复杂的状态流转(如订单生命周期) ❌ 写文字要写好几页,且容易产生歧义 首选(状态机图一张图胜过千言万语)
描述异常处理逻辑(如网络超时怎么办) 首选(用"如果......那么......否则......"说清楚) ❌ 流程图能画,但异常分支太多会导致图极度混乱
作为最终验收的唯一依据 必须要有(合同只认白纸黑字的文字,不认图) 作为附件参考(图表辅助解释文字)

总结一句

自然语言是需求工程的"面子"------它让所有人都能参与对话;模型是需求工程的"里子"------它确保对话的结果没有逻辑漏洞。专业的需求工程师,就是能用自然语言把故事讲圆(确保可理解),再用模型把故事里的每个细节钉死(确保无歧义)的人。 😊

自然语言的效果 1-5

这段内容非常实战,它直接指向需求工程中最棘手的问题:如何把模糊的"人话"翻译成精准的"需求话"

IREB 在这里不是不让你用自然语言(毕竟自然语言最通用),而是给你标出了 "雷区""警戒区" 。你提供的第二段文字(自然语言的效果 1-5)其实是第一段的具体技术拆解,我帮你把它们合并成一张 "避坑与排雷表"


第一类:绝对要避免的"硬伤"(结构性缺失)

这类问题会导致需求逻辑不闭环,读者必须"猜"才能懂。原文归为"需要避免":

1. 不完整的描述 / 未完全规格说明的动词

  • 典型雷句 :"系统应处理用户的订单。"("处理"是个万能筐,到底是指"创建"、"修改"、"删除"还是"发货"?)
  • 技术拆解(对应 5. 未完全规格说明的动词):动词模糊,动作边界不清。
  • 排雷方案 :用原子性的动词代替。改为:"系统应在收到支付回调后,将订单状态由'待支付'更新为'已支付'。"

2. 未指明的名词 / 无参考索引的名词(代词指代不明)

  • 典型雷句 :"系统应将此信息发送给用户。"("此信息"指什么?是订单号?是物流单?还是优惠券?)
  • 技术拆解(对应 2. 无参考索引的名词):名词没有明确的"源头"或"定义"。
  • 排雷方案强制指代 。改为:"系统应将当前订单的物流单号通过短信发送给用户。" 或者引入编号引用:"如 3.2 节定义的'物流信息'。"

3. 不完整的条件 / 未完全规格说明的条件

  • 典型雷句 :"当库存不足时,系统应提示用户。"("库存不足"怎么定义?是等于0,还是小于安全库存线?)
  • 技术拆解(对应 4. 未完全规格说明的条件) :条件缺少阈值判定公式
  • 排雷方案量化边界 。改为:"当商品库存数量 ≤ 0 时,系统应弹出'缺货'提示,并禁止用户提交订单。"

4. 不完整的比较

  • 典型雷句 :"新系统的响应速度应更快。"(比谁快?快多少?跟老系统比,还是跟竞品比?)
  • 技术拆解 :缺少参照物具体度量值
  • 排雷方案设立基准 。改为:"新系统在并发 100 用户时,首页加载速度应比旧系统提升 50%,即 ≤ 1.5 秒。"

第二类:必须小心使用的"软刀子"(语法与结构陷阱)

这类问题不一定会让需求"逻辑错误",但极容易引入歧义难以测试。原文归为"需要小心使用":

5. 被动语态

  • 典型雷句 :"错误信息应被显示。"(被谁显示?系统主动弹窗,还是前端被动渲染?隐藏了真正的执行主体"系统"或"用户"。)
  • 危害:丢失责任分配,导致开发和测试找不到"主语"。
  • 排雷方案主动语态 。改为:"系统应在登录失败时,主动显示错误提示框。"

6. 全称量词(比如"所有"或"从未")

  • 典型雷句 :"所有用户都必须在 5 分钟内完成支付。"(包括黑名单用户?包括测试账号?)
  • 技术拆解(对应 3. 全称量词):绝对的断言往往有例外,测试人员只要找到一个例外,这条需求就被"证伪"了。
  • 排雷方案限定范围 。改为:"除黑名单用户外 ,所有已登录用户必须在 5 分钟内完成支付,否则订单自动取消。"

7. 名词化(即由动词派生的名词,例如:"鉴定"、"验证"、"实施")

  • 典型雷句 :"系统应负责用户身份鉴定。"("鉴定"是动词"鉴定"变来的名词。这句话把动作"怎么鉴定"和动作的结果"谁来做"藏起来了。)
  • 技术拆解(对应 1. 名词化) :名词化使需求静态化,丢失了"谁(主语)对谁(宾语)做了什么动作"的动态信息。
  • 排雷方案还原为强动词 。改为:"系统应验证 (动词)用户输入的密码与数据库中的加密哈希值是否匹配。"

终极记忆口诀(帮你拿下 L2 考点)

把这 7 个雷点串成一句话,考试或写文档时拿出来过一遍:

"描述要完整,条件要量化;

名词要指代,比较要基准;

语态用主动,全称要限定;

名词化动词,统统拉出来!"

总结核心思想

自然语言写需求,靠的是**"把抽象的变具体,把隐藏的变显式"**。不要怕字多,只怕意思飘。每写一句话,问自己一句:"这句话,是否只有一种解释?测试人员能根据这句话写出唯一的通过/不通过判据吗?" 能过关,就是好需求。😊

相关推荐
小马哥编程3 小时前
【需求工程】EU 3.8 制品和需求的质量标准(L1)
需求分析·软件需求
是梦终空7 小时前
计算机毕业设计279—基于SpringBoot+Vue3校园商户意见反馈系统(源代码+数据库+17000字论文+ppt)
数据库·spring boot·vue·毕业设计·课程设计·毕业论文·源代码
2501_948106917 小时前
计算机毕业设计之jsp物业管理系统
java·大数据·开发语言·汽车·课程设计
疯狂打码的少年9 小时前
【软件工程】需求工程:需求获取与需求分析
数据库·笔记·软件工程·需求分析
深盾科技_Virbox1 天前
软件授权工具静默安装实践
java·运维·数据库·安全·软件需求
西山创罪梦不觉2 天前
能源IEMS
能源·需求分析
西山创罪梦不觉3 天前
金属流向重构原理
需求分析
启雀AI5 天前
科技企业如何沉淀研发知识,减少重复开发和经验流失?
大数据·科技·软件需求·知识库·知识管理
2601_962851745 天前
计算机毕业设计之基于SSM的网络安全课程资源分享平台
vue.js·算法·安全·web安全·yolo·目标检测·课程设计