打印

浅谈“鲁棒性”

[复制链接]
13877|62
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序匠人|  楼主 | 2008-1-21 23:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N年前,匠人曾经在“侃单片机”论坛里发起过一次关于软件抗干扰的讨论。其实,当时的讨论基本上已经达到了软件所能做的一切范畴。但是随后,讨论的方向逐渐转向了“软件抗干扰是否有实际意义”上去了。虽然匠人**认为软件在抗干扰方面可以有所作为。但是,来自反面的意见,也让匠人深思了许久。

世纪轮回。这次,由emailli网友发起的“建议做为2008年1月的专题----软件抗干扰的方法研究 ”,又把当年的讨论场景再现。别具意味的是,对软件抗干扰本身的置疑也被再次提出。

从某种意义上来说,随着单片机硬件抗干扰性能的越来越完善。软件在此方面的用武之地,似乎确实在萎缩。试问又有几个单片机程序中应用到了软件陷阱呢?比例恐怕很小吧。

然而,匠人最近有事没事,经常喜欢在同事面前卖弄这个词——“鲁棒性”。

鲁棒性
robust
[rEJ5bQst]
adj.
强壮的;健壮的
His robust strength was a counterpoise to the disease.
他身体强壮抵住了这疾病。
粗野的,不文雅的(玩笑)


什么叫“鲁棒性”呢?按匠人的理解,就是,你的程序是否把所有的因素(包括异常因素)都考虑进去了,并且对可能的异常因素采取的规避、补救措施。比如:

1、我们要让一个变量做递增运算,每次+1,达到某一个阀值时清零。那么你在做阀值判断时,是判“等于”,还是判“大于等于”?(正确答案:判“大于等于”)

2、我们要根据一个变量去查表,或散转,假设这个变量正常范围=0~7。那么你有没有考虑过,如果该值大于7后,程序该怎么办? (答案:先屏蔽(剔除)无效值,再去查表,或散转)

3、我们要让某个IO口输出“高电平”去驱动外部电路(比如说,继电器)。那么你是否只输出一次“1”就认为完事了?(答案:开辟输出缓存,定期刷新输出口)

4、串口接收数据,假设收到“0X00”时执行动作A,收到“0X01”时执行动作B。那么,你有没有考虑过,如果收到的是其他数据,该怎么办?(答案:参考第2例)

这样的例子不胜枚举,每一个细节中都存在陷阱。如果在程序设计中予以考虑,则可以规避;否则,很难说你的程序运行过程中会发生什么事情。

因此,一个好的程序,定义应该如此:“在正常情况下,可以得到正常的结果;在异常情况下,可以得到意料中的结果

而不是:“在正常情况下,可以得到正常的结果;在异常情况下,得到不可意料的结果。

匠人的一些同事(新手)往往会跟匠人来犯犟。强调曰:“我的程序没有BUG啊,是输入不正常导致的。”,云云。确实,这些细节上的疏忽,不能称为BUG。我们只能称之为“鲁棒性”差!

再扩展开来看,在整个系统中,不光是软件需要考虑“鲁棒性”,硬件也同样需要考虑。

举个例子:假设系统工作电压为5V,那么当电压低于5V时,会发生什么事情?考虑过吗?OK,你说你有复位电路,电压跌落时会复位。那么匠人再问:电压快速跌落时可以复位,但如果电压缓慢下降,你的复位电路还能正常工作吗?或者,电压波动时,又会如何?

这样的细节还有很多,贯穿在整个设计过程中。对于有准备的人来说,只要事先预想到了并采取规避措施,都不是问题。对于没有准备的人来说,调试将是一场艰苦的跋涉。因为前进的道路上,“坑”太多了,指不定在哪里跌倒。

以上,为匠人信口开河。欢迎探讨。

相关帖子

沙发
农民讲习所| | 2008-1-21 23:17 | 只看该作者

俺讲究的FMDA:失效模型

使用特权

评论回复
板凳
sz_kd| | 2008-1-21 23:26 | 只看该作者

晕,就是容错性

使用特权

评论回复
地板
程序匠人|  楼主 | 2008-1-21 23:34 | 只看该作者

转~~~

鲁棒是Robust的音译,也就是健壮和强壮的意思。 
鲁棒性(robustness)就是系统的健壮性。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持某些性能的特性。根据对性能的不同定义,可分为稳定鲁棒性和性能鲁棒性。以闭环系统的鲁棒性作为目标设计得到的固定控制器称为鲁棒控制器。

使用特权

评论回复
5
程序匠人|  楼主 | 2008-1-21 23:42 | 只看该作者

“鲁棒性”包含了“容错性”、“稳定性”等内涵

但似乎又有点不尽然。其中味道,全凭个人感觉。

使用特权

评论回复
6
dudongdao| | 2008-1-22 01:02 | 只看该作者

有道理~~

   

使用特权

评论回复
7
dld2| | 2008-1-22 08:11 | 只看该作者

同意,这就是软件该做的事

使用特权

评论回复
8
平常人| | 2008-1-22 08:30 | 只看该作者

楼上说的不准确,应该说这是写软件的人应该做的事

程序员应该在写软件时预计到所有可能的事件并很好地处理;“预计到所有可能的事件”有两层含义,一是预计到所有可能的干扰事件并有效地识别和屏蔽它们;另一层含义是预计到所有可能应该做的事,因此剔除所有不应该做的事。

使用特权

评论回复
9
mohanwei| | 2008-1-22 08:46 | 只看该作者

这个是系统性的,不能简单分为软件、硬件……


使用特权

评论回复
10
Swd21ic| | 2008-1-22 08:59 | 只看该作者

~~~

匠人所说的东西估计很多人也做了一部分.

