中山大学软件所软件工程(中山大学软件研究所 李磊)

中山大学软件所软件工程
——中山大学软件研究所   李磊   二○○六年十月

     明显,软件市场是绝对存在的,并且是“方兴未艾”,但是另一方面,多数软件公司生存都是困难的。CMM(软件成熟度模型)的提出并没有使的这一局面得到根本的变化。如果说CMM提出软件开发要透明化的问题,则我们研究的“复杂应用软件开发方法及其平台”试图回答如何透明化的问题。这一答案可(部分地)解决市场绝对存在和公司生存困难的悖论。
   
一、前言

     人们常说“软件谁都会做,但是谁都做不好”。
     软件公司的潮起潮落也说明了这一点。
     成功的软件公司通常都不太像软件公司,例如,盛大,新浪等,而真正的软件公司通常都是举步艰难的公司,或者在历史上留下悲壮的一页。
     为什么?
     这些公司同样都有过良好的市场机会,但是也都同样地缺少关键的条件:知道如何可以可*地把软件做好。
     学术界还不能说已经找到了可以可*地“把软件做好”的方法,因为在今天学术界还在讨论着原始的问题:软件是工程结果,还是艺术结果。
     自从CMM(Capability Maturity Model,能力成熟度模型)被提出以后,人们认为软件工程的问题已基本解决,但事实并非如此。

     CMM的核心思想是“软件开发过程透明化”,但是它没有搞清楚“软件开发过程”和“过程透明化”是两个事情。我们认为只有存在可操作的“软件开发过程”,才可能有“过程透明化”的事情成立。
     CMM对于“过程透明化”的叙述是完全和深入的,但是对于可操作的“软件开发过程”的叙述是平凡的。目前学术和企业界已经认识到这一点,并且《计算机世界》,《软件学报》和国际上的许多学术论文都有论述。
     总之,可*地“把软件做好”和使“软件公司盈利”还都是一个开放的问题。

二、软件公司盈利

     软件公司盈利一定要解决如下问题:

     1、确定一个可盈利的市场――定位

     2、可*地“把软件做好”――信誉

     3、较低的软件开发维护成本――盈利

     4、公司知识积累――根本

        如果解决了上述4个问题,并不能保证成为一个成功的软件公司,但是如果只要有一条不能满足,则一定不会成为一个一个成功的软件公司。

    确定一个可盈利的市场――定位
          应当由公司回答。

    可*地“把软件做好”――信誉
          似乎每个公司都有答案,但是又似乎都没有答案。

    软件开发,维护成本――盈利
          是老板想的事,连CMM中都没有论述。

    公司知识积累――根本
   公司立足之本。

三、把软件做好

     就象手工能够造出好的汽车但是形成不了汽车工业一样,手工也能造出好的软件但无法形成软件产业。原因是手工也能造的软件成本太高。软件生产工业化是降低成本的必然之路。软件生产工业化必须解决采用工业化方法。

     ● 把问题搞清楚

     ● 把事情做出来

     为了“把问题搞清楚”,我们研究了主谓宾需求分析方法。
     主谓宾需求分析方法是指把软件的使用者当作主语,所做的操作当作谓语和产生的“负作用”当作宾语的一种分析方法。其思想来源于机械制图中的视图方法,并且结果是:

      1.给出了需求获取及分析标准过程。

      2.过程中的每一步基本是演绎产生的(避免构造产生)。

      3.每一个视角都是单纯的,和不同阶段的语言都是统一的。

      4.每一步的结果都是可检验的。

      5.从自然语言到形式化描述是逐渐过度的。

      等等。

     同时方法不仅提供了工程化的需求获取及描述的方法,并且具有可演绎性。这为验证结果一致和完全性奠定了基础,同时可演绎性为需求整理,例如:流程重组和表单优化提供了便利。
     具体的主谓宾将由专门的课程讲解。
     为了“把事情做出来”,我们研究了两个平台:应用软件装配平台和全局流程集成平台。

   应用软件装配平台
        应用软件开发的生产线组织方法是一种理想的方法,也是组织者希望的方法,但这是困难的。
        中大软件所研究的应用程序装配平台可以部分地实现软件开发的生产线组织,因为平台可以使得:
        1、每个程序员生产的只是一个标准部件。
        2、标准部件组装成的部件。
        3、再把部件装配成程序。
    同时,平台根据说明性定义的:
        1、流程自动地调度用户界面,从而实现动态业务流程。
        2、操作(或数据)权限,自动地组织菜单,从而实现动态操作(或数据)许可。
        3、部件间信息交换规则,自动地实现部件间的信息交换,从而实现了部件的可交换性。
    从而实现了:
        1、每个程度员编写程序都是“单纯的”。
        2、程序员不必掌握应用系统的业务知识。
        3、每个程序员的工作都是可计量的。
        平台相当于生产线上的工装设备。只有合适的设备才能实现工业化生产,否则软件工程化就是一句空话,例如CMM。
       应用软件装配平台适用于以操作为中心并且流程性不强的复杂应用系统,例如信息管理为中心的业务系统。
        试验结果令人鼓舞。

    全局流程集成平台
        在“计算机就是网络”的今天,计算机应用系统(如:信息,业务或者数据分析系统)都已不再是独立的系统,否则就是所说的“信息孤岛”。为了消除信息孤岛通常采用的是数据耦合方法,或说设计成一个“大系统”。有研究指出,应用软件同应用问题的复杂性不是线性增长的。明显当问题的复杂程度超过了人脑正常可控制的程度,这时计算机应用系统的失败是难以避免的。
        全局流程集中平台(GPID)通过把“大系统”分散并且承认“信息孤岛” 的合理性的方法,用松耦合的方法使得分散的系统或者“信息孤岛”有效的整合,例如:
        1、全局信息交换
        2、全局流程调度
        3、全局流程整合
        4、全局流程同步
