1.3 软件特征与软件类型
软件和很多物理产品不一样。它可以低成本复制,可以快速修改,可以连接几乎所有东西。这些优势也制造了工程问题。
软件的重要特征包括复杂性、不可见性、可变性、适应外部约束,以及不连续性。一个很小的代码改动,可能因为精确条件和隐藏交互,引发很大的行为变化。
正在加载交互实验...
正在加载概念检查...
软件被上下文塑造
同一个功能放在不同产品里,意味着完全不同的工程工作。
| 上下文 | 通常最重要的事情 |
|---|---|
| SaaS 产品 | 快速学习、安全发布、数据兼容、可观测性 |
| 嵌入式系统 | 资源限制、硬件交互、现场升级、可靠性 |
| 受监管系统 | 可追溯性、验证证据、变更控制、可审计 |
| 内部工具 | 流程贴合、权限、可维护、低支持成本 |
| 开源库 | API 稳定、文档、兼容性、社区信任 |
常见错误是认为自己喜欢的工程风格处处正确。原型思维可以拯救一个不确定的产品想法,也可能伤害一个安全关键工作流。重文档可以保护受监管发布,也可能压垮一次一次性探索。
质量属性会竞争
质量不是一个东西。真实系统需要权衡:
- 可靠性:它能否持续正确工作?
- 可维护性:未来的人能否安全修改?
- 安全性:它能否抵抗滥用并保护数据?
- 可用性:目标用户能否顺利完成任务?
- 性能:它能否在有用时间内响应?
- 可扩展性:增长时是否需要推倒重来?
- 可达性:用户需要时是否能访问?
- 可恢复性:失败后团队能否恢复服务?
正在加载概念检查...
一个实用规则
进入新项目时,先问:
- 这是什么类型的软件?
- 它失败时谁会受伤害?
- 我们多快能发现坏变更?
- 我们多快能逆转坏变更?
- 哪个质量属性会最先被用户感知?
这些问题通常比先讨论框架、架构风格或流程标签更能产生好的工程选择。
正在加载本节练习...