把代码质量、代码安全和软件测试做了一下梳理的话题

作者 |灰狐

来源 |灰狐

近期工作需要梳理代码质量、代码安全和软件测试,并考虑将其整合到日常研发和DevOps流水线中。

今天就和大家简单聊聊代码质量、代码安全和软件测试的话题。

关于代码质量,我会使用Sonar等工具将其纳入代码质量和代码规范管理中,这对于自主开发产品和外包项目的质量控制非常重要。

为了快速体验 Sonar,您可以克隆 Open Testng Suite 并运行 mvn 命令

这是Sonar的官方项目,大家一起去了解和感受一下吧。

除了代码质量之外,代码安全性也是一个日益受到关注的问题。大家可以想一想,如果代码不安全,软件系统怎么可能安全。

现在,开源项目越来越多,如何确保使用和集成的开源软件是安全的,没有后门和植入恶意软件。

静态分析和软件安全测试可以成为突破口,因为有大量开源软件可供分析和评估。并且可以参与开源项目的静态分析和软件测试,贡献力量,增加影响力。

代码规范、安全编程以及如何编写安全、更健壮的代码都值得进一步学习。

代码扫描、机器学习、代码机器人可以在未来的程序员编写代码后立即感知错误和安全问题。未来,开发好代码应该比开发坏代码更容易。

此外,技术人员可以从测试人员进入这个行业。在看到更多丑陋和漂亮的代码之后,你的审美会逐渐形成并不断提高,这可能会帮助你在未来成为一名优秀的程序员。

这里有很多代码安全工作要做,一些关键检查包括:

*API 滥用

* 安全编码最佳实践

* 常见的编码错误

*缓冲区溢出

* 构建系统安全问题(Maven、Gradle、Bazel)

* 类型、类层次不匹配

* 代码可维护性问题(没有单元测试很难重构)

* 并发数据访问冲突

* 控制流问题

* 跨站请求伪造 (CSRF)

* 跨站脚本 (XSS)

* 死锁

* 异常和错误处理问题

* 不安全的数据处理

* 边界问题,溢出

* 内存问题:脏内存、内存损坏、非法内存访问、指针、空指针引用等

* 路径操作

* 系统性能低效,如何改进和提高

* 各种莫名其妙的错误和系统挂起,考虑引入分布式调用链

* 错误的配置设置(尤其是 Spring 和 Java 应用程序有很多配置信息需要维护)

* SQL 注入

还有很多事情要做……

接下来,您应该开始着手进行静态分析,因为它非常重要。

静态程序分析是在不执行程序的情况下进行的分析。在编码时快速查找并修复安全和质量问题。还与静态分析、静态应用程序安全测试 (SAST) 等有关。

考虑在编写代码时及时识别代码中的严重软件质量缺陷和安全漏洞。将自动化安全测试无缝集成到 CI/CD 管道中并支持现有的开发工具和工作流程将是一项非常重要且很酷的工作。并管理安全策略合规问题(例如:OWASP Top 10、CWE/SANS Top 25 和 PCI DSS),支持多语言、多框架、模板、多平台、各种编译器和各种主流 IDE。

代码安全测试后,往往以安全审计报告的形式呈现。

这是一份安全审计报告供您参考。

这是一个分布式应用程序运行时 Dapr 已通过 CNCF 批准的网络安全公司 Cure53 的安全审计。测试的重点是:

* Dapr 运行时代码库评估

* Dapr 组件代码库评估

* Dapr CLI 代码库评估

* 权限提升

* 流量欺骗

* 密钥管理

*RBAC

* 验证基本假设:mTLS、范围、API 身份验证

* 编排强化 (Kubernetes)

*DoS 攻击

* 渗透测试

这份报告还指导了我们日常安全审计工作的一些思路、流程和重点。

一些静态分析资源,可以关注一下。

很棒的静态分析

另外,跟进领先厂商app自动化要学什么语言,不断更新知识结构和实践技能。

说完代码质量和代码安全,再来说说软件测试。

传统的测试必须加入这样的代码质量管理,不仅是功能性黑盒测试,还有进入程序和逻辑的白盒测试,这也可以导致团队代码规范体系的逐步形成和长期执行.

黑盒测试(功能测试):黑盒测试人员不了解程序的内部情况,不需要对应用程序的代码、内部结构和编程语言有专门的知识,所以不严格要求具备编程知识和编程能力。

白盒测试(逻辑测试):白盒测试人员需要了解被测程序的内部结构、算法等信息,是从程序员的角度对程序进行的测试。根据测试级别的复杂程度,白盒测试对程序员的知识和能力要求较高。

(图片来源于网络)

说到测试,说到Java测试,JUnit、TDD、BDD、Refactoring都是绕不开的。我就不细说了,说说我自己的感受吧。

JUnit 是 Java 世界中单元测试的事实标准,必须掌握。

(图为JUnit5架构,JUnit 5 = Platform + Jupiter + Vintage)

关于TDD和BDD,尤其是这两句话,意义重大,请仔细阅读。

做正确的事,做正确的事。

(图片来源于网络)

关于重构:任何傻瓜都可以编写计算机可以理解的代码。只有那些写出易于人类理解的代码的人才是优秀的程序员。

(图片来源于网络)

我们有大量的开源软件可供阅读,有大量的系统需要测试,还有大量的代码需要重构。

因此,代码质量、代码安全、代码搜索、代码测试和代码重构是一种业务和一种业务模型。

软件测试工程师职业发展规划的简要参考,2003年出版的书,还是很有用的。

个人开发、测试、DevOps三位一体app自动化要学什么语言,学习系统,供参考:

1、Spring(Spring Boot、Spring Cloud)、MicroProfile + JHipster

2、JUnit、TDD 和 BDD、重构 + 开放测试套件 (OTS)

3、Sonar、Elasticsearch、Jenkins + 开放式 DevOps 仪表板 (ODD)

此外,一组主要的软件测试堆栈应包括:

* 使用 JUnit 5 进行单元测试;

* 使用 Spring Test Context 框架进行集成测试;

* 使用 Jest 进行 UI 测试;

* 使用 ArchUnit 进行架构测试;

* 使用 Gatling 进行性能测试;

* 行为驱动 (BDD) Cucumber 测试;

* 空手道综合自动化测试

* Angular/React/Vue 与 Cypress 或 Protractor 的集成测试

(空手道:让测试自动化变得简单。)

参考书:

《谷歌软件测试之道》谷歌测试博客(行业标杆,有时间刷)

《重构——改进现有代码的设计》

“测试驱动开发”

“软件自动化测试”

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论