一、概述
在软件开发生命周期中,越早发现软件的质量问题,修复的成本越低。源代码静态分析就是在代码编写阶段即可进行的自动化测试,在开发过程中检测软件源代码在安全、质量和合规性等方面的缺陷,帮助开发人员越早解决软件问题。
目前,不同的源代码检测工具在检测语言、检测规则和检测算法上各有侧重,对不同特质的项目需要选用不同的静态分析工具进行检测,质量要求较高的项目还需采用多款工具同时进行检测。
然而,目前已有的源代码静态检测工具在使用过程中不断出现一些问题或新的需求,如:数据无法集中存储和利用、部分国外工具使用不便、存在误报和漏报、有的工具是单机版、有的只能命令行检测、工具的检测能力无法在部门或公司内部共享、国产化自主可控等问题。
思多普(简称SDAP)软件检测分析平台是南京思多普信息科技有限公司自主研发的能够接入多种源代码检测工具的平台软件。该平台针对软件开发过程中源代码级别的自动化测试提供一个公共检测平台,屏蔽各种代码检测工具的差异性。SDAP在各种代码检测工具之上实现了一个自动化测试抽象层,定义代码检测统一数据模型和检测框架,进行检测命令适配、测试结果解析、数据模型转换、检测过程监控,将各种代码检测工具(静态分析SAST、组件检测SCA、单元测试Unit等工具)无缝接入SDAP平台,在SDAP平台开展代码检测、缺陷审计、报告导出、缺陷统计、智能分析等。SDAP是在多年代码检测工具的工程应用实践上,为解决开发部门、测试部门、检测机构在代码检测上的各类痛点而开发的一款平台软件,可互联网云部署,也可企业内部私有部署。
SDAP平台在代码综合性检测方面具备显著特征:提供统一的代码检测web操作平台;强大的接入能力(无缝接入各种商业代码检测工具,内置开源检测工具);驱动多工具同时检测、缺陷自动合并、提高检测精度;能进行检测规则智能推荐和缺陷数据智能审计;具备多人同时大规模分布式检测能力。
SDAP一推出,操作上的易用性得到广大用户的喜爱,目前已在能源、军工、教育等行业开始深度合作和应用。
二、应用场景
(一)代码缺陷检测应用
代码检测覆盖软件开发的全生命周期。在分析和设计阶段就针对不同安全等级要求的系统进行安全性、可靠性和合规性约束模型建立,约束模型可直接映射到代码检测规则。
在开发过程中,应用如下:
1,开发人员在本地开发IDE中编写代码,编写过程中检测本地代码,此过程检测出的代码缺陷仅开发人员自己可见。
2,开发人员本地编写代码并解决问题后,提交代码至源代码配置管理系统svn/git。
3,配置管理系统代码变更触发持续集成,Jenkins实时拉取变更代码,开展代码增量检测,检测结果实时推送开发人员,如果代码质量未达到质量指标,平台将发出质量告警。
4,开发过程中循环反复1、2、3,直到发布基线版本。
5,基线版本发布后,测试人员开展集成阶段的全量代码检测,检测方式可以是通过平台web界面上传全量代码包,也可以通过配置管理系统自动拉取全量代码。对缺陷审计后,以正式的检测报告(也可以是缺陷管理系统)发给开发人员整改。
6,1、2、3、4、5循环反复,直到所有问题解决,达到出厂质量标准。
7,发布正式版本。
8,对于需要进行第三方检测的,第三方检测机构开展全量代码检测,出具有资质的检测报告。
(二)SDAP适用的环节
1、开发过程持续集成测试
通过使用SDAP-CI开发过程自动化检测系统,实现持续集成阶段的自动化代码检测。SDAP-CI支持开发人员提交代码至代码配置管理系统实时触发检测,定时检测和界面触发检测,增量检测、全量检测,缺陷自动分配到开发人员。
2、系统集成全量测试
通过使用基于浏览器的SDAP-WEB-front界面。开展集成阶段的全量代码检测,支持web上传代码压缩包,也支持从代码配置管理系统自动拉取全量代码检测。
3、质量保证人员设定质量标准
通过浏览器登录SDAP平台,对企业标准、质量配置、检测规则、质量阈进行设定。查看项目的检测结果和项目质量指标。
4、研发测试管理人员查看质量情况
研发测试管理人员登录SDAP平台可查看项目开发过程中的质量统计数据和质量趋势,也可查看集成测试阶段的项目整体质量统计数据和指标数据。
5、第三方测试机构
测试人员通过使用SDAP-WEB-front登录平台开展代码检测,在审计之后出具检测报告。
三、系统架构
SDAP平台在各种代码检测工具、代码配置管理、持续集成工具、编译工具等之上实现了一个自动化测试抽象层,定义代码检测统一数据模型和检测框架,进行各种检测工具的检测命令适配、测试结果解析、数据模型转换、检测过程监控,将各种代码检测工具无缝接入SDAP平台。
(一)SDAP分层结构
软件研发企业的数字化平台由软件工程工具层、软件生产过程自动化层、研发信息管理及决策层组成。SDAP平台聚焦软件生产过程自动化层,位于软件工程工具层和研发管理层之间的一个源代码检测分析的自动化层,将代码编写、源代码配置管理、持续集成、源代码检测等阶段无缝联动并实时监控,向下驱动各类软件工程工具,向上给研发信息管理提供软件开发测试的各类实时数据,具体见下图:
1、软件工程工具层。SDAP平台主要支持的有:(1)代码检测工具covertity、cobot、Fortify等商业代码检测工具和各种开源代码检测工具;(2)源代码配置管理svn、git、maven等;(3)持续集成工具jenkins;(4)编译工具vc6、vs.net、gcc、Keil、workbench等。
2、SDAP软件检测分析平台层。主要包括:(1)基础组件:mysql、Elasticsearch、Redis、Rabbitmq、ftp、tomcat;(2)SDAP公共服务:授权服务、鉴权服务、检测任务调度服务、检测过程监控服务、检测框架服务、数据访问接口、检测对象接受服务等;(3)SDAP平台应用功能:检测项目管理、代码检测、缺陷审计、质量仪表盘、趋势分析、多检测工具检测结果智能合并、企业标准配置、检测所需质量配置、质量阈值和质量告警、检测任务排队和优先级管理、多工具接入管理、检测所需编译环境统一管理等;(4)SDAP持续集成功能组件:前端编译捕获工具、增量源代码检测、代码变更监控、持续集成配置、研发项目配置、持续集成过程监控、代码质量趋势实时分析、研发人员代码质量监控等。
3、研发管理层。SDAP平台给研发管理平台提供数据接口。
(二)SDAP技术架构
为方便多人同时使用SDAP平台开展代码检测,SDAP平台采用B/S架构,用户采用浏览器登录平台后即可进行源代码检测、缺陷审计、统计分析、报告导出平台维护。SDAP平台在进行源代码检测时,将用户提交的被测代码发送到检测工具进行检测,SDAP平台实时监控工具的检测过程,并解析工具的检测结果,存入SDAP平台。
SDAP包括用户操作平台、后端服务、数据存储、检测框架,系统架构如下图:
SDAP平台主要的软件组件如下:
SDAP-WEB-front:基于html、css、js的纯静态操作平台界面,通过浏览器访问。
SDAP-WEB:提供统一登录及权限服务;按照组织机构-项目-检测项目-检测任务的模式,实现各类检测的执行和监控;屏蔽各类工具的差异性,提供一致的检测规则、代码审计、缺陷分析、质量指标和缺陷报告等功能;对于编译检测工具,提供自动化的编译环境维护功能。
SDAP-CM:为实现并行接受或者拉取检测对象而开发的分布式检测对象接受服务,同检测客户端实现点对点的大数据传输,保证系统的运行效率和可靠性。
SDAP-Schedule:是CM和Scanner的职能调度器,通过智能算法确定下一个将要服务的CM和Scannner。
SDAP-AN:检测结果的统计分析。
SDAP-Monitor:对各检测节点进行统一监控。
SDAP-BackEnd:统一的数据访问服务。
SDAP-Report:报告生成服务,为报告实时生成提供服务。
SDAP-Authenciation:鉴权服务,为所有服务调用提供权限认证服务。
SDAP-Audit;审计日志服务。
SDAP-DPM:检测过程实时监控服务。
SDAP-Scanner:检测引擎框架,能够探测检测工具节点的编译环境,驱动检测引擎开展检测执行,并对检测结果进行处理。
四、主要技术参数
*支持接入主流商业源代码SAST检测工具: Fortify、Coverity、Cobot、Klocwork、Checkmarx、Parasoft、testbed等;
*支持接入开源代码SAST检测工具:Clang SA、Spotbugs、Tscancode,Cppcheck、sonar、PMD、CheckStyle、codeQL等;
*支持接入主流组件SCA检测工具:FossCheck、Scantist等;
*支持接入主流单元Unit测试工具:junit、iunit、Jtest等;
*针对同一项目,支持多工具同时检测,检测结果可自动合并,也可按照工具进行缺陷对比。
*优选多工具的检测规则组合形成质量配置,驱动多检测工具同时检测,智能合并检测结果,提高检测精度。
*提供将组织的编码标准同检测工具的检测规则灵活映射能力,企业可按照自己的编码标准进行代码检测。
*对组织的代码特征、工具检测规则、缺陷人工审计结果进行智能化学习,针对后续被项目,智能推荐精度高的检测规则,自动审计误报。
*采用B/S分布式架构,平台和检测工具松耦合部署,提供检测任务排队和优先级管理,满足多人、同时、并行检测的需求。
*支持主流持续集成工具: svn、git和Jenkins等。
*支持持续集成增量检测,能够将代码缺陷自动分配给开发人员,提供代码质量趋势分析。
*提供代码缺陷统计分析功能,能够按照组织结构、项目、代码文件、所属人员进行统计,能够定义代码可靠性、安全性和规范性指标并进行指标分析。
*提供组织机构质量仪表盘和项目质量仪表盘。
*支持多级组织机构定义,用户可创建公司、部门、项目组等组织结构。
*支持用户权限管理、系统服务鉴权、审计日志等安全功能。
*支持多工具检测的数据集中存储、缺陷源码定位、缺陷路径分析、缺陷审计、报告导出。
*提供强大的平台横向扩展功能,支持上千人在线同时检测,检测工具运行实例受限的情况下能进行检测任务排队和优先级管理。
*代码检测操作平台和检测工具可分离部署,平台支持单机或分布式多机部署,满足多人同时大规模并行检测需要。
*一般页面响应时间小于3秒,复杂查询页面响应时间小于8秒。
*支持License永久授权和后续升级服务。
*支持主流平台,支持Windows、Linux操作系统。
五、主要功能特点
(一)统一的web操作平台
SDAP提供统一登录及权限服务,实现superAdmin、Admin、Manager、Tester、User等角色的鉴权。按照组织机构-项目-检测项目-检测任务的模式,对用户发起的检测任务进行调度、监控和管理,统一保存所有检测数据。屏蔽各类检测工具的差异性,提供一致的代码检测、缺陷审计、报告导出、缺陷统计、智能分析、规则维护等功能。
(二)强大的接入能力
通过统一的扫描器框架SDAP-Scanner对不同检测工具进行封装,参与SDAP检测任务调度,无缝接入静态分析工具SAST(Fortify、Coverity、Klocwork、Checkmarx、Cobot、Parasoft、testbed、Codesafe、找八哥等商业检测工具,内置Spotbugs、Checkstyle、PMD、Cppcheck、Tscancode、clang、sonar等开源检测工具,支持java、c/c++、c#、swift、object-c、python、go、php等多种检测语言),无缝接入供应链组件检测工具SCA(FossCheck、Scantist等),无缝接入单元测试工具Unit(Junit、iunit、Jtest等)。支持同一检测任务多检测工具同时检测,自动合并检测结果,提高检测结果的准确性,降低误报和漏报。同一个项目可同时开展SAST、SCA、Unit等检测,实现在一个平台上管理自研代码缺陷、单元测试缺陷和覆盖率、引用第三方组件的安全漏洞。
(三)编译环境自动维护
对C/C++等语言进行编译后才能检测的工具,误报低、准确性高,但需要不断维护编译环境是使用过程中的最大痛点。目前,依赖用户编译环境才能进行代码检测的工具有:coverity/klocwork/Fortify检测Linux下的C/C++,windwos下的VS.NET/VC6的C/C++/C#等。
SDAP将彻底解决这一问题,用户只需在部署检测节点时一次性将编译检测工具及环境部署在后台,SDAP-Scanner将自动监测编译环境和检测能力,上报给SDAP平台,用户在WEB端选择检测对象时选择适合自己的编译环境即可,SDAP确保可编译通过并完成检测。
(四)多工具同时检测、提高检测结果准确性
在SDAP平台上,可优选多种检测工具的检测规则形成质量配置或企业标准,同一个项目可多工具同时检测,发挥每个工具的检测优势,提高检测结果的准确性。针对多工具检测的重复缺陷,SDAP采用检测规则自适应、缺陷位置泛化的智能合并算法,进行缺陷的去重合并。
(五)缺陷数据统计
检测完成后,SDAP-AN分析服务在后台自动比对本次检测和上次检测结果,实现新增缺陷、已解决缺陷、未解决缺陷的自动计算。提供项目质量概要,项目安全性、可靠性和合规性指标分析,多维度提供项目质量数据。通过组织机构仪表盘、项目仪表盘、人员仪表盘,多维度给出当前缺陷状态和历史趋势。
(六)智能分析能力
在SDAP平台上存储每个工具检测的项目代码、缺陷数据,缺陷审计人员在平台上对工具检测出的缺陷进行审计,平台自动将缺陷、缺陷审计结果、缺陷对应的代码特征送人工智能样本库进行深度学习。
平台的智能化服务自动推荐出工具检测规则的置信度排序,可将置信度高的检测规则组合成质量配置,供用户检测使用。同一项目的缺陷,本次审计为误报后,下次检测自动审计为误报。某类缺陷被审计为误报后,下次检测也可将该类缺陷自动审计为误报。平台针对工具检测出的具体缺陷,通过智能分析后,给出误报指数,对于指数高于设定阈值的缺陷可自动审计为误报。
(七)CI持续集成检测能力
SDAP-CI将代码配置管理、jenkins持续集成、源代码静态检测等过程集成在一起,进行开发过程持续集成的源代码的增量、全量、实时的自动化测试。实现开发人员代码提交→SDAP-CI自动拉取代码→自动编译→自动检测→自动和智能审计缺陷→缺陷自动分配给开发人员→自动生成报告→自动将缺陷报告发送至开发人员的功能。
(八)大规模分布式检测能力
通过统一的web界面,在云端完成分布式并行检测和分布式高可靠安全存储,解决各种检测工具排队耗时、只能单机运行等问题。对源代码较大的项目,采用分模块并行检测,检测结果自动汇总,提高检测效率和运行可靠性。
六、典型界面
1、主界面
2、项目信息
3、检测项目
4、检测任务
5、持续集成配置
6、持续集成监测
7、持续集成代码质量趋势
8、缺陷审计
9、质量仪表盘及质量指标
10、报告模板及报告管理
11、规则配置
12、智能分析
13、检测规则集
七、SDAP平台功能选配
思多普(SDAP)致力于软件研发效能及安全提升技术研究及产品开发,目前主要产品包括:SDAP思多普软件检测分析平台,SDAP-CI思多普开发过程自动化检测系统,SDAP-Asca思多普精准代码检测及修复工具。SDAP平台作为基础支撑,为测试团队、检测机构提供自动检测服务。SDAP-CI在SDAP平台基础上为研发团队提供代码自动化测试能力。SDAP-Asca作为具体检测引擎选配,SDAP也可接入所有商业代码检测引擎,内置所有开源代码检测引擎。