What Test Engineers do at Google

Bối cảnh

Trong những ngày đầu của Google, một số ít các kỹ sư phần mềm đã xây dựng, kiểm thử và phát hành sản phẩm phần mềm. Nhưng khi số lượng người dùng và sản phẩm tăng lên, kiểm thử thủ công dần chuyển sang quy trình tự động thì các kỹ sư đã bắt đầu thực hiện nhiệm vụ chuyên biệt và phát triển thành quy mô lớn:

  • Kỹ sư kiểm tra (Test Engineers TE) - Với kiến thức chuyên sâu về sản phẩm và chuyên môn trong lĩnh vực kiểm thử /chất lượng, TE tập trung kiểm thử các sản phẩm mới và các hệ thống tích hợp.
  • Kỹ sư phần mềm trong kiểm thử - Software Engineers in Test (SET) - Các kỹ sư phần mềm ban đầu với kiến thức chuyên sâu về cơ sở hạ tầng và công cụ, SET đã xây dựng các khuôn khổ (frameworks) và các gói (packages) cần thiết để thực hiện tự động hóa.
  • Kỹ sư phát hành(Release Engineers REs) - đẩy sản phẩm lên production
  • Kỹ sư tin cậy trang web(Site Reliability Engineers SREs) - quản lý hệ thống và trung tâm dữ liệu 24/7

Phần này tập trung vào sự tiến triển của đảm bảo chất lượng (TE, SET) và vai trò của các kỹ sư đằng sau nó tại Google. REsSREs cũng đã phát triển, nhưng chúng ta nói kĩ hơn trong một bài nghiên cứu khác.

Ban đầu, các đội kỹ sư phụ thuộc rất nhiều vào hoạt động thủ công. Khi họ thực hiện kiểm thử tự động, họ tập trung chủ yếu vào các giao diện người dùng (frontends) bởi vì Google lúc đó nhỏ và các sản phẩm độc lập, ít tích hợp. Tuy nhiên, khi Google phát triển, vòng đời kiểm thử thủ công rất lâu và dẫn đến việc ra mắt sản phẩm mới sẽ chậm. Ngoài ra, vì họ thường tìm lỗi (bug) sau quá trình phát triển sản phẩm hoàn tất, họ mất nhiều thời gian hơn để khắc phục chúng. Say đó họ xác định đẩy kiểm thử lên trước thông qua tự động hóa để giúp giải quyết những vấn đề này và đẩy nhanh tốc độ. Bằng cách xây dựng các hành trình thử nghiệm của người dùng vào quá trình test, họ đảm bảo tạo ra các sản phẩm đáng tin cậy.

Kỹ sư kiểm thử (TE)

Các kỹ sư kiểm thử (TEs) tại Google là một nhóm kỹ sư sử dụng các phương pháp test đã được chứng minh để thúc đẩy sự hoàn thiện của các sản phẩm. Họ thực hiện kiểm thử nhanh (rapid testing), release sớm các sản phẩm và tính năng tới người dùng. Để đạt được tốc độ này đòi hỏi họ cần các kĩ năng sáng tạo và đa dạng để phục vụ người dùng tốt nhất. Họ được coi là một "chất keo" kết hợp các bên liên quan như các nhà quản lý sản phẩm (product managers), nhóm phát triển (development teams), các nhà thiết kế UX, các kỹ sư phát hành (release engineers), người kiểm thử bê ta, người dùng cuối, vv ... để xác nhận việc launch các sản phẩm thành công. Vai trò của TE bắt nguồn từ mong muốn làm cho các sản phẩm miễn phí của Google như Search, Gmail, Docs tốt hơn các sản phẩm thương mại tương tự trên thị trường vào thời điểm đó.

