信息化的本质分享 http://blog.sciencenet.cn/u/Babituo

博文

迭代式软件开发中的同态学思想启发——求同存异,求异存同

已有 3296 次阅读 2011-5-13 08:51 |个人分类:信息探索|系统分类:论文交流| 系统科学, 求同存异, 求异存同, 同态学

渊源
最先学习雨思老师的同态学思想是2002年期间在北师大的“系统科学之窗”论坛上。当时,出于“同态”一词在计算机软件的面向对象建模中有同用,为探究软件模型中“同态”的本质,我搜索到了雨思老师的“同态学”。我仔细研读了雨思老师的“同态学文集”,和雨思老师在论坛上也进行了颇具启发性的讨论,这些讨论,对我理解计算机软件及其开发过程的本质,取得了拨云见日的效果,得到了“求同存异,求异存同”的感悟。
一个运行中的计算机软件是一个信息处理系统,为了提高软件开发的效率,软件工程界提出了软件复用的思想,面向对象的软件工程思想就是软件复用思想的典型代表。为了追求复用,无疑就要寻找和发现不同的信息系统的共同特征,然后用共同的解决方案来应对,这对减少重复开发,提高开发效率,提高软件质量水平具有非常重要的意义。
“同态学”旗帜鲜明地断定:“同一性”是系统最基本的特性之一。这是对软件复用思想的本质支持。正是因为系统存在“同一性”这一本质特性,我们才可能去寻找和发现它,并利用它来减少我们在计算机信息系统开发中的重复劳动。
 
理解
“同态学”对“同态”的定义是“系统同一性所决定的状态”。理解这个定义的关键点在“同一性”和“状态”这两个基本概念。对照一个计算机信息系统来理解,一个计算机信息系统会具有怎样的“同一性”和由这些“同一性”所决定的状态呢?
2.1 同一性
“同一”就是“如同一个”,既然有“同”,就至少得有两个以上的东西来对照谈论。一个计算机信息系统只是一个系统,它能和“谁”来“同”呢?我们知道,计算机信息系统是对计算机以外的现实世界的信息系统的模拟仿真和部分移植,并起到改善整个现实世界信息系统的效能的作用。所以,一个计算机信息系统,它首先必须具备和外界信息系统某些特性相同,一致的性质,它才可能让信息系统整体如一。用软件工程的话来说,一个计算机信息系统,必须和它要解决的实际问题对应,也就是软件需求决定计算机信息系统。在软件领域,系统分析员的任务之一,就是要发现并清晰表达未来计算机信息系统的这种与外界需求一致的“同一性”。
计算机信息系统除了要和外界的需求达到机能和性能上的“同一”,还要和其他什么达到“同一”呢?是的,计算机信息系统对内要和计算机内部信息处理的结构机理“同一”。一个计算机信息系统,不可能超出或脱离计算机内部资源整合的功能和性能、不可能超出或脱离计算机系统运行机理来工作。规划计算机内部资源结构和运行过程的任务就是软件设计任务,这项任务的实质,就是要寻找计算机信息系统与内在的结构运行机理的“同一性”。这是软件设计师的任务。
把上述两个计算机信息系统“同一性”结合,我们会回到一个常识性的断言:计算机信息系统必须具备内部结构运行机理和外界的功能、性能需求相一致的特性。可见,“计算机信息系统”只是起到一个代名词的作用,这个断言才是我们真正要找的计算机信息系统的“同一性”,推而广之,是否这就是所谓的一般系统“与自身同一”的含义呢?这个问题暂且不论,我把这个实现这个特性的过程称为“求同”的过程,也就是说,我们开发计算机信息系统软件,首要的、根本的任务就是要寻找和实现计算机内部结构运行机理和其外显的功能、性能特征,也就是外部信息系统环境对计算机信息系统的需求相一致的这个“同一性”。
2.2 状态
“状态”取“形状”,“形态”的含义。从含义上来讲,具有非常强烈的“整体性”和“结构性”的味道。回到计算机信息系统来讨论,计算机信息系统的“同一性”会决定它会呈现怎样的“状态”呢?
最明显的“状态”莫过与“映射”。而且这种映射不仅仅是简单的系统元素之间的对应关系这么简单。比如,并不是每一个计算机信息系统的功能性需求,就会对应一个软件模块,这样的简单映射只能让软件系统越来越臃肿庞大,对计算机资源的大量吞噬,随着功能要求的增长,软件运行效率越来越低下,最终失去可用性。一个良好的计算机信息系统的设计,必须建立软件需求和软件特性之间、软件特性和软件构件之间的多对多的可跟踪的对应关系,这就是所谓需求管理的任务。
软件需求表达软件的价值点,软件特性表达软件的功能点,软件构件表达软件的实现点。所以,软件开发过程建立的实际上是一个两层的递进的“映射”:从价值点映射到功能点,从功能电映射到实现点。这就是计算机信息系统的“同一性”所决定的它应该呈现的“状态”之一。
同态学还提出“点是结构”的命题。这个命题在计算机信息系统软件开发中也能找到同感。首先表现在,软件的价值点、功能点和实现点本身是具有逻辑内涵的,其次,在软件开发过程中,不仅仅要建立的是这三层的点之间的映射关系,还必须建立每层点的相互结构关系的映射,因为,每一层的点之间还存在相互交融和依赖的关联关系,每层的点在这些关系的融合下才构成软件在该层上的系统含义,只有各层的点结构之间也成功映射,软件才会有良好的架构。所以,软件的点,不是简单的点,在点内和点间,都是有结构的,高水平的软件架构师,必须对此谙熟于心。
这是软件开发在三个过程层次之间的“纵向”的一个同态,面向对象的UML建模基本观念“用例驱动”,其实就道出了这个同态本质:软件的价值点及其价值关系决定了软件的功能点及其功能关系,软件的功能电及其关系决定了软件的实现点及其实现关系。
在软件的分析设计中,“模式”一词已经广泛流行。一个分析模式对应一种常见场景下的常用分析机制,而设计模式则对应一类常见问题的常用设计方案。每一个分析模式实质上就是一系列同类应用场景的分析机制或的一个“同态”;每一个设计模式也就是一系列同类设计方案的一个“同态”。与“用例驱动”不同的是,模式是在软件组成逻辑上的技术层面的一个“横向”的同态。
 
