从开发者的角度,如何看待提高软件质量
软件质量是产品或服务所满足明示或暗示需求能力的固有特性和特征的集合,软件的质量特性有功能性、可靠性、易用性、可维护性、可移植性。缺陷则指系统所需要实现的某种功能的失效或违背。在某种程度上,缺陷的数量可以用来评价软件的质量,高质量软件往往不会存在太多缺陷。那么在敏捷开发团队中,如何提高软件质量,减少测试轮次呢?
1.需求的导入
一份准确、清晰的需求文档是一个优秀项目的基石,而一个优秀的需求工程师团队更能够直接大幅提升整个项目的效率,甚至能引导整个项目组以最优的路径开发。
好的软件需求要符合以下六个条件:
- 干净利落
- 结构清晰,便于阅读,可快速进行索引和定位
- 简单明确
- 表述清晰,没有歧义
- 准确性
- 确保与上级需求的一致性, 准确,详细且合理
- 便于测试
- 每条需求都必须能够直接测试。这里“直接”的意思是需求里描述的信号I/O接口是完备的,是测试设备可以直接控制或者读取的。
- 可溯源性
- 所有的软件需求向上必须要连接一条系统需求,向下必须链接一条设计需求。平级必须链接一条HIL测试用例。这就不多说了。一个值得注意的点是,一些具有安全等级ASIL的系统需求,会分解降级为若干个低等级软件需求。我经常在项目中看到某个需求后面标着 “B(D)”, 但是既不知道这是哪个ASIL D需求分解来的,也不知道分解出的另外一个 “B(D)” 需求死哪去了,最后不了了之,这是应该极力避免的。
需求在正式发布前需要经过上级评审和组织内评审
规定明确的变更
2.软件的设计
- 优秀的架构设计
- 好的架构能提高编码效率,精准快速定位bug
- 可追溯性
- 确保每一条软件需求都被正确实现,并可追溯定位
- 模型或代码的静态检查
- 静态检查能保证软件在编译前消除大部分基本和隐藏bug, 提高代码质量
- 标准的建模和编码规范
- 标准的建模和编码规范能够提高代码和模型的可读性,消除大部分基本和隐藏bug, 提高代码质量
- 基于安全的设计
- 基于安全的考虑,可以设计对应的预防机制
- 单元或功能模块的自测‘
- 对模块进行自测能有效避免不必要的BUG
3.软件的测试
- 重视测试在整个软件生命周期中的重要性
- 测试是保证软件质量中很重要的一环
- 基于V字流程图,对不同的需求做对应的测试
- 编写优秀的测试用例
- 足够的执行时间
- 独立的测试环境
- 独立的测试部门
4.项目流程管理
- 独立的质量监控和管理部门,管理项目整体进度,推进
- 项目文件的统一管理,版本控制,推荐SVN
- 权限管理
- 修改记录
- 评审记录
- …
- 内容上传或发布前必要的评审
- bug 的精细管理
- 项目周期的管理
5.BUG产生的类型
- 由于需求不明确或歧义产生的
- 接口配置错误
- 模板配置错误
- 软件逻辑错误
- 模块使用错误
6.优质自媒体推荐
- 仨人谈起
- 微信公众号,分析ASPIC 和功能安全认证,质量保证和测试方法的分享
- 打浦桥程序员
- 微信公众号,MATLAB GUI 爱好者,分享工具和编程思想
- chhttty
- CSDN, Simulink 代码生成和相关知识分享
- 斧头帮-帮主
- Bilibili, C/C++ 基础,详细且专业
- 冰霜艾斯
- Bilibili, AI, TensorFlow 知识交流