程序的健壮性

转载 2007年10月08日 00:07:00
程序的健壮性和自我防御
 
健壮性

健壮性是指软件对于规范要求以外的输入情况的处理能力。

所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。

另外健壮性有时也和容错性,可移植性,正确性有交叉的地方。

比如,一个软件可以从错误的输入推断出正确合理的输入,这属于容错性量度标准,但是也可以认为这个软件是健壮的。

一个软件可以正确地运行在不同环境下,则认为软件可移植性高,也可以叫,软件在不同平台下是健壮的。

一个软件能够检测自己内部的设计或者编码错误,并得到正确的执行结果,这是软件的正确性标准,但是也可以说,软件有内部的保护机制,是模块级健壮的。

软件健壮性是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平。即所谓的高手写的程序不容易死。

其实程序的健壮性(鲁棒性)是各个语言都要注意的问题,这里重点讲的是其中的自我防御。

 

1.面向对象要求黑箱操作

由于面向对象要求各个部分是彼此独立的,那么各个部分就要足够强劲以应付输入参数的不合理性。虽然现代编程都讲究预处理,一般的是将输入格式转换为统一的格式,然后进行处理。比如说现在网上的搜索引擎,都是将输入转换为unicode的格式。但是这并不是说我们的处理函数就不需要错误处理了。预处理能够大大减少程序出错的概率和编写错误处理的复杂度。

但是考虑到单独模块越来越趋向于智能化,各个黑箱应该具有独立的行为,错误处理,以及错误纠正的功能。

 

2.错误捕捉和错误信息

相对于C++,C语言的错误处理比较的简单。无非是条件判断语句而已(往往错误处理不好的原因不是程序员的技术不好,而是比较懒,呵呵)。这里需要注意的问题是如何书写错误信息的问题。错误信息要完整:包括在什么地方,因为什么,出现了什么样的错误。不完整的错误信息没有任何可用价值。

另外一个就是出现运行的log(日志)。在关键的步骤上输入一些信息到log文件内,提示当前程序运行到什么地方去了(如有可能,得到系统的当前错误码)。这样当程序意外中断的时候,可以使用这个log进行一定的判断。

 

3.自我防御(预防二义性)

程序应该是尽可能自纠错的。这在程序的输入不可预测的情况下尤为重要。其实由于合作开发的原因,这样的情况很多。一个程序员编写的模块很有可能对输入有特定的要求,那么当另外一个程序员调用这个模块的时候,就会出现问题。

好的处理办法是在模块内对输入进行判断,如果有二义性,则进行合理纠错,并有效的提示(在debug版本下)。这里注意的是,如果纠错了,要进行有效的提示:可以是msgbox,也可以是写入log。

 

下面是一个例子的伪代码:

//该模块是对日期的统计,不计节假日

Function Stat(time)

{

int errcode;

char* errstr[MAX];//也可以定义为全局变量

 

if (errcode =check(&time)) { //其实这个可以放到预处理里面

fprintf(“不合法的输入%d,纠正为当天”,errcode);

msgbox(errstr) ; //但是对于单独的模块,如果不能保证有预处理

time=gettoday(); ,//得不使用这样的办法。

}

if (errcode =checkholiday(&time)) {

fprintf(“不统计节假日%d,纠正为当天”,errcode);

msgbox(errstr) ;

time=gettoday();

}

。。。。。。处理

}

 

其实这里面没有什么技术含量。关键就是一点,如果没有自纠错,那么一旦有错误,唯一的办法就是退出程序(或者单个线程)。这是用户不希望看见的,使用自纠错,可以避免一些小的错误导致程序的中止。

 

PHP程序员的能力水平层次

前言 之前看过很多篇关于服务端工程师和PHP开发者的能力模型介绍,每篇都对能力有侧重点.  下面我们来详细谈谈以开发能力为基准点的PHP程序员的能力水平层次. 层层递进 1.功能开...
  • sanbingyutuoniao123
  • sanbingyutuoniao123
  • 2016年05月22日 22:08
  • 1305

[后端服务]后端程序健壮性几点思考

参考文章:http://www.cnblogs.com/LBSer/p/4753112.html   对每一个程序员而言,故障都是悬在头上的...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2017年01月04日 10:29
  • 1313

利用代码扫描工具提升Android代码健壮性

Android代码健壮性
  • caoxiao90
  • caoxiao90
  • 2016年05月30日 21:43
  • 1252

setsockopt()改善程序的健壮性

  • 2011年10月24日 20:24
  • 14KB
  • 下载

AJAX异步请求程序的健壮性和数据协调.pdf

  • 2008年11月30日 13:30
  • 153KB
  • 下载

setsockopt()改善程序的健壮性

1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用 closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:...
  • weiqubo
  • weiqubo
  • 2013年12月24日 16:26
  • 1118

setsockopt()改善socket网络程序的健壮性

如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用 closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: B...
  • xjtuse2014
  • xjtuse2014
  • 2015年11月23日 14:23
  • 231

如何提高nodejs程序的稳定性,健壮性

转自http://www.cnblogs.com/yupeng/p/3472214.html   在网上看到一些帖子,吐糟,质疑nodejs 程序的稳定性,为什么呢?其一,可能这个和ja...
  • xiliuhu
  • xiliuhu
  • 2015年08月07日 09:20
  • 373

浅析:setsockopt()改善程序的健壮性

http://blog.csdn.net/zhci31462/archive/2007/05/01/1594197.aspx1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口...
  • ztguang
  • ztguang
  • 2016年03月30日 10:03
  • 160

浅析:setsockopt()改善程序的健壮性

不断的收到coolmei25 (梅生)的答谢,我都不好意思了(我都没帮到他),下面写出我在网络编程中的一点心得体会,希望对他(^_^也对大家)有帮助: 1. 如果在已经处于 ESTABLISHED状态...
  • suxinpingtao51
  • suxinpingtao51
  • 2013年09月18日 18:07
  • 639
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序的健壮性
举报原因:
原因补充:

(最多只允许输入30个字)