创新
“同态学”不仅仅是找到了上述几个与其他学科或领域共通的基本概念,如果仅仅如此,那么就只是换汤不换药而已,价值不大,我想,这正是一些朋友不解和误解同态学的原因之一,但同态学又不能没有这些基本概念,因为这是同态学和其他学科和领域进行沟通的基础。同态学在其这些可共通的概念基础之上,还有重大的理论发现和创新,只有当我们深入到同态学的理论创新或理论发现的层面时,才能擦出在其他学科或领域内创新的火花,才能体会到同态学的真实价值。
我认为同态学最重要的发现之一,就是发现了“同一性振荡原理”。
我认为,同一性振荡原理发现的是这样一个规律:一个系统之所以能保持动态平衡,是因为系统无时无刻不处于同一性振荡之中,系统的同一性振荡是造就系统复杂性、活性的根本原因。
一个活性系统的存在和发展,总是伴随着它的同一性的振荡的。系统处于其所有同一性的交替地“求同-变异-再求同-再变异”,也就是交替出现的系统同一性变强-变弱的过程中,才造成了它的复杂性和活性。我们要把握一个复杂的活系统,就必须找到它的同一性,调节或影响其同一性振荡的状态,才能维持系统持续稳定、并有所改进地发展。
如何将“同一性振荡原理”应用到计算机信息系统开发和应用过程中去呢?
3.1 瀑布式开发和迭代式开发
计算机软件系统如何随着用户需求的变化而快速调整自身的结构,来满足用户的需求,是长期以来困绕软件界的大问题,为此,业界已经在计算机软件开发过程、计算机软件体系结构、开发方法和开发工具环境等多方面进行了不懈的努力。其中,在软件开发过程模式方面进行的一项重大变革就是:用迭代式开发取代传统的瀑布式开发模式。
很多国际上著名的软件工程大师,在推荐迭代式软件开发方式时,所能陈述的理由也就是如此:软件是一种创新型产品,而不是传统意义的工业化产品,创新型产品在开发生产过程中存在许多不确定因素影响,对于创新型产品不能采用传统工业产品那样的:“分析-设计-实现-测试-交付”这样的从一个阶段完成,经过评审才进入下一阶段的这种“瀑布式”的开发方法,因为,那些不确定因素会使得软件产品尚在开发的过程中,就需要改变其需求,历史经验表明,“瀑布式”的开发方法应用在软件产品开发过程是彻底失败的。
大师们所推荐的所谓“迭代”式开发,就是把一个传统的梯级进行的大过程,转变为一个多个螺旋方式进行的小过程的连续进行,每一个螺旋过程,就是一次迭代,在每次的迭代过程中,系统分析员,设计师,程序员,测试员,用户代表全员参与,同步工作,每次迭代过程在上一次迭代基础上,增加适当新的开发内容,并交付一个可用的新的软件成果,逐步演进到完全符合用户需求的软件产品为止。这样做,可以将用户需求由开始不明确到最终全明确引起的“需求变化”的风险,分布到多个迭代的过程中,而不是象瀑布式开发中那样集中在第一个阶段中,就算用户的需求真的发生变化,在迭代的过程中,也可以把这种变化纳入到下一个迭代过程中来处理,这样就能大大提高软件开发过程的成功率。
3.2 软件开发中的同一性振荡原理
简单地说,迭代式开发取代瀑布式开发就是用全体的小踏步快跑来代替分组接力的大踏步慢跑。国内的软件开发管理者中能把迭代式开发理解成这种程度的已经是很难得了,能真正做到的为数不多,大多数软件开发管理者只是把“大瀑布”改成了多个“小瀑布”而已。其中的原因之一恐怕是他们甚至连那些迭代式开发的国际大师鼻祖们也未明白的一个道理,就是:用迭代式开发能提高软件开发成功率的本质原因,是因为迭代式开发遵循了系统“同一性振荡”的基本原理,而且,如果彻底地遵循系统“同一性振荡原理”,我们将会发现更加全面、更加系统地来改进软件开发过程、体系结构、开发工具和开发环境的机会。
“用例”是“软件运行中有用的、可用的过程事例”。它通过查找和发现软件受益者如何与未来的软件产品需要进行的一系列相对独立的信息交互行为集合以及它们之间的关系,来表明这些信息交互行为集合背后的价值目标以及价值目标的关系。软件的系统分析师会用一个“用例模型”来表达他对一个软件产品这方面的分析结果,用例模型成为贯穿软件开发过程全程的所有其他类型的模型的“同态”,所有软件模型所反映的与软件受益者的价值目标及其关系的一致性,就成了核心的“同一性”。 可暂且称之为软件系统的“价值同一性”。
根据“同一性振荡原理”,在软件开发的过程中,软件系统的“价值同一性”不可避免地会发生振荡。也就是说,软件系统所实现的价值目标和用户全部的价值目标不可能也不必要始终保持一致,而且还会必定存在一致性振荡变化的过程,这是用户的业务系统和软件系统的本质特征所决定的。
3.3 遵循同一性振荡原理的迭代式开发
瀑布式开发方法完全忽视了这个“软件系统价值同一性振荡”的规律,试图一开始就能捕获所有的软件需求,并维持这些需求在整个开发过程中不会发生变化。迭代式开发则尊重需求的变化,而且采用有节奏的过程来响应变化。在迭代式开发中,每次迭代只实现当前时段下,对客户价值最高的需求,而有意保留其他的需求暂不实现,留待后续的迭代逐步实现,也就是说,迭代式开发方式在“求同”的过程中,没有忘记“存异”,也就是主动保留一些价值目标的差异。
软件开发人员经常会陷入这样一种痛苦之中,就是用户总是没完没了地提出新的修改意见。好不容易修改出一个版本给用户,用户看过后受到启发,又提出新的要求。传统的瀑布式开发观念会把这个问题归罪于第一阶段的系统分析没有做好,没有充分挖掘用户的需求。但这样归罪的结果并不能改变什么,坚持这样的观念的话只能带来更多软件项目的失败。
这实际上就是“同一性振荡规律”在起作用,当软件的一个版本和用户早期需求的同一性达到较高的程度的时候,用户自然会提出更高的要求,或者用户自然会发现原来的需求存在不合理的地方,因此需求发生变化,软件和用户需求的同一性则向降低的方向振荡,也就是软件不满足需求的方向振荡。软件开发人员与其被动地适应这种变化,不如主动的准备应对这种变化,迭代式开发方式就是主动应对变化的方式之一。
在迭代式开发中,存在一种工作模式叫Refractory(重构),就是当程序变化到在架构不能适应新的需求变化,或架构效率降低到一定程度的时候,程序员主动对原来的程序进行重新的编写,当然是在原有程序基础上进行优化重写,我把这个过程叫做“求异”的过程,经过“求异”之后,软件的架构可能会得到超出用户当前需求的灵活性,造成了与用户当前需求的差异性。但这种求异,不是完全地推倒重来,是建立在完全能满足当前用户需求的基础之上的,也就是说,在“求异”的同时,没有忘记“存同”。
可见,迭代式开发方式自发地中遵循了软件系统的价值同一性振荡规律。其方法论可以用“求同存异,求异存同”这八个字来概括。
3.4 “求同存异,求异存同”的推广
运用同态学的“同一性振荡原理”,从迭代式软件开发中悟出的“求同存异,求异存同”的方法论,是否有推广价值呢?它是否可以获得象“同一性振荡原理”规律一样的一般性,成为遵循这一规律的一般的方法论呢?这是个值得思考的问题。
 
