让技术人员看得懂的流程(2)——用例模型

本文解析了用例模型在软件开发中的应用,强调了其在需求分析阶段的重要性,并通过POS机的例子详细阐述了如何正确地使用用例模型。同时,文章还讨论了用例模型与系统功能的区别以及系统顺序图(SSD)的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                    让技术人员看得懂的流程(2

                         ——用例模型

一般的管理流程都将软件项目划分为“需求->分析->设计->实现->维护”,对应的技术流程中首先也肯定是要将需求明确,而“用例模型”就是用于获得和分析需求的。

简单来说,用例模型就是要将客户的需求写下来。“需求”不是很好理解,更加通俗的讲法是“故事(story)”。我觉得“故事”这个词非常好,非常形象,非常容易理解!我们看看为什么“故事”更加容易适合说明客户要求:

1)故事中有很多角色,而需求中也有很多角色;

2)故事有具体的经过,有开始、进行、结束;而需求也是一个完整的流程,有输入、处理、输出。

3)故事必须有意义,而需求对客户来说,也是必须有意义的;

 

具体的用例格式等这里就不详细描述了,大家上网搜索一下就知道了,如何更好的把握需求可以参考我的博文需求分析的故事——如何练就需求分析的火眼金晴?,下面我把用例模型阶段容易犯的错误重点说明一下。

1)“需求”和“功能”混淆

很多朋友在分析需求的时候,将“功能”和“需求”混淆起来,导致了需求的粒度不合理,或者把握不住重点的需求,我总结出一个很简单的区分办法:“需求是对客户有价值的东西,功能是为了实现需求而作的东西”。

POS机为例:对于客户来说,“买单”是一个有价值的东西,因为客户买完单就可以把商品拿走了;而买单过程中的“读商品条形码”、“计算商品总额”、“打印购物清单”等都是功能,因为它们当中任何一个独立的功能对客户没有价值(你不会跑到超市“读商品条形码”玩吧:-P),只是为了实现“买单”而做的。

2)在用例模型阶段进行系统分解

除了容易将“功能”和“需求”混淆外,用例模型阶段还有一个常见的错误就是在用例模型阶段对系统进行分解。

POS机为例,有的人将需求描写为:扫描机扫描商品条形码信息,然后将信息发给库存系统,库存系统返回详细的商品信息给交易系统……在用例模型阶段这样做是不对的,因为这样转移了我们的注意力:从关注用户需求转到了系统分析了。

记住:用例模型关注的是用户需求,不需要进行系统分解,把系统当做一个黑盒看待就可以了

 

下面我们给出POS机一个简单的用例片段,有兴趣的可以自己写一个完整的(这个完整的可不简单哦,至少可以写3页):

1)顾客携带商品到收银台;

2)收银员扫描商品条形码;

3)系统根据条形码获取并显示商品信息;

4)收银员重复2~3步,直到所有商品扫描完毕;

5)系统计算商品总额;

。。。。。。。。。。。。。。。。。。。。

n)系统打出商品清单,完成交易。 

===================2010.03.20补充==================

