《实践者的研究方法》—— 第2章 软件工程 2.4 软件开发神话

2.4 软件开发神话

软件开发神话,即关于软件及其开发过程的一些被人盲目相信的说法,这可以追溯到计算技术发展的初期。神话具有一些特点,让人觉得不可捉摸。例如,神话看起来是事实的合理描述(有时的确包含真实的成分),它们符合直觉,并且经常被那些知根知底的有经验的从业人员拿来宣传。

今天,大多数有见地的软件工程师已经意识到软件神话的本质——它实际上误导了管理者和从业人员对软件开发的态度,从而引发了严重的问题。然而,由于习惯和态度的根深蒂固,软件神话遗风犹在。

管理神话。像所有领域的经理一样,承担软件职责的项目经理肩负着维持预算、保证进度和提高质量的压力。就像溺水人抓住稻草一样,软件经理经常依赖软件神话中的信条,只要它能够减轻以上的压力(即使是暂时性的)。

神话:我们已经有了一本写满软件开发标准和规程的宝典,难道不能提供我们所需要了解的所有信息吗?

事实:这本宝典也许的确已经存在,但它是否在实际中采用了?从业人员是否知道这本书的存在呢?它是否反映了软件工程的现状?是否全面?是否可以适应不同的应用环境?是否在缩短交付时间的同时还关注产品质量的保证?在很多情况下,问题的答案是否定的。

神话:如果我们未能按时完成计划,我们可以通过增加程序员人数而赶上进度(即所谓的“蒙古游牧”概念)。

事实:软件开发并不是像机器制造那样的机械过程。Brooks曾说过[Bro95]:“在软件工程中,为赶进度而增加人手只能使进度更加延误。”初看,这种说法似乎与直觉不符。然而,当新人加入到一个软件项目后,原有的开发人员必须要牺牲本来的开发时间对后来者进行培训,因此减少了本应用于高效开发的时间。只有在有计划且有序进行的情况下,增加人员对项目进度才有意义。

神话:如果决定将软件外包给第三方公司,就可以放手不管,完全交给第三方公司开发。

事实:如果开发团队不了解如何在内部管理和控制软件项目,那么将无一例外地在外包项目中遇到困难。

客户神话。软件产品的客户可能是隔壁的某个人、楼下的一个技术团队、市场/销售部门或者签订软件合同的某个外部公司。多数情况下,客户之所以相信所谓的软件神话,是因为项目经理和从业人员没有及时纠正他们的错误信息。软件神话导致客户错误的期望,最终导致对开发者的不满。

神话:有了对项目目标的大概了解,便足以开始编写程序,可以在之后的项目开发过程中逐步充实细节。

事实:虽然通常很难得到综合全面且稳定不变的需求描述,但是对项目目标模糊不清的描述将为项目实施带来灾难。要得到清晰的需求描述(经常是逐步变得清晰的),只能通过客户和开发人员之间的持续有效的沟通。

神话:虽然软件需求不断变更,但是因为软件是弹性的,因此可以很容易地适应变更。

事实:软件需求的确在随时变更,但随变更引入的时机不同,变更所造成的影响也不同。如果需求变更提出得较早(比如在设计或者代码开发之前),则对费用的影响较小;但是,随着时间的推移,变更的代价也迅速增加——因为资源已经被分配,设计框架已经建立,而变更可能会引起的剧变,需要添加额外的资源或者修改主要设计。

从业者神话。在60多年的编程文化的滋养下,软件开发人员依然深信着各种神话。在软件业发展早期,编程被视为一种艺术。旧有的方式和态度根深蒂固。

神话:当我们完成程序并将其交付使用之后,我们的任务就完成了。

事实:曾经有人说过,对于编程来说,开始得越早,耗费的时间就越长。业界的一些数据显示,60%~80%的工作耗费在软件首次交付顾客使用之后。

神话:直到程序开始运行,才能评估其质量。

事实:最有效的软件质量保证机制之一——技术评审,可以从项目启动就开始实行。软件评审(第20章)作为“质量过滤器”,已经证明其可以比软件测试更为有效地发现多种类型的软件缺陷。

神话:对于一个成功的软件项目,可执行程序是唯一可交付的工作成果。

事实:软件配置包括很多内容,可执行程序只是其中之一。各种工作产品(如模型、文档、计划)是成功实施软件工程的基础,更重要的是,为软件技术支持提供了指导。

神话:软件工程将导致我们产生大量无用文档,并因此降低工作效率。

事实:软件工程并非以创建文档为目的,而是为了保证软件产品的开发质量。好的质量可以减少返工,从而加快交付时间。

目前,大多数软件专业人员已经认识到软件神话的谬误。对于软件开发真实情况的正确理解是系统阐述如何使用软件工程方法解决实际问题的第一步。

时间: 2024-07-31 11:22:53

《实践者的研究方法》—— 第2章 软件工程 2.4 软件开发神话的相关文章

《实践者的研究方法》—— 导读

前 言 如果有这样一款计算机软件,它能满足用户的需求,能在相当长的时间内无故障地运行,修改起来轻松便捷,使用起来更是得心应手,那么,这款软件必定是成功的,它切实改善了我们的生活.但是,如果有这样一款软件,它令用户失望,错误频出,修改起来困难重重,使用起来更是举步维艰,那么,这必定是一款失败的软件,它使我们的生活一团糟.谁都希望开发出优秀的软件,为我们的生活带来便利,而不是把自己陷入失败的深渊.要想使软件获得成功,在设计和构建软件时就需要有规范,需要采用工程化的方法. 自本书第1版问世以来的近35

