java|温故知新-什么是软件工程

回忆起大学,记忆最深的就是那些学不明白的专业课了。其实我认为专业自己学不明白的根本原因是:老师也不明白。现在信息比我上大学的时候丰富了许多,该抽点时间弥补一下大学时的缺憾。今天咱们就来聊一聊我大学时没有上过的这个专业的必修课《软件工程导论》。

为什么我大学时为什么没有上过这个课呢。我竟然在学习这个课的过程中找到了答案。

什么是软件

软件定义

1983年IEEE提出了软件的定义:计算机程序、文档、运行程序必需的数据、方法、规则。
因为方法和规则在文档中说明,在程序中实现。所以软件定义可以被简化为:
软件=程序+文档+数据
这个定义告诉咱们:程序只是软件的一部分。平时工作工作中也需要把文档和数据重视起来,做好检查。设计图、架构图、接口文档甚至是产品文档都是软件工程师需要参与的部分。

软件分类

软件分类有很多不同的划分方法。今天来看两种:基于软件功能的划分和基于软件规模的划分。

基于软件功能的划分

  • 系统软件
    与计算机硬件紧密配合使计算机更好工作的软件。比如:操作系统、编译程序、杀毒软件。
  • 支撑软件
    协助软件开发的工具性软件。比如:intelij、画图工具。
  • 应用软件
    这个细分种类最多。咱们读者中大多数也都是从事这个开发的。又包含:商业处理软件、工程与科学计算软件、智能产品嵌入软件、人工智能软件、个人计算机软件五类。
    对于应用软件我不举例子,因为大家接触比较多,留给大家自己思考。我还留了一个思考题:
基于软件规模的划分

java|温故知新-什么是软件工程
文章图片

这是根据参加人数、开发周期和代码行数来划分的。实际工作中,微型规模的我常见的只有脚本类了。按照项目制的话,中型、大型较为常见。

微软有两个曾经家喻户晓的产品,一个是电子邮件系统exchange2000,一个是操作系统windows2000。今天大家来感受一下其成本上的差异:

java|温故知新-什么是软件工程
文章图片

windows2000光项目经理就有250人,不愧是你。

什么是软件工程
软件工程产生的背景
软件工程的产生也是问题驱动的产物,所以就不得不说软件发展过程和软件危机。

java|温故知新-什么是软件工程
文章图片

软件发展经历了4个阶段。
阶段一
在第一个阶段程序设计中,最重要的特性是软件生产的个体化。就是说软件的生产者和使用者是同一个人。因为是软件设计者自己来使用,没有沟通成本,所以没有文档,只有程序设计。计算机之父冯诺依曼发明计算机当时的用途也是为自己减少人工计算。
提到冯诺依曼,咱们顺便理一理和计算机发明有关的4个人物与计算机的关系。他们分别是:巴贝奇、艾达、图灵和冯诺依曼。

巴贝奇,在中国很少听到,但在国外却是公认的计算机之父。准确的说是通用计算机之父。1823年,英国人巴贝奇,得到政府的支持,设计一台容量为20位数的计算机。这台机器与冯诺依曼计算机的最大区别是他是机械物理原理,不用电。
java|温故知新-什么是软件工程
文章图片


之后,一个小他20岁的伯爵夫人找到了他,提出要做他的合伙人。这个人就是被称为历史上第一个程序员的女神艾达。艾达是诗人拜伦的女儿。没错,就是那个写《唐璜》的英国浪漫主义诗人拜伦。艾达没有继承父亲的文学事业却继承了数学家母亲的衣钵。艾达为计算机设计了30多种功能和算法,在一个世纪之后,这被称之为“程序”。可惜的是这个史上第一位程序员由于受到机械时代的限制,所有的设计没有实现,本人其实一行代码都没有写过。
java|温故知新-什么是软件工程
文章图片

图灵被称为计算机科学之父,人工智能之父。他是计算机理论的设计者,并没有存留下来的计算机实体。其理论思想到现在仍不过时。可惜的是其本人由于同性取向的问题受尽迫害,最终自杀。

java|温故知新-什么是软件工程
文章图片

在《白话linux操作系统原理》中,我讲过冯诺依曼体系结构。事实上,冯诺依曼体系结构是站在巨人肩膀上的产物:体系结构第一个要点计算机的数制采用二进制,这个最初是艾达提出,并由巴贝奇采纳作为分析机的设计基础。冯诺依曼设计了第一台电子计算机。
java|温故知新-什么是软件工程
文章图片

阶段二

在第二个阶段程序系统阶段中,出现了开发定制化软件产品的团队或者公司,由于那个阶段团体规模较小,主要以程序开发为主,没有技术上实际的提升,这些团队被叫做软件作坊。
因为我毕业的时候,这种软件公司还是主流。所以也理解了大学时专业课的安排:都是以程序设计为主。还不到软件工程的层次。

回过头来说软件作坊,软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发 。
软件危机就是泛指由于计算机软件的开发和维护过程中所遇到的一系列严重问题。
阶段三

1968年,北大西洋公约组织在德国召开会议,提出了软件工程的概念,希望用工程化的原则和方法来克服软件危机。这门学科产生直接让软件进入软件工程阶段。
阶段四

阶段四是个蓬勃发展的时期,就像人们学会了炼铁之后,铸造业的蓬勃发展一样。我刚毕业的时候,找工作经常问到的几个概念就出自这个阶段。下面介绍这个阶段出现的几个常用模式。
C/S模式
java|温故知新-什么是软件工程
文章图片

客户端/服务器二层架构客户端负担较重,被称为胖客户端。
java|温故知新-什么是软件工程
文章图片

客户端人机交互程序/应用服务器/数据库服务器三层架构,也是现在都比较常见的架构,被称为瘦客户端。比如咱们用的手机APP。
B/S模式

java|温故知新-什么是软件工程
文章图片

浏览器/服务器模式也分三层,实现了客户端不需要安装软件。这个大家就已经熟悉到了不用举例了。
软件工程的定义
软件工程是在阶段二为了应对软件危机而生的。
1993年,IEEE给出了软件工程的定义:把系统化、规范化、可度量的途径用于软件开发、运行和维护过程中,研究其实现途径。

咱们知道IEEE的定义一向不好记忆和理解。所以下面从研究内容上给出软件工程的内容范围:
java|温故知新-什么是软件工程
文章图片

总结

【java|温故知新-什么是软件工程】从软件到软件工程的发展过程,我们了解到软件工程是为了解决软件发展过程中遇到的问题而生,主要分为工程技术和工程管理。而研究生的很多专业就是对软件工程领域的细分。

    推荐阅读