Thử nghiệm đầu cuối (end to end testing) là một trong những cách hiệu quả nhất để đảm bảo hiệu suất ứng dụng của người dùng cuối. Trong một thế giới dựa trên microservice, dựa trên Agile, việc phát triển và phân phối phần mềm đã trở nên khá phức tạp.
Ngày nay, các ứng dụng được xây dựng trên các lớp mã, mạng của các hệ thống con và tích hợp của bên thứ ba rất đan xen. Nếu một thành phần bị lỗi, thì toàn bộ sản phẩm cũng vậy.
Điều này làm cho tính ổn định của từng thành phần - cả về chính bản thân nó và là một phần của toàn bộ hệ thống ứng dụng - rất quan trọng đối với sự thành công của một sản phẩm phần mềm doanh nghiệp. Và nó nhấn mạnh sự cần thiết phải kiểm tra toàn bộ các ứng dụng từ đầu đến cuối, từ các mô-đun phần mềm và API (Application Programming Interface – giao diện lập trình ứng dụng) thông qua các hệ thống mạng và giao diện người dùng cuối.
Đó là nơi cần đến thử nghiệm đầu cuối.
Thử nghiệm đầu cuối là gì?
Thử nghiệm đầu cuối là một phương pháp được sử dụng để xác minh chức năng và hiệu suất của luồng ứng dụng trong các trường hợp và dữ liệu giống như sản phẩm sản xuất. Điều này không chỉ bao gồm các mô-đun phần mềm riêng lẻ, mà cả API bên trong và bên ngoài, mạng và cơ sở hạ tầng cơ sở dữ liệu mà ứng dụng dựa vào.
Mục tiêu là mô phỏng kịch bản người dùng trong thế giới thực để đảm bảo ứng dụng hoạt động như dự định trên toàn bộ - không chỉ các thành phần riêng lẻ (được bao phủ bởi các loại thử nghiệm chức năng khác) hoặc hệ thống của bạn được cách ly với bên thứ ba hoặc các tình huống thực sự của người dùng cuối (được bao phủ bởi thử nghiệm hệ thống).
Lợi ích của thử nghiệm đầu cuối
Do kết quả của các ứng dụng hiện đại phức tạp được xây dựng trên các hệ thống con bên trong và bên ngoài, các sản phẩm phần mềm hiện đại cần phải được xác nhận toàn bộ, không chỉ một phần; trong khi các hệ thống con có thể vượt qua các bài kiểm tra riêng lẻ, có thể có những vấn đề và lỗi trong cách chúng tương tác như một ứng dụng hoàn chỉnh.
Tiến hành kiểm tra từ đầu đến cuối giúp đảm bảo phần mềm của bạn đã sẵn sàng trở thành một sản phẩm hoàn thiện, từng lớp một.
Dưới đây là một vài lý do tại sao nó nắm giữ chìa khóa thành công của bạn:
Kiểm tra từ đầu đến cuối xác nhận các chức năng phần mềm của bạn ở mọi cấp độ, từ trước đến sau, trên nhiều hệ thống và như một tổng thể. Đồng thời, nó cung cấp một viễn cảnh về hiệu suất ứng dụng trên các môi trường người dùng cuối khác nhau, cũng như để đảm bảo trải nghiệm người dùng cuối hoạt động như dự định.
Bằng cách tính toán sự tương tác giữa các dịch vụ và hệ thống con, thử nghiệm đầu cuối cũng mở rộng phạm vi thử nghiệm vượt ra ngoài những gì thường được xem xét trong các thực tiễn thử nghiệm biệt lập, đảm bảo chất lượng và giảm thiểu rủi ro.
Thử nghiệm đầu cuối được thực hiện trong môi trường phát triển Agile hoặc DevOps hiện đại, thường được thực hiện sau mỗi lần lặp hoặc sau mỗi vài lần lặp, nghĩa là lỗi được phát hiện và sửa nhanh hơn. Điều này làm giảm khả năng lỗi bị chôn sâu vào một sản phẩm nơi chúng trở nên khó tìm và khó sửa chữa.
Với thử nghiệm toàn diện ở mỗi lần lặp, cũng như ít lỗi và sự cố hơn trong các sản phẩm được phát hành, thử nghiệm đầu cuối giảm nhu cầu lặp lại thử nghiệm hoặc làm lại công việc - cuối cùng giảm chi phí và thời gian liên quan đến thử nghiệm.
Cách thức hoạt động của thử nghiệm đầu cuối
Bởi vì thử nghiệm từ đầu đến cuối bao trùm toàn bộ ứng dụng, điều quan trọng là lập kế hoạch đúng và lặp lại triển khai một chương trình thử nghiệm đầu cuối mới.
Việc không thực hiện thử nghiệm đầu cuối có nguy cơ khiến ứng dụng bị sụp đổ trong trường hợp hệ thống con thất bại.
Ví dụ: hãy tưởng tượng bạn mua một sản phẩm phần mềm như Evernote (Ứng dụng Evernote sẽ giúp bạn tạo ghi chú trên bất kỳ thiết bị nào có cài ứng dụng Evernote như máy tính, điện thoại hay trình duyệt web). Từ quan điểm của bạn, là người dùng cuối, quy trình có thể như sau:
Sau đó, bạn cũng có thể nhận được email xác nhận đăng ký của mình, sau đó là email tiếp theo với các tài liệu về cách sử dụng Evernote.
Từ đầu đến cuối, bạn đã mong muốn quá trình này diễn ra liên tục từ việc tải trang web thông qua việc có thể điều hướng quá trình đăng ký và nhận email.
Là người dùng cuối, bạn sẽ không nghĩ về các hệ thống phụ thuộc vào từng bước, nhưng đối với các nhóm Kiểm soát và Đảm bảo chất lượng của Evernote, số lượng các bước người dùng thực hiện này có thể khiến việc kiểm tra nền tảng của họ trở nên phức tạp và tốn thời gian. Bao gồm các dịch vụ khác ngoài ứng dụng cốt lõi của họ, như bộ xử lý thanh toán và hệ thống gửi email, kiểm tra toàn bộ quy trình làm việc có thể là một cơn ác mộng.
Xác minh rằng cơ sở hạ tầng mạng cần thiết để giữ cho trang web hoạt động và phản hồi hoạt động, giao diện người dùng và chức năng hoạt động như mong đợi, thông tin tài chính cá nhân bạn chia sẻ được mã hóa trong quá trình. Đảm bảo rằng các email được kích hoạt và gửi đúng cách.
Số lượng các bộ phận chuyển động có thể khá nhiều và mở ra các khả năng thất bại.
Thử nghiệm từ đầu đến cuối không chỉ đảm bảo luồng công việc phức tạp, như các chức năng nêu trên theo quan điểm của người dùng trên nhiều giao diện khác nhau, mà còn đảm bảo luồng thông tin giữa ứng dụng của Evernote, các thiết bị mạng của nó, cũng như email (có thể là bên thứ ba) và nền tảng xử lý thẻ tín dụng cũng hoạt động như dự định.
Quy trình thử nghiệm đầu cuối
Do phạm vi rộng của nó, thử nghiệm đầu cuối có thể bao gồm nhiều phần phức tạp và đặc biệt, nhưng quy trình cơ bản như sau:
Các phương pháp kiểm tra đầu cuối
Thử nghiệm đầu cuối được thực hiện theo hai cách chính - theo chiều ngang và chiều dọc.
Kiểm tra đầu cuối theo chiều ngang (Horizontal E2E Testing)
Kiểm tra đầu cuối theo chiều ngang hoạt động chủ yếu từ phối cảnh người dùng, bước qua từng giai đoạn của một ứng dụng business logic, từ đầu đến cuối để đảm bảo mỗi quy trình liên quan được thực hiện chính xác.
Trong ví dụ về Evernote, ứng dụng của họ không chỉ hoạt động theo quan điểm UI (User Interface - Giao diện người dùng) mà còn tích hợp một cách đồng bộ với bộ xử lý thanh toán và hệ thống gửi email, cũng như cơ sở hạ tầng mạng và cơ sở dữ liệu của họ
Do thử nghiệm theo chiều ngang xảy ra vào cuối chu kỳ phát hành (khi những thay đổi của hệ thống và hệ thống con hoàn tất), điều cần thiết là môi trường thử nghiệm được nhóm thử nghiệm của bạn thiết lập hoàn toàn trước khi thực hiện.
Kiểm tra đầu cuối theo chiều dọc (Vertical E2E Testing)
Kiểm tra đầu cuối theo chiều dọc liên quan đến việc kiểm tra từng lớp của một ứng dụng kiến trúc từ trên xuống dưới, nghĩa là mỗi hệ thống con được kiểm tra độc lập, sau đó kiểm tra được tiếp tục thông qua cơ sở hạ tầng mạng, tích hợp API (Application Programming Interface - Giao diện lập trình ứng dụng) và các lớp UI.
Vì vậy, trong ví dụ Evernote, hệ thống cốt lõi của họ sẽ được kiểm tra chi tiết bằng các thử nghiệm đơn vị, sau đó là hệ thống xử lý thanh toán, sau đó là hệ thống gửi email của họ, trước khi họ chuyển sang thử nghiệm mạng, tích hợp API và cuối cùng là UI.
Do việc đặt trọng tâm chi tiết của nó, thử nghiệm theo chiều dọc thường được tích hợp nhiều hơn vào chu trình phát triển, bằng cách sử dụng các chiến lược như phát triển dựa trên hành vi, phát triển theo hướng thử nghiệm hoặc thử nghiệm liên tục.
Mặc dù thử nghiệm theo chiều ngang có thể được thiết lập và thực hiện bởi một nhóm tương đối độc lập, thử nghiệm theo chiều dọc tích hợp chặt chẽ với SDLC (Software Development Life Cycle - Vòng đời phát triển hệ thống) hiện tại của bạn. Có nghĩa là mỗi bên liên quan chính - nhà phát triển, người thử nghiệm, chủ sở hữu sản phẩm - tất cả đều cần tham gia và hỗ trợ quá trình thử nghiệm.
Ưu điểm
Cả hai loại thử nghiệm đầu cuối theo chiều ngang và theo chiều dọc đều có thể giúp bạn hoàn thành cùng một mục tiêu (đảm bảo toàn bộ chức năng ứng dụng của bạn hoạt động hiệu quả), nhưng mỗi phương pháp đều có những lợi ích và nhược điểm riêng giúp chúng thực hiện tốt hơn với các nhóm nhất định.
Lợi ích của thử nghiệm theo chiều ngang:
Hạn chế của thử nghiệm theo chiều ngang:
Lợi ích của thử nghiệm theo chiều dọc:
Hạn chế của thử nghiệm theo chiều dọc:
Tạo một hệ thống kiểm tra đầu cuối
Các hệ thống kiểm tra đầu cuối được xây dựng theo ba giai đoạn chính - chức năng người dùng, điều kiện thử nghiệm và trường hợp thử nghiệm.
1. Xây dựng chức năng người dùng
Bước đầu tiên là xây dựng các chức năng mô phỏng hành vi người dùng thực và sử dụng ứng dụng của bạn.
Vì vậy, trong ví dụ Evernote, cần mô hình hóa các hàm cho:
Xây dựng các chức năng người dùng liên quan đến:
2. Xây dựng điều kiện kiểm tra
Khi các chức năng của người dùng được lập bản đồ và xây dựng, đó là thời gian để tạo điều kiện, để đánh giá xem thử nghiệm đã được thông qua hay thất bại.
Điều này bao gồm các tham số cài đặt xung quanh thời gian, dữ liệu và trình tự cho từng chức năng người dùng.
Trong ví dụ Evernote, các điều kiện có thể bao gồm:
3. Xây dựng trường hợp thử nghiệm
Với các chức năng người dùng được xây dựng và các điều kiện được đặt, đã đến lúc xây dựng các trường hợp kiểm thử thực thi các chức năng theo một kịch bản quy trình công việc cụ thể, và đo lường hiệu suất theo các điều kiện kiểm tra.
Cần xây dựng nhiều trường hợp thử nghiệm để kiểm tra từng kịch bản người dùng cũng như từng điều kiện riêng lẻ.
Số liệu để đo lường trong kiểm tra đầu cuối
Như với bất kỳ quy trình thử nghiệm nào, điều đó rất quan trọng để đảm bảo các thời gian và công sức của nhóm không bị lãng phí, bằng cách theo dõi một vài số liệu quan trọng để thành công.
Đối với thử nghiệm đầu cuối, các thông số bao gồm:
Cách triển khai thử nghiệm đầu cuối
Bây giờ bạn đã hiểu rõ hơn về thử nghiệm đầu cuối là gì, lợi ích của nó và cách thức hoạt động, có lẽ bạn đã sẵn sàng để bắt đầu thực hiện hệ thống của riêng mình?
Nhưng làm thế nào để bạn làm điều đó trong tổ chức của mình? Làm thế nào để bạn nhận ra đây là một ý tưởng tốt để thực hiện các bài kiểm tra và sửa lỗi?
Sau khi bạn xác định muốn thực hiện thử nghiệm đầu cuối, tại đây, quá trình thực hiện cơ bản được khuyến nghị như sau:
1. Xác định các thử nghiệm quan trọng nhất của bạn
Đặc biệt đối với các ứng dụng doanh nghiệp lớn, các thử nghiệm đầu cuối có thể có khả năng trở nên khổng lồ về phạm vi. Thay vì cố gắng kiểm tra mọi trường hợp kiểm tra có thể trên mỗi một sản phẩm phần mềm của mình, các chuyên gia khuyên bạn nên bắt đầu với một ứng dụng quan trọng nhất (quan trọng nhất đối với doanh nghiệp của bạn hoặc dễ bị lỗi nhất) và phác thảo một vài trường hợp quan trọng nhất để kiểm tra ứng dụng đó, để sớm tối đa hóa ROI (tỷ suất hoàn vốn).
2. Chọn khung kiểm tra
Với các thử nghiệm quan trọng nhất được xác định, hãy đánh giá các khung thử nghiệm đầu cuối khác nhau để tìm một khung phù hợp nhất với doanh nghiệp của bạn. Các tiêu chí chính, như với hầu hết các giải pháp kinh doanh, là bộ tính năng (chúng có đáp ứng nhu cầu của bạn), chi phí (chúng có phù hợp với ngân sách của bạn hay không?) và có dễ thực hiện hay không (bạn có thể thiết lập chúng nhanh chóng không?).
Một vài trong số các khung thử nghiệm đầu cuối phổ biến nhất bao gồm:
3. Tích hợp kiểm tra đầu cuối với Vòng đời phát triển hệ thống hiện có của bạn
Với các thử nghiệm thiết yếu đã được xác định và khung thử nghiệm đầu cuối được chọn, bước tiếp theo là xác định cách thử nghiệm đầu cuối có thể được tích hợp vào vòng đời phát triển phần mềm hiện tại của bạn hay không.
Các tùy chọn chính ở đây bao gồm:
Thực hiện thử nghiệm đầu cuối theo chiều dọc để kết thúc cho một chu kỳ thử nghiệm của mỗi lần đẩy mã, vì nó dễ dàng tích hợp các thử nghiệm chi tiết vào quy trình phát triển của bạn mà không cần thêm chi phí thử nghiệm lớn vào cuối quá trình phát triển, mặc dù nếu tổ chức của bạn có đủ tài nguyên để thực hiện kiểm tra theo chiều ngang có thể là rất tốt.
Chạy thử nghiệm đầu cuối định kỳ là một chiến lược dễ dàng hơn nhiều, vì nó không yêu cầu thử nghiệm nhiều như vậy và cho phép phần mềm được phân phối nhanh hơn. Tuy nhiên, nếu quy trình hiện tại của bạn có những thách thức về đảm bảo chất lượng, điều này cuối cùng có thể dẫn đến nhiều sai sót trong quá trình làm lại/trải nghiệm người dùng khi nhiều mã bị lỗi được đẩy vào sản xuất và cần phải được phát hiện, sửa và triển khai lại.
4. Tạo một môi trường và quy trình thử nghiệm nguyên mẫu
Bước cuối cùng là tạo bằng chứng về môi trường kiểm tra khái niệm, quy trình và trường hợp thử nghiệm để xác thực hệ thống kiểm tra mới của bạn, mà không làm gián đoạn quy trình công việc bình thường hoặc có khả năng phá vỡ cơ sở mã hiện tại của bạn.
Tạo một kho lưu trữ mã riêng biệt và chạy thử nghiệm của bạn trong môi trường dàn dựng, sau đó, khi bạn hoàn thiện quy trình thử nghiệm của mình, bắt đầu tích hợp hoàn toàn với Vòng đời phát triển hệ thống và cơ sở hạ tầng hiện có của bạn.
Hy vọng hướng dẫn này đã hướng dẫn cho bạn mọi thứ bạn cần biết về thử nghiệm đầu cuối.