我的架构思想(四十):架构原则,技艺、艺术与美——架构原则(架构第四原则:过程之于结果,并没有必然性。)

阅读数:21 2019 年 10 月 12 日 17:12

我的架构思想(四十):架构原则,技艺、艺术与美——架构原则(架构第四原则:过程之于结果,并没有必然性。)

1. 基本前设

所谓工程,是一个实作问题,简而言之,工程讨论的就是如何把东西做出来。在这个问题上,架构工程与软件工程类似,也是可以追溯到“过程、方法、工具”三个要素的。其中,架构第二原则主要讨论的是方法论问题,间或讨论到与方法论适配的工具问题;架构第三原则可以视为对工程产物的补充。

形成论与组成论是两个过程观点,前者是过程论的动态模型,后者则是静态模型。将架构结果作为工程产物时,静态模型强调架构的构件之间的结构关系,以及通过这些结构关系来维护“架构目标的系统性”的方法;动态模型则强调架构是一个与时间相关的产生过程13,在时间轴以及组织性上,架构团队以及系统的参与者都是变化的,(整体来看,)其结果在形态上也是变化的。在后者——形成论的视角下,架构结果是可以通过阶段进化来获得的,而至于这一产生过程是否是一次性的或迭代数次的,则是过程实施中的选择。

13 注意,这里并没有用“生产过程”。在一定程序上来说,“生产”是有特定的工程含义的。

与第三原则一样,本原则也是对第二原则的补充,讨论架构在正确性上的一般逻辑。

2. 有关过程正确与结果正确的讨论

“正确的步骤会产生正确的结果”是丰田模式14的核心原则的重要组成部分。这一原则有其逻辑上的论证:设正确为 1,错误为 0,则一个结果的正确性应当依赖于(其中的“+”应记为逻辑 and):

14 引自《丰田汽车案例:精益制造的 14 项管理原则》,杰弗瑞•莱克著。

1+1+1+1+…+1=1

而不应依赖于(其中“⊕”应记为逻辑 xor,“!”应记为逻辑 not):

1+1+(0⊕!0)+…+1=1

前者意味着“只有所有步骤都正确,结果才是正确的”,后者意味着“可以通过对错误的逆向补偿来得到正确结果”。丰田模式对后一种模式是持否定态度的,但是与此反例的是,丰田模式事实上是通过后一种模式来构筑前一种模式的,亦即是说,“修正错误”是获得一个正确的过程所必需的步骤。

传统生产过程的特殊性意味着上述论证中的(0⊕!0)应当存在于同一个过程中,例如,“铸件尺寸过大”与“打磨铸件”应当同在一次交付中发生,否则铸件必是无法用于下一个过程中的。维护这样的体系要求过程中必须对阶段产品有明确的检测依据。也就是说,“1”的有效性必须在产生“(正确的)1”的过程中被检测,检测过程与生产过程可以视为同一个阶段下的两个子过程。更进一步的,(0⊕!0)亦即“错误修正”,应处于同一个子过程中。倘若这一点不能在工序上被保证,那么实施中错误修正的时间成本取决于“差次品”影响到后续过程的时间起止点,例如在使用它之前就被并行的工序修正了。

生产过程中如果包含大量的修正过程,则其效率会变得相当低下。这是因为修正过程将使生产过程的周期变长且导致产品品质下降,这些都可以理解为是由过程的不确定性导致。因此,总的来说,尽量摒除生产过程中的修正是得到“正确的步骤”的必经之路。为了这一目标,传统的生产型企业都会有所谓的“产品研制”阶段,在这个阶段中允许大量的修正,并最终交付一个可投入生产的“正确的步骤”。“生产”作为一种工程手段,大抵上是从一个“正确的步骤”的交付开始的15

15 然而我们现在的过程论者,常常会忽略了生产型企业中的“研制”过程,以及研制的本质是“通过大量的错误修正来得到正确的步骤”这一事实。

但对于目前我们讨论的架构来说,生产过程还没有真正出现。我们所讨论的形成论事实上只约定了形成的阶段性,以及前启对后续阶段的影响,但未能得到阶段下自我检测的标准。阶段间的关系最终被概括为“映射”与“约束”,就目前的语言表达能力——我的意思是架构语言在表达中的准确性而言,我们尚无法通过标准与规范使得“映射与约束”可被检测,并由此形成所谓“正确的步骤”。因此我们讨论架构过程正确性的基础是目前并不存在的。总的来说,这一观点中包括三个方面的问题。其一,就个人经验而言,我认为形成论下的架构产出是过程记录而非指导性规范,但这是出于“能力上无法做到规格化”,还是出于“架构的某些特殊性质决定了它无法被规格化”,是我仍存疑的;其二,软件系统产品通常是一次性产生的,因此它是否需要一个生产过程并将架构作为生产阶段来理解,是我存疑的;其三,即使上述两点均成立,即我们确需“基于架构的生产过程,且架构规格可作为指导性规范”,我对其可实施性(综合考虑实施成本与团队成本)也是存疑的。

但是形成论的“映射与约束”性质必将由组成论来实现。因此结合组成论与形成论,可以在一定程度上解决上面的问题。组成论主要讨论架构构件,以及基于这些构件的架构语言的表现力。严格形式化的语言是可以存在错误检测与修正机制的,比如说此前讨论的主语承前省略与蒙后省略,本质上就是这一机制在自然语言中的表现。类似地,架构语言也可以有这样的机制,例如在层次架构上可以确定“没有向上依赖”,但如果在表达中出现了向上依赖关系,也可以通过语法规则的修补来使之标准化。当我们视架构为静态的事物时,它必表达系统的一个静态的映像,其正确性的检验是针对于该映像而言的。以我们前面讨论的“架构 = 范围 + 联接件”这个求解来说,既然系统映像是静态的,则上述构成也就是可确实的、可验证的,因而这一静态的系统映像作为上述求解的一个实施,也是可以讨论其正确性的。但这一映像之于形成论,还需要有过程实施的保障16,而这正是在组成论视角上无法得出的17。所以即使我们能够通过正确的方法、过程与工具,去生产出一个正确的、组成论视角下架构,也不能以此为据来证明形成论下的方法正确性。

16 可以理解为生产过程中,基于某个产品原型的具体生产工序。

17 有两个原因,其一是目前的模型表达法没有参数化,其二是工序本身不是组成论视角下的结论。

我们尚未能找到过程正确性之于结果的必然关系,因此“正确形成 + 正确组成”并不等于正确的架构。

评论

发布