来解决这一问题。
        在GPID中,全局信息的交换规则,全局流程的调度策略及交换信息的转换方法和流程同步都是说明性定义的,因此是灵活的。
        全局的流程集成平台理解为通信中的交换机。难以想象如果没有交换机,通信系统将会是多少复杂和难以控制的。软件间的关联也是同理,因此GPID也被称为“软件交换机”。
       全局流程集成平台适用于以流程为中心并且流程性强的复杂应用系统,例如:带有各种审批性质的业务系统。
        由于这两个平台没有集成进任何业务系统的知识,因此它们可以被看作是开发平台。当开发平台集成进某业务系统的知识时,就可构造出高效的应用开发平台。

四、软件开发,维护成本

     如果每一个软件项目的开发过程都是一个重新研发的过程,则软件的开发成本是不可能降低的。
     如果应用软件没有一个可维护的结构,则软件的维护成本也是不可能降低的。
     尽可能的减少对所有人的依赖。
     说明性程序设计是减少软件开发和维护成本的基本方法。
     说明性程序设计并不是新的概念,其基本思想是“做什么”和“怎么做”相分离,例如:SQL , PROLOG等。

     在工业化生产中,适当的分工是降低生产成本的主要方法,例如:可重复的简单工作可由生产工人完成。对于软件生产也是如此。说明性程序设计可以部分地达到这一目的。上述两个平台基本上达到“做什么”和“怎么做”相分离的目的。
    “做什么”对应于业务逻辑,通常是可以工业化的。
    “怎么做”对应计算机技术,通常是难以工业化的。
     如果“做什么”由软件“蓝领”完成,则明显可以降低软件的开发成本。
     不仅如此,平台还实现了业务维护和计算机技术维护相分离,明显可以大大地降低维护成本。

五、公司知识积累

     为什么工业制造利润低,但是仍然可以盈利,其主要原因是公司积累,特别是知识积累。
     软件公司实现公司知识积累是困难的。
     软件公司盈利地模式同制造业有一点是相同的,那就是重复。
     重复也可分为业务知识和计算机技术重复。
     软件所研究的主谓宾需求分析方法不但提出了有效的需求获取,表达和分析方法,同时也定义了需求表达标准,并且是“有效的”。明显,只有有了“有效的”标准,才能谈的上公司业务知识积累。这才是公司最大的财富。
     软件所研究的应用软件装配平台和全局流程集成平台不但提供了复杂应用软件开发基础,同时也“凝固”公司的计算机技术(不必每个人去谈什么J2EE)知识。明显,这些知识的重复,可以大大地提高软件企业地核心竞争力。

六、结束语

     上述结果都已经过试用,效果令人鼓舞。
     学校本来就是应当同企业经常交流的,国外就是如此。
     此课程是专门对应于软件所的非正式特殊课程,专门讲述的是软件所的研究成果的。

原文地址:https://www.cnblogs.com/guanwz/p/2421128.html