你的位置:首页 > 操作系统

[操作系统]软件的按契约设计(DbC


一.DbC基本概念

DbC的思想源于商业活动中商家和用户的行为(义务和利益关系),双方都要遵守一个契约(合同),交易才能完成。

商家与用户的契约关系如下:
1. 商家必须提供某种产品(义务),并有权获得用户支付的费用(利益);
2. 客户端必须支付费用(义务),并有权获得产品(利益);
3. 商家用户双方都必须遵守某些义务,如法律,法规。

二.软件中的DBC

DbC(Design by Contract,按契约设计)是一种软件设计方法,该方法首先在1986年由Bertrand Meyer提出,DbC已经由Eiffel Software公司注册为公司商标,开发者把这个方法也叫做按契约编程、契约优先编程。

把DbC思想用于软件系统开发中,就是把软件系统看做是不同构件之间的相互协作,构件之间的相互协作必须遵循精确定义的规范(契约、合同)。

许多语言都有写断言(assert)的特性,使用带有断言的C或C++,可以保证不同构件之间遵循的规范,保证软件开发的正确性,所以DbC主张首先写断言,DbC应该是软件设计过程的一部分。

  1. 使用DbC的优点:
    (1)便于调试、发现程序中的错误;
    (2)便于代码重用,有契约的软件模块描述了模块的行为,便于生成代码重用的文档;
    (3)对运行的代码影响较小[2]。

  2. 传统调试与DbC调试:
    (1) if-else方法:
    传统程序模块开始时,使用很多的If(条件){符合条件;}else{不符合,返回}的格式用于检测边界条件(也可以叫合同)。条件符合时,执行模块功能代码;不符合时,返回调用者,由调用都来处理错误。
    (2)try-catch方法:
    这是先运行try{模块功能代码}中代码,如果有错(异常),执行catch(希望的异常){捕获异常}用于捕获异常。这是先运行,之后看有没有错的方法。
    (3)断言方法:
    Java语言开发中,常用assert()断言用于白盒测试,测试函数的边界条件。但它是编一个函数,测试一个函数的过程。
    (4)DbC方法:
    先看合同,后运行的方法,它也使用断言。与第一种if-else有点类似,但是,当有错误出现时,它会自动调用回调函数my_onAssert(),而不是像第一种方法返回到调用者。在回调函数my_onAssert()中,可以显示错误出现的文件和行号;在嵌入式系统开发时,也可以在回调函数中实现串行通信,把错误传到PC机;也可以用LED闪亮次数来表示错误位置。

二.DbC的实现(C语言)

1c13803564f4a44b90ef3991
图1.DbC总体结构

19d309f45a8488b57609d791
图2. 断言宏定义

f070243fcf2738b654e72391
图3. DbC的应用例子

三.使用到的C99预定义宏

(1)__FILE__ :所在源文件名称字符串;
(2)__LINE__:所在源文件中行位置数;
(3)#name:也就是name对应字符串。

四.DbC的加入与撤消

在调试程序时,用宏开关加入契约;调试正确后,可以用宏开关来撤消契约,以节省ROM空间和提高运行效率。

参考:
[1]DbC:http://en.wikipedia.org/wiki/Design_by_Contract




深圳到英国旅游报价到英国旅游要多少钱英国旅游路线英国旅游多少钱跟团英国旅游网2015春节佛冈森波拉春节有什么活动?森波拉奇妙世界春节活动介绍? 2015天适樱花悠乐园花期多长?从化天适樱花悠乐园什么时间最好看? 世外桃源甘孜州 盘点最美5条旅游线路 2015春节天适樱花悠乐园樱花节有什么表演?从化天适樱花悠乐园春节免费游玩项目? 深圳地王大厦简介?地王大厦观光介绍? 苏迪糖果乐园怎么去? 乌镇被互联网大佬承包了 那就去前童古镇玩耍吧(组图) 深圳地王大厦图片?地王大厦观光漂亮吗? 深圳有哪些物流公司?哪家物流公司性价比最好? 深圳华强北怎么去?有什么公交直达吗? 深圳地铁线路有哪些在建设,大概到什么时候能开通? 深圳锦绣中华是不是通票? 哈尔滨冰雪大世界旅游攻略,贴士,注意事项 大连发现王国地址_发现王国在哪里_大连发现王国门票价格多少钱 钱塘江大潮_海宁潮 广东佛山旅游景点推荐_佛山旅游景点大全 LT1242CN8#PBF Datasheet LT1242CN8#PBF Datasheet LT1256CN#PBF Datasheet LT1256CN#PBF Datasheet LTC2630AHSC6-HZ12#TRMPBF Datasheet LTC2630AHSC6-HZ12#TRMPBF Datasheet 现在到哪里旅游好啊 现在到哪里旅游好啊 现在到哪里旅游好啊 现在旅游到哪里最好 现在旅游到哪里最好 现在旅游到哪里最好 清明三天旅游 清明三天旅游 清明三天旅游