Software Engineering


定义

Software Engineering is the systematic application of engineering approaches to the development of software. --Wikipedia

软件工程是一系列软件开发的工程方法的系统性应用,它强调系统性地、有组织地、标准化地对软件进行开发、演进和运维。 软件工程与计算机科学的区别是,计算机科学着重于学习算法、运算硬件以及运算本身,而软件工程着重于计算机科学知识的实践问题。简单说,计算机科学教我们计算机如何工作,而软件工程教我们怎么用计算机工作。

工程重在实践和交付。对于软件工程来说,低成本、高质量的交付产品是最终目标。因此,软件工程的理论和方法贯穿软件的整个生命周期:

  • 需求分析
  • 系统设计
  • 开发测试
  • 部署运维
  • 系统维护

软件工程的定义取自IEEE的标准定义,虽然随着技术演进,这个定义有一定争议性,但我们还是取用此标准加以解释

背景

  • 1946年,曼哈顿计划孕育了世界上第一台可编程的计算机——ENIAC
  • 1948年,世界上第一个软件在曼切斯特大学运行
  • 五十年代初期,第一个操作系统在IBM的主机上运行
  • 1958年,统计学家 John Tukey 创造了 software 这个词
  • 六十年代,软件行业迅速发展,软件质量稂莠不齐,出现 软件危机
  • 六十年代末期,为了应对 软件危机软件工程 应运而生

软件危机 主要包括以下问题:

  • 没有标准和流程,大量软件项目因预算超支等问题失败
  • 大型软件维护成本过高
  • 交付的软件不可靠,无法满足需求
  • 软件迭代速度跟不上需求变化速度
  • 软件开发速度跟不上需求增长速度

工程师们尝试在实践中去制定一套需求分析、软件开发和系统交付的衡量标准,这就是 软件工程

知识体系

软件工程发展的过程中,产生了许多概念和方法论,我们无暇一一例举,但有一点是清晰的:所有的方法论都是围绕 软件生命周期 展开的。 软件生命周期(SDLC) 是一种软件开发过程的方法论,主要包含以下过程:

  • 需求分析
  • 规划
  • 设计
  • 开发
  • 测试
  • 部署维护

软件工程概览

这张图的划分并不严格,实际上我们也没法对所有事物进行严格划分,因为用发展的眼光看事物的话, 定义 是一直在变化的。 横看成岭侧成峰,同一个事物,从不同角度解析,可以得出不同的结论。比如图中的软件架构的三个子项 微服务事件驱动云服务 架构,他们并不是互斥的关系,微服务架构也可以设计为事件驱动型架构。换个角度,软件架构可划分的角度很多,远不止罗列的这三项。这个图之所以画出这一部分,主要还是想和大家呈现,我们用到和经常接触的一部分概念。

从图中的关系可以看到,所有的工程方法都是为提升 软件质量 服务。

软件生命周期

Software Development Life Cycle

工程

软件设计

软件设计8原则:

  • Keep It Simple
  • Don’t Repeat Yourself
  • You Aren’t Gonna Need It
  • SOLID
    • Single Responsibility Principle
    • Open Closed Principle
    • Liskov Substitution Principle
    • Interface Segregation Principle
    • Dependency Inversion Principle
设计模式

Design Pattern

过程模型

敏捷模型

Agile

敏捷方法:

  • SCRUM
  • XP
  • FDD
  • LEAN
  • DEVOPS

软件质量

Software Quality

8个指标:

  • 代码质量
  • 可靠性
  • 性能
  • 可用性
  • 正确性
  • 可维护性
  • 完整性
  • 安全性

通用标准:

  • CMMI 软件质量分级

目标和意义

随着硬件水平的进步和市场规模的变化,软件工程的理论也在与时俱进。理论是同行前辈经验的积累,选择有效的理论进行实践,可以有效提升实际生产中的效率。但理论的实践方法不胜枚举,如何在实践环节中,选择适合团队的方法进行组合,最终形成最佳实践,这是我们应该努力探索的。

© Cheng all right reserved,powered by GitbookModified At: 2021-12-10 14:53:01

results matching ""

    No results matching ""