《软件工艺》—第1章“有组织的、可计量的”软件开发过程现实吗?

“有组织的、可计量的”软件开发过程现实吗?
软件工艺
对于软件开发来说,所谓“确定的、可重复的过程”真的能够达到吗?SCRUM软件开发过程1的创始人曾经这样说道:

如果某个过程能够完全确定下来(即能够了解过程所涉及的所有细节,从而将其设计为可以重复地多次运行,并且完全能够预测其结果),那么该过程就被称为“确定过程”。从理论上来说,一切确定的过程都可以被自动完成。另一方面,如果人们并未了解某个过程中的所有细节,只是大致地知道在某些初始条件下、通过某些调节和控制就能得到想要的结果,这样的过程就被称为“经验过程”。2

按照这个定义,软件开发不是一个确定过程。实际上,我们所能希望获得的最好结果也就只是一个经验过程而已。之所以这样说,是因为所有的软件需求都来自于人。需求的获取无法自动完成,开发者必须和用户彼此沟通才可能了解用户真正的需求。同样,用户也必须在与开发者的交流中了解项目中存在的技术局限性和克服这些局限所需要的开销,从而不断调整自己要求的功能,使软件项目的性价比达到最佳。

在软件开发者了解用户的需求之后,下一个问题就是:如何将这些需求记诸文档。在一个确定的开发过程中,我们应该从一开始就整理出完整而明确的需求。可是,在一般情况下,要想做到这一点难于登天。Gause和Weinberg曾经非常精辟地阐释过这个问题3:对于一个最简单的句子,“玛丽有一只小羊”,根据语句的重音不同,就可能有截然不同的含义。

玛丽有一只小羊。(是玛丽的羊,而不是约翰的。)

玛丽有一只小羊。(她的确有这只羊,不是骗人的。)4

玛丽有一只小羊。(她只有一只羊,没有更多的。)

玛丽有一只小羊。(这只羊真小,小得令人吃惊。)

玛丽有一只小羊。(她拥有的是一只羊,而不是火鸡。)

从这个例子中,我们就可以清楚地看到:对于任何一种自然语言,实际上根本无法做到精确无误的地步。需求获取要求开发者与用户保持紧密的联系,即使在需求文档成型之后,开发者也需要不断与用户交流,因为谁都无法保证需求文档中所写的内容不会有多种不同的解释。由于自然语言与生俱来的不精确性,你不可能喜欢一个确定而僵死的需求获取过程。

我们当然可以将软件开发中的某些部分自动化,不是吗?
当然,我们可以。但只有确定的过程才能被自动化,而那些需要大量人际交流的部分则无法被自动化。现在的确有很多这样的工具存在,它们将软件开发中的一些小规模的、精确定义的行为自动化了,它们对于提高软件开发的效率大有裨益。例如,配置管理工具和构建工具能够自动地将高级编程语言的代码转换成相应的低级语言代码甚至机器代码。我们能够实现这样的自动化工具,是因为我们可以精确地定义这个转换的过程。

但是,我们必须记住:在软件开发中,绝大部分可以被自动化的工作都已经被自动化了。也就是说,我们已经拥有了软件开发所需要的绝大多数工具——唯一缺少的就是使用现有工具的技巧和能力。仍然以构建工具为例:自动化的构建过程可以在无人值守的情况下自动运行,并将构建过程中的失败信息通过电子邮件通知关键开发者,从而极大地减少构建的工作量。可是,我所观察过的大多数商用软件开发项目都没有这样的自动化构建过程,因此,拥有这一能力的项目组就占了很大的优势。而且,自动化构建还是项目的一张安全网:每当项目的核心源码被修改时,整个应用程序就会被重新构建,随后自动运行回归测试,以确保这次修改没有造成任何破坏。如果一个项目没有这样的安全网,我简直无法想象如何在其中工作。

当我们将软件开发中一个又一个的部分自动化以后,我们却发现:软件开发仍然是一团乱麻,其中的复杂性和困难性并没有消失,只是换了个形式而已。只有对那些能够完全了解的问题,我们才能用系统化的方式来解决,因此软件工程就将我们的注意力集中到了软件开发中机械的部分,进而忽视其他非机械的部分。所以,尽管我们有了高级语言的编译器和解释器,尽管我们有了各种各样的新技术,实际上仍然没有任何办法帮助我们设计用户真正需要的东西,而且能够帮助我们找出用户的真实需求的工具或技术更是少之又少。

1 http://www.controlchaos.com/
2 http://www.controlchaos.com/ie.htm
3 Don Gause和Gerald Weinberg,《在设计之前,先了解需求质量》(Undersanding Requirements Quality Before Design),Dorset House,1989。
4译注:此处原文是“Mary had a little lamb”,表示的含义是“玛丽现在已经不再拥有这只小羊”。为了方便读者理解,译者根据汉语的语言习惯做了调整。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-09-16 23:31:28

《软件工艺》—第1章“有组织的、可计量的”软件开发过程现实吗?的相关文章

《软件工艺》目录—导读

版权声明 软件工艺 Authorized translation from the English language edition, entitled Software Craftsmanship: The New Imperative, 0201733862 by Pete McBreen, published by Pearson Education, Inc., publishing as Addison-Wesley, Copyright 2001 Pearson Education,

