Trước khi quyết định triển khai hệ thống automation testing, chắc hẳn bạn sẽ tìm hiểu những giá trị mà nó mang lại sau khi triển khai. Việc tìm hiểu đôi khi cũng tốn nhiều công sức vì "chưa triển khai" và khó thuyết phục. Hiểu được phần nào khó khăn đó.
Trong bài này tôi xin chia sẻ những giá trị mà automation thực sự mang lại sau khi triển khai ở Cybozu Vietnam. Ngoài cung cấp những giá trị thực tiễn cũng hy vọng bài này giúp chúng ta có được cái nhìn tổng quan đa chiều để trả lời cho câu hỏi lớn: "Liệu có cần triển khai automation testing ở công ty mình với project này hay không?"
Kiểm thử tự động là gì?
Nếu bạn là người mới bắt đầu tiếp cận kiểm thử tự động thì trước khi tìm hiểu những giá trị mà nó mang lại thì nên biết được định nghĩa về kiểm thử tự động:
Kiểm thử tự động (tiếng Anh: automation testing) là việc sử dụng phần mềm đặc biệt (tách biệt với phần mềm đang được kiểm thử) để kiểm soát việc thực hiện các bài kiểm tra và so kết quả thực tế với kết quả dự đoán | wikipedia.
Quy trình kiểm thử tự động
Hình-01: Quy trình test tự động
Tại Cybozu, sau khi developer hoàn thành việc phát triển các tính năng của sản phẩm và push code lên VCS (Github). Hệ thống CI sẽ thực hiện việc build source code thành môi trường staging (Developer và Product Manager/BA/Tester có thể access môi trường này để test) và bắt đầu quá trình thực hiện các giai đoạn testing. Tất cả được diễn ra một cách tự động từ lúc bắt đầu đến lúc kết thúc và những giá trị của automation testing được phân tích dưới đây sẽ dựa trên việc ứng dụng hệ thống này.
#1 Giảm chi phí cho quá trình testing
Nói về chi phí (cost) chúng ta có thể hiểu là hai yếu tố thời gian và công sức.
Trước tiên về mặt thời gian tùy vào sự nỗ lực của con người mà độ bao phủ của automation cao hay thấp. Cybozu Việt Nam có thống kê đề cử để so sánh thời gian thực hiện kiểm thử giữa tự động và thủ công, số liệu được thể hiện như sau:
Hình-02: Thời gian thực hiện test bằng thủ công và tự động hoá
Dựa vào sơ đồ trên, mặc dù số liệu ước lượng chỉ mang tính chất tương đối nhưng chúng ta cũng có thể thấy rõ rằng thời gian thực hiện mỗi loại test đã được giảm đáng kể.
Ví dụ như để thực hiện 126 test cases của acceptance test, nếu thực hiện thủ công mỗi lần, chúng ta cần 13 tiếng, còn nếu dùng tự động hóa, chúng ta chỉ tốn khoảng 19 phút. Ngoài ra nếu công ty có nhu cầu chạy nhiều lần thì running time tiết kiệm càng lớn. Automation testing cũng hướng đến điều này
Thứ hai là chi phí về mặt công sức, con người sẽ không phải tốn công sức để thực thi những test case này lặp đi lặp lại hoặc những lúc cần thiết phải thực thi test, việc này đã được thay thế bởi máy móc. Hơn thế nữa phần công sức này sẽ được đầu tư vào những việc khác mang lại hiệu quả hơn, như thực hiện Adhoc test, tìm hiểu về cách phát triển sản phẩm tốt hơn…
Khi áp dụng tự động hóa vào mô hình tích hợp liên tục và kiểm thử liên tục thì chúng ta có thể thấy, việc thực thi automated testing có thể khởi chạy bất cứ lúc nào (nhiều lần trong ngày, hằng ngày, giờ nghỉ của công ty v.v.)
Xin lưu ý
Cost ban đầu để phát triển hệ thống automation là không nhỏ!
Cost sẽ bao gồm các chi phí cho việc nghiên cứu công nghệ để lựa chọn tech triển khai, phát triển test code, xây dựng hệ thống, chi phí vận hành (Sửa đổi và tái hiện khi failed report). Nhưng về lâu dài thì chi phí tổng thể cho testing sẽ giảm dần vì test script, môi trường được tái sử dụng cho những lần thực hiện test sau này. Dể dễ hình dung chúng ta có thể xem hình bên dưới
Hình-03: Chi phí đầu tư cho test bằng thủ công và tự động hoá
#2 Phát hiện bug sớm hơn và giảm chi phí để fix bug
Bug được phát hiện ở giai đoạn sau của quy trình phát triển phần mềm thì cost fixed sẽ cao hơn
Việc phát hiện bug sớm hơn là kết quả của việc thực hiện test sớm và nhanh chóng đưa ra được kết quả test từ tự động hóa. Theo như Hình-01, việc test được bắt đầu ngay khi developer push code lên VCS. Điều này cũng đáp ứng được một trong những nguyên lý của testing là “test sớm” (early testing), có nghĩa là nên test sớm nhất có thể. Bug được phát hiện ở giai đoạn sau của quy trình phát triển phần mềm thì chi phí để sửa và cập nhật sẽ cao hơn.
Ngoài những lúc phát triển tính năng mới, những công việc như maintain hoặc update môi trường, tái cấu trúc source code thì việc thực hiện regression test để phát hiện degraded bug (bug của tính năng cũ, bị ảnh hưởng bởi tính năng mới) sớm để chỉnh sửa ở giai đoạn đầu cũng thật sự cần thiết.
#3 Thúc đẩy thế mạnh của Agile
Agile là một phương pháp phát triển phần mềm linh hoạt, mỗi chu kỳ phát triển phần mềm thường từ 1 đến 4 tuần, một khoảng thời gian tương đối ngắn cho quy trình lên kế hoạch, viết tài liệu, phát triển, review, testing, sửa lỗi. Trong một chu kì như vậy thì việc thực hiện regression test để đảm bảo chất lượng sản phẩm trước khi release trở nên khó khăn về mặt nhân sự và là áp lực cho tester và việc áp dụng tự động hóa trở nên tất yếu.
#4 Tăng phạm vi kiểm thử
Từ lợi ích của việc giảm thời gian và công sức của con người khi ứng dụng tự động hóa, thì team phát triển sẽ có thêm cost để thực hiện thêm các hoạt động khác để tăng chất lượng của sản phẩm, ví dụ như: điều tra và phân tích kĩ hơn về requirement, review test case kĩ hơn, thực hiện thêm các loại test, test case mà tự động hóa chưa thực hiện.
#5 Phát hành sản phẩm ra thị trường sớm hơn
Theo như số liệu ở Hình-02, nếu sử dụng automation cho cả 5 loại test thì chúng ta giảm được hơn 100hrs mỗi lần test, tương đương với hơn 2 tuần làm việc của một QA. Nhờ vậy thời gian của quy trình phát triển cũng được rút ngắn lại. Việc rút ngắn thời gian cũng phần nào giúp cho team phát triển phát hành sản phẩm ra thị trường sớm hơn, khách hàng được sử dụng sản phẩm sớm hơn và team phát triển có thể lấy được phản hồi từ khách hàng sớm hơn, góp phần làm tăng độ hài lòng của khách hàng.
#6 Tăng độ chính xác và giảm thiểu được các thiếu sót của con người
Một điều chắc chắn là máy móc làm việc thì luôn có độ chính xác cao hơn con người, một test case có 10 bước, được thực hiện lặp lại 20 lần, nếu máy tính thực hiện với kết quả pass thì chắc chắn 20 lần test được thực hiện giống nhau. Ngược lại, với con người thì 20 lần test này rất có thể sẽ có những thiếu sót (human error) như: nhập thiếu data, kiểm tra thiếu điểm cần kiểm tra, nhìn nhầm kết quả, chủ quan ở những lần test cuối… và đương nhiên sẽ ảnh hưởng đến chất lượng sản phẩm.
#7 Tăng động lực làm việc cho development team (Developer, QA)
Việc test lại nhiều lần một test case chắc hẳn sẽ là một công việc nhàm chán cho nhiều người. Tester sẽ cảm thấy mất động lực làm việc khi phải thực hiện quá nhiều regression test case trong khoảng thời gian dài. Thay vào đó hãy để hệ thống automation thực hiện việc này, development team chỉ phải tốn cost để viết script thực hiện test một lần và có thể dành thời gian để học kiến thức mới, như nghiên cứu công nghệ tự động hóa mới, kĩ thuật để viết automation một cách hiệu quả, nghiên cứu để hiểu sâu hơn về sản phẩm đang phát triển… Những hoạt động này chắc sẽ làm cho công việc trở nên nhiều thách thức và thú vị hơn.
#8 Tăng sự tự tin cho development team
Đối với bất kì một nhà phát triển phần mềm nào thì điều lo sợ nhất là khi phát hành một sản phẩm mà nó lại hoạt động không đúng như yêu cầu mà khách hàng mong đợi, đôi khi sẽ ảnh hưởng đến tài chính và hình ảnh của team phát triển. Vậy nên một sản phẩm đã được thực hiện test sớm, test nhiều lần sẽ góp phần làm tăng độ tự tin cho team phát triển trước khi release một sản phẩm ra thị trường.
Ngoài ra, team phát triển cũng sẽ tự tin hơn khi quyết định refactor hoặc áp dụng các kỹ thuật mới trên một sản phẩm đang hoạt động ổn định, tất cả những phần code vừa cập nhật sẽ được test lại ngay lập tức để phát hiện bug kịp thời.
#9 Khách hàng sẽ được trải nghiệm một sản phẩm có chất lượng tốt hơn
Từ lợi ích của tự động hóa về độ chính xác cao, testing được thực hiện sớm, giảm thiểu rủi ro bỏ sót bug từ con người, từ đó chất lượng sản phẩm cũng được nâng cao hơn. Khách hàng sẽ được sử dụng một sản phẩm tốt nhất có thể từ team phát triển. Duy trì được sự thỏa mãn, hài lòng với khách hàng. Về lâu dài, hình ảnh tốt của sản phẩm, team phát triển cũng được duy trì, chắc hẳn đây cũng là mục tiêu tối thiểu của bất kì một sản phẩm nào.
Kết luận
Ở bài viết này, chúng ta đi phân tích những giá trị mà tự động hóa mang lại. Tuy nhiên, chúng ta cũng lưu ý rằng: Cái gì cũng có hai mặt của nó, lợi ích và những khó khăn thách thức đi kèm khi triển khai tự động hóa.
Đồng thời, việc để triển khai automation testing đi đến thành công tốn nhiều công sức và cần được sự ủng hộ của nhiều bên. Trong đó phải kể đến là PO và PM cũng như tầm nhìn của tech lead. Suy cho cùng automation testing project cũng là một software project do đó cần rất nhiều góc nhìn từ QA, Developer và architecture để project có thể maintain và mở rộng liên tục.
Nếu bạn, công ty đủ nhiệt huyết hoặc lý lẽ để triển khai thì những thách thức, khó khăn là cơ hội để trưởng thành và mang lại nhiều giá trị hơn. Hy vọng bài viết này mang lại cho bạn một góc nhìn khách quan và tổng thể về giá trị tự động hóa mang lại.