作者 | 灰狐
最近事情须要,把代码质量、代码安全和软件测试做了一下梳理,并思考将它们更好的融入日常研发和 DevOps 流水线。
本日,就和大家大略聊聊代码质量、代码安全和软件测试的话题。

有关代码质量,我会借助 Sonar 这样的工具,将其纳入代码质量和代码规范管理,这对自研产品和外包项目质量把控都非常主要。
快速体验下 Sonar,可以这样,克隆 Open Testng Suite,然后运行 mvn 命令
这是 Sonar 官方项目,大家也一同理解、感想熏染下。
除了代码质量外,代码安全也越来越备受关注。大家可以想想,如果代码都不屈安,怎么可能做到软件系统安全呢。
现在,开源项目也越来越多,如何担保利用和整合的开源软件是安全的、没有后门和被植入恶意软件。
静态剖析和软件安全测试可作为一个打破口,由于有大量的开源软件可供剖析和评估。并且可以参与到开源项目中进行静态剖析和软件测试,贡献力量,提升影响力。
代码规范、安全编程,如何编写安全、更健壮的代码,都值得我们多去理解。
代码扫描、机器学习、未来程序员一写出代码,代码机器人就能立即感知缺点和安全问题。在未来,开拓精良代码该当比开拓烂代码更随意马虎才对。
而且,技能职员可从测试职员进入这个行业,看多了丑陋和幽美的代码后,你的审都雅会逐步形成并不断提高,或许能帮助你未来成为精良的程序员。
这里有很多代码安全事情可做,一些关键检讨包含:
API缺点利用
安全编码最佳实践
常见编码缺点
缓冲区溢出
构建系统安全问题 (Maven, Gradle, Bazel)
类型、类层次不匹配
代码可掩护性问题(没有单元测试,难以重构)
并发数据访问冲突
掌握流问题
跨站要求假造(CSRF)
跨站脚本(XSS)
去世锁
非常和缺点处理问题
不屈安的数据处理
边界问题,溢出
内请安题:脏内存、内存破坏、内存造孽访问、指针、空指针引用等
路径操作
系统性能低效,如何改进和提升
系统各种莫名出错和挂起 ,考虑引入分布式调用链
缺点的配置设置(尤其 Spring 和 Java 运用有大量配置信息须要掩护)
SQL注入
还有很多可做的事情 ...
接下来,大家该当把静态剖析好好弄弄,由于它非常主要。
静态程序剖析便是在程序没有实行的情形下进行的剖析。通过在编写代码时就快速查找并修复安全性和质量问题。也是静态剖析、静态运用安全测试 (SAST) 等干系内容。
想想看,若能随代码的编写及时识别出代码中严重的软件质量毛病和安全漏洞。将自动安全测试无缝集成到CI/CD Pipeline中,并支持现有开拓工具和事情流,那将是一件非常主要和酷酷的事情。并且管理安全政策合规性问题(如:OWASP Top 10、CWE/SANS Top 25和PCI DSS),支持多措辞、多框架、模板、多平台、各种编译器和各种主流IDE。
代码安全测试后,常常以安全审计报告的形式呈现。
这里有一个安全审计报告,供大家学习参考。
这是分布式运用运行时 Dapr 接管了 CNCF 核定的网络安全公司 Cure53 的安全审计。测试的重点是:
Dapr 运行时期码库评估
Dapr 组件代码根本评估
Dapr CLI 代码根本评估
权限升级
流量欺骗
密钥管理
RBAC
验证基本假设:mTLS、浸染域、API 身份验证
编排强化 ( Kubernetes)
DoS 攻击
渗透测试
这份报告也可辅导我们日常安全审计事情的一些思路、流程和关注点。
一些静态剖析资源,大家可关注。
Awesome Static Analysis
其余,跟进领导厂商,持续更新知识构造和实践技能。
聊了代码质量和代码安全后,我们再说说软件测试。
传统测试一定要增加这样的代码质量管理,而不是仅仅只有功能上的黑盒测试,还应有进入程序内部和逻辑的白盒测试,这也能带来团队代码规范制度的逐步形成和长期实行。
黑盒测试(功能测试):黑盒测试者不理解程序的内部情形,不需具备运用程序的代码、内部构造和编程措辞的专门知识,以是不硬性哀求具有编程知识和编程能力。
白盒测试(逻辑测试):白盒测试者需理解待测试程序的内部构造、算法等信息,这是从程序设计者的角度对程序进行的测试。根据测试层面的繁芜性,白盒测试须要知识和能力水平更高的程序员。
(图片来自网络)
说到测试,聊到 Java 测试,绕不开 JUnit, TDD, BDD, Refactoring,有关它们的内容就不详细展开,就说说自己感想熏染。
JUnit 在 Java 天下是单元测试的事实标准,必须节制。
(图为JUnit5架构,JUnit 5 = Platform + Jupiter + Vintage)
有关 TDD 和 BDD,尤其这两句,意义非凡,大家细细品。
Build the thing right, Build the right thing.
(图片来自网络)
关于重构:任何一个傻瓜都能写出打算机可以理解的代码。惟有写出人类随意马虎理解的代码,才是精良的程序员。
(图片来自网络)
我们有无数的开源软件可以阅读,有无数的系统等待测试,有无数的代码须要重构。
以是,代码质量、代码安全、代码搜索、代码测试、代码重构是学买卖,也是一个商业模式。
有关软件测试工程师职业发展操持可大略参考下,书是2003年出版的,依然很有用。
个人 Development, Testing, DevOps 三位一体,学习体系,供参考:
1、Spring(Spring Boot, Spring Cloud), MicroProfile + JHipster
2、JUnit, TDD & BDD, Refactoring + Open Testing Suite(OTS)
3、Sonar, Elasticsearch, Jenkins + Open DevOps Dashboard(ODD)
此外,一套紧张软件测试栈应包含:
利用 JUnit 5 进行单元测试;
利用 Spring Test Context 框架进行集成测试;
用 Jest 进行 UI 测试;
利用 ArchUnit 进行架构测试;
用 Gatling 进行性能测试;
行为驱动(BDD)的 Cucumber 测试;
Karate 的全面自动化测试
用 Cypress 或者 Protractor 进行 Angular/React/Vue 集成测试
(Karate: Test Automation Made Simple.)
参考书本:
《Google 软件测试之道》Google Testing Blog (行业标杆,有空就去刷)
《重构-改进即有代码的设计》
《测试驱动开拓》
《软件自动化测试》
...