QA Engineer (Tester) Roadmap: Kiểm thử Chức năng vs Kiểm thử Phi Chức năng: Hiểu rõ sự khác biệt

Tuyệt vời! Dưới đây là bài viết blog về “Kiểm thử Chức năng vs Kiểm thử Phi Chức năng” trong series “QA Engineer (Tester) Roadmap”, được viết bằng tiếng Việt, định dạng HTML/WordPress và tuân thủ các yêu cầu của bạn.

Chào mừng bạn quay trở lại với series “QA Engineer (Tester) Roadmap”! Trong hành trình trở thành một Kỹ sư Đảm bảo Chất lượng (QA) chuyên nghiệp, việc nắm vững các khái niệm cốt lõi là vô cùng quan trọng. Nếu bạn mới bắt đầu hoặc đang tìm hiểu về lĩnh vực này, có thể bạn đã nghe đến các thuật ngữ như “kiểm thử chức năng” và “kiểm thử phi chức năng”. Nhưng chính xác thì chúng khác nhau như thế nào và tại sao cả hai đều không thể thiếu để tạo ra một sản phẩm phần mềm thực sự chất lượng?

Trong bài viết này, chúng ta sẽ cùng đào sâu vào sự khác biệt giữa hai loại kiểm thử này. Đây là một phần kiến thức nền tảng giúp bạn xây dựng lộ trình trở thành Kỹ sư QA một cách vững chắc.

Trước khi đi sâu, hãy nhớ lại mục tiêu cốt lõi của chúng ta là gì? Đó là đảm bảo phần mềm không chỉ hoạt động đúng như mong đợi mà còn hoạt động tốt, mang lại trải nghiệm tốt cho người dùng và đáp ứng các tiêu chuẩn kỹ thuật khác. Điều này liên quan trực tiếp đến khái niệm Đảm bảo Chất lượng là gì mà chúng ta đã tìm hiểu.

Kiểm thử Chức năng (Functional Testing): “Phần mềm LÀM GÌ?”

Hãy bắt đầu với Kiểm thử Chức năng. Đúng như tên gọi, loại kiểm thử này tập trung vào việc kiểm tra các chức năng của phần mềm.

Mục đích chính: Xác minh rằng mỗi chức năng của ứng dụng hoạt động đúng như yêu cầu đã được chỉ rõ trong tài liệu đặc tả (requirements), user stories, hoặc các tài liệu liên quan khác. Chúng ta kiểm tra xem phần mềm có thực hiện đúng các hành động, xử lý dữ liệu đầu vào, tạo ra kết quả đầu ra mong đợi, và tuân thủ logic nghiệp vụ hay không.

Cơ sở thực hiện: Kiểm thử Chức năng dựa hoàn toàn vào các yêu cầu (requirements). Người kiểm thử xem tài liệu yêu cầu (functional requirements) và thiết kế các trường hợp kiểm thử để xác nhận rằng chức năng được xây dựng đúng theo đó. Đây là lúc kỹ năng “nghĩ như một người kiểm thử” phát huy tác dụng, bạn cần đặt mình vào vị trí người dùng cuối hoặc các bên liên quan để hiểu cách họ sẽ sử dụng phần mềm và các chức năng cần hoạt động như thế nào.

Các loại Kiểm thử Chức năng phổ biến:

  • Unit Testing (Kiểm thử Đơn vị): Kiểm tra các thành phần nhỏ nhất của code (hàm, phương thức, lớp). Thường do lập trình viên thực hiện.
  • Integration Testing (Kiểm thử Tích hợp): Kiểm tra sự tương tác giữa các module hoặc các hệ thống khác nhau.
  • System Testing (Kiểm thử Hệ thống): Kiểm tra toàn bộ hệ thống đã tích hợp, xác minh rằng nó đáp ứng các yêu cầu chức năng.
  • Acceptance Testing (Kiểm thử Chấp nhận): Thường do người dùng cuối hoặc khách hàng thực hiện để xác nhận phần mềm đáp ứng nhu cầu kinh doanh và sẵn sàng triển khai.
  • Regression Testing (Kiểm thử Hồi quy): Kiểm tra lại các chức năng đã hoạt động đúng trước đó sau khi có thay đổi (sửa lỗi, thêm tính năng) để đảm bảo các thay đổi không gây ra lỗi mới ở các khu vực khác.

Trong kiểm thử chức năng, chúng ta thường áp dụng các kỹ thuật Black Box Testing, nơi chúng ta kiểm tra chức năng mà không quan tâm đến cấu trúc nội bộ của code.

