Functional testing cũng là một trong những kỹ thuật kiểm thử được sử dụng phổ biến nhằm nâng cao chất lượng phần mềm. Tuy nhiên, vẫn có rất nhiều người mới chưa biết hoặc chỉ hiểu sơ sơ. Vì vậy, hãy cùng Testerpro tìm hiểu chi tiết thông qua nội dung bài viết dưới đây.
Functional testing là gì?
Functional testing được dịch ra tiếng Việt là kiểm thử chức năng. Đây là một kỹ thuật kiểm tra chất lượng của phần mềm qua từng chức năng của ứng dụng. Mục đích chính là để đảm bảo đáp ứng được yêu cầu đã đặt ra trước đó. Ngăn chặn việc có nhiều lỗi cùng xuất hiện trong một lúc và tránh việc kiểm thử dư thừa các chức năng không cần thiết.
Về cơ bản, khi thực hiện kiểm thử chức năng, chúng ta sẽ có nhiệm vụ so sánh đặc tả bên ngoài với các chức năng thực tế đang được cung cấp. Nếu không đáp ứng được yêu cầu thì đây sẽ được coi là lỗi và sẽ được chuyển đến bộ phận phát triển phần mềm để sửa.
Functional testing còn được biết đến là một dạng kiểm thử hộp đen. Trong quá trình kiểm thử, tester sẽ không cần chú ý đến mã nguồn của ứng dụng. Thay vào đó, họ sẽ chú trọng đến các chức năng đang được kiểm tra. Để làm được điều này, các chuyên viên kiểm thử sẽ nhập các giá trị đầu vào để đánh giá kết quả của đầu ra. Vì không quan tâm đến mã nguồn nên cấu trúc và cài đặt bên trong của ứng dụng sẽ không bị ảnh hưởng.
Khi thực hiện kiểm thử chức năng, Tester/QA sẽ sử dụng một trong các kỹ thuật thử nghiệm như:
- Kiểm thử điều hướng người dùng (User Navigation Testing)
- Kiểm thử thao tác trên màn hình (Transaction Screen Testing)
- Kiểm thử luồng thực hiện (Transaction Flow Testing)
- Kiểm thử màn hình báo cáo (Report Screen Testing)
- Kiểm thử luồng báo cáo (Report Flow Testing)
Phân loại functional testing
Mỗi phần mềm đều có nhiều thông số khác nhau, do đó cũng có nhiều loại functional testing có thể kể đến như Unit testing (Kiểm thử đơn vị), Smoke Testing, Sanity Testing, Interface testing (Kiểm thử giao diện), Integration testing (Kiểm thử tích hợp), System testing (Kiểm thử hệ thống), Regression testing (Kiểm thử hồi quy), Acceptance testing (Kiểm thử chấp nhận). Đây là 8 loại kiểm thử chức năng được sử dụng nhiều nhất.
Unit testing (Kiểm thử đơn vị)
Là loại kiểm thử cơ bản nhất, Unit testing được các Tester thực hiện bằng cách cô lập một phần code và sau đó xác minh tính chính xác của đơn vị này. Việc kiểm tra sẽ được thực hiện dựa trên các thành phần riêng lẻ để đảm bảo chất lượng phần mềm. Hầu hết các unit được chọn để kiểm tra sẽ có kích thước nhỏ với chức năng hoạt động đơn giản. Do đó, tester/QA sẽ không cần tốn quá nhiều thời gian mà vẫn xác định được lỗi một cách dễ dàng.
Smoke Testing
Sau khi có một bản build mới, các tester sẽ thực hiện kiểm thử với kỹ thuật Smoke Testing. Mục đích chính vẫn là để đảm bảo các chức năng của phần mềm đáp ứng được với yêu cầu đã đặt ra. Nếu phát hiện một vấn đề nào đó thì bản build sẽ không được duyệt và không được bàn giao cho giai đoạn kiểm thử tiếp theo. Nhờ vậy mà tránh được các lỗi không cần thiết, tránh lãng phí thời gian.
Các test case được chọn trong smoke testing sẽ bao gồm hầu hết các tính năng của phần mềm. Vì vậy, có thể nói rằng đây là quá trình kiểm thử tổng quát ban đầu.
Sanity Testing
Sanity Testing là quá trình kiểm thử sau khi có sự thay đổi, sửa lỗi trên các phần mềm, ứng dụng. Mục đích chính là để kiểm tra sự hoạt động hợp lý của hệ thống trước khi tiến đến các quá trình thử nghiệm nghiêm ngặt hơn. Như vậy, Sanity Testing sẽ được thực hiện sau Smoke Testing và trước giai đoạn kiểm thử hồi quy như một bước đệm cho các quy trình cần thực hiện kế tiếp.
Khi test theo kỹ thuật này, các tester/QA sẽ phải trả lời các câu hỏi ở bản build mới như: Việc sửa đổi có làm thay đổi chức năng của phần mềm không, có ảnh hưởng đến các tính năng khác hay không, có đáp ứng được với kỳ vọng đã đặt ra không… Sau đó mới thực hiện các kiểm thử khác trong các giai đoạn kế tiếp.
Interface testing (Kiểm thử giao diện)
Interface được hiểu đơn giản là một phần mềm gồm nhiều câu lệnh, message… nhằm kết nối giữa các thành phần của một trang web hay một ứng dụng nào đấy. Kiểm tra sự giao tiếp sẽ được thực hiện để đảm bảo không ảnh hưởng đến hiệu suất tổng thể.
Integration testing (Kiểm thử tích hợp)
Đến với kiểm thử tích hợp (Integration testing), đây là công việc kiểm tra một nhóm các module riêng lẻ lại với nhau hoặc các unit test trong từng Module. Mục đích chủ yếu là thử nghiệm việc liên kết giữa các dữ liệu xem chúng sẽ hoạt động như thế nào khi kết hợp. Đảm bảo sự trơn tru cho phần mềm khi thực hiện chức năng trên các nền tảng đang được cung cấp.
System testing (Kiểm thử hệ thống)
Kiểm tra chức năng sau khi tích hợp hệ thống là một việc cần làm để đảm bảo phần mềm đáp ứng được các yêu cầu đề ra. Các tester sẽ tiến hành kiểm tra kết quả sau khi đã kiểm thử tích hợp các module trong một hệ thống hoàn chỉnh.
System testing sẽ được thử nghiệm trong hộp đen với các tính năng làm việc bên ngoài của phần mềm. Vì thế, không đòi hỏi kiến thức nội bộ về coding, lập trình hay thiết kế… Dựa trên quan điểm của người dùng là chủ yếu. Bao gồm cả kiểm thử chức năng và kiểm thử phi chức năng.
Regression testing (Kiểm thử hồi quy)
Kiểm thử hồi quy được thực hiện với mục đích chính là đảm bảo các thay đổi trong phần mềm sẽ không ảnh hưởng đến chức năng hiện có. Các thay đổi đó có thể là sửa lỗi, thay đổi cấu hình bổ sung tính năng mới hoặc cải tiến phần mềm.
Acceptance testing (Kiểm thử chấp nhận)
Ngay từ tên gọi đã cho chúng ta biết được cách thực hiện kiểm thử này. Acceptance testing là kỹ thuật kiểm thử nhằm xác định chức năng hiện hành có đáp ứng được các yêu cầu đã đề ra hay không. Để làm được điều đó, người test sẽ kiểm tra các hành vi của hệ thống thông qua dữ liệu thực tế. Sau đấy sử dụng nhiều kỹ thuật để thử nghiệm một cách toàn diện. Có thể kể đến như kỹ thuật phân vùng tương đương, phân tích giá trị biên giới và sử dụng bảng quyết định.
Khi nào cần kiểm thử chức năng?
Kiểm thử chức năng có nhiệm vụ chính là đánh giá độ phù hợp giữa phần mềm với các đặc tả bên ngoài hay các hành vi mà người dùng sẽ nhìn thấy hay cảm nhận được. Mục đích là tránh việc kiểm thử dư thừa đối với các tính năng không cần thiết và hơn hết là tìm ra lỗi nhanh nhất. Tránh phát sinh nhiều vấn đề gây tốn thời gian hay chi phí sửa chữa. Do đó, cần thực hiện Functional testing đầu tiên để tối ưu nhất.
Việc kiểm thử chức năng sẽ được thực hiện theo từng cấp độ để đảm bảo đạt được hiệu quả cao nhất.
Quy trình thực hiện Functional Testing
Cũng giống các kỹ thuật kiểm thử khác, Functional testing cũng được tiến hành theo một quy trình nhất định. Trong đó, tester/QA thường thực hiện các bước cơ bản như:
– Bước 1: Nghiên cứu yêu cầu để xác định các chức năng cần kiểm thử ở phần mềm, ứng dụng.
– Bước 2: Dựa trên các thông số kỹ thuật phần mềm, tester/QA sẽ tiến hành xác định bộ dữ liệu đầu vào.
– Bước 3: Dựa trên thông số kỹ thuật phần mềm để xác định đầu ra cần đạt được.
– Bước 4: Lên kịch bản test và bắt đầu triển khai kiểm thử trên các trường hợp cụ thể.
– Bước 5: So sánh các kết quả đầu ra với kết quả thực tế để đánh giá xem khả năng phù hợp so với yêu cầu đã đề ra. Nếu đã đáp ứng được thì có thể dừng lại. Ngược lại, khi chức năng không đạt được như kỳ vọng, tester sẽ gửi báo cáo test cho bộ phận phát triển phần mềm để sửa lại cho phù hợp.
Functional Testing và Non-Functional Testing khác nhau ở đâu?
Mặc dù là một kỹ thuật kiểm thử được sử dụng khá phổ biến thế nhưng vẫn còn nhiều người chưa thể phân biệt rõ giữa Functional Testing và Non-Functional Testing. Đây là 2 kỹ thuật có thể nói là trái ngược nhau. Nếu như Functional Testing là kiểm thử phi chức năng thì Non-Functional Testing là kiểm thử phi chức năng.
Tiêu chí đánh giá | Functional Testing | Non-Functional Testing |
Nội dung kiểm thử | Kiểm tra chức năng, tính năng của phần mềm, ứng dụng | Kiểm tra về các khía cạnh phi chức năng đơn cử như hiệu suất, độ tin cậy, khả năng sử dụng… |
Đích đến | Dựa trên yêu cầu của khách hàng (Đặc tả về chức năng) | Dựa trên kỳ vọng của khách hàng (Các thông số kỹ thuật về hiệu suất) |
Khả năng thực hiện | Dễ dàng xác định yêu cầu chức năng nên nên cũng dễ tiến hành kiểm thử hơn | Khá khó để xác định được các yêu cầu nên khó đánh giá hiệu quả |
Cách thức thực hiện | Kiểm thử thủ công | Kiểm thử tự động là chủ yếu |
Kết quả | Kiểm tra xem kết quả thực tế so với kết quả mong đợi | Kiểm tra tốc độ và thời gian đáp ứng của phần mềm. |
Thời điểm test | Thực hiện đầu tiên | Thực hiện sau khi kết thúc kiểm thử chức năng |
Vai trò sự phản hồi của khách hàng | Cần thiết cho việc phát hiện lỗi và phát triển phần mềm. Phản hồi của khách hàng góp phần giảm thiểu rủi ro. | Phản hồi khách hàng giúp cải thiện hiệu suất phần mềm. |
Các loại kiểm thử | Unit testing Smoke Testing Sanity Testing Interface testing Integration testing System testing Regression testing Acceptance testing | Stability tests (Kiểm thử độ ổn định) Reliability Tests (Kiểm thử độ tin cậy) Robustness Tests (Kiểm thử độ bền) Stress tests (Kiểm thử áp lực) Performance Tests (Kiểm tra hiệu năng) Load Tests (Kiểm thử khả năng chịu tải) Usability Tests (Kiểm thử tính khả dụng) Maintainability Tests (Kiểm thử khả năng bảo trì) Portability Tests (Kiểm tra tính tương thích) |
Tạm kết
Như vậy là chúng ta đã cùng nhau tìm hiểu chi tiết về Functional Testing – Kiểm thử chức năng. Có thể thấy rằng đây là một kỹ thuật kiểm thử nên được triển khai trong quá trình phát triển phần mềm. Nhờ có Functional Testing mà chất lượng sản phẩm đã được đảm bảo. Mang đến nhiều lợi ích trong việc giảm thiểu chi phí cũng như thời gian hoàn thiện phần mềm.
Tham khảo thêm nhiều tài liệu tại các khóa học tester của testerpro để có thêm nhiều kiến thức thú vị nhé!