什麽是软件工程 (Software Engineering)?我们还需要它吗?

软件工程的范围极其广泛。软件工程的某些方面可以归类为数学或计算机科学;其他方面属於经济、管理或心理学领域。为了展示软件工程的广泛领域。

无论我们是处理计费还是防空事务电脑糸统,我们的大部分软件交付延迟、超出预算并存在残余故障,无法满足客户的需求。软件工程就是试图解决这些问题。换句话说,软件工程是一门学科,其目标是生产无故障的软件,在预算范围内按时交付,满足客户的需求。此外,当用户的需求发生变化时,软件必须易於修改。

发电机偶然发生故障是一个事实,但频率远低於各类型软件糸统, 不是吗? 桥梁有时会崩溃,但比操作软件系统时崩溃要少得多。1967 年,北约的一个研究小组认为软件设计、实施和维护可以与传统工程学科处於同一地位,因此创造了软件工程 (Software Engineering) 一词。1968 年在加米施举行的北约软件工程会议认可了构建软件类似於其他工程任务的说法,

软件工程反映了这样一种信念,即软件生产应该是一种类似工程的活动, 软件工程应该使用已建立的工程学科的哲学和范式来解决软件质量普遍低得令人无法接受,并且没法截止日期和预算内完成。

尽管有许多软件成功案例,但仍有很大比例的软件产品交付延迟、超出预算并带有残余故障。例如,Standish Group 是一家分析软件开发项目的研究公司。

https://ithelp.ithome.com.tw/upload/images/20211012/20109081B46hGQqgjQ.png

他们对 2006 年完成的开发项目的研究总结在图 [Rubenstein, 2007] 中。只有 35% 的项目成功完成,而 19% 在完成前被取消或从未实施。其余 46% 的项目已完成并安装在客户的计算机上。但是,这些项目超出预算、延迟或特性和功能少於最初指定的。换句话说,在 2006 年,只有三分之一以上的软件开发项目是成功的;几乎一半的项目表现出一种或多种问题

软件危机的财务影响是可怕的。在Cutter Consortium[2002]进行的调查中,报告了以下内容:

  • 令人震惊的是,78%的资讯技术组织卷入了以诉讼告终的纠纷。
  • 在67%的情况下,交付的软件产品的功能或效能不符合软件发展人员的要求。
  • 在56%的情况下,承诺的交付日期多次下滑。
  • 在45%的情况下,故障非常严重,软件产品无法使用。

很明显,按时交付的软件太少,在预算范围内,无故障,满足客户需求。为了实现这些目标,软件工程师必须掌握广泛的科技和管理技能。这些技能不仅要应用於程序设计,还要应用於软件生产的每一个步骤,从需求到交付後维护。

https://ithelp.ithome.com.tw/upload/images/20211012/20109081wD8A2DichQ.png

从图中可以看出,即使到现在,软件系统的成功率也没有太大的提高。但公平地说,软件的发展速度越来越复杂,我们的生活离不开它们。这就是为什麽在过去的几十年里出现了这麽多不同的软件发展方法。

这里有一些相关的软件发展资源


<<:  Day 30 GUI

>>:  Day 28 -资料库应用小程序 会员新增删除(内涵程序码)

DAY23: 自定义模块

在DAY21: NPM模块管理工具有提到Nodejs主要有内置模块(包含核心模块)、npm第三方模块...

STM32开发笔记04---配置系统时间

架构图 思考重点 本文的目的是使用HSE外部晶振来配置系统时钟 参考手册中的时钟树如何理解 理解开发...

Day 30 - 台湾AI 之进行式-智慧医疗保健

来自Microsoft PWC 报告,2017 "非结构化资料是在有组织的资料库之外储存的...

Day 21. slate × Operation × Entrance

上一篇我们介绍了 interfaces/operations.ts 里定义的 Operation ...

过保碎屏就得换手机?试试iPhone爆mon来拯救!

现在的智能手机萤幕是越做越大,不论是看电影还是打游戏都有非常好的体验,但随之而来的,是更高的碎屏风险...