这篇博客节选自Jeff Offutt的演讲ppt,《What is Software Engineering》

什么是软件工程(Software Engineering)

工程是关于使技术做好技术擅长的,因此人类可以做好人类擅长的。

软件工程与其他计算机科学(Computer science)

抽象程度:物理(Physics) –> 电气工程(Electrical Engineering) –> 计算机工程(Computer Engineering) –> 计算机科学(Computer Science) –> 软件工程(Software Engineering)

科学家和工程师

科学关注“发现”,工程关注“发明

科学和工程

  • 科学:行为 –> 观察 –> 发现和描述 –> 结构
  • 工程:结构 –> 设计和开发 –> 实现 –> 行为

计算机科学和软件工程

  • 计算机科学:基础性的理解
  • 软件工程:高质量的实用的解决方案

软件工程与计算机科学的区别

  • 开发高质量的软件:
  • 明确需求、建模、设计、开发、评估、部署、维护 …
  • 可用性、易用性、可维护性、可靠性、可伸缩性、安全性 …

重大的软件事故

软件的测试人员试图找到错误,避免错误找到用户

空客319

2003年的加拿大东北停电

电力管理系统的报警系统由于软件错误而失效。

什么是测试,为什么很难?

测试学生作业

客户在乎,因此工业界在乎

现实世界的软件测试

  • 需求 –> 架构 –> 设计 –> 编程 –>
  • 部署 <– 系统测试 <– 集成测试 <– 单元测试

谷歌的信条

  • 解bug,不好
  • 测试,好

测试过晚的花费

早期发现问题可以省很多很多的钱。

测试研究者的工作

  • 测试工具
  • 做实验
  • 告诉工业界
  • 告诉学生

可用性

一个一般使用者,不需要额外帮助,就可以有效使用。

  • 可学习性:合理的努力即可学会
  • 容错:合理的容错
  • 有效性:不需要过分的努力

不要“使用手册”

如果简单的接口即需要“用户手册”,一定是有问题。

举例:报错信息

举例:更差的报错信息

举例:更差的报错信息

举例:更差的报错信息