什么是软件工程
使用系统化的方法和工具,在保证质量的前提下,更高效率和更小的成本为用户持续交付有价值的软件的过程
过程: 软件开发应该是怎么样的过程方法: 过程中的每个环节(分析、设计、开发、发布、维护等,适合采用哪些方法与解决方案工具: 通过一些工具来提高每个环节的效率,降低整个软件工程生命周期的时间、资金、资源成本。
原则
必要性、适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可互操作性和满足用户需求的软件产品。
- 项目规划: 加强从客户需求和商业角度的思考
- 建立成本意识: 学会计算
投入产出比 质量第一- 在资源时间紧张情况下去降低质量行为是短视的,中长期来看,会导致维护成本增加 增加整体研发成本
- 编写代码只是手段不是目的
- 提高
技术水平保证质量
需求分析
确定软件所需的特定特征和功能, 需要符合最终用户的要求和期望。 使用精确的数字和情形来描述
- 确定项目的目标和范围
- 收集需求
- 分析和分类需求
- 建立优先级
- 记录需求, 形成文档
误区:
- 需求分析时,考虑大量细节实现
- 直奔系统设计,甚至代码实现了
用户角度去确定需求, 而不是考虑实现
就如导弹的定位系统, 如果你的目的地不对, 就算你导弹造的再好, 也无法达到最终的目的
系统设计
设计软件的白盒的机制,描述软件内部如何工作,各个零件之间的协作关系
- 软件如何
组成和模块划分 - 各个模块的
- 接口定义
- 数据定义
- 关键算法
- 各模块之间如何
联动和耦合关系, 如何协作完成任务/流程 - 系统设计文档
编码
鲁棒性(Solid and Robuse)- 高效的性能(Fast)
- 先写
注释, 后写代码 - 共享和重用(组件和库)
可读性- 简洁简短
- 清晰准确的类和函数命名、清晰的代码段落
代码写给人看的, 需要很深的思考才能理解逻辑就不是好代码
- 可维护性,扩展性好,高内聚低耦合
代码评审(code review
- 提升
代码质量 越早发现问题, 修复的成本越低- 高质量代码能够节省成本, 短期花费的时间,长时间来看肯定是值得的
- 知识传递, 减少上线风险
- 解释设计和互相学习的机会
静态检测:
- 拼写错误
- 未优化的代码实现
- 不必要的复杂代码
- 重复实现已存在的逻辑
- 缺少注释
- ...
软件测试
-
单元测试
-
白盒测试(结构测试): 知道产品的内部工作过程,通过测试来检验产品内部动作是否按照规格说明书的规定正常进行 -
黑盒测试(功能测试): 已经知道了产品应该具有的功能,通过测试来检验是否每个功能都能正常使用
软件维护
软件研发和维护是长周期的
软件运维
可监控/可观测