From 81104dee60cab1224e2b76dd6eedebf2c9f3f892 Mon Sep 17 00:00:00 2001 From: Hui Lan Date: Sat, 27 Jul 2019 15:43:24 +0800 Subject: =?UTF-8?q?parnas-a-rational-design-process.rst:=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=A2=81=E4=B8=96=E5=AE=B6=E7=9A=84=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=EF=BC=8C=20=E4=BB=96=E5=B8=B8=E6=8A=8Amodule=E8=AF=AF=E8=AF=91?= =?UTF-8?q?=E4=B8=BA=E6=A8=A1=E5=9E=8B=EF=BC=8C=20=E4=B8=8D=E5=A4=AA?= =?UTF-8?q?=E5=A5=BD=E3=80=82=20=20=E8=BF=99=E6=AE=B5=E8=AE=B2=E5=88=B0?= =?UTF-8?q?=E4=BA=86=E4=B8=A4=E4=B8=AA=E9=87=8D=E8=A6=81=E7=9A=84=E6=80=9D?= =?UTF-8?q?=E6=83=B3=E3=80=82=20=20=E7=AC=AC=E4=B8=80=E6=98=AF=E6=8A=8A?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=88=86=E8=A7=A3=E6=88=90=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=8C=20=E6=8A=8A=E6=A8=A1=E5=9D=97=E5=88=86=E8=A7=A3?= =?UTF-8?q?=E6=88=90=E5=AD=90=E6=A8=A1=E5=9D=97=EF=BC=8C=20=E5=B0=8F?= =?UTF-8?q?=E5=88=B0=E4=B8=8D=E8=83=BD=E5=86=8D=E5=B0=8F=E3=80=82=20=20?= =?UTF-8?q?=E5=A5=BD=E5=A4=84=E5=B0=B1=E6=98=AF=E8=B4=9F=E8=B4=A3=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E4=BA=BA=E5=8D=B3=E4=BE=BF=E7=A6=BB=E5=BC=80?= =?UTF-8?q?=E4=B9=9F=E4=B8=8D=E5=BD=B1=E5=93=8D=E5=A4=A7=E5=B1=80=E3=80=82?= =?UTF-8?q?=20=20=E8=83=BD=E5=81=9A=E6=A8=A1=E5=9D=97=E5=88=86=E8=A7=A3?= =?UTF-8?q?=E7=9A=84=E4=BA=BA=E5=BA=94=E8=AF=A5=E6=9C=89=E7=9B=B8=E5=BD=93?= =?UTF-8?q?=E7=9A=84=E7=BB=8F=E9=AA=8C=EF=BC=8C=20=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E5=8F=AB=E5=81=9A=E7=B3=BB=E7=BB=9F=E6=9E=B6=E6=9E=84=E5=B8=88?= =?UTF-8?q?=E3=80=82=20=20=E7=AC=AC=E4=BA=8C=E6=98=AF=E7=94=A8=E7=9C=9F?= =?UTF-8?q?=E5=80=BC=E7=9F=A9=E9=98=B5=E8=A1=A8=E7=A4=BA=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E4=B9=8B=E9=97=B4=E7=9A=84=E4=BE=9D=E8=B5=96=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E3=80=82=20=E4=BB=8E=E5=88=97=E6=9D=A5=E7=9C=8B=EF=BC=8C=20?= =?UTF-8?q?=E8=AF=A5=E5=88=97=E7=9A=84=E7=9C=9F=E5=80=BC=E8=B6=8A=E5=A4=9A?= =?UTF-8?q?=EF=BC=8C=20=E8=A1=A8=E6=98=8E=E8=AF=A5=E5=88=97=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E6=A8=A1=E5=9D=97=E8=A2=AB=E5=BE=88=E5=A4=9A?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E6=A8=A1=E5=9D=97=E4=BE=9D=E8=B5=96=E7=9D=80?= =?UTF-8?q?=E3=80=82=20=20=E4=BB=8E=E8=A1=8C=E6=9D=A5=E7=9C=8B=EF=BC=8C=20?= =?UTF-8?q?=E8=AF=A5=E8=A1=8C=E7=9A=84=E7=9C=9F=E5=80=BC=E8=B6=8A=E5=A4=9A?= =?UTF-8?q?=EF=BC=8C=20=E8=A1=A8=E6=98=8E=E8=AF=A5=E8=A1=8C=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E6=A8=A1=E5=9D=97=E4=BE=9D=E8=B5=96=E5=88=B0?= =?UTF-8?q?=E5=BE=88=E5=A4=9A=E5=85=B6=E4=BB=96=E6=A8=A1=E5=9D=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parnas-a-rational-design-process.rst | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'parnas-a-rational-design-process.rst') diff --git a/parnas-a-rational-design-process.rst b/parnas-a-rational-design-process.rst index d2ba84c..dfa45a5 100644 --- a/parnas-a-rational-design-process.rst +++ b/parnas-a-rational-design-process.rst @@ -379,7 +379,7 @@ Page 12 - 何可人 OK 虽然,每人负责写一个文件, 但这些文件实际上是在模块实现者、模块使用者, 对模块设计感兴趣的人(如审稿人)商议过程中产生的。 这些规范文件的主要内容有: -- 被访程序: 可被其它模块中的程序调用的程序列表。 +- 被访程序 (access program): 可被其它模块中的程序调用的程序列表。 - 被访程序的参数。 @@ -387,9 +387,9 @@ Page 12 - 何可人 OK - 时间约束与精度约束 (如果需要)。 -- 不希望发生的事件 (undesired events) 的定义(禁止发生的事) +- 意外事件 (undesired events) 的定义(禁止发生的事) -许多方面,模块规范类似需求文件。 但是,模块规范所使用的符号与文档结构更适合描述软件与软件的接口。 已发表的例子和解释有 [11],[2],[i],[5]。 +许多方面,模块规范类似需求文件。 但是,模块规范所使用的符号与文档结构更适合描述软件与软件的接口。 已发表的例子和解释有 [11],[2],[1],[5]。 D. 设计并记录模块内部结构 @@ -400,20 +400,21 @@ D. 设计并记录模块内部结构 在某些情况下, 模块只是被简单地分成几个子模块, 设计文件是另一个模块指南。 在这种情况下,该模块的设计过程在上面的步骤 B_ 处继续。 -Page 13 - 袁世家 +Page 13 - 袁世家 OK ------------------------------------------------------------------------------- -在另一些情况下,我们从描述内部数据结构开始;还有一些情况是,数据结构被子模块使用(和隐藏)。对于每一个访问函数,我们引用一种函数或者描述数据结构上的影响的LD关系。对于每一个模块所返回给使用者的数值,我们都提供了另一种数学函数,这个抽象函数将数据结构的值和其返回值一一对应。对于每一个不确定的事件,我们描述了怎样去检查它。最后,我们还提供了一种证明方法,这种使用此类性质来编程的观点可以满足模型的规格。 +在另一些情况下,我们从描述内部数据结构开始; 还有一些情况是, 这些数据结构被子模块实现(并隐藏)。 对于每个被访程序,我们包括一个函数 [1] 或者 LD-关系 [14], 用来描述对数据结构的影响。 对于模块返回给调用者的每个数值,我们提供叫做抽象函数的数学函数,这个函数将数据结构的值映射到返回值???。 对于每个意外事件, 我们描述了怎样去检查发现它。 最后,我们还提供一个"验证", 一个拥有这些属性的程序会满足模块说明的论据???。 -我们继续分解子模块,直到每个工作任务小到我们能够忽略它,并且当程序员离开该工程后可以继续工作。 -如果我们不能编写一个可读的高级语言,例如,如果没有可用的编译器,我们使用伪代码作为文档的一部分。我们发现由另外某个人写伪代码而不是最终的程序员写代码,并且让两个程序员负责两种代码的连贯性是很有用的。 +**继续分解设计子模块,直到每个工作任务足够小, 小到万一负责这个模块的程序员离开项目, 我们也可以承担丢弃它并重新开始的代价** 。 -E. 设计并且记录使用层次结构 -```````````````````````````````````````````````````````````````````````````````` +如果无法用易读的高级语言编程,例如,如果没有可用的编译器,就把伪代码作为文档的一部分。 写伪代码的不是最终程序员, 并让他与最终程序员负责确保两种代码一致。 这么做很有用 [7]。 -一旦我们知道所有的模型和它们的许可程序,就可以设计使用的层次结构。他被方便地记录为二进制矩阵,当且仅当位置(a,b)的入口为真,程序A的正确性取决于系统中是否存在正确的程序B。使用层级结构定义了可以由删除整个程序并且没有重写任何程序获得的子集。这对于分阶段递交,故障弱化系统,和程序集合的发展很重要。 +E. 设计并且记录使用层级 (uses hierarchy) +```````````````````````````````````````````````````````````````````````````````` +一旦知道所有的模块与它们的被访程序, 就可以设计使用层级。 为记录方便, **用一个真值矩阵表示使用层级** ,当且仅当程序A的正确性取决于程序B的正确性, 矩阵的(A,B)位置为真。 使用层级定义了一组子集组成的集合, 这个集合可以由删除整个程序并且不需要重写任何程序获得。 使用层级对于分阶段交付, 软失败(fail-soft)系统,和开发程序家族很有用。 +(蓝珲的理解: 文中提到的程序, 容易引起混淆, 其实就是模块。 真值矩阵其实描述了模块之间的依赖关系。 例如, 有1,2,3,4四个模块, 3依赖1, 1依赖2, 2依赖4。 {4}, {2,4}, {1, 2, 4}, {3,1,2,4} 这些子集都可以组成独立程序。) Page 14 - 陈肖飞 OK -- cgit v1.2.1