但我有时候总发现,这样做不仅加重了开销,有时对一些异常处理.

虽然在某一层次上做了一部分工作.却没什么实质效果,如果对每一种异常都去考虑,那么增加的内容可能比代码还多.

如某个函数的输入异常时返回,输入正确时返回1(假设内部ok).

但大多在调用这个函数是确没有把它放在一个if()或者while()里.

或者说上面那个层的调用,根本就不是同一个程序员来写的.

使用特权

评论回复
11
dld2| | 2008-1-22 09:19 | 只看该作者

Re10F

每个子系统(或模块)在自己的层面,对输入进行预处理:
    检查输入数据的合法性、是否超出取值范围等。
    数据滤波之类的处理。

返回值可能得不到处理,但是至少子系统内部应避免因为错误的输入导致无法预知的后果。
这样可以把错误限制在局部,debug也容易些。

同意代码会变长,甚至异常处理代码远超过正常处理代码。嘿嘿。

使用特权

评论回复
12
救火车| | 2008-1-22 09:26 | 只看该作者

就是这个意思

还是领导说得好。

使用特权

评论回复
13
yxbo159| | 2008-1-22 09:42 | 只看该作者

前来学习中。。。

使用特权

评论回复
14
goothin| | 2008-1-22 10:37 | 只看该作者

这是设计人员应该考虑的问题

使用者不是按你的操作而操作,有可能误操作;
环境也不会因你设计而更改,你的设计要最大考虑这些;
特别是在软件上,因为在软件上不会增加多在的成本。

使用特权

评论回复
15
一朝成名| | 2008-1-22 10:49 | 只看该作者

这个问题争论很多年了

还是各有各的理,管他叫什么呢

自己用着好用,项目不出问题怎么地都行

使用特权

评论回复
16
AIRWILL| | 2008-1-22 12:15 | 只看该作者

to: 2楼

 是 FMEA ,这是在汽车行业(当然还有其他)普遍使用的方法

FMEA (Failure Mode and Effect Analysis) 是先期质量策划中评价潜在失效模式及其起因的一种工具

主要目的是发现、评价产品/过程中潜在的失效及其后果
  找到能够避免或减少这些潜在失效发生的措施

使用特权

评论回复
17
gyt| | 2008-1-22 13:35 | 只看该作者

看看

使用特权

评论回复
18
wuxi_stl| | 2008-1-22 15:00 | 只看该作者

尽可能的考虑各种可能面对的情况,风险分析,呵呵

使用特权

评论回复
19
lsqdesign| | 2008-1-22 16:26 | 只看该作者

想办法让系统不出错或少出错才比较靠得住

以前在内地工厂搞过工控,软件的方法提高系统的健壮性是有些用处,但不可能解决太大的问题.
 比如搞过一个工厂热处理的控温,旁边厂房的大中频炉一工作,整个厂区的电压都要抖几抖.这个时候软件陷阱呀,ram 3选1 取反决策呀都不行.最后加了交流稳压器,再用两级直流稳压,才算搞定.
 个人感觉软件处理异常提高系统的健壮性是在错误出现后尽量弥补,这只能作为一个铺助手段.想办法让系统不出错或少出错才比较靠得住.

使用特权

评论回复
20
wxj1952| | 2008-1-22 18:42 | 只看该作者

软件系统的“鲁棒性”是翻译错误。

   “鲁棒性”不是计算机专业的专业名词。

“鲁棒性”这个词,早在计算机问世之前就有了。它主要用于描述自控系统中一个闭环系统的控制稳定性。例如舰船的陀螺平台(专业名词叫什么忘了),导弹的导航陀螺平台等等。过去的控制系统是用运算放大器电路(模拟电路)组合实现的,什么反馈/放大因子,补偿、衰减、振荡、消振电路(我不太懂)等等的各种模块电路拼起一个自动控制系统。所以一说“鲁棒”,就让人想起一堆粗笨的“铁家伙”在那缓缓地摆动,——有差调节控制。机械专业的学生绝对比计算机专业的学生更理解什么叫“鲁棒”。

所以,“鲁棒性”是自控专业/机械专业的名词。与计算机软件/软件系统没关系。


1、robust groupware :健壮群件
          ——摘自《电脑常用词汇》计算机教育图书研究室编
2、robustness :即坚固性。指一个程序在意想不到的情况下,仍能很好运行或继续运行的能力。
        ——摘自《新英汉网络词典》北京邮电大学网络中心  马严 主编
3、robust program : 健壮程序
3a、robustness :  健壮性,坚固性
     ——摘自《英汉计算机词汇》 中国计算机学会 编

4、18.12    Robustness  健壮性
One type of robustness is simple robustness, in which the protocol adapts to node and link fail-stop failures.
一种健壮性类型是简单健壮性,即协议能适应节点和链路的异常终止错误。

Another type is self-stabilization. ...... 另一种类型是自我稳定。

Another type is Byzantine robustness. The network can continue to work properly even in the face of malfunctioning nodes,whether the malfunctions are caused by hardware problems or by malice.
还一种类型是Byzantine健壮性。在出现故障节点时,不管故障节点是由硬件问题还是由恶意引起的,网络都能继续正确工作。

Following are some intreresting points to consider when you goal is to make a system robust.
..........
当你的目标是使系统变得强健时,下面是一些值得考虑的要点: ......

   ——摘自《网络互连》(美)Radia Perlman 著,高传善 等译

高传善:纽约科学院院士和IEEE计算机学会会员;教育部科技委信息学部委员;复旦大学计算机科学与工程学院副院长, ......

马严:中国100名特级教授之一,常年工作在美国。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

734

主题

11156

帖子

676

粉丝