作者 | 灰狐

来源 | 灰狐

最近工作需要,把代码质量、代码安全和软件测试做了一下梳理,并思考将它们更好的融入日常研发和 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 (行业标杆,有空就去刷)

《重构-改善即有代码的设计》

《测试驱动开发》

《软件自动化测试》

...

☞iPhone 13发布时间曝光;中国博士创造新算法,提高步态精确识别身份的精度;iOS 15引入半身照的人物识别功能|极客头条☞FTP 时代已逝:Firefox、Chrome 等多个浏览器均已弃用!☞Canvas渲染会取代DOM吗?

说说代码质量、代码安全和软件测试那些事相关推荐

  1. Litmus代码质量平台实践总结

    背景 代码质量在项目开发中是一个很重要的地方,更好的质量的代码,能够产生更少的bug,也能使开发人员更不容易犯错,产品的质量得到提升.那么怎么定义代码质量,怎么测量以及如何展现就成为我们内部平台Lit ...

  2. 代码质量第4层——健壮的代码!

    健壮性(Robustness) 是指程序在遇到规范以外的输入,错误和异常时,仍能正常运行.简单来说,健壮代码的适应性很强,不会因为一些异常,就导致程序崩溃. 不健壮的前端代码体现为: 接口返回异常或报 ...

  3. 提高 Java 代码质量

    高质量代码中往往缺陷更少!确保高的 Java 代码质量有两个步骤:尽早并经常地编写各个层次的测试用例,以及持续的监测质量状况.那么我们又该如何实践呢?本专题汇集了大量来自代码质量专家们的专业经验.最佳 ...

  4. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  5. 【原创】关于代码质量的打油诗

    要想代码写得好,以下规则供参考: 代码格式规范多,静态检查常做到. 代码注释要工整,垃圾注释不可要. 重要分支详注释,复杂逻辑拆分细. 数据类型多注意,经常判空习惯好. 常量类型须定义,魔幻数字要摒弃 ...

  6. 编写高质量代码改善C#程序的157个建议——建议148:不重复代码

    建议148:不重复代码 如果发现重复的代码,则意味着我们需要整顿一下,在继续前进. 重复的代码让我们的软件行为不一致.举例来说,如果存在两处相同的加密代码.结果在某一天,我们发现加密代码有个小Bug, ...

  7. 编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理

    建议86:Parallel中的异常处理 建议85阐述了如何处理Task中的异常.由于Task的Start方法是异步启动的,所以我们需要额外的技术来完成异常处理.Parallel相对来说就要简单很多,因 ...

  8. 淘宝开源代码质量检测工具!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 好的代码一定是整洁的,并且能够帮助阅读的人快速理解和定位. ...

  9. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

最新文章

  1. hdu 5903 Square Distance
  2. sqlite的控制台中文显示问题
  3. 有向无环图的拓扑排序
  4. 比乐高便宜十倍!4合1电动遥控积木玩法百变
  5. C++|Java混合实验-Spring Boot获取客户端操作系统,浏览器,Ip等信息,Qt端展示
  6. Jboss未授权访问漏洞记录(影响版本:全版本,端口:80,8080)
  7. python读取csv时keyerror_python – 读取csv文件并传输到数组的KeyError
  8. java线程的小问题与回答
  9. mfc之ListControl控件的使用
  10. 计算机图形设计案例,9《计算机图形图像的设计的案例实训题.doc
  11. 理解numpy dot函数
  12. 给html标签加上鼠标划过小手样式
  13. CDN与智能DNS 基本原理
  14. 加州房价篇 (一) : 了解数据
  15. 情商高的人所看透的四种人生真相
  16. 人工智能可以应用在哪些领域?
  17. Linux7 修改网卡名eth0
  18. Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE
  19. 解决 git 将文本文件视为二进制文件 导致无法查看diff
  20. 【POI 2006】 Tet-Tetris-3D

热门文章

  1. c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数
  2. 数据链路层解决的三个问题
  3. 技术在于精,其次在于多
  4. 匿名函数与内置函数(python3入门)
  5. Linux命令行设置环境变量
  6. 斗鱼第三方开放平台2.2版使用记录
  7. win10 uwp 如何判断一个对象被移除
  8. git版本库的创建和yaf框架环境的部署
  9. 去除Windows-XP系统下的关机功能
  10. SQOOP 导出SQL SERVER中数据