zoukankan      html  css  js  c++  java
  • 浅谈软件开发中的防御式编程

      在软件开发中针对用户的输入往往不是我们所期待的那样(不满足前置条件),有时候软件内部往往也会出现一些我们不易察觉的错误,针对这种情况,一些人持有乐观的态度,而另外一些人则从一个其他的事情中得到了启发:即由防御式驾驶而想到的防御式编程。

      所谓防御式编程,指的就是这样一件事情:即我们假定使用者都是白痴,他们可能在输入时进行各种各样的操作,这来源于防御式驾驶:即假定路上开车的都是疯子,你要提前制定策略防止他们撞到你或者你撞到他们,因此你必须要保证万无一失,而不是采取投机取巧的方法。心理学上有一个定律叫做墨菲定律,即任何你认为不会发生的事都有可能发生。

      在软件开发中也正是如此,比如我们想开发一个航班管理系统,在用户进行一定的输入之后就会将所有的航班信息展示到显示屏上。但是事情往往不顺遂人意。用户可能输入并不存在的飞机,发往并不存在的机场,用户也可能和你玩恶作剧,为航班不分配飞机,那样的话所有人就只能干等。诸如此类,这仅仅是一个小小的例子,如果机场信息版出了问题可能还不是什么大毛病,但是假如这个开发机场管理系统的人同时也去开发了银行管理系统,那结果可能就不太乐观了。前些天美国用百万年薪来招聘一些会上古语言的老程序员,因为这些程序设计语言被用作银行管理系统几十年,中间并没有出过什么大问题,因此一直没有进行更新换代和相应的维护,从中我们也可以窥见一个鲁棒性较强的平台是多么重要,这几十年维护省下来的钱可能也能用于更多的用途吧(;》)

      ok,当我们了解到防御式编程的意义之后,我们就需要考虑怎样实现防御式编程,具体而言有以下几个方法:

      

      ▪Protecting programs from invalid inputs

      ▪ Assertions

      ▪ Exceptions

       ▪ Specific error handling techniques

       ▪ Barricade

       ▪ Debugging aids

      在这里我并不打算展开讲述,具体可参考MIT 软件构造课程的课件。我只想说一下里面的Barricade,这个所谓的障碍物模式,实际上是将程序内部与外界隔离开,我们通过人为的设置防火墙,来规避那些外界可能存在的风险,有点像设计模式中的proxy,通过中介来进行数据处理交换,将风险委托给别人,也不失为一种很好的开发策略。

  • 相关阅读:
    RabbitMQ(四)
    RabbitMQ(三)
    RabbitMQ(二)
    定位
    响应式布局
    学习前端的一些心得
    css样式大全
    常用标签
    HTML
    app 被拒绝原因
  • 原文地址:https://www.cnblogs.com/upuphe/p/12940233.html
Copyright © 2011-2022 走看看