检查点练习

检查点练习 (8题)

#practice #testing #debugging

相关概念

📌核心模式(点击查看)
关键词 答案
BREAK-POINT 无条件,启动调试器
ASSERT 有条件,条件为假时转储
LOG-POINT 仅记录,必须有 ID
检查点组 SAAB 事务,激活/停用
断言状态 不活跃、中断、记录、中止

第1题 - 检查点类型 [记忆]

说出三种检查点类型及其主要特征。

📌点击查看答案
类型 语句 激活时的效果
断点 BREAK-POINT [ID grp] 中断程序,启动调试器
断言 ASSERT [ID grp] condition 条件为假时:根据组设置转储/中断/记录
日志点 LOG-POINT ID grp [FIELDS ...] 写入检查点组日志;从不中断

第2题 - ASSERT 语法 [记忆]

ASSERT 条件评估为假且没有分配检查点组时会发生什么?

📌点击查看答案
没有检查点组(ASSERT condition)时,断言始终激活且无条件的。如果条件为假,立即产生运行时错误(转储) – 程序以 ASSERTION_FAILED 短转储终止。

第3题 - 检查点组 [记忆]

如何创建和配置检查点组?

📌点击查看答案
  1. 在对象导航器或事务 SAAB 中创建
  2. 输入名称(必须在客户命名空间中,如 ZBC402_##
  3. 添加描述性短文本
  4. 保存
  5. 为每种检查点类型配置激活状态:
    • 断言:不活跃 / 中断 / 记录 / 中止
    • 断点:不活跃 / 中断
    • 日志点:不活跃 / 记录

第4题 - 断言 vs 异常 [分析]

何时应使用 ASSERT,何时应抛出异常?

📌点击查看答案
方面 ASSERT 异常
用途 验证关于程序状态的假设 处理意外但可能的情况
激活时机 开发/测试(可在生产中停用) 始终激活
恢复 无恢复(转储/中断) 可被捕获和处理
使用场景 “这不应该发生” “这可能发生,需要处理”

断言验证内部正确性(如私有方法中的参数验证)。异常处理运行时条件(如文件未找到、数据库错误)。


第5题 - 静态 vs 可激活断点 [应用]

在生产代码中使用 BREAK-POINT(不带 ID)有什么风险?如何预防?

📌点击查看答案
BREAK-POINT 不带 ID 始终激活 – 它会中断在生产环境中执行程序的任何用户,造成干扰。预防方法:
  1. 改用 BREAK-POINT ID checkpoint_group(可停用)
  2. 传输前运行扩展程序检查 – 它将静态断点标记为错误
  3. 发布传输前始终移除 BREAK-POINTBREAK username 语句

第6题 - LOG-POINT 要求 [记忆]

LOG-POINT 有什么是其他检查点类型可选的强制性要求?

📌点击查看答案
LOG-POINT 必须始终ID group 附加项。与断点和断言不同,日志点不能在没有检查点组的情况下使用。因为日志点没有独立行为 – 它们仅在检查点组激活时产生输出。

第7题 - FIELDS 附加项 [应用]

你想在日志点到达时记录 lv_flight_date 的值。写出语句。

📌点击查看答案
1
LOG-POINT ID zbc402_check FIELDS lv_flight_date.

FIELDS 附加项将指定数据对象的内容存储在检查点组的日志中。最多可指定 8 个数据对象。引用变量不能被记录。


第8题 - 方法设计中的断言 [分析]

一个方法 find_item 接收一个键参数并从内表中读取。设计两个断言:一个在入口,一个在出口。

📌点击查看答案
1
2
3
4
5
6
7
8
9
METHOD find_item.
" 入口断言:验证键在有效范围内
ASSERT item_key >= 1 AND item_key <= LINES( item_table ).

READ TABLE item_table INTO result WITH KEY table_key = item_key.

" 出口断言:验证找到了结果
ASSERT result IS NOT INITIAL.
ENDMETHOD.

入口断言验证调用者的输入。出口断言验证方法自身的结果。两者共同确保方法的契约被满足。


📌模式总结(点击查看)
关键词 答案
BREAK-POINT 无条件启动调试器
ASSERT 条件为假 无组时转储;有组时可配置
LOG-POINT 必须有 ID,从不中断
SAAB 检查点组维护事务
断言状态 不活跃/中断/记录/中止
FIELDS 记录数据对象(最多8个,不含引用)
断言 vs 异常 验证假设 vs 处理意外