Từ rất sớm ở Google, đã có một nhóm nhỏ các kĩ sư tin rằng cách tiếp cận "launch and interate" đối với việc triển khai phẩn mềm có thể được cải tiến với việc kiểm thử tự động liên tục (continuos automated testing). Họ đã tự mình đưa ra 1 pratices cho mọi nhóm trong công ty với tên gọi "Testing in the Toilet, hoặc the Test Certified Program, và Google Test Automation Conference (GTAC). Những nỗ lực trên đạt được bằng cách thực hiện đầy đủ khía cạnh của testing, ví dụ độ bao phủ mã (code coverage) hoặc kiểm tra hiệu suất (performance testing). Kiểm tra nhanh (Testing pratices) nhanh chóng trở nên phổ biến trong toàn công ty và các kĩ sư tự viết tests cho code của họ đã trở thành tiêu chuẩn. Ngày nay, TE thực hiện tiêu chuẩn trên để thiết lập tiêu chuẩn chất lượng mà các sản phẩm cần đạt được.

Kỹ sư kiểm thử đóng một vai trò duy nhất tại Google. Như TE, họ xác định và tổ chức dự án kỹ thuật riêng, thu hẹp khoảng cách giữa đầu ra kỹ thuật và sự hài lòng của người dùng cuối. Để cung cấp cho rõ hơn những gì TE làm, dưới đây là một số ví dụ về những thách thức họ cần phải giải quyết trong một ngày:

  • Tự động hóa quá trình xác minh thủ công cho việc phát hành sản phẩm để đội phát triển có nhiều thời gian hơn cho việc xử lý các vấn đề tiềm tàng khi bàn giao (release)

  • Thiết kế và thực hiện tự động để theo dõi và dự đoán trình trạng sử dụng pin Android và gửi tới đội phát triển, để họ biết ngay khi một tính năng mới rút hết pin xảy ra.

  • Định lượng nếu bộ dữ liệu tái sử dụng bởi một sản phẩm, chứa 1 tỉ đơn vị, có chất lượng tốt hơn so với bộ dữ liệu hiện có trên môi trường production

  • Viết bộ dữ liệu test tự động nhằm xác minh nếu nội dung trình bày đáp ứng mức độ chất lượng nhất định dựa trên mong muốn của người dùng

  • Đọc đề xuất thiết kế kỹ thuật cho một tính năng mới và cung cấp các gợi ý về cách thức để xây dựng trong khả năng có thể test được

  • Điều tra các bảng theo dõi ngăn xếp (stack) tương quan được gửi bởi người dùng thông quá hệ thống theo dõi phản hồi và tìm kiếm code base để tìm ngăn xếp chính xác

  • Hợp tác để xác định nguyên nhân gây ra tình trạng ngừng hoạt động trên production, sau đó xác định các tests để tránh sự cố tương tự trong tương lai

  • Tổ chức task vụ để tư vấn cho các đội trong công ty về các phương pháp hay nhất khi kiểm thử khả năng tiếp cận (testing for accessibility)

Kỹ sư phần mềm trong kiểm thử - Software Engineers in Test (SET)

Từ trước, Google đã duy trì 2 chức danh riêng biệt gồm kiểm thử sản phẩn (product testing) và kiểm tra hạ tầng (test infrastructure), điều này đã gây ra nhầm lẫn. Điều này khiến mọi người thường hỏi sự khác biệt giữa 2 vị trí trên. Việc đổi tên cho vai trò của kỹ sư phần mềm (software engineer), công cụ (tools) và cơ sở hạ tầng (infrastructure SETI) thành SETS, tất cả chúng giờ đây chỉ tập trung vào năng suất kĩ thuật (engineering productivity). Điều này có ý nghĩa đối với các kỹ sư kiểm thử tại Google đó là trách nhiệm cao hơn khi trở thành người thẩm quyền về chất lượng sản phẩm, Google dự kiến sẽ duy trì các tiêu chuẩn thử nghiệm trên toàn công ty.