Ví dụ về Kiểm thử Chức năng:

Giả sử chúng ta đang kiểm thử một trang đăng nhập.

Trường hợp kiểm thử chức năng: Đăng nhập thành công với thông tin hợp lệ.
Mục đích: Xác minh người dùng có thể truy cập hệ thống sau khi nhập tên người dùng và mật khẩu đúng.
Các bước:
1. Mở trang đăng nhập.
2. Nhập 'username_hop_le' vào trường tên người dùng.
3. Nhập 'password_hop_le' vào trường mật khẩu.
4. Nhấn nút 'Đăng nhập'.
Kết quả mong đợi:
- Hệ thống xác thực thông tin.
- Người dùng được chuyển hướng đến trang Dashboard.
- Hiển thị thông báo chào mừng người dùng.

Một ví dụ khác trong một ứng dụng thương mại điện tử:

Trường hợp kiểm thử chức năng: Thêm sản phẩm vào giỏ hàng.
Mục đích: Xác minh người dùng có thể thêm một sản phẩm cụ thể vào giỏ hàng và số lượng/giá trị giỏ hàng được cập nhật đúng.
Các bước:
1. Duyệt đến trang chi tiết sản phẩm X.
2. Nhấn nút "Thêm vào giỏ hàng".
Kết quả mong đợi:
- Sản phẩm X được thêm vào giỏ hàng.
- Icon giỏ hàng hiển thị số lượng sản phẩm là 1 (hoặc tăng lên nếu đã có sản phẩm khác).
- Tổng giá trị giỏ hàng được cập nhật.
- (Có thể) hiển thị thông báo "Đã thêm sản phẩm vào giỏ hàng".

Việc viết các trường hợp kiểm thử như thế này là công việc hàng ngày của một QA Engineer.

Kiểm thử Phi Chức năng (Non-Functional Testing): “Phần mềm LÀM NHƯ THẾ NÀO?”

Trong khi Kiểm thử Chức năng trả lời câu hỏi “Phần mềm có làm những gì nó được yêu cầu không?”, Kiểm thử Phi Chức năng trả lời câu hỏi “Phần mềm làm những điều đó *như thế nào*?”.

Mục đích chính: Đánh giá hiệu suất, độ tin cậy, khả năng sử dụng, bảo mật, khả năng mở rộng (scalability), khả năng duy trì (maintainability), khả năng phục hồi (recoverability) và các khía cạnh “chất lượng” khác của hệ thống mà không liên quan trực tiếp đến một chức năng nghiệp vụ cụ thể.

Cơ sở thực hiện: Kiểm thử Phi Chức năng dựa trên các Yêu cầu Phi Chức năng (Non-Functional Requirements – NFRs). Các yêu cầu này thường mô tả các tiêu chí về hiệu suất (ví dụ: thời gian phản hồi phải dưới 3 giây), bảo mật (ví dụ: dữ liệu người dùng phải được mã hóa), khả năng sử dụng (ví dụ: 90% người dùng mới có thể hoàn thành tác vụ X trong 5 phút), v.v.

Các loại Kiểm thử Phi Chức năng phổ biến:

  • Performance Testing (Kiểm thử Hiệu năng): Kiểm tra cách hệ thống hoạt động dưới tải trọng khác nhau. Bao gồm:
    • Load Testing (Kiểm thử Tải): Kiểm tra hệ thống dưới tải trọng dự kiến.
    • Stress Testing (Kiểm thử Căng thẳng): Đẩy hệ thống vượt quá giới hạn thông thường để xem nó xử lý thế nào.
    • Endurance Testing (Kiểm thử Độ bền): Kiểm tra hệ thống hoạt động liên tục trong thời gian dài.
  • Security Testing (Kiểm thử Bảo mật): Phát hiện các lỗ hổng bảo mật, đảm bảo dữ liệu được bảo vệ khỏi truy cập trái phép.
  • Usability Testing (Kiểm thử Khả năng sử dụng): Đánh giá mức độ dễ sử dụng, dễ học và hiệu quả của giao diện người dùng đối với người dùng cuối.
  • Reliability Testing (Kiểm thử Độ tin cậy): Xác minh hệ thống hoạt động ổn định và không gặp sự cố trong một khoảng thời gian nhất định.
  • Scalability Testing (Kiểm thử Khả năng mở rộng): Kiểm tra khả năng của hệ thống để xử lý khối lượng công việc hoặc số lượng người dùng tăng lên.
  • Maintainability Testing (Kiểm thử Khả năng duy trì): Đánh giá mức độ dễ dàng để sửa đổi, cập nhật và duy trì hệ thống.
  • Compatibility Testing (Kiểm thử Tương thích): Kiểm tra xem phần mềm hoạt động đúng trên các môi trường khác nhau (hệ điều hành, trình duyệt, thiết bị, phiên bản cơ sở dữ liệu, v.v.).
  • Localization Testing (Kiểm thử Bản địa hóa): Kiểm tra xem phần mềm có phù hợp với các ngôn ngữ, văn hóa và định dạng địa phương cụ thể hay không.

