由来

当软件的规模越来越大,复杂度不断增加,软件项目开发维护过程中的问题就逐步暴露出来:软件产品质量低劣、软件维护工作量大、成本不断上升、进度不可控、程序人员无限度地增加。所以在 60 年代,“软件危机”的概念被提出来。

为解决软件危机,由此出现了一门新兴的工程学科:软件工程。软件工程就是要用工程化的方法去规范软件开发,让项目可以按时完成,成本可控,指令有保证

演化史

开发软件本质上也是像盖房子一样,是从无到有创造的过程。工程化的方式,就是你分步骤(过程),采用科学的方法,借助工具来做产品

于是参考建筑工程,整个软件开发过程也被分成了几个阶段:需求定义与分析、设计、实现、测试、交付和维护,这也就是我们常说的软件项目生命周期

当然,各个阶段都会有人的参与,于是产生了软件项目里的各种角色:项目经理、产品经理、架构师、程序员、测试工程师、运维工程师。而对这整个过程的管理,我们通常称之为“项目管理”。

同时,也很自然就衍生出一套最基础的过程模型:瀑布模型。

瀑布模型的诞生,在当时是有非常重大的意义的,让软件开发从无序到有序,让大家更好的分工协作,同时每个阶段又衍生出各自的方法学和工具,例如需求分析、软件测试等等。

然而瀑布的特性决定了它只能从上往下流,而且从上到下走完整个周期很长,所以一旦出现了需求的变更,将会非常痛苦,很多事情需要重头再来。

于是基于瀑布模型,又衍生出 V 模型、原型设计、增量模型、螺旋模型等模型,试图改善瀑布模型存在的一些缺陷。这些改进模型的发展趋势上就是缩短项目周期,快速迭代。

这样到了 90 年代,各种轻量级开发方法例如 Scrum、极限编程等也不断被提出。到了2001 年,这些轻量级开发方法一起组成了敏捷联盟,其后敏捷开发如同星星之火,逐渐形成燎原之势

近些年,云计算、微服务这些新技术的产生,也对软件工程产生了影响。云服务让分工更细,很多企业可以将运维、服务器维护、DBA、甚至某些独立服务交给云服务商;微服务让大团队变成小团队,每个小团队可以更专注于细分领域,减少相互之间的依赖。

一个公式

当你大致了解整个软件工程的演变发展史,你会发现,软件工程的知识,都是建立在软件项目的过程,或者说软件项目生命周期之上的。

基于软件过程,我们有了角色分工,有了对过程的管理和工具,对过程中每个阶段细分的方法学和工具。

如果用一个简单的公式表达,那就是:软件工程 = 过程 + 方法 + 工具

由图可见,“质量焦点”在最底层,这不难理解软件工程是为了应对软件危机诞生的学科,其目标就是为了要聚焦于质量,构建和维护高质量的软件。可以说,聚焦于质量就是软件工程的基石。

那“过程”指的是什么呢?

要构建高质量软件,则要解决软件工程中的混乱,则将软件开发过程中的沟通、计划、建模、构建和部署等活动有效地组织起来。而软件工程,就是在软件项目的生命周期内,也就是软件从诞生到结束这期间,在开发与构建系统时要遵循的步骤。

有两种过程框架你一定经常听到,那就是瀑布模型和敏捷开发。这是在软件工程多年的发展中,逐步形成的两种主流的软件过程指导框架。

那“方法”指的是什么呢?

方法是指在整个过程中,如何构建系统的方法学。比如说,如何分析用户需求;如何对产品进行测试验收;如何进行系统架构设计等。

知道了过程,掌握了方法,那么具体落到操作层面,就会涉及到工具的使用。

我们需要工具来辅助方法的执行,提高效率。通过工具,可以把一些手动的工作自动化,比如自动化测试工具,自动构建部署工具;通过工具,可以帮助把一些流程规范起来,比如Bug 跟踪、源代码管理;还可以通过工具,帮助提高编码效率,比如各种编辑器 IDE、各种高级语言。


软件工程的核心,就是围绕软件项目开发,对开发过程的组织,对方法的运用,对工具的使用。

到底应该怎么理解软件工程

对于大型系统的建设,可否用敏捷方法来实现,一直是个问题。

  • 敏捷方法,适合于小团队(比如两个披萨团队)、小架构。对于大型单体应用的开发,至少在架构设计上是不适合用敏捷迭代方式的。
  • 为了解决大型系统建设的迭代开发、快速交付问题,业内不断在探索。随着微服务架构的提出,以及容器技术的成熟,和 cicd 的实现,单体巨石应用被拆解成分布式的微服务应用,此时,敏捷方法也就开始真正大行其到了。

所以,微服务、容器、devops 这三剑客和敏捷方法一起,互为依存、互相促进,成为了软件工程中最有生命力的技术工具和流程,使软件开发在质量和效率上得到极大提升。

