第1章 概述
在过去的50年中,计算机已被用作商业用途。起初,计算机运行速度很慢,结构也很简单。但是,从其面世以来,计算机的运算能力及其结构的复杂程度就在不断地增加,而价格却呈下降趋势。由于出现了几次重大的技术突破,计算机的速度有了显著提升,制造成本也得到了大幅削减。
计算机越强大,就越能够运行更复杂的程序。因此,随着计算机的每一个方面的改善,软件工程师需要以最佳成本效益和最有效的方式解决更大和更复杂的问题。令人钦佩的是,软件工程师们通过创新和借鉴过去的编程经验应对了这一挑战。而过去这些以最佳成本效益和最有效的方式进行的创新以及撰写高质量程序的经验,全都被系统地组织到一个知识体系中,形成了软件工程原则的基础。从这个角度来看,我们可以说软件工程这个学科论述的是系统的及符合成本效益的软件开发方法,它们来自于从过去的创新和错误中得到的教训。
或者,我们可以把软件工程看作是开发软件的工程方法。究竟什么才是开发软件的工程方法呢?让我们用一个比喻来尝试回答这个问题。假如你让一个小承包商为你建一个小房子,而这个小承包商并不是专门建房的,他们通常进行小型的维修工程,至多有时承担一些很小的建筑工程,例如围墙施工等。现在面临的任务是建造一个完整的房子,你的小承包商将借鉴他所有关于建房的有限知识。可是,他可能会手足无措,根本不知道应该做什么。举例来说,他可能不知道如何为了让建筑物实现足够的结构强度,所需的水泥和沙子混合的最佳比例。在这种情况下,他只能依靠他的直觉了。如果你让他建的房子足够小,他极有可能会继续他的工作,摸索着干下去。但是即便是这么小的房子,也许他也不如一个专业人士修建得好。房子可能缺乏妥善规划,建成后不可避免地会出现一些缺陷和不完善之处。它甚至要比专业人士修建花费更多的钱,需要更长时间才能建成。
现在,假设你把建立一个50层的大型商业大楼承包给了你的小承包商,他可能会谨慎从事,并婉言拒绝你的请求。另一方面,他也可能会雄心勃勃,同意承担这项任务。在后面的情况下,他注定会失败的,其失败情形可能是以下面几种形式出现:由于他对建筑材料的强度理论的一无所知,大厦在施工时就会倒塌;如果他不准备正确估计和详细计划所需原材料的种类和数量以及所需的时间等,工期可能会被拖延比较长的时间。
展开