Kiểm thử Phi Chức năng thường đòi hỏi các công cụ chuyên dụng (ví dụ: JMeter, LoadRunner cho hiệu năng; OWASP ZAP, Burp Suite cho bảo mật) và kỹ năng phân tích sâu hơn về hành vi hệ thống ở quy mô lớn hoặc dưới các điều kiện khắc nghiệt.

Ví dụ về Kiểm thử Phi Chức năng:

Tiếp tục với ví dụ về trang đăng nhập:

Kịch bản kiểm thử phi chức năng (Hiệu năng): Kiểm tra thời gian tải trang đăng nhập dưới tải.
Mục đích: Đảm bảo trang đăng nhập tải nhanh ngay cả khi có nhiều người dùng truy cập cùng lúc.
Yêu cầu Phi Chức năng (NFR): Thời gian tải trang đăng nhập không vượt quá 2 giây khi có 500 người dùng đồng thời.
Các bước:
1. Sử dụng công cụ kiểm thử hiệu năng (ví dụ: JMeter).
2. Cấu hình kịch bản mô phỏng 500 người dùng truy cập trang đăng nhập trong vòng 1 phút và duy trì tải trong 5 phút.
3. Chạy kịch bản và thu thập dữ liệu.
Kết quả mong đợi:
- Thời gian phản hồi trung bình của trang đăng nhập nhỏ hơn hoặc bằng 2 giây.
- Tài nguyên server (CPU, RAM) không bị quá tải (ví dụ: CPU < 80%).
- Không có lỗi kết nối hoặc lỗi ứng dụng xảy ra.

Một ví dụ khác về bảo mật:

Kịch bản kiểm thử phi chức năng (Bảo mật): Kiểm tra việc mã hóa mật khẩu.
Mục đích: Đảm bảo mật khẩu người dùng không được lưu trữ dưới dạng văn bản thuần (plaintext).
Yêu cầu Phi Chức năng (NFR): Mật khẩu người dùng phải được mã hóa bằng thuật toán mạnh (ví dụ: SHA-256) trước khi lưu vào cơ sở dữ liệu.
Các bước:
1. Đăng ký một tài khoản mới.
2. Truy cập cơ sở dữ liệu (với quyền phù hợp) hoặc sử dụng công cụ phân tích mạng để theo dõi request.
3. Kiểm tra cách mật khẩu được lưu trữ hoặc truyền đi.
Kết quả mong đợi:
- Mật khẩu trong cơ sở dữ liệu là một chuỗi băm (hashed string) không thể đọc được.
- (Nếu kiểm tra mạng) Mật khẩu không xuất hiện dưới dạng plaintext trong các gói tin truyền đi (ngoại trừ trên kết nối HTTPS đã được thiết lập đúng).

Sự khác biệt chính: Tóm tắt

Để dễ hình dung, chúng ta có thể tóm tắt sự khác biệt giữa Kiểm thử Chức năng và Kiểm thử Phi Chức năng qua bảng sau:

Tiêu chí Kiểm thử Chức năng (Functional Testing) Kiểm thử Phi Chức năng (Non-Functional Testing)
Mục đích Kiểm tra xem phần mềm LÀM GÌ (đúng chức năng theo yêu cầu). Kiểm tra xem phần mềm LÀM NHƯ THẾ NÀO (hiệu năng, bảo mật, sử dụng, v.v.).
Tập trung vào Các tính năng, chức năng kinh doanh, logic nghiệp vụ. Các khía cạnh “chất lượng” của hệ thống: tốc độ, độ ổn định, khả năng mở rộng, bảo mật, khả năng sử dụng, v.v.
Cơ sở thực hiện Dựa trên các Yêu cầu Chức năng (Functional Requirements) hoặc Đặc tả. Dựa trên các Yêu cầu Phi Chức năng (Non-Functional Requirements).
Kiểm tra gì Kết quả đầu ra của các hành động, luồng làm việc, xử lý dữ liệu. Thời gian phản hồi, mức độ sử dụng tài nguyên, khả năng chịu tải, độ mạnh của bảo mật, trải nghiệm người dùng.
Cách thực hiện Thường sử dụng các trường hợp kiểm thử dựa trên kịch bản người dùng. Có thể là kiểm thử thủ công hoặc tự động hóa. Thường cần các công cụ chuyên biệt để mô phỏng tải, tấn công bảo mật, đo lường hiệu năng. Có thể là kiểm thử thủ công (ví dụ: Usability) nhưng tự động hóa rất phổ biến.
Ví dụ Đăng nhập, Thêm vào giỏ hàng, Đặt hàng, Tìm kiếm sản phẩm, Cập nhật thông tin cá nhân. Thời gian tải trang, Số lượng người dùng đồng thời hệ thống có thể xử lý, Khả năng chống lại tấn công SQL Injection, Mức độ dễ dàng để tìm kiếm sản phẩm.

Mối quan hệ và tầm quan trọng của cả hai

Điều quan trọng cần hiểu là Kiểm thử Chức năng và Kiểm thử Phi Chức năng không phải là đối lập mà là bổ sung cho nhau. Một phần mềm chỉ có giá trị khi nó hoạt động đúng (functional) và hoạt động tốt (non-functional).

  • Một website thương mại điện tử cho phép người dùng thêm sản phẩm vào giỏ hàng và thanh toán (functional) nhưng lại mất 30 giây để tải mỗi trang (poor performance) hoặc dễ bị tấn công đánh cắp thông tin thẻ tín dụng (poor security) thì không thể coi là một sản phẩm chất lượng.
  • Ngược lại, một hệ thống cực kỳ nhanh, bảo mật tuyệt vời, nhưng lại không thực hiện được chức năng cơ bản là xử lý đơn hàng thì cũng vô dụng.

Trong các mô hình phát triển phần mềm (SDLC) khác nhau như Agile hay Waterfall, cả hai loại kiểm thử này đều có vai trò của mình, chỉ khác là thời điểm và cách thức thực hiện có thể thay đổi.

Kiểm thử Chức năng thường được ưu tiên và bắt đầu sớm hơn, ngay khi các chức năng cơ bản được xây dựng. Kiểm thử Phi Chức năng có thể bắt đầu sau đó, khi hệ thống đã tương đối ổn định, đặc biệt là kiểm thử hiệu năng và bảo mật ở quy mô lớn.

Việc Kiểm chứng (Verification – xây dựng đúng sản phẩm?)Thẩm định (Validation – xây dựng sản phẩm đúng?) cũng liên quan ở đây. Kiểm thử Chức năng chủ yếu là Validation (xác nhận sản phẩm đáp ứng nhu cầu người dùng), trong khi Kiểm thử Phi Chức năng có thể bao gồm cả Verification (xác nhận sản phẩm được xây dựng đúng theo các tiêu chuẩn kỹ thuật) và Validation (xác nhận sản phẩm đáp ứng kỳ vọng về hiệu năng, bảo mật của người dùng/doanh nghiệp).

Kết luận

Là một QA Engineer, đặc biệt là khi bạn mới bắt đầu, việc phân biệt rõ ràng Kiểm thử Chức năng và Kiểm thử Phi Chức năng là bước đầu tiên để hiểu bức tranh toàn cảnh về kiểm thử phần mềm. Kiểm thử Chức năng đảm bảo phần mềm làm những gì nó phải làm, trong khi Kiểm thử Phi Chức năng đảm bảo nó làm những điều đó một cách hiệu quả, an toàn và mang lại trải nghiệm tốt.

Cả hai loại kiểm thử này đều là nền tảng để đánh giá toàn diện chất lượng sản phẩm. Nắm vững sự khác biệt, mục đích và các loại kiểm thử con trong mỗi nhóm sẽ giúp bạn lên kế hoạch kiểm thử hiệu quả hơn, thiết kế các trường hợp kiểm thử phù hợp và báo cáo kết quả một cách rõ ràng.

Hãy tiếp tục hành trình học tập của bạn trong series “QA Engineer (Tester) Roadmap”. Ở các bài viết tiếp theo, chúng ta sẽ đi sâu hơn vào từng loại kiểm thử cụ thể, các kỹ thuật và công cụ cần thiết. Hẹn gặp lại bạn!

Chỉ mục