推广
迭代式软件开发是一种对复杂的信息系统进行分析和重构的过程模式,在本质上是一种方法论。软件开发,可以说是我们人类所进行的所有社会活动形式中比较复杂的一类活动形式,应该属于一种对复杂系统的认识和构造的活动形式。于是我们可以尝试做如下推论:人类在对复杂系统的认识和构造时,采用迭代式的过程会更有效力。如果这个推论成立,那么,“求同存异,求异存同”就一定有其更一般的含义,下面就来探究一番。
人类认识事物最基本的方法是“形成概念”。概念形成的过程其实就是一个“求同”的过程,但一个概念并不能完全取代所有其所指的同类的具体的事物,当我们在运用概念谈论具体事物的时候,一定不能忘记,概念即使是和与其所指的同类具体事物之间,都还是存在差异的,因为,任何两个具体的事物之间,虽然他们有共同点,但永远还是能找到差异的,因为它们始终是两个独立的个体,概念只能用来指称它们的共性,而不能涵盖它们各自的个性。所以,求同的同时,不能忘记存异。对于求同存下来的异,也许缩小一些范围,又能求出新的同,于是,又可以在差异中寻找共同,形成新的概念。这样不断地对存下的异求同下去,就会得到一个塔式的求同存异结构。
是不是“求同存异”了,概念塔形成了,认识事物就结束了呢?不是,人的认识总是不断深入的,对于原来求出来的“同”,或许有一天会被发现其中还有原来不知道的“异”,所以,就会有一部分人专门从事“求异”的工作,比如,发明家,批评家,测试员等,能够从同中发现出新的异,也是一种难得的能力。同样,在求异的同时,不能忘记存同,而且,不但对求异存下来的同,依然可以继续求异存同下去,而且还可以对新求出来的异,继续求同下去。
似乎发现相同的同时也就同时发现了不同,求同就等于求异。但实际并非如此,往往在求同的时候,异是已知的,而在求异的时候,同是已知的。求同和求异,实际上就是正向思维和反向思维。所以,求同存异和求异存同,虽然效果是一样的,但作用方向是正好相反的,只有如此,才能产生交互,才能循环往复地进行,而不是单调地重复。也只有这样,才能和系统“同一性振荡原理”合拍的。
到此,我可以谨慎地给出本节推广的结论:或许人类所有的认知和学习方法的本质,都是“求同存异,求异存同”。往往人们在主动“求同”之时,会忘记主动“存异”,结果导致被动“存异”,使得“求同”更难;在主动“求异”之时,又会忘记主动“存同”,结果导致被动“存同”,使得“求异”更难,其中的原因,或许正是“同一性振荡原理”还未成为常识,让我们努力让“同一性振荡原理”成为常识吧。
全文完。
邱嘉文
2007.11.27 于珠海


https://wap.sciencenet.cn/blog-33982-443635.html

上一篇:看过“熵力说”勾起的一个想象。
下一篇:寓言一则:牛马之争——学术讨论中的“求同存异,求异存同。
收藏 IP: 112.91.148.*| 热度|

1 闫茂伟

发表评论 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-24 13:04

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部