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:
- Thử nghiệm đầu cuối xác nhận tình trạng ứng dụ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.
- Thử nghiệm đầu cuối mở rộng phạm vi thử nghiệm
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 phát hiện được nhiều lỗi hơn và tăng năng suất ứng dụng
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.
- Thử nghiệm đầu cuối làm giảm công sức và chi phí
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:
- Truy cập trang web Evernote.
- Điều hướng đến các trang so sánh sản phẩm (compare plans) của Google để tìm hiểu về chi phí, tính năng và thông số kỹ thuật.
- Chọn gói cao cấp và nhấp vào Thử nghiệm miễn phí (Free Trial).
- Tiến hành tạo tên người dùng và mật khẩu và nhấp vào Tiếp tục (Continue).
- Nhập thông tin thanh toán của bạn và nhấp vào Bắt đầu dùng thử miễn phí (Start a free trial).
- Dừng trên trang chủ ứng dụng web Evernote.
- Điều hướng từ trang chủ đến trang so sánh các gói sản phẩm.
- Nhấp vào nút dùng thử miễn phí trên mạng trên gói dịch vụ cao cấp.
- Điền và gửi các trường tên người dùng và mật khẩu để tạo một tài khoản.
- Nhập và gửi thông tin thanh toán.
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:
- Lập kế hoạch yêu cầu: Phân tích các hệ thống và hệ thống con hiện tại của bạn và xác định các yêu cầu tối thiểu của phần cứng và phần mềm được đề xuất.
- Thiết kế hệ thống đầu cuối: Phác thảo các thành phần, công cụ, quy trình công việc, phương pháp và số liệu cho hệ thống kiểm tra từ đầu đến cuối của bạn, cũng như vai trò và trách nhiệm cá nhân của tất cả các thành viên trong nhóm tham gia.
- Kiểm tra thiết kế thành phần: Thiết kế các trường hợp kiểm tra riêng cho từng hệ thống con.
- Kiểm tra phát triển cơ sở hạ tầng: Viết mã các trường hợp kiểm tra của bạn và thiết lập cơ sở hạ tầng phần cứng và phần mềm cần thiết cho môi trường kiểm tra của bạn.
- Kiểm tra thực thi và đo lường: Kiểm tra hệ thống của bạn, ghi lại tất cả dữ liệu đầu vào và đầu ra và phân tích chúng dựa trên các số liệu mục tiêu của bạn để xác định sai sót và thất bại.
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:
- Tập trung vào quan điểm của người dùng cuối để đảm bảo ứng dụng cuối cùng hoạt động như dự định.
- Đảm bảo bao phủ các yêu cầu về business logic.
- Có thể được thiết lập và thực hiện độc lập
- Độ bao phủ cao hơn của mã lõi thông qua thử nghiệm tập trung.
- Thực hiện kiểm tra và giải quyết lỗi nhanh hơn
- Có thể được thực hiện theo các giai đoạn (không đòi hỏi phải có môi trường kiểm tra ứng dụng đầy đủ được thiết lập trước).
Hạn chế của thử nghiệm theo chiều ngang:
- Làm chậm thời gian để kiểm tra thực hiện và sửa lỗi (phải đợi cho đến khi hoàn thành tất cả các thay đổi phát hành)
- Yêu cầu sự tham gia và phối hợp của tất cả các bên liên quan chính đến Vòng đời phát triển hệ thống.
Lợi ích của thử nghiệm theo chiều dọc:
- Độ bao phủ cao hơn của mã lõi thông qua thử nghiệm tập trung.
- Thực hiện kiểm tra và giải quyết lỗi nhanh hơn
- Có thể được thực hiện theo các giai đoạn (không đòi hỏi phải có môi trường kiểm tra ứng dụng đầy đủ được thiết lập trước).
Hạn chế của thử nghiệm theo chiều dọc:
- Yêu cầu sự tham gia và phối hợp của tất cả các bên liên quan chính đến Vòng đời phát triển hệ thống.
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:
- Liệt kê các tính năng của ứng dụng của bạn, và các mối quan hệ của chúng trong hệ thống cốt lõi và các hệ thống con được kết nối với nhau.
- Liệt kê các hành động cũng như dữ liệu đầu vào và đầu ra cho từng chức năng.
- Xác định xem các hàm là độc lập hay trùng lặp (vì vậy một hàm được mã hóa có thể được sử dụng lại trong các trường hợp kiểm tra).
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:
- Hoàn tất tải các trang so sánh sản phẩm trong vòng x giây sau khi nhấp vào các mục điều hướng trên trang chủ.
- Hoàn thành tải trang của tài khoản tạo ra trên trang cá nhân trong vòng x giây sau khi nhấp vào nút dùng thử miễn phí trên trang so sánh sản phẩm.
- Kiểm tra xem tên người dùng đã được sử dụng hay chưa.
- Kiểm tra độ mạnh của mật khẩu đã gửi.
- Kiểm tra xem thông tin thanh toán có được định dạng chính xác hay không
- Kiểm tra xem phương thức thanh toán có hợp lệ/hoạt động hay không
- Kiểm tra xem phản hồi email tự động có được kích hoạt khi gửi thông tin thanh toán hay không
- Kiểm tra xem email tự động được gửi sau khi được kích hoạt hay không.
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:
- Tình trạng chuẩn bị cho trường hợp thử nghiệm: So sánh có bao nhiêu trường hợp thử nghiệm đã được chuẩn bị và đang được chuẩn bị so với tổng số trường hợp được lên kế hoạch.
- Tiến độ thử nghiệm hàng tuần: Đo số lượng thử nghiệm hoàn thành theo tuần theo tỷ lệ phần trăm của tổng số thử nghiệm được lên kế hoạch, cũng như số lượng thử nghiệm đã vượt qua và thất bại.
- Chi tiết và tình trạng khiếm khuyết: Theo dõi tỷ lệ phần trăm lỗi được mở và đóng mỗi tuần, cũng như phân loại lỗi dựa trên mức độ nghiêm trọng và mức độ ưu tiên.
- Tính khả dụng của môi trường thử nghiệm: Theo dõi lượng thời gian được phân bổ để chạy thử nghiệm trong môi trường thử nghiệm của bạn, cũng như lượng thời gian thực sự được sử dụng.
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:
- Protractor
- Nightwatch
- CasperJS
- Testcafe
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:
- Chạy thử nghiệm đầu cuối với mỗi lần đẩy mã.
- Chạy các bài kiểm tra này định kỳ (có thể hàng đêm, hàng tuần hoặc hàng tháng).
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.