(经过garrodran99的提醒,补充SSD(系统顺序图)的内容,在此感谢garrodran99

SSD即系统顺序图,目的就是站在系统的角度,以UML的顺序图来描述系统与“外部实体”(包括人、其它系统、输入输出设备)的交互过程,简单来说就是“图形化的用例”。

那为什么有了文字化的用例文档,还要图形化的SSD呢?其实很简单:字不如表,表不如图,因为图可以一目了然的看出交互过程。

可能有的朋友又要问了:既然图那么好,还要文字描述的用例做什么呢?有两个原因:第一个是客户不会用UML给你描述需求,客户只会用自然语言描述需求;第二个就是图形的优点是简洁、一目了然,但图形的缺点就是不能承载太多信息,详细和丰富的信息还是要文字来承载。

用一句话总结就是:交互用图形,说明用文字!

那么,是否一个用例就要写一个SSD呢?基本上不需要,因为SSD重点在描述系统的交互过程,如果用例本身没有什么交互、或者交互很少或者很简单,就不需要SSD。只有主要的、复杂的用例才需要SSD。

<think>嗯,用户这次的问题很聚焦——"测试用的AI续写",而且特意引用了两篇关于AI写作和通义灵码的资料。看来用户对AI如何具体实现测试用生成很感兴趣,可能是个开发者或测试工程师,正在评估这类工具的实际价值。 从引用内容看,用户摘录了通义灵码"毫秒级生成测试代码"的特点,还提到"上下文预测"和"语言识别"能力。这提示我需要重点解释技术原理而不仅是功能描述。用户上次的提问涉及测试用续写的原则和示,这次明显想深入技术层。 技术上需要分三块回应:首先是模型如何理解代码上下文(NLP解析),然后是生成逻辑(基于模式匹配和概率预测),最后是边界处理(异常流覆盖)。用户提供的引用[2]里提到"准确率和覆盖率",这点必须量化说明——比如用代码行覆盖率或分支覆盖率指标。 注意到系统指令要求严格使用LaTeX格式,所有数学表达式都要规范。在解释模型预测概率时得用$P(t|c)$表示条件概率,分析代码覆盖率时用$Coverage_{branch} = \frac{executed}{total}$这类公式。 用户可能还隐含对比需求:人工写测试用和AI生成的优劣。需要强调AI在重复模式(如参数化测试)上的效率,同时说明人工校验的必要性——这点在引用[2]的"准确率"描述里其实埋了伏笔。 最后生成的示代码要选典型场景。用户上次用了Python的unittest示,这次延续风格但展示更复杂的链式调用测试,体现上下文理解能力。边界值测试用负数/零/超大值组合,直接呼应之前讨论的边界分析原则。</think>基于AI的测试用续写技术主要依赖自然语言处理(NLP)和生成模型,通过理解代码上下文和测试需求自动生成高覆盖率的测试用。以下是核心实现原理和步骤: --- ### **AI续写测试用的技术原理** 1. **代码上下文解析** - 利用预训练模型(如CodeBERT、Codex)解析被测代码的语法结构、函数签名、依赖关系 - 提取关键元素:输入参数类型、返回值、异常处理逻辑、边界条件标记(如`@Max(100)`) - 数学表达示: 设函数$f(x)$的输入域为$[a,b]$,则边界值可表示为: $$B = \{a, a+\epsilon, \frac{a+b}{2}, b-\epsilon, b\} \quad \epsilon \to 0^+$$ 2. **测试模式识别** - 识别常见测试模式(如`null`检查、边界值测试、异常流测试) - 分析相似项目的测试用库建立模式库 - 示模式匹配: ```python # 检测到函数包含除法操作 if '/' in code: generate_test(zero_division=True) # 自动生成除零异常测试 ``` 3. **基于概率的用生成** - 使用Transformer解码器预测最可能触发分支的输入组合 - 通过约束采样确保覆盖所有条件分支: $$P(\text{test_input}|c) = \prod_{i=1}^{n}P(t_i|c,t_1...t_{i-1})$$ 其中$c$为代码上下文,$t_i$为测试输入元素 --- ### **实战示:登录功能测试续写** **原始代码片段**: ```python def login(username: str, password: str) -> bool: if len(username) < 6: raise ValueError("用户名至少6位") return db.verify(username, password) ``` **AI续写结果**: ```python # 边界值测试 def test_short_username(): with pytest.raises(ValueError, match="至少6位"): login("user", "pass123") # 5字符用户名 # 异常流测试 def test_wrong_password(mocker): mocker.patch('db.verify', return_value=False) assert not login("valid_user", "wrong_pass") # 空值测试 def test_empty_input(): with pytest.raises(TypeError): login(None, None) # 触发类型检查 ``` > 注:通义灵码等工具可在0.5秒内生成此类用,分支覆盖率提升40%+[^2] --- ### **关键技术挑战** 1. **语义一致性** - 需解决"幻觉生成"问题(如为不存在的参数生成测试) - 解决方案:增强代码-文本对齐训练,采用检索增强生成(RAG) 2. **复杂依赖处理** - 当被测代码依赖外部服务时,AI需自动插入Mock对象 - 示:检测到`@Autowired`注解时生成`MockBean` 3. **边界值优化** - 结合符号执行技术推导边界条件: ```python # 对条件 len(x)>5 自动生成: x = 5 # 边界值 x = 6 # 有效值 x = 10**6 # 超大值测试 ``` --- ### **最佳实践建议** 1. **迭代优化提示词** ```python # 有效提示词结构 "生成3个测试用,覆盖: 1. 所有异常分支 2. 边界值(使用等价类划分) 3. 包含发安全测试" ``` 2. **覆盖率引导生成** <img src="path/to/coverage_feedback.png" width="400"> *图:AI根据实时覆盖率报告补充缺失用[^1]* 3. **人工校验重点** - 验证业务规则约束(如"VIP用户折扣率上限30%") - 检查敏感数据安全处理 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值