ebook img

Event-B建模 系统和软件工程 PDF

496 Pages·2021·62.926 MB·Chinese
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Event-B建模 系统和软件工程

_ 干罚摊l书 ■www.epubit.com Event-B 建模: 系统和软件工程 ModeilnEi vnegn t-B: SysatneSdmo ftwEanrgei neering - )著 [法]简 埃蒙德· 阿布瑞尔 (Jean-RaymonAdbrai| 裘宗燕译 Modeling iEnv ent-B systaenmd softwea r Enginnge eri 阳an.mymond邸 al _ 四中国工信出版集团 詹人民邮电出版社 POST&S T ELECOPMRE SS 干异步图书 • www.epub仆.cmo ' , . Event-B--·· · 系统和软件工程 [法]-简埃蒙德·阿布尔瑞(JeanR-aymdoAnbrial)著 裘宗燕译 _ 人民邮电出版社 北 京 ', 图书在版编目 (CIP)数 据 - Eve-nB建t模: 系统和软件工程/ (法)简埃蒙德 ·阿布瑞尔 (Jean-RaAybmroin著ad,l)裘宗燕译.-- 北京 :人民邮电出版 社,2019.9 ISBN9 78-7-115-50899-7 … IICD.简 ..@裘… O 一 I. (DE II.I软件工程 系统 IV. 建模 (DTP31l .5 中国版本图书馆CIP数据核字(201)9第037906号 版权声明 Thiissa M odeliinEn vge ntS-yBs:ta enmdS oftwaErneg ineoeftr hifoenl gl owtiintpglu eb libsyh ed Cambridge University Press ModeliinEn vge nt-B:a nSSdoy ftswtEaenrmge i ne7e8r0i5n2g1,8995569 ThiMso deliinEn vge ntS-y8s:ta enmSd o ftware Efonrtg hiPene eoeprRlieenp'gus bo lfCi hci( neax cluding HonKgo nMga,c aaunT da iwiaspn u)b libsyah rerda ngweimttehhnP etr eSsysn diocfta htUeen iveorfs ity CambriCdagmeb,r iUdngietK,ei dn gdom © CambrUindigvee PrrseiastnsPyd O ST&ST ELECPORME SS TCDo2,.0 ,1L9 . ThiCsH INESSIEM PLIlFaInEgDu iasag uet hoforris zaeildnet hPee opRleep'usbo lfCi hci (neax cluding HonKgo nMga,c aaun Tda iwoannl)Uy n.a utheoxrpioosrfett dh CiHsI NESSIEM PLIFlIaEnDg uiasag e violoaftt ihCoeon p yrAicgNtho.tp aorftt hpiusb limcaaybt eir oenp roodrud ciesdt rbiyba unmtyee adno sr, stoirnead d a taobrar seet rsiyesvtawelim t,ht ohupetr iworri tpteernm iosfsC iaomnb rUindigvee Prrseistsy anPdO ST&ST ELECPORME SCSo .T,DL. Copioefts h bioso sko lwdi thaoC uatm brUindigvee Prrseissttsyi coknte hrce o vaerrue n authaonrdi zed illegal. 才 j 本书封面贴有CambriUdngievePrrsei防st伪sy标 签,无标签者不得销售。 本书中文简体版由CambriUdngievePrrseist权sy人授 民邮电出版社有限公司出版。未经出版者书面许 可,不得以任何方式或任何手段复制和抄袭本书内容。 版权所有,侵权必究。 ·著 [法简]-埃蒙德·阿布瑞尔CJea-nRaymAobnrdial) 译 裘宗燕 责任编辑 吴晋瑜 责任印制 焦志烤 ·人民邮电出版社出版发行 北京市丰台区成寿寺I路号I 邮编 10016电4子 邮件 35 @pIt press.com.cn 网址 http://www.ptpress.com.cn 北京鑫正大印刷有限公司印刷 ♦ 开本:787xl10/9126 印张:30.75 字数:722于字 2019年91版月第 印数:I-24 0册0 2019月年北9京第1次印刷 著作权合同登记号 图字:01-201号7-7733 定价:129元.00 读者服务热线:(010)810印5装5质4量1热0线 :(01801)0 565 31 反盗版热线:(010)81150 553 广告经营许可证:京东工商广登字20170147号 内容提要 这本实用的教科书适用千形式化方法的入门课程或高级课程。本书以B形式化方法的一 个扩展Event-B作为展工示具了,一种完成系统建模和设计的数学方法。 简-埃蒙德·阿布瑞尔(Jean-RAabyrmi是oa国nl际d)著名计算机科学家,曾任苏黎世联 邦理工学院客座教授,他基千精化的思想提出了一种系统化的方法,教读者如何逐步构造 出所期望的模型,并通过严格的证明对所构造模型做系统化的推理。本书将介绍如何根据 实际需要去构造各种程序,以及如何构造各种更一 般的离散系统的模型。本书提供了大量 示例,这些示例源自计算机系统开发的各个领域,包括顺序程序、并发程序和电子线路等。 本书还包含了大量具有不同难度的练习和开发项目。书中的每个例子都用Rodn平i台工 具集证明过。 本书适合作为高等院校计算机、软件工程、网络工程、信息安全等专业高年级本科生、 研究生的教材,也可供相关领域的研究人员和技术人员参考。 序言:无缺陷系统?我们能! 这个标题当然很有挑衅的味道。我们都会认为,这一 宣言是针对着某些不可能的事情。 不可能!环视四周,我们还做不出无缺陷的系统。如果这件事有可能,应该早就被人们做 “ 好了。再说,无论如何,我们首先要说清楚什么是 缺陷"。 我们该怎么想象这里的清况呢?我们可能想,这应该是一 位大师想兜售他最新的灵丹妙 药。亲爱的读者,请放心,这个序言并不包含任何全新的克敌法宝,而且进一步说,它也 不是技术性的,不要求你理解一大堆复杂的概念。本序言的意图,就是提醒你注意一些简 单的事实和想法。如果愿意,你就可以去利用它们。 这里的思路就是去扮演某个人的角色,这个人现在正面临一种险恶的局面(是的,计算 机化的系统的开发并没有远离险境 作为一种度量的尺度,只需要考虑在系统崩溃时所 浪费的金钱)。在面临险境时,我们有可能决定以某种鲁莽的方式去改变某些东西。但是, 这样做通常完全无效。另一 条途径就是逐步引入一些简单的特征,希望把它们放在一 起, " ” 最终能导致局面的全局性改变。后者也就是我们将要用在这里的 哲学 。 定义和 需 求文 档 我们的目标就是构造出正确的系统,因此,首先需要认真地定义一种方法,据此可以判 断自己做出的东西究竟是什么。这就是 “定义和需求“文档的用途。在投身于开发一个计 算机化的系统之前,必须认真地写出这种文档。 但是,你会说,大量工业部门都有这种文档,它们已然存在,为什么还要为此操心呢? 好吧,就我个人的经验,绝大多数情况是,业界正在使用的文档非常糟糕。仅仅是理解需 求到底是什么,将其从有关文档中提取出来,通常就已经很困难了。一 个事实是,人们常 以做文档时用了某些(昂贵)工具的事实作为其需求文档值得信任的证据! 我强烈建议,应该按照本节中说明的简单路线重写需求文档。 这样的一个文档应该包含两类相互嵌套的正文:解释性的正文和参考性的正文。前者包 含为理解手头问题所需要的解释,当读者第一 次遇到这里的问题,或者需要某些基本的理 由时,这些解释应该能帮助他们。后者包含定义和需求,其形式主要是带有标签和编号、 用自然语言写出的简短陈述句。与相应的解释相比,这种定义或需求应该更形式化。当然, 它们必须是自足的,而且能成为判断正确性的唯一参考。 定义和需求文档应该类似千数学书籍,其中一 段段的解释性文字(在这里,作者非形式 化地解释自己的方法,有时还给出一些历史背景)里交织着一些更形式化的片段一一 定义、 引理和定理一— 所有这些构成了参考性正文,很容易与书中的其他内容区别开来。 对千系统工程的清况,我们用两个坐标来标记参考性的定义和需求。第一个坐标说明其 2 序言:无缺陷系统?我们能! 用途(功能、设备、安全性、物理单元、退化模式、错误等),第二个坐标说明其抽象层次 (高层、中间层、底层等)。 我们必须仔细地定义好第一个坐标,然后再去写定义和需求文档,因为对千不同的项目, “ ” 这个坐标的情况有可能不同。注意, 功能性 标签描述目标软件中处理特定任务的需求, “ ” 而 设备 标签描述环境必须保证的假设(我们也称其为需求)。我们的目标软件将运行千 这种环境中。这种环境由一些设备组成,还包括一些物理变化现象、其他的软件部分,以 及系统的用户。第二个坐标把参考性的项目放到一个层次结构中,从非常一 般(抽象)的 定义或需求,直到越来越特殊的、为了系统的运行而需要的东西。 这其中有一件事非常重要:在这个工作阶段,有关的定义和需求文档都必须得到利益相 关方的同意和认定(签字)。 到了这个阶段的最后,我们已经写下有关目标系统的所需性质。这些东西到底能不能实 现,我们还没有任何保证。即使我们写下所需要的飞机必须能飞,也不保证它真能飞起来。 在写出了这样的文档后,人们经常会急千去编程。而我们都知道这样做将会得到什么。在 投入编程之前,还需要有一个中间工作阶段,其作用将在下一 节解释。 模拟和编程 程序设计活动的目标是构造出一段形式化正文。我们假定这段正文能指导计算机,告诉 它怎样去完成一些特定的任务。我们的想法是不做这件事,而是去构造一个系统,其中有 一部分是软件(也是我们将构造出的东西),它是系统许多部分中的一个。这也就是我们不 把自己的工作仅限千去开发软件部分的原因。 为了像工程师一样做好这件事。我们并不假定是要指导计算机,而是假定要指导自己。 要以严格的方式完成这件事。我们没有别的办法,只能是设法去做出未来系统的一 个完全 的模型,包括最后将要构造出的那个软件以及它的环境。该环境(同样)由一些设备、变 化的物理现象、其他软件以及可能的用户构成。程序设计语言无助千我们完成这些工作。 所有这些都必须认真地建模,并设法弄清软件将如何运行的所有假设。 模拟是系统工程师最主要的工作。程序设计则将随之变成了一种从属性的工作,它完全 可以全自动地完成。 建模一个计算机化的系统,过去是借助千某种建模语言 例如SIMULA-(6它7是所 有面向对象语言的鼻祖)—— 完成的,现在仍然如此。我们对此的建议仍然是做一个模拟, 但不是用某种模拟语言来做这件事。为了便千检查和分析这一工作的结果,我们建议用构 造数学模型的方式来完成它,通过证明来分析得到的模型。物理学家或者运筹学家就是这 样工作的,我们也应该采用类似的做法。 因为我们并不打算指导计算机,所以不必去说需要一步步地做什么。我们要做的是解释 并形式化地描述应该观察到的情况。但是,要这样做时,立刻就会遇到一个问题:我们如 何才能去观察某种当时并不存在的东西?对这个问题的回答很简单: 虽然它还没有存在千 物理世界中,但显然它已经存在千我们的脑海里。工程师或建筑师总是这样做的:他们根 据自己脑海中已有定义的某种表示,去构造出相应的实际物品。 3 序言:无缺陷系统?我们能! 离散迁移系统和证明 正如前一 节所言,建模工作并不仅仅是形式化未来系统在我们脑海里的表示,还包括证 明这一 表示能满足某些期望的性质等相关工作,也就是在前面讨论定义和需求文档时,非 形式化地说明了的那些性质。 为了完成这一包含了模拟和证明的工作,我们采用一 种简单的形式化工具,称为离散迁 移系统。换旬话说,无论需要执行的模拟工作是什么,我们总是把未来系统的组件表示为 一 些状态的序列。状态之间是突然出现的迁移,也称为事件。 从模拟的观点看,理解下面的情况非常重要: 一 个人按动一 个按钮,或者一 个发动机的 启动或停止,或者一 部分软件执行某项任务,如果这些都出现在某个全局性的系统里,那 么它们之间并没有任何本质性的差异。这些活动中的每一 个都是离散迁移系统,它们自行 工作或相互通信,都在参与作为一 个整体的某个系统的分布式活动。这些也就是我们计划 采用的建模各种任务的方法。 使用这一非常简单的工作方式也极其方便。特别是有关的证明工作,其中一 部分工作就 是证明每个组件的迁移都能维持一 些全局性质,而这些性质是我们所希望的,组件的所有 状态都必须始终满足它们。这种性质就是所谓的不变式。在多数情况中,这些不变式涉及 系统中的多个组件,是横贯它们的性质。相应的证明称为不变式保持性证明。 状态和事件 正如我们在前一 节里已经看到的,一 个离散迁移组件包括一 个状态和若干迁移。我们现 在用一 些简单的术语来说明有关情况。 粗略地说,状态(如同在一个命令式程序里一 样)由一 些变量表示。但是,与程序里的 情况不同,这里的变量可以是整数、 偶对、 集合、 关系、 函数等(也就是说,可以是任何 集合论里可以表示的数学对象),而不仅是计算机里的对象(即那些受限的整数和浮点数、 数组、 文件一 类的东西)。除了变量定义外,我们可能还有不变式语句 它们可以用任何 在一 阶逻辑和集合论的描述范围内能够写出的谓词表示。把所有这些放在一 起,一 个状态 就可以简单地抽象为一 个集合。 练习:在一个人可以按动一个按钮的离散系统里,状态是什么?在一个发动机可以启 动和停止的系统里,状态又是什么? 根据上面的所有说法,一 个事件可以抽象为状态空间上一 个简单的二元关系。该关系表 示了顺序的前后两个状态之间的联系,这两个状态中的一 个恰好出现在该事件的 “执行“ 之前,另一 个恰好出现它之后。当然,直接把事件定义为二元关系,有可能不太方便。更 好的方式是把事件分解为两个部分,一 些卫和一 些动作。 4 序言:无缺陷系统?我们能! 卫也就是一个谓词,一个事件的所有卫并在一 起,就得到了与之对应的二元关系的作用 域。一 个动作也就是对状态变量的一 次简单赋值。假定一个事件的所有动作将同时在不同 “ “ 的变量上 执行 ,未赋值的变量不会改变。 这些也就是我们在定义状态迁移系统时使用的全部记法形式。 练习:在一个人可以按动一个按钮的离散系统里,有哪些事件?在一个发动机可以启 动和停止的系统里,又有哪些事件?在这两个系统之间可能有哪些关系? 在这个工作阶段,我们可能会有点困窘 发现最后一个问题不太容易回答。事实上, 从一开始,我们就没有遵照 “药方”。 或许我们应该先写下一个与用户/按钮/发动机有关的定 义和需求文档。在做这件事时,我们可能就已经发现了,发动机和按钮之间的关系原来并不 是那么简单。在这里可能出现下面一些间题:我们究竟需要一个按钮,还是几个按钮(例如, 一个开始按钮和一个停止按钮)?后一 做法是一个好想法吗?如果采用多个按钮,在发动机 已经运转的情况下再按启动按钮,我们会观察到什么?在这种情况下,我们是否必须松开按 钮以便随后重新启动发动机?如此等等。我们也可能看清楚了,与其分别考虑一个按钮系统 和一个发动机系统,而后再组合它们,更好的做法可能是先将其作为一个问题来考虑,而后 再分解成几个。这时,我们又要考虑,怎么在这两者之间放进去一点软件,如此等等。 横向精化和证明 要想模拟一个包含很多离散迁移组件的大系统,这样的工作当然不可能一 跋而就,只能 通过一 系列的工作步骤来完成,在每一步中把这个模型做得更丰满一点。我们首先创建其 各种组件的状态和迁移,而后再充实它们;先以非常抽象的方式,而后引入更具体的元素。 这种活动称为横向精化(或者superpo叠s加i)t。ion, 在做这种事情时,系统工程师会仔细考察定义和需求文档,逐渐从中提取出一些元素来进 行形式化。他们还要关心模型里的定义和需求的可追溯性。注意,经常会出现这样的情况,我 们在建模中会发现定义和需求文档是不完全的或一不致的,因此需要对它们做相应的编辑修改。 在应用这种横向精化方法时,我们也需要做一些证明,确保更具体的精化步骤不违背在 更抽象的精化步骤中已经完成的工作。这就是精化证明。 最后,当模型中每个定义和每个需求都被考虑了之后,横向精化阶段就完成了。 在做横向精化的过程中,我们并不关心可实现性。我们的数学模型,就是用集合论的记 法形式描述的状态不变式和状态迁移。 在做横向精化时,我们将通过增加变量的方式扩充模型的状态,也可以强化事件的卫或 者增加新的卫,还可以给事件增加新的动作。最后,还可以增加新的事件。 纵向精化和证明 还有第二类精化工作,这类工作在所有横向精化完成之后才能执行。鉴千这种情况,这

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.