《软件工艺师:专业、务实、自豪》一3.7.6 《软件工艺宣言》及讲解

3.7.6 <软件工艺宣言>及讲解 我们是有理想的软件工艺师,立志践行软件工艺并帮助他人学习软件工艺,以提升软件开发的专业水准.在此过程中,我们形成如下理念:不仅要开发出可行的软件,还要做工精良.不仅要应对变化,还要持续提升软件价值.不仅要注重个体与交互,还要打造专业的社团.不仅要注重客户协作,还要培养高效的伙伴关系.也就是说,在追求左侧价值的同时,我们也认为右侧那些价值是不容忽视的.软件工艺的实质就体现在宣言里"提升专业水准"这一表述之中.有一群经验丰富且才华卓越的开发者

《软件工艺师:专业、务实、自豪》一3.7.4 软件工艺社团

3.7.4 软件工艺社团 软件工艺自1999年诞生以来一直遭到某些人反对,但到了2008年和2009年,这个概念已经大放异彩了.业界出现了很多软件工艺专著,也举办了一些软件工艺会议,此外,全球各地的用户都可以通过邮件列表来参与软件工艺活动,美国.伦敦,以及欧洲其他地方,也出现了一些软件工艺社团.2009年12月,Uri Lavi创立了以色列软件工艺社团(Israeli Software Craftsmanship Community).2010年8月,David Green与笔者一起创办了伦敦软

《软件工艺》—第2章软件工程的困境

第 2 章 软件工程的困境软件工艺软件工程存在的最大问题就是:它假设那种"有组织.有纪律.可计量的开发方式"是唯一可行的方式.软件工程实际上是把工程学的隐喻强加于软件开发之上,从而使我们一叶障目不见泰山,看不到其他开发方式的存在.有一个例子能够将这一问题彰显无遗,那就是软件工程中的"缺陷可能性"和"缺陷排除率"这两个概念: 缺陷可能性:软件项目中预期可能存在的全部错误和缺陷.缺陷排除率:在将软件项目发布给消费者之前,被排除的缺陷占潜在缺陷总数的百

《软件工艺》—第1章软件工程的悖论

第 1 章 理解软件工程软件工艺为了看清软件工程适用(以及不适用)的范畴,我们首先需要对软件工程有一个深入的理解.为了理解软件工程,我们首先需要了解在早期的软件工程文献中提到的那些项目.稍做研究,你就会发现一个令人惊讶的事实:这些文献中几乎没有对商用软件的报告.在所有的案例中,绝大多数都是大型国防项目或者小型科研项目.在这两类项目中,开发者通常都需要面对极其严峻的硬件/软件条件:而在现代的商用项目中,环境通常会宽松得多. 一个非常典型的例子就是美国国防部于1969年至1975年间开发的SAFEG

《软件工艺》—第1章软件工程适合你的项目吗?

软件工程适合你的项目吗?软件工艺需要同时开发全新的软/硬件系统的系统工程类项目显然是适于使用软件工程方法的,很多国防项目和航天项目都可以归于这一类.如果我要乘坐一架数控驾驶的航天飞机飞向太空的话,我一定会希望飞行控制软件的开发和检验是以一种"有组织.有纪律.可计量的方式"进行的.起码,如果听说这个软件是"由出价最低的软件公司开发的",我的心里一定不会太好受. 另一方面,如果你的企业需要开发大型的.打包销售的消费类软件,并且又善于作出恰当的工程学权衡,那么你很可能会使

《软件工艺》—第1章谁能取代软件工程?

谁能取代软件工程?软件工艺软件工程的替代品其实还不止一个.在过去的几十年中,人们尝试用很多种不同的方式来开发软件.不过,在开始讨论这些问题之前,我们必须首先摆脱机械刻板的"软件工程"这个隐喻,去了解软件开发的真实本质. 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

《软件工艺师:专业、务实、自豪》一2.7 敏捷软件开发与软件工艺的关系

2.7 敏捷软件开发与软件工艺的关系 经常有人误解软件工艺,认为它与敏捷开发是互斥的,是用来取代敏捷开发的.事实完全不是这样,它们能相互补充.时下的敏捷开发可以给软件组织及软件行业提供一套新思路.敏捷开发方式关注软件产品的价值.提倡根据价值排定优先级.简化繁琐的规章制度.减少浪费.扩大开发人员的参与范围,并提供快速反馈.这使得公司能够更迅速地应对变化,从而变得更加敏捷.敏捷开发方式帮助软件公司做正确的事.而软件工艺则涉及软件开发的专业技术层面.软件工艺是一种理念,许多开发者采用这种理念来激励自己

《Total Commander:万能文件管理器》——第2章.初识TC 第2.1节.软件安装与软件金字塔

第2章.初识TC 目的:帮助读者建立起对TC的基本认识,并判断自己是否需要TC. 要点:对TC的认识过程(也是对任何软件的认识过程),按xbeta总结的4条途径依次展开,即熟识用户评价.界面.评论与口碑.功能共4个方面.在文章后半部分,还会引导大家安装TC,并体验几项功能,以便有更直观的感受. 第2.1节.软件安装与软件金字塔 对软件爱好者来说,安装新软件是再平常不过的事,似乎也是研究软件的第一步.但是,务必牢记的是:安装软件是有风险和成本的,应慎重对待. 如何慎重对待呢?历来有两大门派:外家.