《实践者的研究方法》—— 第3章 软件工程 3.1 通用过程模型

第3章 Software Engineering: A Practitioner's Approach, Eighth Edition 软件过程结构 要 点 浏 览 概念:在开发产品或构建系统时,遵循一系列可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品.软件开发中所遵循的路线图就称为"软件过程". 人员:软件工程师及其管理人员根据需要调整开发过程,并遵循该过程.除此之外,软件的需求方也需要参与过程的定义.建立和测试. 重要性:软件过程提高了软件工程活动的稳定性.可控

《实践者的研究方法》—— 第2章 软件工程 2.2 软件过程

2.2 软件过程 软件过程是工作产品构建时所执行的一系列活动.动作和任务的集合.活动(activity)主要实现宽泛的目标(如与利益相关者进行沟通),与应用领域.项目大小.结果复杂性或者实施软件工程的重要程度没有直接关系.动作(action,如体系结构设计)包含了主要工作产品(如体系结构设计模型)生产过程中的一系列任务.任务(task)关注小而明确的目标,能够产生实际产品(如构建一个单元测试). 在软件工程领域,过程不是对如何构建计算机软件的严格的规定,而是一种具有可适应性的调整方法,以便于工作

《实践者的研究方法》—— 第2章 软件工程 2.5 这一切是如何开始的

2.5 这一切是如何开始的 每个软件工程项目都来自业务需求--对现有应用程序缺陷的纠正,改变遗留系统以适应新的业务环境,扩展现有应用程序功能和特性,或者开发某种新的产品.服务或系统. 在软件项目的初期,业务需求通常是在简短的谈话过程中非正式地表达出来的.以下这段简短谈话就是一个典型的例子. SafeHome 如何开始一个软件项目   [场景] CPI公司的会议室里.CPI是一个虚构的为家庭和贸易应用生产消费产品的公司. [人物] Mal Golden,产品开发部高级经理:Lisa Perez,营

《实践者的研究方法》—— 第3章 软件工程 3.3 明确任务集

3.3 明确任务集 我们再来看图3-1,每一个软件工程动作(如需求获取以及与沟通活动相关的动作)都由若干个任务集(task set)构成,而每一个任务集都由软件工程工作任务.相关工作产品.质量保证点和项目里程碑组成.需要选择最能满足项目需要并适合开发团队特点的任务集.这就意味着软件工程动作可以根据软件项目的特定需要和项目团队的特点做适当的调整. 信息栏 任务集 任务集定义了为达到一个软件工程动作的目标所需要完成的工作.例如,需求获取(通常称为"需求收集")就是发生在沟通活动中的一个重要

《实践者的研究方法》—— 第3章 软件工程 3.4 过程模式

3.4 过程模式 每个软件团队在软件过程里都会遇到很多问题.针对这些问题,如果软件团队能够得到已有的经过验证的解决方案,将有助于他们快速地分析和解决问题.过程模式(process pattern)描述了软件工程工作中遇到的过程相关的问题,明确了问题环境并给出了针对该问题的一种或几种可证明的解决方案.通俗地讲,过程模式提供了一个模板[Amb98]--?一种在软件过程的背景下统一描述问题解决方案的方法.通过模式组合,软件团队可以解决问题并定义最符合项目需求的开发过程. 我们可以在不同抽象层次上定义模

《实践者的研究方法》—— 第1章 软件的本质 1.1 软件的本质

第1章 Software Engineering: A Practitioner's Approach, Eighth Edition 软件的本质 要 点 浏 览 概念:计算机软件是由专业人员开发并长期维护的软件产品.完整的软件产品包括:可以在各种不同容量及系统结构的计算机上运行的程序.程序运行过程中产生的各种结果以及各种描述信息,这些信息可以以硬拷贝或是各种电子媒介形式存在. 人员:软件工程师开发软件并提供技术支持,产业界中几乎每个人都间接或直接地使用软件. 重要性:软件之所以重要是因为它在我

《实践者的研究方法》—— 第1.2节 软件的变更本质

1.2 软件的变更本质 四大类软件不断演化,在行业中占有主导地位.这四类软件在十几年前还处于初级阶段. 1.2.1 WebApp 万维网(WWW)的早期(大约从1990年到1995年),Web站点仅包含链接在一起的一些超文本文件,这些文件使用文本和有限的图形来表示信息.随着时间的推移,一些开发工具(例如XML.Java)扩展了HTML(超级文本标记语言)的能力,使得Web工程师在向客户提供信息的同时也能提供计算能力.基于Web的系统和应用软件(我们将这些总称为WebApp)诞生了. 今天,Web

《实践者的研究方法》—— 3.5 过程评估与改进

3.5 过程评估与改进 软件过程并不能保证软件按期交付,也不能保证软件满足客户要求,或是软件具备了长期质量保证的技术特点(第19章).软件过程模型必须与切实的软件工程实践相结合(本书第二部分).另外,对过程本身也要进行评估,以确保满足了成功软件工程所必需的基本过程标准要求. 在过去的几十年中,人们提出了很多种不同的软件过程评估和改进方法. 用于过程改进的CMMI标准评估方法(Standard CMMI Assessment Method for Process Improvement,SCAMP