SET (hợp tác với TE và các kỹ sư khác) đã xây dựng một loạt các công cụ kiểm thử tự động và phát triển các phương pháp hay nhất có thể áp dụng cho nhiều sản phẩm nhằm tăng tốc độ phát hành sản phẩm. SET ban đầu tập trung vào việc xây dựng các công cụ để giảm thời gian vòng đời kiểm thử, vì đó là giai đoạn hầu hết làm thủ công và tốn nhiều thời gian nhất để lấy mã code sản phẩm. Họ đã tạo ra một số công cụ sẵn có cho cộng đồng phát triển phần mềm như cải tiến webdriver, trình chiếu, espresso, EarlGrey, Martian proxy , Karma và GoogleTest. SET đã quan tâm đến việc chia sẻ và hợp tác với những người khác trong ngành và thành lập các hội nghị. Ngành công nghiệp cũng đã chấp nhận kỷ luật Kỹ thuật kiểm thử, vì các công ty khác đã thuê các kỹ sư phần mềm vào các vai trò tương tự, xuất bản các bài báo và thúc đẩy phát triển hướng kiểm thử (Test-Driven Development) vào thực tiễn.

Thông qua những nỗ lực này, thời gian vòng đời kiểm thử giảm đáng kể, nhưng điều thú vị là tốc độ tổng thể không tăng tương ứng, vì các giai đoạn khác trong quá trình phát triển đã trở thành nút cổ chai. SET bắt đầu xây dựng các công cụ để thúc đẩy tất cả các khía cạnh khác của phát triển sản phẩm, bao gồm:

  • Mở rộng các IDEs để viết mã và review mã dễ dàng hơn, rút ngắn thời gian "write code"
  • Tự động xác minh release, rút ngắn chu kỳ "release code".
  • Tự động xác thực log hệ thống production theo thời gian thực và phát hiện cácbất thường, giúp tự động hóa việc giám sát production.
  • Tự động đo lường năng suất của đội phát triển, giúp hiểu rõ những gì họ đang làm việc và những gì không.

Với điều lệ mở rộng của SET, Google muốn tên của vai trò phản ánh công việc. Nhưng tiêu đề mới sẽ là gì? Google đã trao quyền cho SET chọn một danh hiệu mới, và chúng chiếm đa số (91%) lựa chọn của Software Engineer, Tools & Infrastructure (viết tắt là SETI).

Ngày nay, SETITE vẫn hợp tác rất chặt chẽ trong việc tối ưu hóa toàn bộ vòng đời phát triển với mục tiêu loại bỏ mọi ma sát khỏi việc đưa các tính năng lên production.

Kết quả tác động

Hai vai trò trên đã mang lại tác động đáng kể:

  • Các bài tests tự động trở nên hiệu quả hơn vàd được xác định (ví dụ cải thiện thời gian chạy,...)
  • Kỹ thuật hướng đo lường (Metrics driven engineering) đã phát triển nhanh chóng (ví dụ: tăng độ bao phủ code tính năng dẫn đến sản phẩm chất lượng cao hơn).
  • Thao tác thủ công để xác minh thủ công đối với các tính năng mới được giảm đáng kể và thường chỉ thực hiện ở biên khi test tích hợp sản phẩm. Kỹ sư kiểm thử (TE) đã phát triển kiến thức sâu rộng về các sản phẩm mà họ hỗ trợ. Họ trở thành chuyên gia cho các đội sản phẩm cần chuyên môn trong kiểm thử tự động và tích hợp. Vai trò của họ gồm nhiều hoạt động như: viết các kịch bản để tự động hoá việc kiểm thử, tạo ra các công cụ để các nhà phát triển có thể kiểm tra mã code của họ, và liên tục thiết kế những cách tốt hơn và sáng tạo hơn để xác định các điểm yếu và phá vỡ phần mềm.

References

https://testing.googleblog.com/2016/03/from-qa-to-engineering-productivity.html https://testing.googleblog.com/2016/11/what-test-engineers-do-at-google.html https://testing.googleblog.com/2007/01/introducing-testing-on-toilet.html