软件工程之美1讲——到底应该怎样理解软件工程?
软件工程之美1讲——到底应该怎样理解软件工程?
软件是怎么被创造出来的?
首先,它们的诞生都是有人想要造一个东西。
然后,他们立项做这样的产品。
从立项到第一个版本的发布,每个成功的软件都需要有计划、有步骤地进行,什么时候发布第一个版本、第一个版本有什么样的功能、什么时候发布第二个版本、第二个版本有哪些地方要改进,这些都是研发过程中需要考虑的问题。在软件领域,对应的就是“软件工程”,这些我们日常使用的软件背后,都是基于软件工程的方法在开发、运行和维护的。
如何摆脱“软件危机”?
如果是说 OS/360 还只是造成了经济损失的话,Therac-25 事件就是真的导致了人员死亡。Therac-25 是加拿大原子能有限公司(AECL)所生产的放射线疗法机器,在 1985 年到 1987 年之间,在美国及加拿大,至少有六起和 Therac-25 相关的医疗事故是因为程序 bug,导致部分病患受到比正常剂量高一百倍的辐射,因而造成患者重伤甚至死亡。发生这些惨痛的事,原因却并不难理解。在计算机刚发明出来的时候,计算机的能力非常有限,只能接收简单的指令和运算,不需要软件工程也可以开发出简单的软件。但是,当软件的规模越来越大,复杂度不断增加,软件项目开发维护过程中的问题就逐步暴露出来:软件产品质量低劣、软件维护工作量大、成本不断上升、进度不可控、程序人员无限度地增加。所以在 60 年代,“软件危机”的概念被提出来。为了摆脱软件危机,1968 年秋季,北大西洋公约组织的科技委员会召集了近 50 名一流的编程人员、计算机科学家和工业界巨头,讨论和制定对策。在那次会议上第一次提出了“软件工程”这个概念。从此诞生了一门新兴的工程学科:软件工程,它是为研究和克服软件危机而生。在这次会议上,同时也提出了“软件工程”的定义:为了经济地获得在真实机器上可靠工作的软件而制定和使用的合理工程原则。1993 年,电气电子工程师学会(IEEE)给出了一个更加综合的定义:将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。如果你去搜索一下“软件工程定义”,你还能找到很多其他定义,这里就不一一列举。我们没必要花太多时间在这些字面解释上,关键是要抓住这些定义的本质:就是要用工程化方法去规范软件开发,让项目可以按时完成、成本可控、质量有保证。
软件工程的演化史
开发软件本质上也是像盖房子一样,是从无到有创造的过程。工程化的方式,就是你分步.骤(过程),采用科学的方法,借助工具来做产品。于是参考建筑工程,整个软件开发过程也被分成了几个阶段:需求定义与分析、设计、实现、测试、交付和维护,这也就是我.们常说的软件项目生命周期。当然,各个阶段都会有人的参与,于是产生了软件项目里的各种角色:项目经理、产品经理、架构师、程序员、测试工程师、运维工程师。而对这整个过程的管理,我们通常称之为“项目管理”。同时,也很自然就衍生出一套最基础的过程模型:瀑布模型。
现在,如果再回头看看我们的问题“什么是软件工程?”其实可以总结为:软件工程就是用工程化的方法来开发维护软件。也可以说软件工程就是用一定的过程,采用科学的方法,借助工具来开发软件。如果用一个简单的公式表达,那就是:软件工程 = 过程 + 方法 + 工具。