在计算机科学中,稳健性()是指一个计算机系统在執行过程中处理错误,以及算法在遭遇输入、运算等异常时维持正常運行的能力。IEEE标准610.12-1990将稳健性定义为“系统或组件在存在无效输入或压力环境条件下仍能正确运行的程度”。正式化技术如模糊测试通过制造错误或不可预期的输入来验证程序的稳健性。故意故障注入也可用于测试系统的稳健性。此外,稳健性还涵盖防御性编程、稳健机器学习以及稳健安全网络等广阔领域。
简介
构建稳健的计算系统面临根本性困难:可能的输入及其组合数量极其庞大,开发者无法穷举测试所有情况。因此,开发者通常采用泛化策略——例如将整数输入抽象为负数、零和正数三个代表性用例进行测试。这种泛化方法虽然提高了测试效率,但也增加了遗漏异常的风险。
稳健的系统应当优雅地处理所有可能遇到的错误。一些最成功的稳健系统具有可演化性,能够轻松适应新的情境。其核心原则包括:
*偏执:程序员假设用户会试图破坏代码,也假设自己的代码可能失败或工作不正确。
*错误:程序员假设用户会输入错误、虚假或畸形格式的输入,因此应返回清晰直观的错误提示,无需用户查询错误代码。
*危险工具:用户不应接触到底层库、数据结构或指针,以防意外修改引入缺陷。程序设计应提供正确的接口,用户无需也無法修改底层实现。
稳健网络设计
稳健网络设计研究在需求可变或不确定的情况下进行网络设计。与软件设计类似,由于可能的变更或输入组合极其广泛,网络设计中的稳健性同样是一个宽泛的课题。
稳健算法
存在可容忍输入中错误的算法,它们能够识别关键的输入区域并保证在有限偏差下输出正确结果。
参见
- 防御性编程
- 非功能性需求
- 容错
参考文献
评论 (0)