- 科学
指的是数据结构和算法, 计算理论 - 理论层面 - 技术
主要包括: 编程语言, 操作系统等等具体的技术 - 技术层面 - 工程
包括: 软件架构, 开发文档, 项目管理, 各种测试等等 - 管理层面
语录:
- 软件总有bug, 没有人知道会在什么地方; 软件总是会变化的, 但谁也不知道哪些地方会变化
- 没有人能够一次性写出没有bug的代码
- 写程序就是一个不停改错的过程. 那么, 首先, 在写程序之前, 必须要有一个判断对错的标准和手段, 这就是 测试.
- 错误总是存在的, 重要的是出错时能够找到它, 特别是在客户现场那种没有调试器的环境下. 有时, 只有唯一的手段: 日志.
- 修改时不要覆盖原来的功能, 因为大部分情况下, 客户想既要有新的功能, 也想保留原来的功能
- 要得到输出, 你的代码不仅需要输入, 还需要依赖其他组件. 所以测试时, 不仅要变换输入, 还要变换依赖.
软件的成败的标准:
- Correct&Stable 是否满足功能性能等需求并运行稳定
- Easy to use 用户体验
- Bugs are fixed quickly 如果出错, 是否能够快速找到错误根源
- Smoothly upgrade 平滑升级
软件开发的主要任务:
- 正确性. 现实是: 没有谁能够写出一次性正确的代码. 代码总存在或多或少的问题. 所以, 一旦出了问题怎么办?
- 保证需求理解的正确性, 手段有: 需求文档, Prototype, 用户的测试用例等
- 保证需求实现的正确性, 手段有: 单元测试
- 保证已知的错误/异常得到正确处理
- 保证运行时出现的bug能够得到快速解决, 手段有: Logging
- 可扩展性. 没有不修改的代码.
- 如何保证代码修改的正确性?
- 客户机上的软件如何升级?
软件的组成部分
Input | Output |
Dependencies | MY CODE |
如何测试我们的代码是否正确?
- 确定Input和Output
- 确定Dependencies