程序的健壮性和自我防御

原创 2004年07月22日 16:42:00
UML软件工程组织

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

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();

}

。。。。。。处理

}

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

 

版权所有:UML软件工程组织

【架构设计】【程序指标】鲁棒性与健壮性的细节区别

本文转自:http://blog.csdn.net/bigpudding24/article/details/49069805 一、健壮性 健壮性是指软件对于规范要求以外的输入...
  • xylin1012
  • xylin1012
  • 2017年05月14日 11:57
  • 289

如何提高程序的健壮性,增加判断。

如果后台在返回的时候少了一个属性?前端会不会报错,这是我们前端开发一定会遇到的问题。那么如何的提高程序的健壮性呢。 关于这个问题,我们可以在实例化这个对象的时候进行判读来增加程序的健壮性。下面是一个...
  • qq_29678299
  • qq_29678299
  • 2016年04月02日 19:45
  • 923

程序的健壮性

程序的健壮性
  • lendmetenyears
  • lendmetenyears
  • 2016年12月19日 01:13
  • 221

保持代码健壮性的小技巧

1.在连接字符串的时候尽量避免使用String = "str"+"str2";  而使用StringBuffer str = newStringBuffer("str");str.append("s...
  • ljt2724960661
  • ljt2724960661
  • 2016年04月17日 21:25
  • 1005

浅谈C代码的健壮性

到目前为止,学习编程语言也有一年多了,这期间也写过不少代码,其中每一段代码我自己认真思考过,用心写过的。然而就现在看来,这过程中,我忽略了最重要一点,那就是代码的健壮性。 当然,关于代码的健壮性,我只...
  • zhangyongjun_2012
  • zhangyongjun_2012
  • 2013年11月27日 20:53
  • 926

代码健壮性--理论篇

在这次ITOO技术小组里,我选择了“代码规范”这个方向进行研究,在对代码注释、命名、SVN规范等了解了之后,最让我感到兴奋的一点就是:代码的健壮性。    期初浅显理解:    健壮性是指...
  • u013047584
  • u013047584
  • 2016年02月28日 19:04
  • 3498

程序的健壮性和鲁棒性

一、健壮性 健壮性是指软件对于规范要求以外的输入情况的处理能力。 所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。 另外健壮性有时也和容错...
  • bigpudding24
  • bigpudding24
  • 2015年10月12日 10:22
  • 5376

计算机可以这样玩—自我学习,自我思维,自我工作(编程)

如果让计算机产生自我意识,那一定件很好玩的事情。               我在想,怎么让计算机产生自我意识和自我学习的思维能力呢,特别是在工业集群中的应用。               由这个...
  • luozhonghua2014
  • luozhonghua2014
  • 2014年08月06日 22:06
  • 1162

读《程序员自我修养》 总结

技术上 尽早编码统一命名习惯不要提前优化清楚地思考,清除地表达:隔离辅助代码,让程序变得易读;抽象部分逻辑,让程序简单明了 看看开源项目Apache HTTP Server 或者 FreeBSD,想...
  • cylj102908
  • cylj102908
  • 2016年03月21日 17:12
  • 268

增强if-else容错性的方法

今天写一个苹果移动app的sample时,由于 if-else语句用得不严谨,当程序中出现bug时,影响了排查问题的效率        出问题的方法是屏幕旋转前触发的事件        -...
  • jenny890105
  • jenny890105
  • 2015年11月08日 11:32
  • 329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序的健壮性和自我防御
举报原因:
原因补充:

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