软件开发方法需要理论

  Semat计划于2009年12月由软件工程三位大师(合称“Troika”)Ivar Jacobson(UML、RUP、组件和组件架构、用例等技术之父),Bertrand Meyer(Eiffel和按约定设计之父)和Richard Soley(OMG主席)正式发起,倡导以坚实的理论、已经证明的原理和最佳实践为基础,重新发现软件工程的本质。Jacobson等撰写了三篇文章详细阐述Semat思想,本刊将陆续刊载,本文是其中第一篇。佛罗里达大西洋大学黄诗虹教授另撰有《Semat: 软件开发的又一次革命》一文,刊载于杂志官网,推荐阅读。

  对于正在寻找软件开发方法的人来说,问题不在于是否能找到答案,而是确定答案是否满足要求。是的,我们已经有了很多方法——每年都会出来一茬新的,但是这让可怜的一线开发人员感到奇怪,为什么去年的招儿又不够好了,为什么他们必须接受今年的新法子。为了寻找严格的概念性论据,必须看透炒作之词,找到其中少
量行之有效的真知灼见。

  在本文中,我们将论述软件开发方法学必须经历深刻的变革。应该放弃当前依赖于新词和政治式宣传的状况,转向基于理论和实验验证的严肃的科学工作。

  时装业,政治还是工程学科?

  软件方法学是一个特殊的领域。按原理它应该是基于科学的工程学科,但目前的实践中它却时而像时装业,时而又像搞政治。

  时装业每年都要有一种新潮流,在匆忙跟风中,人们将好的和坏的一起抛弃。人们不是从自己的经验中学习,而是跟着自认为更好的走,因为其他人都说这样更好。创新者们常常抱怨,大公司拥抱变化非常缓慢,但事实上并非如此,许多大公司非常渴望尝试新事物。真正的问题在于,他们也会更快地放弃,还没等认真用起来呢,在过程和工具上的不菲投入就打水漂了。

  在政治(或者说得更准确些是坏的政治)中,重点不是放在难题的切实解决,而是口号、宣传和煽情。理念不是通过对利弊仔细的讨论来提出,而是像品牌那样进行营销,借助一些大师的一些金口玉言来传播。每一种方法都试图忽略自己的同类,如果不得不承认它们的存在,通常也会恶意贬低,这弄得一线人员无所适从。

  最终,很少有新思想能运用在大规模的项目里,因此对大系统开发中的质量、生产力和上市时间等等都没有产生什么影响。过去四十年中软件开发方法中出现的所有新概念里,只有少数大的创新——结构化编程、对象技术、设计模式和UML等对行业产生了真正的影响。

  这些都是不成熟的表现。我们的学科该长大了。

  敏捷

  席卷业界的最新一波浪潮是“敏捷”。敏捷方法的确做出了许多贡献,并使我们再次注意到人在软件工程中的中心地位。一些敏捷的经验很可能仍然会在未来的方法中继续存在。与此同时,敏捷领域也为上面谈到的现象提供了活例子。作为一个重视人甚于过程和工具的运动,敏捷却提出了许多被宣传为“新的”过程和工具,而且没有说清楚其中哪些是真正新的,哪些只是已有概念的重述。很多一线人员很自然地就被弄晕了。先不说这些“新”概念的价值如何,对它们的推广方式就颇为引人注目:先是为这个方法精心编写了一份基础性文献的——一个宣言(http://agilemanifesto.org/),更多的是第一人称复数的情感诉求(我们必须……),而缺少事实依据。这种风格对于吸引眼球可能有效,但随着概念日益成熟,还是应该采用更传统(也更枯燥的)阐释形式。

  在工程和科学中,一种新技术的提出者与任何人一样都急于推广自己的发明,但是也会很小心地确定应用这项新技术在什么地方存在不足或者未经证实。然而,很少有软件方法学者会提供这样的警示信息。太多人夸大了自己的方法与前人的差异。每一次变革(比如对象技术)中,有多少突破其实是已知概念的调整?逐渐改进当然没有错,科学和工程中大量进展都是如此实现的。但是,将每一次改进都包装成革命,就没意思了。

  目前的方法:多种实践的大杂烩

  我们目前软件开发的方法,无论是商业还是公司内部,新还是旧,需求已知还是不清,实际上都只是来自方法文献中各种元素的组合,加上一些特定于领域或者业务的扩展。基本的成分是一个个实践。

  如果我们将这些基本成分从大杂烩中分离出来,大家就可以建立自己所需的方法。这种方法是以模块的方式设计的,能够在不断总结经验的基础上快速演进,响应我们快速变化的行业的需求。

  构建理论

  经济压力是当前的时代特征,与时装业的跟风和政治宣传一样都不会完全消失。但是,所有关注软件工程价值的方法学者都理应为学科找到存在的理由。

  我们所缺乏的是作为一门科学和工程学的基础:理论及其验证。我们应该采取以下步骤,将软件方法学转变为一种严谨的工作。

  对方法的本质进行建模

  软件开发是一种人的活动,但它也是由若干明确定义的步骤组成的,而且我们对这些步骤之间关系已经有了充分认识。至少,在有经验的从业人员脑中,对这些概念的定义和理解都是不言自明的。但这还不够,我们需要坚实的软件开发理论。形式化方法为我们提供了进行建模的正确工具,含有约定构造(contract)的面向对象语言也可以实现同一目的。如果软件开发的任务和限制没有精确的、无歧义的模型,我们就无法显著地进行改善。模型应该独立于具体方法(只描述问题,而非解决方案);模型应该不仅包含定义和公理,而且还应该包括描述所有系统和可行方法的定理——这恰恰是形式化模型经常缺失的部分。

  寻找内核——所有方法之母

  所有方法在被过度宣传的差异之外,都有许多共同的属性。而以理论作为基础,我们将描述出任何有效的开发高质量软件的方法都应该满足的属性。毕竟,它们都是用来开发软件的,而且都承认软件开发中有一些东西总是需要。我们总是要写代码,用某种方式进行测试,总是要考虑需求(无论要不要文档),总是有backlog(无论显式还是隐式),总是需要计划(无论是写在纸上,还是留在脑子里)。

  我们需要找到软件开发本质的不能再简化的内核(Kernel)。例如,通过研究大约50种方法包括XP和Scrum,我们已经找到了一个包含超过15个元素的内核,其中的元素是我们总要做的事情或者总要生成的东西。

  使用内核描述各种有价值的方法

  有了内核之后,所有方法都可以进行描述和比较。我们可以从所有广泛使用和经过验证的方法或者过程中采集隐含的实践,比如架构、组件、迭代等等。有些实践是重叠的,比如用例驱动开发和特性驱动开发。有些是互相补充的,比如用例驱动开发和按约定设计。

  内核清除了方法之间表面存在的差异,比如不同方法中只是称呼不同的相同事物。比如,RUP所说的迭代在Scrum中称为sprint,但是它们基本上说的是一回事。通过这种清理,可以明显地看出不同方法之间真正的差异。

  因为内核对于任何具体的实践都是中立的,我们可以简单地分辨出不同实践之间的实际区别,不是表面上的,而是深层次的。这将减少各种方法中包含的“宗教”成分。

  行动起来!

  本文是一篇行动呼吁书,我们希望它能够被所有同意软件业应该进入成熟阶段的同仁所接纳(当然,还需要进行适当的修订)。

  最重要的一步,可能是认识到不同学派应该求同存异。具体而言,要认识到以下两点。

  敏捷与过程:这两者之间的差异被夸大了。它们的目标其实是一样的:流畅地开发出优秀的软件。所有过程都需要敏捷,因为与其他领域相比,软件中变化是规则,稳定则是例外。与此同时,所有敏捷方法如果要应用于关键的企业项目,还是需要过程,包括规格说明和设计。

  形式化与非形式化:软件开发人员必须认识到,任何进展都会多多少少包含一些形式化方法,没有必要畏之如虎。所有工程都要依赖数学:我们能够想象电气或者机械工程师不愿意学习和运用数学工具吗?形式化方法当然有其局限——没人说它们能解决任何问题,但是形式化方法绝不是纯理论,它们的价值早已经被不断证明了。无论我们是否能认识到这一点,它们都已经在一些领域(现代编程语言中的类型检查就是一种证明形式,而硬件设计也越来越依靠数学工具)广泛应用了。随着IT业向更专业的运营方式发展,有选择的数学工具的运用将与日俱增。

  仅仅通过忽略表面上的差异,并充分利用已有的概念,我们将能够为业界提供曾经只能从专家们那里得到的东西:科学上坚实、而且实用的方法和工具。

  这就是我们的看法。我们是否像堂吉诃德那样在挑战风车呢?还是有可能就此对现在开发方法中混乱的局面正本清源,开发出业界所需要的坚实基础?有一点是肯定的:进步只能来自许多人的通力合作。已经有许多论坛在讨论这些问题,请从我们的博客(http://ivarblog.com/, http://bertrandmeyer.com)开始。欢迎将你的想法告诉我们,帮助软件工程学科进入成熟阶段。

时间: 2024-09-19 09:24:44

软件开发方法需要理论的相关文章

《面向对象分析与设计》一1.1传统软件开发方法中存在的问题

1.1传统软件开发方法中存在的问题 20世纪60年代以前,软件开发者构造的软件系统的规模大多较小,且构造相对简单.那时所使用的编程语言和编程环境也相对简单,常见的编程语言有汇编语言以及随后出现的一些高级编程语言(如FORTRAN和COBOL等).当时人们认为软件开发是一项强烈依赖个人技巧和技术能力的艺术性劳动,崇尚程序员的个人技能,没有认识到需要使用什么方法.那时产生的代码,按现在的人们所形容的,是意大利细面条式的,那是因为代码中含有较多的GOTO语句.随着软件复杂性的增长,那种随心所欲的做法会

《中国人工智能学会通讯》——4.27 电子数据取证理论与技术

4.27 电子数据取证理论与技术 电子数据取证的概念 电子数据取证是指恢复已被破坏的计算机数据及提供相关的电子数据证据.利用计算机软硬件技术,以符合法律规范的方式对计算机入侵.破坏.欺诈.攻击等违法犯罪行为进行证据获取.保存.分析和出示的过程. 电子数据取证理论与技术 电子数据取证技术是伴随着计算机技术.网络技术.信息安全技术发展而快速发展的一个新兴领域,近年来取得了许多重大成就,然而从电子数据取证理论和技术的实际运用中可以发现,当前的电子数据取证技术还存在着很大的局限性.未来电子数据取证面临着

软件工程之结尾篇

        我们曾经花时间研究新的方法或实践,最后却发现它只是我们已经见过无数次的某种思想的改头换面?我们曾经烦恼过,每个软件开发新思路似乎都以过去的一切为代价,都与过去的一切水火不容?在我们看来,追逐最新的软件开发趋势是否已经变得比生产优秀的软件更重要?        很多时候我们草率地丢弃昂贵的过程和工具的投资,甚至在尝试它们之前.每个项目都采用新方法.这是没有效率的,如果我们不能从经验中学习,那么只有永远从头开始.底线是,没有什么新事物能够被适当地固定下来--即使经过几种"现代&quo

认识VF--Visual FoxPro 漫谈

visual BOE.COM Article Resource News Links About US      文章标题Visual FoxPro 漫谈 作品来源BOE 数据网络工作室 创建日期 2001年02月23日 最后更新 2002年07月21日  文字数量 约22000字 作者姓名 陈纯 译者姓名 原创作品 无译者 版权声明 版权属于BOE 数据网络工作室  相关下载 --  细节描述      作为市场上最灵活和功能最强大的数据库管理系统,Visual FoxPro拥有悠久而辉煌的发

《.NET软件技术学习与实践》之序言

  自序        这是一本有自已特色的书.       这是一本于讲技术之外,更讲学习方法的书       这是一本从首至尾贯彻"授人与鱼,不如授人与渔"的书       2003年暑假我在CSDN程序人生论坛发表的个人自传--<一个普通IT人的十年回顾>(已收入本书配套光盘),一石激起千层浪,被许多网站转载,我个人也收到了海内外近千封电子邮件.       我是一个在没有明师指导情况下,几乎完全靠自己在黑暗中摸索,在自学之路上艰难跋涉过来的软件开发者.我不敢自称为&

用精益思想塑造创新型组织

自从彼得·德鲁克提出"创新型组织"的概念,它就成了企业管理者们口中的热词.尤其是IT企业,家家 都希望打造出一支极具创新活力的团队.但一直以来,关于创新型组织的理论讨论多,关于"如何打造创新型 组织"的实践讨论少.创新型组织仍然像天上的月亮:看上去很美,但是不知道该怎么抓在手里. 笔 者作为一家跨国IT企业成都公司的负责人,在经营这间分公司的过程中一直把提升组织创新能力作为工作重心 之一,也获得了一些成果.本文将与读者分享这些成果和我们打造创新型组织的实践经验. 一

软件研发环节的持续交付容器技术尽在睿云智合Wise2C

睿云智合持续交付产品负责人,在敏捷和DevOps领域有丰富经验的实践,过去作为敏捷和DevOps技术教练向多家大型企业提供咨询和培训服务. 持续交付理论要解决的最重要的问题就是,如何以最快的方式将我们的软件交付到客户手上:如何实现可靠,迅速并且低风险的软件发布. WiseBuild 开箱即用的双模CI/CD持续交付平台,可以支持容器以及传统交付两种方式的持续集成与部署.为行业应用的开发,测试和软件发布提供全流程的管理,同时可以对开发,测试,预生产环境进行快速创建及管理. 在传统的软件开发方法中我

深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念_php技巧

MVC MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V).控制器(C),它们各自处理自己的任务. 视图 :视图是用户看到并与之交互的界面.对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.如何处理应用程序的界面

《软件工程方法与实践》—— 导读

前 言 软件工程包含一系列软件开发的基本原理.方法和实践经验,用来指导人们进行正确的软件开发.软件工程强调从工程化的原理出发,按照标准化规程和软件开发实践来引导软件开发人员进行软件开发和实践活动,并进行过程改进,促进软件企业向标准化和成熟化的方向发展.软件工程是一门理论与实践相结合的学科,更注重通过实践来理解原理和方法.为此,我们结合多年的软件工程教学和项目开发经验,通过5个项目实例,从不同的角度.利用不同的方法学来循序渐进地介绍软件开发过程中所涉及的原理.方法和技术.本书的另一个特色是从问题的