这是一道典型的测试岗位面试题,但我先给你一个结论:面试官真正想考察的,不是你会不会写 Prompt,而是你有没有把“AI 生成测试用例”当成一个工程流程来管理。
如果你只回答“把 Prompt 写细一点、给 AI 多举几个例子、多迭代几次”,那基本只能拿到及格分。因为这种回答只停留在“点状的提示词技巧”层面,解决不了字段准确性、鉴权覆盖这类系统性问题——AI 生成结果不稳定,换一个模型、换一个上下文长度、换一个业务接口,答案可能完全不同。真正能拉开差距的回答,是展示你有“链路思维”:
AI 生成用例之前,输入端要做什么约束? 生成过程中,如何让 AI 按结构化格式输出? 生成之后,如何用代码自动校验字段和场景覆盖度? 最终交付之前,人工评审环节如何兜底?
这篇文章我准备从面试答题的角度,把这个问题拆成一套可复用的方法论,同时给出一套能直接落地的最小示例,包括字段校验、鉴权覆盖、可执行用例生成三块内容。如果你正在准备测试开发、AI 测试相关岗位,或者团队里正在落地“AI 辅助测试”,这篇文章值得收藏。
1. 先搞清楚面试官到底在问什么
这道题的题干里有两个关键词,决定了回答方向。
第一个是“字段准确”。AI 生成测试用例时,最容易出现的问题就是“看起来合理,但一执行就报错”。比如接口参数类型写错、必填字段遗漏、响应断言字段与实际返回不一致、HTTP 方法写成了大写乱用等。这些问题不是靠“再多问 AI 几次”能解决的,因为大模型本质上是概率生成器,它并不真正理解你的接口契约,它只是根据见过的语料做预测。
第二个是“鉴权覆盖”。这一点比字段准确更深入,它考察的是测试用例有没有做到“基于风险”的覆盖。很多测试人员在 AI 辅助下能快速生成几十条正向用例,但到了鉴权场景,比如未登录访问、Token 过期、低权限角色访问高权限接口、越权操作,反而容易漏掉。而鉴权恰恰是接口测试中最容易出事故、最容易在线上被攻击的地方。
所以面试官提到“鉴权覆盖”时,真正想问的是:
- 你有没有意识到 AI 生成用例的常见失效模式?
- 你能否设计一套机制,让 AI 生成的内容可以被自动校验?
- 你能否把测试用例的质量标准固化成代码,而不是依赖 AI 的“临场发挥”?
- 你是否理解安全测试必须在合法授权、测试环境、最小权限原则下进行?
理解了这一层,你的回答就有了主线:不要跟 AI 的随机性对抗,而是用确定性约束包住它。
这里可以先把面试回答的核心逻辑说出来:高质量 AI 测试用例 = 结构化输入约束 + 强输出格式要求 + 自动化校验兜底 + 人工经验回流。四个环节缺一不可。
2. 为什么“只优化 Prompt”不够用
先把这个问题说透,因为它是后续所有方法论的前提。
从原理上看,大模型生成测试用例的过程,是在给定上下文的前提下,逐个 token 预测最有可能出现的文本。它没有“我理解了这个接口”的推理能力,只有“我见过很多类似接口的测试写法”的记忆与泛化能力。所以它会犯三类典型的错误:
第一类是事实性错误。接口的请求参数名、类型、必填约束、响应字段,这些信息来自接口文档或代码。如果 Prompt 里没有给出准确的接口定义,AI 就会“自由发挥”,编造出根本不存在的字段名。比如真实字段是userName,AI 可能生成name或username。
第二类是逻辑性错误。测试用例之间应该满足业务规则一致性。比如用户创建成功后,再次用同名用户创建应该报错;删除一个不存在的数据应该返回 404 还是 400,这取决于接口设计。AI 只会“模仿”常见的测试用例写法,但每个项目的业务规则不同,它无法保证逻辑自洽。
第三类是覆盖性错误。AI 倾向于生成“正面路径”用例,比如登录成功、查询成功、新增成功。它对边界情况、异常情况、安全场景的覆盖往往不足。因为训练语料里这类用例占比本来就少,模型天然会偏向高频模式。
所以,单纯优化 Prompt 是在解决“如何让 AI 更好地表达”。但 AI 表达正确,不代表测试用例验证逻辑正确,更不代表覆盖度足够。正如你让一个实习生写用例,他写得再认真,如果对业务不了解,依然会漏掉关键场景。AI 的优势是生成速度快、覆盖面广,但劣势也是它没有真正的“理解力”。
系统化质量保障的思路,是承认 AI 的随机性,然后用代码与规则去约束它。这个思路可以类比软件开发中的“防御性编程”:你不能假设调用方一定传对参数,所以要在函数入口做校验。面对 AI,同样不能假设它一定生成正确结果,所以要在生成之后做校验。
下面我们进入正题,给出一套可落地的系统化方案。
3. 系统化质量保障的核心框架:输入端、生成端、校验端、人工端
既然目标是“系统化保障”,那就要把 AI 生成测试用例拆成一条流水线。我把它分成四层:
第一层,输入端约束。在把问题抛给 AI 之前,先把必要的业务知识喂给它。比如接口文档、OpenAPI/Swagger 定义、数据字典、历史测试用例、接口字段约束说明。这一步的目的是减少 AI 的“自由发挥空间”。
第二层,生成端约束。在 Prompt 中要求 AI 按固定的 JSON 结构输出,并且限定可选值范围。比如请求方法只能是 GET/POST/PUT/DELETE,状态码只能是规定的枚举,字段类型只能是 string/integer/boolean/object/array。结构化的输出,是为了让后续自动校验成为可能。如果 AI 输出自由文本,后续程序无法解析,就谈不上质量保障。
第三层,校验端约束。这是整个体系里最关键的环节。用代码对 AI 生成的 JSON 做自动化校验,主要检查两类问题:
- 结构校验:字段是否齐全、类型是否正确、枚举值是否合法。
- 逻辑校验:字段之间是否有矛盾、断言是否符合接口契约、鉴权场景是否覆盖。
只要校验不通过,就让用例回到“重新生成”队列,或者直接丢弃并记录失败原因。
第四层,人工端兜底。即使前两层都自动化了,仍然需要测试专家对用例做业务评审,并将评审结论沉淀为新的约束规则。AI 测试用例的“质量上限”取决于你沉淀了多少规则,而规则会随着项目迭代越来越丰富,形成团队的 AI 测试资产。
为了让你在面试时能讲清楚,我用一张表格展示四层的关系:
| 层级 | 核心任务 | 主要手段 | 解决什么问题 |
|---|---|---|---|
| 输入端 | 提供准确业务语义 | 接口文档、OpenAPI、历史用例 | 减少幻觉与字段编造 |
| 生成端 | 约束输出格式 | JSON Schema、Prompt 强格式 | 让结果可解析、可校验 |
| 校验端 | 自动发现缺陷 | 字段校验、逻辑校验、覆盖度扫描 | 把质量问题从“人眼”变成“代码” |
| 人工端 | 业务兜底与经验回流 | 用例评审、规则沉淀 | 保证业务语义正确、覆盖度补齐 |
有了这个框架,哪怕你没有完整落地经验,面试时也能体现出“从整体设计到细节实现”的系统思维。接下来,我们直接用代码把这四层中可自动化的部分跑通。
4. 实战一:用结构化约束和自动校验守住“字段准确”
字段准确,是整个链路中最容易自动化、也最能体现工程能力的一环。核心思路是:先让 AI 按预设的 JSON 结构输出,然后用 JSON Schema 对输出做校验。如果 AI 输出结果不符合 Schema,说明要么是 Prompt 不够约束,要么是模型能力不足,继续“打回”即可。
下面是一个最小可运行的 Python 示例。为了演示完整性,我会先模拟一段“AI 生成”的测试用例 JSON,再对这份 JSON 做结构校验。
# 文件路径:validate_ai_test_case.py import json from jsonschema import validate, ValidationError # 这一步在真实项目中,应该由 AI 模型返回。 # 这里模拟一份“看似正确”的 AI 输出。 ai_generated_case = { "case_id": "TC-001", "title": "登录接口-正确用户名密码登录成功", "method": "POST", "path": "/api/v1/auth/login", "headers": { "Content-Type": "application/json", "Authorization": "Bearer <token>" }, "body": { "username": "admin", "password": "abc123" }, "expected_status": 200, "expected_fields": { "token": "string", "userType": "integer" } } # 定义测试用例 JSON Schema case_schema = { "type": "object", "required": ["case_id", "title", "method", "path", "expected_status"], "properties": { "case_id": {"type": "string"}, "title": {"type": "string"}, "method": { "type": "string", "enum": ["GET", "POST", "PUT", "DELETE", "PATCH"] }, "path": {"type": "string", "pattern": "^/"}, "headers": {"type": "object"}, "body": {"type": "object"}, "expected_status": {"type": "integer", "minimum": 100, "maximum": 599}, "expected_fields": {"type": "object"} }, "additionalProperties": True } try: validate(instance=ai_generated_case, schema=case_schema) print("字段结构校验通过") print("用例 ID:", ai_generated_case["case_id"]) print("请求方法:", ai_generated_case["method"]) print("请求路径:", ai_generated_case["path"]) except ValidationError as e: print("字段结构校验失败") print("错误位置:", list(e.path)) print("错误原因:", e.message)这里的关键点有两个。
一是required字段。它规定了 AI 输出必须包含哪些顶层字段。如果 AI 漏掉了expected_status,校验会立即失败。实际项目中,required可以定义得比properties更严格,比如不同接口类型需要不同的必填字段。
二是enum和pattern。method的取值被限定为常见的 HTTP 方法,path必须以/开头,这样可以把很多低级的格式错误挡在入库之前。
运行这段代码,预期输出如下:
字段结构校验通过 用例 ID: TC-001 请求方法: POST 请求路径: /api/v1/auth/login如果 AI 把方法写成了Post,或者把路径写成了api/v1/auth/login(缺少开头的斜杠),jsonschema会抛出异常,并在控制台打印具体错误位置。
但结构校验只是第一步,它只能证明格式正确,不能证明业务语义正确。所以在校验端还需要加上逻辑校验。比如:expected_status是 200,而body.password为空,这在登录接口的业务上就是矛盾的(不能拿空密码不断言登录成功)。更通用的做法,是把接口契约放到一个独立的数据集中,让代码校验 AI 生成的用例是否与契约一致。下面是一个简单的契约校验示例:
# 文件路径:contract_validate.py # 假设这是从 OpenAPI 文档中解析出的接口信息 interface_contract = { "path": "/api/v1/auth/login", "method": "POST", "required_params": ["username", "password"], "param_types": { "username": "string", "password": "string" }, "success_status": [200] } def validate_body_by_contract(case_body, contract): errors = [] for param in contract["required_params"]: if param not in case_body: errors.append(f"缺少必填参数: {param}") elif not isinstance(case_body[param], eval(contract["param_types"][param])): errors.append(f"参数类型错误: {param}") return errors # 模拟 AI 输出 ai_body = { "username": "admin" # 注意:这里缺少 password } errors = validate_body_by_contract(ai_body, interface_contract) if errors: print("契约校验失败") for err in errors: print(" -", err) else: print("契约校验通过")在真实项目中,接口契约一般通过 OpenAPI/Swagger 文件自动解析获得,而不是手写。你可以用openapi_python_client或json-schema-for-humans一类的工具,把接口定义统一管理起来。AI 生成每一条用例之后,先跑契约校验,再进入后续流程。
补充说明一下:jsonschema库是 Python 生态里比较常用的 JSON 校验库,如果你的环境里没有安装,可以执行:
pip install jsonschema5. 实战二:用授权矩阵守住“鉴权覆盖”
鉴权相关测试用例的覆盖,是这道面试题的另一个重点。先强调一个边界:鉴权测试必须建立在合法授权、测试环境、最小权限原则下。我们验证的是系统是否正确拦截了未授权访问,而不是帮攻击者分析漏洞利用路径。在面试时能主动说明这一点,会给面试官留下“有安全底线意识”的印象。
鉴权覆盖要解决的核心问题是:AI 生成用例时,默认会假设“登录后所有接口都能访问”。但真实系统的访问控制通常是分层级的,比如匿名用户只能访问公开接口,普通用户可以访问业务接口,管理员可以访问管理接口。如果 AI 生成的用例没有覆盖“越权访问被拒绝”的预期场景,那么这套测试数据的安全价值就很低。
我建议采用“权限角色 × 接口 × 期望状态码”的授权矩阵方式。先定义系统中存哪些角色、哪些接口、每个角色访问每个接口应该得到什么结果,然后让 AI 生成的用例去匹配矩阵,未覆盖的角色接口组合就是缺口。
下面是一个基于纯 Python 实现的授权矩阵校验示例:
# 文件路径:auth_matrix_check.py # 角色定义 ROLES = ["anonymous", "user", "admin"] # 接口列表 INTERFACES = [ "/api/v1/public/info", "/api/v1/user/orders", "/api/v1/admin/users" ] # 期望的访问矩阵,200 表示可以访问,401 表示未认证,403 表示无权限 expect_matrix = { ("anonymous", "/api/v1/public/info"): 200, ("anonymous", "/api/v1/user/orders"): 401, ("anonymous", "/api/v1/admin/users"): 401, ("user", "/api/v1/public/info"): 200, ("user", "/api/v1/user/orders"): 200, ("user", "/api/v1/admin/users"): 403, ("admin", "/api/v1/public/info"): 200, ("admin", "/api/v1/user/orders"): 200, ("admin", "/api/v1/admin/users"): 200 } # 模拟 AI 生成的用例解析结果:记录每个角色访问每个接口的期望状态码 ai_cases = [ ("anonymous", "/api/v1/public/info", 200), ("anonymous", "/api/v1/user/orders", 401), ("user", "/api/v1/user/orders", 200), ("user", "/api/v1/admin/users", 403), ("admin", "/api/v1/admin/users", 200) ] # 将 AI 用例转成集合,方便判断 covered_cases = set() for role, path, status in ai_cases: covered_cases.add((role, path, status)) print("==== 授权矩阵覆盖检查 ====") for (role, path), expected_status in expect_matrix.items(): actual_statuses = [ case_status for r, p, case_status in ai_cases if r == role and p == path ] if not actual_statuses: print(f"[缺失] 角色={role}, 接口={path},没有任何用例覆盖") elif expected_status not in actual_statuses: print(f"[不匹配] 角色={role}, 接口={path},期望状态={expected_status},实际用例状态={actual_statuses}") else: print(f"[已覆盖] 角色={role}, 接口={path},期望状态={expected_status}")运行结果会直观显示哪些组合缺失或不符合预期。有了这个矩阵,你就能在面试中说:我不仅让 AI 生成用例,还会用代码扫描 AI 生成结果的覆盖缺口,而不是靠人眼一条一条看。
实际落地时,矩阵不应由测试人员手工硬编码,而是从权限设计文档或代码中提取。常见的做法是:
- 在测试环境维护一份“角色-资源-权限”关系表;
- 通过数据驱动的方式,把关系表注入校验程序;
- 当 AI 生成一批用例后,自动执行矩阵比对;
- 将缺失的“角色 × 接口”组合重新喂给 AI,要求它补齐。
还需要强调的是,鉴权测试用例的“预期结果”要区分两类:一类是未认证请求被拒绝(401),一类是已认证但权限不够的请求被拒绝(403)。AI 经常把这两类混为一谈,这也是校验时需要特别注意的地方。
另外,敏感接口不应只覆盖正向的“鉴权失败”场景,还应覆盖 Token 过期、Token 被篡改、低权限角色携带高权限角色 Token 等场景。这些场景风险高,但 AI 自发生成的频率很低,属于典型的“规则提醒”内容,可以在生成前通过 Prompt 中的约束列表提示 AI。
6. 实战三:从 AI 生成结果到可执行用例的闭环
字段校验和授权矩阵,解决了“怎么判断质量”的问题。但测试用例最终要能执行,否则质量再好也只是文档。这一节,我们把 AI 生成结果转成可执行的 pytest 用例,从而打通“生成 → 校验 → 执行 → 报告”的闭环。
先设计一个简单的用例结构,AI 输出的是 JSON,我们把它写到一个文件里:
// 文件路径:generated_cases.json [ { "case_id": "AI-001", "title": "登录接口-正确用户名密码登录成功", "method": "POST", "path": "/api/v1/auth/login", "headers": { "Content-Type": "application/json" }, "body": { "username": "admin", "password": "abc123" }, "expected_status": 200 }, { "case_id": "AI-002", "title": "登录接口-未登录访问用户订单返回401", "method": "GET", "path": "/api/v1/user/orders", "headers": {}, "body": {}, "expected_status": 401 } ]然后编写 pytest 用例,读取 JSON 并动态执行:
# 文件路径:test_ai_generated_cases.py import json import pytest import requests # 测试环境地址,按实际项目修改 BASE_URL = "https://test.example.com" def load_cases(): with open("generated_cases.json", "r", encoding="utf-8") as f: return json.load(f) def test_generated_api_cases(): cases = load_cases() assert len(cases) > 0, "AI 生成的用例为空" for case in cases: url = BASE_URL + case["path"] headers = case.get("headers", {}) body = case.get("body", {}) method = case["method"].upper() # 请求前打日志,方便排查 print(f"执行用例: {case['case_id']} - {case['title']}") if method == "GET": resp = requests.get(url, headers=headers, params=body) elif method == "POST": resp = requests.post(url, headers=headers, json=body) elif method == "PUT": resp = requests.put(url, headers=headers, json=body) elif method == "DELETE": resp = requests.delete(url, headers=headers) else: pytest.fail(f"不支持的请求方法: {method}") assert resp.status_code == case["expected_status"], ( f"用例 {case['case_id']} 失败: 期望状态码 {case['expected_status']}, " f"实际状态码 {resp.status_code}, 响应内容: {resp.text[:200]}" ) print(f"用例 {case['case_id']} 通过, 状态码 {resp.status_code}")运行命令:
pytest test_ai_generated_cases.py -v预期输出类似:
collected 1 item test_ai_generated_cases.py::test_generated_api_cases 执行用例: AI-001 - 登录接口-正确用户名密码登录成功 用例 AI-001 通过, 状态码 200 执行用例: AI-002 - 登录接口-未登录访问用户订单返回401 用例 AI-002 通过, 状态码 401 PASSED这个示例说明了一个关键点:一旦 AI 输出是结构化 JSON,那么编写执行器、断言器、报告器都是可复用的通用逻辑。AI 生成用例之后,核心质量保障动作都发生在执行器的“入场校验”和“执行断言”阶段。字段错误、鉴权缺失,都能在执行前或执行中被发现,而不是等到上线之后。
生产环境中,你还可以把这个流程接入 CI,比如在 Jenkins/GitLab CI 里新增一个 stage:
# 文件路径:.gitlab-ci.yml 片段 stages: - test ai-test: stage: test script: - python validate_ai_test_case.py - python contract_validate.py - python auth_matrix_check.py - pytest test_ai_generated_cases.py -v --junitxml=report.xml artifacts: paths: - report.xml这样,AI 生成用例、字段校验、契约校验、鉴权覆盖扫描、执行测试就形成了一个完整的自动化流水线,任何一环失败都能及时暴露问题。
7. 面试现场的高分回答思路
方法和技术点都已经聊完,最后再回到面试本身,给你一套可以直接借鉴的回答结构。
面试官问完这道题后,你可以分三步回答:
第一步,先澄清问题的本质。你可以这样说:
“我认为这道题的核心,不是怎么让 AI 把用例写得更好,而是怎么把 AI 生成结果纳入一套可校验的工程流程。因为 Prompt 优化解决的是生成质量的上限,但下限要靠结构和自动化来兜底。我会从输入端、生成端、校验端、人工端四个层面来保障。”
这个开篇直接体现了你对问题的理解层次。
第二步,按链路展开细节。结合你项目中的真实做法,依次说明:
- 输入端:把 OpenAPI 文档、接口契约、历史用例喂给 AI,让它基于事实生成,而不是基于想象生成。
- 生成端:要求 AI 输出标准 JSON,并定义 JSON Schema 约束字段、类型、枚举值。
- 校验端:编写字段校验和契约校验脚本,自动发现参数缺失、类型错误、状态码异常;再通过授权矩阵检查鉴权覆盖度。
- 人工端:测试负责人做业务评审,评审出来的问题反哺到 Prompt 模板和校验规则中,形成正向循环。
第三步,用数据或案例佐证。如果实际项目中遇到过一个典型的 AI 生成用例缺陷,比如“AI 漏掉了未登录访问 401 的用例”或者“AI 把字段名从小驼峰写成了下划线”,可以拿出来讲,说明你是真实踩过坑的。面试官最在意的不是你有完美方案,而是你有没有基于问题的反思和迭代。
整体回答时长控制在 3 到 5 分钟比较合适。核心是展示你不仅了解 AI 辅助测试的价值,更清楚它的边界和风险,并且有能力用工程手段控制这种风险。
8. 常见问题与排查思路
在实际落地这套方案的时候,很多团队会遇到类似问题,我整理了一份排查清单:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| AI 生成的用例字段名经常错 | Prompt 中未提供接口文档或数据字典 | 检查 Prompt 是否附带了 OpenAPI 定义 | 将接口文档解析后注入 Prompt,并在校验端使用契约校验 |
| 输出 JSON 无法解析 | Prompt 没有强制输出格式,AI 返回了自然语言 | 查看生成日志中的原始输出 | 在 Prompt 中明确“只输出 JSON,不要解释”,并增加格式校验 |
| 鉴权场景覆盖严重不足 | 仅为 AI 提供了接口地址,没有给出角色权限矩阵 | 统计已生成用例的角色接口分布 | 建立授权矩阵并新增覆盖度扫描脚本 |
| 部分用例执行时状态码与预期不符 | 测试环境数据不稳定或接口契约有误 | 核对测试数据、环境配置、接口最近变更 | 先排查环境与数据,再确认契约是否过期 |
| 校验脚本本身报错 | 依赖库版本问题或 JSON Schema 编写不规范 | 查看校验脚本的错误堆栈,单独执行单条用例 | 统一依赖版本,先在本地用最小数据验证 Schema |
这里要特别提醒一点:不要直接在生产环境执行 AI 生成的测试用例。AI 生成内容可能包含错误的请求体或异常路径,所有用例都应该在测试环境跑通并经过评审后,才考虑纳入生产验证。测试环境的鉴权测试也应使用专用测试账号,遵循最小权限原则。
另外,字段校验通过不等于用例有效。有些接口的字段之间有业务依赖,比如创建订单时goodsId和skuId必须同时存在,这类规则无法用简单的 JSON Schema 表达,需要沉淀在逻辑校验函数里。逻辑校验函数建议独立维护,并且随着业务迭代持续补充。
9. 工程实践建议:从“能用”走向“好用”
如果你已经决定在团队里落地这套方案,我建议按照下面几个阶段推进,避免一次性铺太开导致失败。
阶段一:固定输出格式。这是所有自动化校验的前提。先不管 AI 生成用例的质量有多高,强制它输出标准 JSON,并建立 JSON Schema 校验。没有这个基础,后续的契约校验、矩阵扫描都是空谈。
阶段二:接入接口契约。能力足够时,将 OpenAPI 文档解析与生成链路打通。AI 生成用例时自动携带接口定义,生成后自动做契约校验。这一步完成后,字段准确性的问题能解决大半。
阶段三:建设授权矩阵。这是鉴权覆盖的关键。先在小范围(比如登录、订单、用户管理三类接口)建立角色权限矩阵,让 AI 按矩阵生成用例,然后再扩展范围。矩阵本身要维护成数据文件或数据库表,不能写在零散脚本里。
阶段四:人工评审闭环。自动化校验能过滤大量低级问题,但业务语义正确性必须靠人工。建议每周或每个迭代做一次 AI 用例评审,把评审发现的问题转化回 Prompt 模板、校验规则、矩阵定义三处。要让团队里的每个人都能往这套体系里“贡献规则”,而不是只有测试负责人掌握。
阶段五:逐步扩大场景。从登录、注册等公共服务开始,扩展到核心业务接口,再到跨模块的链路用例。链路用例的生成难度更高,需要给 AI 提供上下文连续性,可以把前序接口的响应关键字段提取出来传给后序接口,但这属于进阶能力,不必在初期就追求。
这套实践路径,核心思路是“先用代码守住下限,再靠人工不断提升上限”。AI 生成测试用例的真正价值,在于把测试人员从重复的“写用例”中解放出来,把精力放到评审、设计复杂场景、建设校验规则上。
如果你的团队已经把 AI 测试用例如是沉淀,我建议后续从两个方向继续深入:一是基于 RAG 的方式检索历史缺陷和相关用例,让 AI 在生成时有更强的业务上下文;二是基于 Agent 的方式让 AI 自主执行用例、分析失败原因并修复用例。当前面的校验体系足够稳定后,这两个方向都能在现有基础上平滑演进。