软件工程原则

1,634 阅读3分钟

什么是软件工程

使用系统化的方法和工具,在保证质量的前提下,更高效率和更小的成本为用户持续交付有价值的软件的过程

  • 过程: 软件开发应该是怎么样的过程
  • 方法: 过程中的每个环节(分析、设计、开发、发布、维护等,适合采用哪些方法与解决方案
  • 工具: 通过一些工具来提高每个环节的效率,降低整个软件工程生命周期的时间、资金、资源成本。

原则

必要性、适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可互操作性和满足用户需求的软件产品。

  • 项目规划: 加强从客户需求和商业角度的思考
  • 建立成本意识: 学会计算投入产出比
  • 质量第一
    • 在资源时间紧张情况下去降低质量行为是短视的,中长期来看,会导致维护成本增加 增加整体研发成本
  • 编写代码只是手段不是目的
  • 提高技术水平保证质量

需求分析

确定软件所需的特定特征和功能, 需要符合最终用户的要求和期望。 使用精确的数字和情形来描述

  • 确定项目的目标和范围
  • 收集需求
  • 分析和分类需求
  • 建立优先级
  • 记录需求, 形成文档

误区:

  • 需求分析时,考虑大量细节实现
  • 直奔系统设计,甚至代码实现了
  • 用户角度去确定需求, 而不是考虑实现

就如导弹的定位系统, 如果你的目的地不对, 就算你导弹造的再好, 也无法达到最终的目的

系统设计

设计软件的白盒的机制,描述软件内部如何工作,各个零件之间的协作关系

  • 软件如何组成和模块划分
  • 各个模块的
    • 接口定义
    • 数据定义
    • 关键算法
  • 各模块之间如何联动和耦合关系, 如何协作完成任务/流程
  • 系统设计文档

编码

  • 鲁棒性(Solid and Robuse)
  • 高效的性能(Fast)
  • 先写注释, 后写代码
  • 共享和重用(组件和库)
  • 可读性
    • 简洁简短
    • 清晰准确的类和函数命名、清晰的代码段落
    • 代码写给人看的, 需要很深的思考才能理解逻辑就不是好代码
  • 可维护性,扩展性好,高内聚低耦合

代码评审(code review

  • 提升代码质量
  • 越早发现问题, 修复的成本越低
  • 高质量代码能够节省成本, 短期花费的时间,长时间来看肯定是值得的
  • 知识传递, 减少上线风险
  • 解释设计和互相学习的机会

静态检测:

  • 拼写错误
  • 未优化的代码实现
  • 不必要的复杂代码
  • 重复实现已存在的逻辑
  • 缺少注释
  • ...

软件测试

  • 单元测试

  • 白盒测试(结构测试): 知道产品的内部工作过程,通过测试来检验产品内部动作是否按照规格说明书的规定正常进行

  • 黑盒测试(功能测试): 已经知道了产品应该具有的功能,通过测试来检验是否每个功能都能正常使用

软件维护

软件研发和维护是长周期的

软件运维

可监控/可观测