由来

当软件的规模越来越大,复杂度不断增加,软件项目开发维护过程中的问题就逐步暴露出来:软件产品质量低劣、软件维护工作量大、成本不断上升、进度不可控、程序人员无限度地增加。所以在 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. 系统crash无法启动 tpm error / could not read size 0x8000000e
  2. 2021.4.7 美团买菜后端开发实习生(二面)(含总结)(已oc)
  3. python链表添加多个值_Python基础10之数据结构(下)
  4. 笔记-组织级项目管理与大型项目管理-大型及复杂项目
  5. 从一个字符串中剔除连续的字符,只留一个。
  6. IOS开发CAKeyframeAnimation的基本使用与keypath的列举
  7. Windows中安装MongoDB以及studio3t
  8. linux下ppp拨号无线上网
  9. 谈谈控制器技术SpringMVC与struts2
  10. 【EF】Entity Framework 6新特性:全局性地自定义Code First约定
  11. Linux 中进程的管理
  12. 算法解读:基本的算法
  13. python赋值运算符_解释一下python中的赋值运算符
  14. 面向过程和面向对象的区别,通俗易懂
  15. configure/make的shared object参数
  16. linux find grep组合使用
  17. 统计学从数据到结论(第四版) pdf
  18. 为什么抖音网红城市都在西部?
  19. 信息安全行业含金量较高的2个认证(建议都看一下)
  20. REVIT插件 | 建模助手这次的版本更新,BIMer都笑了

热门文章

  1. Origin 画箱图
  2. 南极区域点坐标单位由decimal degrees到meter转换
  3. 【分享】这些年,我使用的一些工具[非开发类]
  4. 搜索引擎应用优化技能总结
  5. 梁少爷的前端之旅(3)
  6. 知识图谱可视化——《间客》人物关系
  7. 韩山师范学院计算机专插本,2019年韩山师范学院专插本各专业录取情况
  8. tableau-当工作表没有数据时显示无
  9. 【图文】鲲鹏916-ARM64架构源码gcc编译完整记录
  10. Elasticsearch:异步搜索 - async search