软件=科学+技术+工程, 软件的成败, 软件开发的首要任务

  • 科学
    指的是数据结构和算法, 计算理论 - 理论层面
  • 技术
    主要包括: 编程语言, 操作系统等等具体的技术 - 技术层面 
  • 工程
    包括: 软件架构, 开发文档, 项目管理, 各种测试等等 - 管理层面

语录:

  1. 软件总有bug, 没有人知道会在什么地方; 软件总是会变化的, 但谁也不知道哪些地方会变化 
  2. 没有人能够一次性写出没有bug的代码
  3. 写程序就是一个不停改错的过程. 那么, 首先, 在写程序之前, 必须要有一个判断对错的标准和手段, 这就是 测试.
  4. 错误总是存在的, 重要的是出错时能够找到它, 特别是在客户现场那种没有调试器的环境下. 有时, 只有唯一的手段: 日志.
  5. 修改时不要覆盖原来的功能, 因为大部分情况下, 客户想既要有新的功能, 也想保留原来的功能
  6. 要得到输出, 你的代码不仅需要输入, 还需要依赖其他组件. 所以测试时, 不仅要变换输入, 还要变换依赖.

软件的成败的标准:

  1. Correct&Stable 是否满足功能性能等需求并运行稳定
  2. Easy to use 用户体验  
  3. Bugs are fixed quickly 如果出错, 是否能够快速找到错误根源
  4. Smoothly upgrade 平滑升级

软件开发的主要任务:

  1. 正确性. 现实是: 没有谁能够写出一次性正确的代码. 代码总存在或多或少的问题. 所以, 一旦出了问题怎么办?
    1. 保证需求理解的正确性, 手段有: 需求文档, Prototype, 用户的测试用例等
    2. 保证需求实现的正确性, 手段有: 单元测试
    3. 保证已知的错误/异常得到正确处理
    4. 保证运行时出现的bug能够得到快速解决, 手段有: Logging
  2. 可扩展性. 没有不修改的代码.
    1. 如何保证代码修改的正确性?
    2. 客户机上的软件如何升级?

软件的组成部分

Input Output
Dependencies MY CODE

如何测试我们的代码是否正确?

  • 确定Input和Output
  • 确定Dependencies
原文地址:https://www.cnblogs.com/mrfangzheng/p/1503745.html