软件质量工作总结
质量主要工作是检测、预防和纠正。检测主要对象是产出物,包括代码/部署包、文档、系统运行时刻的产出物。预防的主要工作在项目初期或者过程中,采取必要的手段避免和发现潜在的问题。纠正主要是问题在生产发生以后,采取的临时解决措施、预防再次发生的措施。本文的主要目的是通过必要的检测手段预防和减少开发过程中的代码/部署包层面的技术问题。
以下问题是合格的软件不应该出现的:
1、源码和部署包的不一致。原因主要是在于代码版本管理流程、版本管理工具使用的不规范导致。
2、代码的规范性。无规范、编写混乱的代码不应该被接受。特别是在目前开发规范辅助性工具比较智能化的情况下,不遵守规范的行为应该被禁止,辅助工具提醒的严重性问题在修复之前应该禁止进入下一阶段(包括单元测试、功能测试、代码renview等自测/互测行为)。
3、jar中隐含问题。对于不能提供源码的jar,要求辅助工具提醒的严重性问题在修复之前应该禁止进入下一阶段,无法修复的避免在生产环境中使用。
4、包管理的混乱。基于maven的项目应该解决jar冲突问题;传统类型项目需解决多jar并存的问题(不能以未发生问题即无问题的思路进行假设),不能存在jar依赖冲突(如何解决);服务器提供的jar和war的jar版本不能冲突,有冲突需明确问题分析。
5、jar依赖中的owasp问题。
6、测试的代码覆盖率。未完全覆盖的代码(从包括单元测试在内的自测,到上线之前的用户测试)存在问题隐患。通过代码的异常路径的覆盖,减少代码的健壮性问题。
对以上问题的检查措施和处理建议:
1、设计上从部署包中剥离参数文件;通过版本控制工具严格开发测试和发布流程,强制要求所有发布的包都是从scm获取代码编译后进行部署;对非从源码编译的情况,要在二进制文件上进行部署包比较(同从源文件编译来的部署包),保证部署包和scm的源码一致。
2、代码规范性在开发工具上有比较多的插件(ali、google、sonar、spotbugs);搭建sonar,进行代码质量检测;结合代码评审/review活动。
3、厂商jar隐含问题,没有什么好的办法,目前知道可以通过spotbugs发现些问题(同2)。
4、jar包管理(要考虑应用服务器默然提供的jar),maven项目可以提示jar冲突,非maven传统项目未发现好的工具,是否可以定制程序查重,高级点的是否可以借助maven来判断是否有冲突(未研究可行性)。
5、jar的owasp问题,有成熟工具。
6、测试的代码覆盖率,一直是个难点。evosuite可以自动生成全mock类型的junit程序,大幅增加测试的代码覆盖率。可以在此基础上做2类定制:
1)修改为支持springtest/springbootTest的unit程序;
2)去除mock模式下以下异常路径案例(见evosuite定制部分1.11日志)。
7、以上措施能结合ci工具(如Jenkins),构建pipeline执行效果会不会更好。