健壮性和鲁棒性的区别——奇怪的知识又增加了

产品经理在需求输出中往往会简单提一句,确保代码的健壮性;后来接触大模型或算法训练后,又会听到鲁棒性。在搜索翻译的时候,发现两者英文翻译竟然都是robustness,奇了大怪。

两者感觉是一样,之所以产生两个专有名词,意味着一定还是有细微的区别;所以,对于产品经理而言,奇怪的知识又增加了。

健壮性

通俗理解健壮性

健壮性是指程序在异常输入或非正常操作的情况下,仍然能够继续运行或提供合理响应的能力。其关注的重点是,程序是否能够在面对错误、异常或不可预期的输入时,避免崩溃或产生严重问题

所以,若要提升健壮性,往往可以通过下面的方式来提升:

  • 处理异常输入的能力(如空值、非法数据等);在需求输出中,产品经理要针对性对一些异常数据(数据类型、数据格式、数据范围等)进行约定。比如用户输入错误(如超出范围的数字、非法字符等)了,系统如何提示或处理;在APP等对于网络较慢或中断等环境变化后的处理等
  • 避免程序崩溃或挂起;这部分更多可能是技术同学来承担,如确保资源的回收、重试机制或兜底机制等
  • 提供清晰的错误提示或日志;这部分也更多是技术同学来负责,便于事后追踪

举一个例子,在这里,如果用户输入了非法字符,程序不会崩溃,而是提示错误,这是健壮性的体现。

try:
    num = int(input("请输入一个数字: "))
    print(f"你输入的数字是: {num}")
except ValueError:
    print("输入错误,请输入一个数字!")

产品经理如何提升健壮性

在产品需求文档(PRD)中,描述和增加以下几类内容可以有效提升系统的健壮性:

  • 异常处理需求:明确系统在遇到异常情况时的处理方式。比如,用户输入错误数据时,系统应提供友好的错误提示;系统应能在网络连接失败时自动重试,并提示用户。
  • 输入验证:规定系统对用户输入的验证规则,以确保输入的有效性。比如,对于电子邮件输入,系统应验证格式是否正确;对于数字输入,系统应限制范围并提示超出范围的错误。
  • 边界条件:列出系统在边界条件下的行为预期。比如,当数据量达到最大限制时,系统应给出相应提示,并确保不会崩溃;对于文件上传,描述最大文件大小及格式限制。
  • 日志记录:规定系统在异常情况下的日志记录要求,以便后续排查。比如,系统应记录所有错误信息,包括时间戳、用户ID和错误类型,便于后续分析。
  • 用户反馈机制:设计用户反馈机制,以便用户能够报告问题或提供建议。比如,提供“反馈”按钮,用户可以方便地反馈遇到的问题。SQL注入和跨站脚本攻击(XSS),并对敏感数据进行加密。
  • 性能要求:设定系统在高负载情况下的性能要求,以确保系统稳定运行。比如,系统应能在用户访问量达到1000的情况下正常响应,不出现延迟或崩溃。

鲁棒性

鲁棒性是指程序或系统在不确定性条件环境变化下,仍然能够保持其功能和性能的能力。关注的重点是,系统在面对外部环境变化(如噪声、参数波动)或部分功能失效时,是否能稳定运行。在一定程度上,鲁棒性不是需求输出范围内可以描述或提升的,更多可能还是技术同学的处理方式,在这里也就不班门弄斧列明产品经理提升鲁棒性的建议方法论。

其更强调系统在复杂环境下的稳定性,通常用于控制系统机器学习分布式系统等领域,与容错性(Fault Tolerance)密切相关。

举一个例子,在自动驾驶系统中,传感器可能会因为天气变化(如雨雪)而受到干扰,但系统仍然需要保持决策的准确性。也比如,分布式系统中的某些服务器宕机,但整体系统仍然能够提供服务。

关系和区别

维度健壮性鲁棒性
定义程序在异常输入或操作下的表现能力。程序在不确定性或环境变化下的表现能力。
关注点异常输入、错误处理。环境变化、系统稳定性。
适用范围更偏向于一般的软件开发和异常处理。更偏向于复杂系统、控制系统或分布式系统。
目标防止崩溃,提供合理响应。保持功能和性能的稳定。
  • 健壮性更注重程序对异常情况和错误输入的防御能力,主要是为了避免程序崩溃。
  • 鲁棒性更关注程序在不确定性条件下的稳定性和适应能力,强调程序的容错性和环境适应性。

两者可以结合起来理解:一个程序可以是健壮的但不一定鲁棒,也可以是鲁棒的但不一定健壮。在实际开发中,通常希望程序既健壮又鲁棒,以应对各种复杂的场景。

滚动至顶部