软件工程简介
这篇博客节选自Jeff Offutt的演讲ppt,《What is Software Engineering》
什么是软件工程(Software Engineering)
工程是关于使技术做好技术擅长的,因此人类可以做好人类擅长的。
软件工程与其他计算机科学(Computer science)
抽象程度:物理(Physics) –> 电气工程(Electrical Engineering) –> 计算机工程(Computer Engineering) –> 计算机科学(Computer Science) –> 软件工程(Software Engineering)
科学家和工程师
科学关注“发现”,工程关注“发明”
科学和工程
- 科学:行为 –> 观察 –> 发现和描述 –> 结构
- 工程:结构 –> 设计和开发 –> 实现 –> 行为
计算机科学和软件工程
- 计算机科学:基础性的理解
- 软件工程:高质量的实用的解决方案
软件工程与计算机科学的区别
- 开发高质量的软件:
- 明确需求、建模、设计、开发、评估、部署、维护 …
- 可用性、易用性、可维护性、可靠性、可伸缩性、安全性 …
重大的软件事故
- 美国国家航空航天局(NASA)的火星极地着陆者号
- 丰田(Toyota)的刹车片
- 阿丽亚娜-5运载火箭
软件的测试人员试图找到错误,避免错误找到用户
空客319
2003年的加拿大东北停电
电力管理系统的报警系统由于软件错误而失效。
什么是测试,为什么很难?
测试学生作业
客户在乎,因此工业界在乎
现实世界的软件测试
- 需求 –> 架构 –> 设计 –> 编程 –>
- 部署 <– 系统测试 <– 集成测试 <– 单元测试
谷歌的信条
- 解bug,不好
- 测试,好
测试过晚的花费
早期发现问题可以省很多很多的钱。
测试研究者的工作
- 测试工具
- 做实验
- 告诉工业界
- 告诉学生
可用性
一个一般使用者,不需要额外帮助,就可以有效使用。
- 可学习性:合理的努力即可学会
- 容错:合理的容错
- 有效性:不需要过分的努力
不要“使用手册”
如果简单的接口即需要“用户手册”,一定是有问题。