GopherCon 2015: Dmitry Vyukov - Go Dynamic Tools

Gopher Academy
28 Jul 201523:25

Summary

TLDRDimitri Vukov,谷歌的软件工程师,介绍了他为Go语言做出的贡献,包括垃圾回收、内存分配器改进、同步原语实现等,并着重介绍了他开发的三个动态工具:数据竞争检测器、Goast(随机化测试系统)和即将在Go 1.5中发布的执行跟踪器。数据竞争检测器通过编译器插桩和运行时模块帮助开发者发现并修复并发代码中的数据竞争问题。Goast使用覆盖引导的变异测试来发现处理复杂输入时的潜在错误。执行跟踪器则提供了程序执行的详细视图,帮助开发者理解程序的动态行为和性能问题。

Takeaways

  • 👋 Dimitri Vukov 是一位在 Google 工作的软件工程师,专注于 Go 语言。
  • 🛠️ 他为 Go 语言贡献了包括调度器、GC、内存分配器改进以及同步原语等在内的多项改进。
  • 🔍 Dimitri 开发了 Go 语言的动态工具,包括数据竞争检测器、goast(随机化测试系统)和即将在 1.5 版本中发布的执行跟踪器。
  • 🔒 数据竞争检测器帮助开发者发现并修复并发代码中的数据竞争问题,这对程序的正确性、稳定性和安全性至关重要。
  • 🔧 使用数据竞争检测器非常简单,只需在构建、测试或安装包时添加 -race 标志即可。
  • 🔍 通过数据竞争检测器,Dimitri 在 Go 标准库中发现了超过 70 个 bug,并在 Google 的 Go 代码中发现了 350 个 bug。
  • 🧬 goast 是一种随机化测试系统,它通过生成随机数据并观察程序是否崩溃来发现潜在的错误。
  • 🔄 goast 使用代码覆盖指导的模糊测试,通过遗传算法来迭代生成可能触发错误的输入数据。
  • 🔄 goast 包含两种独特的技术:sonar(用于解决特定类型的比较操作问题)和 versifier(用于理解输入数据的结构并进行更高级的变异)。
  • 🐛 goast 在 Go 标准库和其他包中发现了数百个 bug,包括 panic、无限循环、内存使用失控等问题。
  • 📈 执行跟踪器(即将在 Go 1.5 中发布)允许开发者以纳秒级精度捕获程序执行过程中的事件,帮助分析并发和性能问题。

Q & A

  • Dimitri Vukov 是谁,他在 Google 的工作是什么?

    -Dimitri Vukov 是一位软件工程师,他在 Google 工作,专注于 Go 语言的多个项目,包括 Go 的调度器、垃圾回收、内存分配器改进、同步原语的实现等。

  • Dimitri 在 Go 语言项目中贡献了多少 commits 和 bugs?

    -Dimitri 总共贡献了 800 个 commits 并提交了 500 多个 bugs。

  • Dimitri 目前所在的团队是哪一个,他们主要负责什么?

    -Dimitri 目前所在的是动态测试和工具团队,他们主要负责像 Frat Sanitizer、内存 Sanitizer 和地址 Sanitizer 这样的产品,这些工具用于在 C++ 程序中发现各种问题。

  • 什么是数据竞争(data race)?

    -数据竞争发生在两个或多个 goroutine 同时访问同一个变量,并且至少有一个是写操作时。数据竞争会导致程序的正确性、稳定性和安全性受到影响。

  • Go 语言内置的数据竞争检测器是如何工作的?

    -Go 语言内置的数据竞争检测器通过编译时插入的代码来拦截所有内存访问和函数的进入与退出,运行时库处理这些事件来捕捉竞争访问,并通过同步机制来避免产生误报。

  • 如何使用 Go 语言的数据竞争检测器?

    -使用 Go 语言的数据竞争检测器非常简单,只需要在构建、测试或安装包时添加 -race 标志即可。

  • 为什么 Dimitri 实现数据竞争检测器时首先针对标准库?

    -Dimitri 首先针对标准库实现数据竞争检测器是为了确保 Go 语言的基础组件是健壮的,这有助于发现并修复标准库中的潜在问题。

  • goast 是什么,它如何帮助测试 Go 程序?

    -goast 是一个随机化测试系统,它通过生成随机数据并输入到程序中来检测程序是否会崩溃,从而发现潜在的错误。这种方法不需要编写具体的测试用例。

  • goast 的工作原理是什么?

    -goast 使用了代码覆盖指导的模糊测试方法,通过代码覆盖来了解哪些代码行被执行,然后通过随机变异输入数据来发现新的代码覆盖区域,以此来发现潜在的错误。

  • goast 的两个关键特性是什么?

    -goast 的两个关键特性是 sonar 和 versifier。sonar 可以帮助绕过程序中的某些检查,而 versifier 则尝试逆向工程输入数据的协议结构,并进行更高层次的变异。

  • 执行跟踪器(execution tracer)是什么,它将如何帮助开发者?

    -执行跟踪器是一种工具,它可以捕获程序执行过程中的事件,如 goroutine 的创建、启动、阻塞等,并允许开发者可视化这些事件,以便于理解程序的执行流程和发现潜在的性能问题。

  • 为什么 Dimitri 推荐使用 goast 进行测试?

    -Dimitri 推荐使用 goast 进行测试是因为它不需要编写具体的测试用例,而且它可以发现其他测试方法可能遗漏的错误,特别是对于处理复杂输入的程序。

  • 如何开始使用 goast?

    -要开始使用 goast,首先需要通过 go get 获取 goast,然后编写一个接受字节切片的测试函数,使用特定的 goast build 工具进行构建,收集输入数据的语料库,然后运行 goast 进行测试。

Outlines

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Mindmap

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Keywords

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Highlights

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Transcripts

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф
Rate This

5.0 / 5 (0 votes)

Связанные теги
Go语言并发编程数据竞争动态测试内存检测代码优化性能分析软件工程谷歌工程师错误检测
Вам нужно краткое изложение на английском?