学习自动化测试其实不等于一定能缩短测试周期,“测试周期”的定义如果是测试独占的项目时间段的话,可以通过测试前移,加强自测,契约优先的接口自动化测试等来缩短独占时间。没有系统或者不够工程化的自动化测试脚本,反而会增加测试时间。

软件工程:到底应该怎么理解软件工程相关推荐

  1. 《软件工程之美》—— 理解软件工程

    文章目录 1.什么是软件工程 1.1.定义 1.2.演化史 1.3.软件工程的核心 2.Everything is a project 2.1.什么是工程方法 2.2.使用工程方法的好处 3.软件工程 ...

  2. “软件工程”到底学什么(一)

    "软件工程"到底学什么? 学弟或者准学弟是不是有这样的疑问?然后我会以我大学个人经历开始写,废话会比较多,就当看故事吧. (题外话,不喜欢看的略过)其实我当初选择软件工程是因为我从 ...

  3. 软件工程到底是学啥的?就业前景咋样?

    软件工程到底是学啥的? 件工程专业主要学C++程序设计.java.python.高等数学.数据结构.算法设计与分析.汇编语言程序设计.数据库系统.软件工程等.就业方向方向包括:编写程序,做软件开发:做 ...

  4. 【软件工程之美笔记】软件工程之美01基础篇

    软件工程之美-极客时间 时间安排 基础篇理论9讲(2022年9月18日完成3讲内容) 项目规划篇8讲(未开始) 需求分析篇(未开始) 系统设计篇(未开始) - 软件工程 如何全面提升软件工程能力和实践 ...

  5. 《软件工程》第一章——初始软件工程

    1.1 软件无处不在 软件是软件工程的研究对象,也是软件工程的产品形态于客观存在. 工程是理论知识应用于实践的科学,其目的是经济有效地解决实际问题. →软件工程是为了解决开发成本效益和软件质量的问题而 ...

  6. 软件工程开发模型以及在软件工程中的作用

    软件工程开发模型以及在软件工程中的作用: 传统模型: 瀑布模型(water fall model): 规定了各项软件工程活动,包括制定开发计划.需求分析说明.软件设计.程序编码.测试和运行维护,并且规 ...

  7. 软件工程- 第3章 传统软件工程方法学

    文章目录 软件工程 第3章 传统软件工程方法学 3.1 结构化设计 结构化设计的概念与原理 模块化 抽象 逐步求精 信息隐蔽 模块独立 3.2 模块独立 耦合 内聚 3.3 启发规则 3.4 面向数据 ...

  8. 『软件工程2』详解软件工程和软件过程模型

    文章目录 一.软件工程的定义 1.Fritz Bauer在NATO上给出的定义 2.Barry Boehm 3.IEEE在软件工程术语汇编中的定义 二.软件工程的层次 1.软件工程三个要素 2.软件工 ...

  9. 到底该如何理解DevOps这个词

    炒了8年的概念,到底该如何理解DevOps这个词? 转载本文需注明出处:EAII企业架构创新研究院,违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复公众号:"EAII企业架构 ...

最新文章

  1. 数据结构——四大查找算法(工作必备)
  2. 合理估算线程池线程数量
  3. 漫谈分布式事务的那些解决方案
  4. struts2的注入参数,获取值
  5. C++与类型转换相关的四个关键字
  6. Linux clear指令
  7. java框内的值怎么同步_java并发编程使用锁进行数据同步操作一
  8. 算法 --- 判断某个值是否在二叉搜索树中
  9. js foreach 跳出循环_VUE.js
  10. [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 使用 SQLite
  11. 【论文笔记】Joint Cascade Face Detection and Alignment
  12. 数据系统架构-3.数据仓库设计
  13. vba 定义类_类接口的实现及应用
  14. ASO优化图标篇:App图标优化的几点建议
  15. matlab 怎么打开.p文件,matlab p文件肿么打开 或者 运行
  16. nginx代理安装ssl证书
  17. 超级短信 handcent sms v4.4.1 android,超级短信(Handcent SMS)
  18. java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
  19. 国内外php主流开源cms、商城、点评、SNS、DIGG、RSS、分类信息、Wiki汇总
  20. linux+gps测试流程图,GPS测试标准与测试项目简介

热门文章

  1. 遇到“word在试图打开文件时遇到错误”怎么办?
  2. 计算机主机启动不了系统怎么办,电脑开机进不了系统怎么办?
  3. 蛮力法C语言选择排序,2016年法国欧洲杯 -官方网站
  4. 一小时上手昇思MindSpore
  5. python 123 io网站答题如果最小化会有提示吗_爬虫进阶教程:百万英雄答题辅助系统...
  6. 韩山师范学院计算机专插本,2019年韩山师范学院专插本各专业录取情况
  7. 一些小方法诸如:交换值,排序,查找等等
  8. AIQ - deeplearning.ai 全套吴恩达老师的深度学习课程笔记及资源在线
  9. 批量调整WPS中插入的图片大小
  10. 我国各省单位GDP能耗(2005-2020)