保护程序的方法_3

文档序号:9383071阅读:来源:国知局
个退出 点,一个对应于退出"真"("true"),而另一个对应于该退出"假"("false"))。如果用 户现在着眼于例如对应于命令"removeFirst"的调用的节点(即调用前放置的点),它通常 是循环的入口点和循环(循环的结尾将在这一点上再循环)。从这个点出发是两条弧。一 对应命令的"真"("true")情况,并将指向下点(即等值测试调用之前的点)。这条弧以 predicate" [true]removeFirst (y+,f, f+) "标记,其中按照惯例"f "代表程序弧线(点/节 点)启动状态的变量1",1+"和、+"按照惯例表示程序弧的目标状态的变量"广和、"。 其他程序弧是相对应于命令的"空"("empty")情况和程序"成员"("member")(对应于 定义程序的"假"("false")情况)的"假"("false")退出点。该程序弧由predicate 《[empty]removeFirst (_,f,-)》标记,发现其定义等同于"empty (f) "。在本实施例中,只 注释弧。简单不变量(即经典,弗洛伊德)将对应于相关联节点的predicate。在SM的语 言下,即使允许简单不变量,这里使用程序不变量,用程序(子图),而不是节点的属性来表 不。
[0151] 虽然对于下文提出的本发明这不是严格必需的,以产生或使用这样的中介语言, 这是一个非常方便的方式以实现它们。
[0152] 作为用于关联到在图中的节点的变量,它们通常会自动判别于SM,通过分析基于 在参数中提供的变量的程序和由固定点机制(变量"强度"的分析)。该分析可以识别某些 不连贯,它必须在程序的定义进行修正,例如,一变量被使用,而它尚未在某些路线初始化, 可能会导致一考虑点。
[0153] 此外,更一般地,其它形式的注解或弧(或甚至节点)可以考虑例如集,关系和这 些可以通过内涵或延伸来表示。
[0154] 2.本发明的实施例SM的语言的特点明显有利于权利要求的执行情况。在这里,我 们回到特定的上述权利要求。
[0155] 2. 1并行编程
[0156] 下面所述的实施例还显示了序列及确定性程序,是更一般地,并且还适用于高度 多样化的执行模型,特别是并行,并发程序,非确定性的程序或进行"回溯"的可能性。在中 介的语言SMIL-些这些可能性可以很容易地提出通过引入"叉"("fork"),并在图形"加 入"("join")的机制。基于一个节点上,总是有几种可能的情况下,但每个可能性而不是 作为一个简单的程序弧可以是一个有限集合弧(叉)。同样,不是只具有一个有限弧集能达 到一个点,人们可以有一组的可能性,每一个都是简单的程序弧或一组有限的弧组,一"加 入"("扣化"),从而导致结构化程序弧。图中的一轨道不再是简单的路径(也就是说,它成 功地在时间上彼此状态的总序列),但部分序列,也就是说执行的轨迹,而且相应的逻辑轨 迹,成为如通常已知偏序。此外,该程序弧注释变得更加复杂。而不适用于一个简单的程序 弧它们适用前和对应于一壳体后的节点之间更复杂的配置。然而,如前所述,这些属性可表 示相邻节点上(在部分顺序)。图中的每个路径或副路径通常对应,而不是一个节点下列签 署节点和弧由predicate注解,但是类似地标记的部分序列共标记的顺序。在这种情况下, 它使得在这种情况下有可能,以支持在SM语言水平高度多样化同步机制,已知的唯一的约 束是如何将描述变换成一个SMIL曲线图。通常情况下,同步将被转换为一"加入"(" join") 后跟一个"叉"("folk")加入然后释放被同步(两个或多个)的程序。为简单起见,SM 同步和并行基元没有引入。此外,当在极少数情况下,例如基元将在本文档中使用时,它会 在上述SMIL中介表示,其中单独基元"叉"("folk")和"加入"("join")允许足够的表 达。因此,在这个阶段的程序的概念可以推广。一种程序,将因此被定义为一组有限的点通 过有限的的传送所连接,设置有一个或多个入口(仅单一的入口的情况被示出)和一个或 几个退出。该点可以由逻辑特性表征相关的点状态所注解,传送也可以关联到逻辑特性描 述链接对应它连接点状态的关系。当程序描述了一个顺序程序这最后关系描述了如何开始 点的状态被链接到对应于终点的状态。当程序描述了一个并行程序同步或不同步的状态是 通常元组描述并行执行进程的状态,并且关系描述的局部顺序,其链接的元组从过渡的起 始点至过渡期结束点的元组。但该程序点可以替代地认为是局部点,在此情况下一些传送 都将被连接(在"叉"("folk")或"加入"("join")叉形分支或接合支路的情况下被连 接)。这里所采取的约定对进化规则本身产生影响,并从该程序导出的树结构,而不是对权 利要求书的适用性。
[0157] 2. 2分离/分支
[0158] 因此,通过提供信息技术方法,使用描述语言的特性(编程或规范语言)和设备 (即,"计算机软件"),其支持它,以协助对环境的用户来分割一命令,或一引用的程序(即 基于另一个程序所调用的一程序)于一有限数量的情况,每一个对应于一个处理情况。这 些不同的情况下均可以导致不同的分支,包括潜在的分支到"错误"("error")(这当然不 排除所有,或部分的情况下导致,即分支的,朝向同一个点),尤其是在一个方式(a)减少或 划定一个命令或子程序的"范围",在它的一个或几个用法中,或(b)能够识别并利用组合 数学或不可能的情况下连续。例如通过图示的
[0159] (a)的方法,值得注意的是,在公理⑵的第2行可以认为有限制的指令,它总是 删除被使用的第一个元素。这个操作只能适用于含有至少一种元素的序列。这个程序因 而推断点3在局部约束此外,通过说明(b)的方式,值得注意的是,如果一个逻辑被认为 是从程序的开始通向点3,至该点的转换的组合是与导致带有采取removeFirst的分支 "空"("empty")的传送不相容。
[0160] 在实践中,可以例如已经确定预先的可能情况下,期待命令或子程序,使得该工 具可在选择或管理的情况下,帮助用户选择保留(不一定是所有的,这也将于其自身创建 一个约束)和在使用过程中所选择的情况下,相关联的程序的控制结构的潜在的方式。这 是对SM语言自然允许的。通常,所述设备将有可能考虑到情况故障,特别是涉及使用情 况。通过示例的用于这些命令之一每次方式"removeFirst"这里的隐式定义,以及每个 "分"("divide")的提供两种情况,并且,相应的分支应当隐式或显式地决定,或隐式或显 式地决定该情况下是不可能的,或者必须在调用(这是限制命令的范围的方式)的情况下 不能使用。SM的语言和工具,支持它,验证每个分支要么实现,或隐或显式地重新发送至"错 误"("error"),按照惯例,表达了相应的过渡是不可能的特性。
[0161] 的描述,因此程序的定义期间提出这些问题的事实顺便便于用作程序/子节目中 的其他程序的定义来定义在程序除法成的情况。例如,removeFirst中的"删除"("remove") 的第二版的第一使用,推断的定义在程序"删除"("remove")的情况下,"notin"。
[0162] 2.3分支/不可能转换
[0163] 通常情况下,人们可能会想表达证明/验证某些转换或事先定义的情况下,在某 些点(在一些它们的用法中)是不可能。这是已经执行了几次的公理的描述一样多的程序 被证明,通过使用设置用于此目的的SM语言分支(隐式或显式的)。因此,它是这里使用的 决定的情况下,优选的,将用于一个命令或程序,并引入转换的约束,但它显然不是唯一的 方式。此外,该计算机软件可以允许它,即使当语言不允许它,如果需要的话,通过添加注释 和特定的处理。
[0164] 2. 4限制的某些步骤的语义的能力
[0165] 考虑到一个程序与其描述的转换,或给予规范/形式化的描述,它描述的转换(对 变量,前/后,最薄弱的前提,...的作用下),该方法因而提供表达限制某些转换,操作,命 令或程序的语义的可能性(即,定义域,该处理的可能性),以将它们减小为更合适转换(因 为它们使用某些基元或很好地理解或精心磨练的部分,或任何其他原因)。例如,它是在为 "删除"("remove")和"分"("divide")的第一版本的先前实施例的情况。在许多情况 下,这种技术是一种替代前一个的技术(可以经常使用的一个版本与一个更大的域,但具 体例为延伸的更受限制的域的部分,然后声明为其它情况下的转换的可能性,或类似于此 的使用具有更受限制的域的版本)。
[0166] 通过附加实施例的方式,在一必要的程序,可以例如决定一操作/指令"整数的增 量"的使用被限制于对应于增加而不溢出的情况下(并在通常的数学意义上的从而得到的 语义增量)。这通常是必需的,而不改变程序的全局语义,或通过提供手段以分析由该局部 限制引入的修改的影响。在前面的例子中,可能希望表达的事实即指令确实仅在这些条件 下被调用(例如,因为它的前面有一个测试检查是否该变量是比某保证值更低)。
[0167] 这三个先前提出的机制,因此链接。其中可特别如先前所见没有第三个机制,由两 个第一个的结合。在一般情况下,这就是将在下文所进行的。通过附加实施例,可能还需要 在给定的地方,使用一个除法的版本,其排除了零除的情况下的。这最后两个实施例可以例 如使用增量操作的版本(分别除法运算),用于区分正常的情况(即,"真"("true"))与 "溢出"的情况(分别为"divisionByZero"至"错误"("error")。
[0168] 仅有约束至转换的关联在此说明。当然,也可以关联约束至编程点。在此提出的 SM语言片段中,选择仅呈现使其可以引入关联于转换的约束的机理,正如总是可以将转换 约束代替一单点约束,通过引入就在该点前的命令,其符合该特性,一命令被分为两种情况 "真"("true")和"假"("false"),其中的情况下"假"("false")被声明为是一个不可 能的转换。单点约束的关联因此变为与转换与约束关联的一个特例。与此相反,也可以把自 己置于一语言的情况,其不能直接表达转换约束(当前语言的情况下)和地点的约束(即, 典型地不变量可以从列表或预定义的属性的组合所选择)在调用指令之前,如间接减少其 有益的语义,可能构造这些属性成属性析取每一个对应的情况,接着使用引入以下被称为 "改组"("restructuring")的技术,以关联被识别的情况至结构限制(或后续转换)。此 外,它不仅为一配置不变量的情况,而是不变量与指令相关联,以及被引导并协助(例如通 过从可能的情况列表中选择,或将选择的责任留给设备)。
[0169] 2. 5获取程序的特性
[0170] 由设备所获得的程序,特别是在SM的情况下,其中介形式可以被认为是类似于 "流程图",如罗伯特?弗洛伊德所定义的那样,以及几个功能。首先,通过恢复用于弗洛伊 德的定义,而解释的功能,以及特别是在弗洛伊德中通常所谓的"循环不变式"的正确鉴定 并且其中随后大多数证明方法,对于证明其-本身是必不可少的,在这里它不一定是这种 情况。它们可以被定义并以传统的方式使用(即,如弗洛伊德型方法),但是,本发明引入了 新的新颖的方式。特别是,所有或部分用户提供的解释函数或不变量可以如下所见而被证 明。
[0171] 此外,在一个弗洛伊德类型的方法,有,在给定的时间,所谓的"单点约束"的一单 个实例。这个约束被放置在程序的末尾(或类似的几个位于其末尾预发布条件)来描述功 能或程序所预期的之一的功能。这种独特的约束证据是通过展示一个连贯的解释功能,或 者通过提供循环不变量,这使得它可以为我们计算出这种解释函数(Dijkstra算法类型的 方法)来实现的。以我们的方法,一工具被提出,使我们能够,我们称之为局部特性(在多 个程序点),传统的,只要对于用户的表达是自然的(例如等式位于公理环(2))。然后,无 论是使用经典的技术,包括完成关联(加入一些不变量,这里也被称为局部特性,它以某种 方式增加冗余),诸如获得一解释功能,其相干于约束以及通过不变量而论证,或者使用其 他更具体的证明的技术,其不一定需要使用循环不变量或解释功能。一个可以例如通过使 用逻辑通往该点的子路径使用树结构以便表征在该点的属性。其他更明显的具体情况为, 当这里所呈现的方法与从弗洛伊德式的方法得出更经典的技术仪器进行比较当然是与转 换关联的限制的使用,某些约束的制止,并且显然用这样的仪器程序的可能性为"公理"(例 如公理⑴和2)),以及中间程序(以某种方式"引理"程序)。
[0172] 在一般情况下,一程序的其它组分,例如它的子图可以与局部性质相关联。一种程 序,被定义并设置有执行模型,例如确定与否,有或无回溯可能性,可以使用一程序,用于描 述多种类型的集,即域,包括数据。
[0173] 至于表达,一个大致区分那些用于程序的说明中的描述,(即在某种程度上那些限 定其语义的描述)从那些用于表达所描述的程序的(通常为本地)实际的属性或归因于它 的属性。在该文件的其余部分,术语属性仅用于在该第二意义。在其他用例中,会有提及转 换语义或点域。
[0174] 2. 6重新组织
[0175] 在某些情况下,可能对于修改程序的结构是有用的,以便于验证。有许多原因,可 能导致不直接构造使用上述机制被认为是最好的结构。例如用于方法原因(开始从没有基 于此所述方法的工具所描述的一程序),或仅仅是因为对应于不同程序编排结构几个不同 的视图的需要(以解决例如不同的验证的需求)。但是,它也可能是由于使用与SM不同的 语言,其不允许表达处理的故障情况,或不可能的转换。重新组织,因此包括在变换的程序 的结构(其分支,它的节点,注释和使用情况)。当然,在本节中描述的程序变换不一定需要 实际实现的,但可以简单地是为了其自身验证需求或用户交互的设备所使用的程序的抽象 图。
[0176] 为简单起见,我们将展示设置为使用非常基本的技术来说明它。因此,我们一方面 限制为恒定语义程序转换,在另一方面,为仅使用下列基本变换:
[0177] a.第一基本转换是用来考虑一个或多个到达一个程序点的过渡(并不一定是到 达这点的所有过渡),重定向这些过渡朝着一个新的点(第一克隆点,该点在需要的地方专 门写有相同的注释),并重复(克隆)产生于它的过渡(显然,是通过使用相同的针对克隆 弧标注)。这种转化可在程序点名称不会对语义产生任何影响的情况下确保语义的保存,这 是一般结论,特殊情况下为所呈现的SM片段;
[0178] b.第二初等变换包括在执行一个图形清理操作,例如通过删除已经被看到的枯 枝;
[0179] c.第三范畴包括在不影响语义,且所有情况都不在插入点分叉的情况下添加中间 步骤。当然,可能情况取决于所采用的语义。典型的,这些操作,以基于来自本文档的实例 的语义,应不会对变量产生影响,且没有任何先决条件或对所有在作用点的值有令人满意 的条件;
[0180] d.与此相反,某些中间步骤删除可实现,当这些步骤对所选择的语义来说是中性 的,并最终
[0181] e.某些注解的一个可能的限定:当一逻辑注释的某些参数是已知的,后者一般可 被简化(例如,当《i》有赋值时,添加(I,J,J+)可以由增量(J,J+)代替,P(x) = >q(x,y) 可以由q(x0, y)替代,如果X的值χ0使得ρ(χθ) = 0)的话。
[0182] 第一个例子:返回代码。在一个程序中,特别是由不支持的语言书写的程序,不像 SM,分离成不同的返回例和相关联的分支,或在在执行方面带有某种成局部支持这个可能 性(例如一个执行语言中的异常机理),操作者可能被引至一个位置,该位置的一个返回值 以某种方式为特征,该方式存在一个所谓的程序(例如如果退出被正常执行,为"〇",另一 情况下为"-1"),就在这个程序的调用完成后,被引导来测试这个返回代码,且依靠值"〇"、 "-1"或者其他非期望值被分送往程序中的不同地方。为了置身于本发明方法的操作条件 中,操作者可以"克隆"被调用程序在一边的退出点,然后克隆在调用程序调用的程序后的 点,以及执行的返回值和相关分支的测试点。我们通过使用转化(a) -次或几次来完成此 操作,就是说,一旦为"-1",或为潜在的意外的值,例如具有三种点,都在所调用的程序中, 且每种针对一种情况。然后应当注意的是,对应于正常退出的状态将始终具有定位在"0" 的返回码,因而,紧接着凭借该返回值执行的测试,相同分支将始终被使用。因此,出现其他 分支是不可能的。其他的点将具有相同的属性,就是说,对应于返回代码"-1"的属性,以及 对应于其它情
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1