Các phương pháp kiểm thử phần mềm giúp đảm bảo hoạt động trơn tru và hiệu quả của ứng dụng được phát triển trước khi đến tay khách hàng. Mỗi phương pháp kiểm thử phần mềm sẽ có ưu nhược điểm riêng, tham khảo bài viết để có được thông tin chi tiết nhất.
Phương pháp kiểm thử phần mềm (Testing Methods)
Phương pháp kiểm thử phần mềm (Testing Methods) được thực hiện bởi những kiểm thử viên với mục đích đảm bảo hoạt động của ứng dụng mới được phát triển. Có 3 phương pháp kiểm thử phần mềm cơ bản: kiểm thử hộp trắng (White Box Testing), kiểm thử hộp đen (Black Box Testing), kiểm thử hộp xám (Gray Box Testing).
Kiểm thử hộp trắng (White Box Testing)
Phương pháp kiểm thử phần mềm White Box Testing – kiểm thử hộp trắng được các tester áp dụng để kiểm tra cấu trúc bên trong phần mềm, đồng thời, tester sẽ tiến hành lấy dữ liệu thử nghiệm từ mã chương trình.
Phương pháp kiểm thử phần mềm này còn có tên gọi khác là thử nghiệm điều hướng đường dẫn, thử nghiệm hộp mở, thử nghiệm cấu trúc hay kiểm tra theo hướng logic. Kiểm thử hộp trắng được các tester chuyên nghiệp tập trung vào dữ liệu đầu vào và đầu ra, truy cập thẳng vào bên trong source code.
Kiểm thử hộp trắng (White box testing) được chia thành nhiều loại khác nhau, bao gồm: API Testing, code coverage, Fault Injection Methods, Mutation Testing Methods, Static Testing. API Testing là kiểm thử ứng dụng bằng cách dùng hàm API private và public.
Trong khi đó, Code Coverage là việc tạo trường hợp test nhằm thỏa mãn điều kiện bao phủ code – code coverage. Fault Injection Methods sẽ đưa một số lỗi vào để test đường dẫn code nhằm cải tiến bao phủ.
Mutation Testing Methods là một trong những loại kiểm thử hộp trắng nhằm thay đổi câu lệnh trong source code, kiểm tra test case có khả năng tìm ra lỗi hay không. Đối với Static testing, các kiểm thử viên không cần hiểu biết về mã lệnh mà chỉ cần căn cứ vào tài liệu đặc tả để xử lý bất cứ chức năng nào.
Ưu điểm:
-
Giúp hệ thống tối ưu hóa các dòng lệnh một cách đơn giản
-
Giúp các tester phát hiện lỗi dễ dàng trong mỗi dòng lệnh
-
Loại bỏ nhanh chóng dòng lệnh có lỗi tiềm ẩn hoặc không quan trọng
-
Tester sau khi thực hiện phương pháp kiểm thử phần mềm này sẽ dễ dàng hơn để đạt được độ bao phủ lớn nhất trong các trường hợp kiểm thử sau
Nhược điểm:
-
Khi tìm lỗi tiềm ẩn của hệ thống, có nhiều luồng không thể kiểm tra được bằng cách kiểm tra chi tiết từng dòng lệnh
-
Cần có rất nhiều tool chuyên biệt, ví dụ như tool phát hiện/sửa lỗi, phân tích code để có thể duy trì phương pháp kiểm thử hộp trắng
-
Tester thực hiện phương pháp kiểm thử phần mềm White Box Testing cần có chuyên môn cao và dày dặn kinh nghiệm
-
Giá thành phần mềm sẽ tăng lên đáng kể nếu sử dụng các tester có chuyên môn cao, giàu kinh nghiệm
Kiểm thử hộp đen (Black Box Testing)
Đây là phương pháp kiểm thử được các tester sử dụng để kiểm tra bên trong phần mềm ngay cả khi không biết được cấu tạo bên trong của nó như thế nào, nó khiến các tester liên tưởng đến việc kiểm tra một chiếc hộp đen mặc dù không thể nhìn thấy bên trong.
Kiểm thử hộp đen chính là thử nghiệm dựa trên dựa trên thông số kỹ thuật, được thực hiện chủ yếu trong System test và Function test. Phương pháp kiểm thử phần mềm này bao gồm các loại:
-
Kiểm thử tất cả các cặp (All-pairs testing)
-
Kiểm thử dựa trên Model (Model-based testing)
-
Phân tích giá trị biên (Boundary value analysis)
-
Phân vùng tương đương (Equivalence partitioning)
-
Kiểm thử dựa vào chức năng (Specification-based testing)
-
Kết hợp các cột hoặc dòng có liên quan (Traceability matrix)
-
Kiểm thử dựa vào khả năng và kinh nghiệm của tester (Exploratory testing)
Ưu điểm:
-
Tester không cần phải truy cập vào từng dòng lệnh
-
Hiệu quả và phù hợp với hệ thống có số lượng lớn dòng lệnh
-
Phân biệt một cách rõ ràng quan điểm của nhà phát triển và người dùng
-
Không đòi hỏi tester phải có kiến thức về ngôn ngữ lập trình khi kiểm thử phần mềm
Nhược điểm:
-
Bị giới hạn bởi độ bao phủ của các trường hợp kiểm thử
-
Khó khăn trong việc thiết kế đầy đủ mọi trường hợp kiểm thử
-
Thực tế không mang lại hiệu quả cao bởi các tester bị giới hạn kiến thức về hệ thống
-
Các tester chỉ tập trung vào dòng lệnh dễ xảy ra lỗi, khó có thể kiểm tra tất cả đoạn lệnh của hệ thống
Kiểm thử hộp xám (Gray Box Testing)
Hiện nay, kiểm thử hộp xám (Gray Box Testing) là phương pháp kiểm thử phần mềm phổ biến nhất. Nó được coi là phương pháp kết hợp giữa kiểm thử hộp trắng và kiểm thử hộp đen. Kiểm thử hộp xám hữu ích trong kiểm tra thâm nhập và kiểm thử tích hợp.
Các tester phải có kiến thức đáng kể về các luồng hoạt động bên trong hệ thống mới có thể thực hiện được phương pháp kiểm thử hộp xám. Phương pháp này cho phép tester truy cập vào thuật toán của chương trình, cấu trúc dữ liệu bên trong để thiết kế test case.
Không giống như kiểm thử hộp đen, với phương pháp kiểm thử này, tester chỉ cần quan tâm đến việc kiểm thử thông qua giao diện người dùng. Kỹ thuật kiểm tra hộp xám bao gồm: kiểm tra mảng trực giao, kiểm tra mẫu, kiểm tra ma trận, kiểm tra hồi quy.
Ưu điểm:
-
Phương pháp kiểm thử phần mềm tối ưu bởi nó là sự kết hợp giữa 2 phương pháp còn lại
-
Các tester chỉ cần dựa vào các tài liệu đặc tả chức năng, định nghĩa giao diện mà không cần dựa vào các dòng lệnh
-
Với phương pháp này, kịch bản thử nghiệm có thể được thiết kế phức tạp, thông minh và hiệu quả hơn
-
Không phải góc nhìn từ nhà thiết kế, việc kiểm thử sẽ được hoàn thiện từ góc nhìn của người sử dụng
Nhược điểm:
-
Kiểm thử hộp xám cho một ứng dụng có hệ thống phân tán thường gặp khó khăn khi liên kết lỗi
-
Độ bao phủ của các trường hợp kiểm thử bị giới hạn do kiểm thử hộp xám không dựa trên việc truy cập code
-
Các luồng đầu vào của hệ thống bị giới hạn về mặt thời gian kiểm thử, cho nên, có rất nhiều luồng hoạt động của hệ thống không được kiểm tra
So sánh các phương pháp kiểm thử
Các phương pháp kiểm thử phần mềm (kiểm thử hộp trắng, kiểm thử hộp đen và kiểm thử hộp xám) có sự khác biệt nhất định. Dưới đây là bảng so sánh phương pháp kiểm thử để tester có cái nhìn tổng quan và áp dụng phù hợp để có được kết quả tối ưu.
Bảng so sánh các phương pháp kiểm thử phần mềm
|
Kiểm thử hộp trắng
|
Kiểm thử hộp đen
|
Kiểm thử hộp xám
|
Được biết đến với các tên gọi: code-based testing, clear-box testing
|
Được biết đến với các tên gọi: functional testing, data-driven testing, closed-box testing
|
Được biết đến với tên gọi: translucent testing
|
Phù hợp để kiểm tra các thuật toán trong hệ thống
|
Không phù hợp nếu dùng để kiểm tra các thuật toán trong hệ thống
|
Không phù hợp để kiểm tra các thuật toán trong hệ thống
|
Các giới hạn và miền dữ liệu sẽ được test
|
Hoàn thiện bởi cơ chế phát hiện lỗi
|
Nếu tester có kiến thức về các giới hạn, miền dữ liệu được thì chúng sẽ được test
|
Tester phải nắm được các luồng hoạt động trong hệ thống
|
Tester không phải quan tâm đến các luồng hoạt động bên trong hệ thống
|
Tester cần có kiến thức nhất định về các luồng hoạt động bên trong hệ thống
|
Kiểm thử viên tự thiết kế dựa trên bộ dữ liệu kiểm thử phù hợp và kiến thức về những luồng hoạt động bên trong hệ thống
|
Việc kiểm thử được thực hiện dựa trên kết quả thực tế hệ thống trả về và kết quả mong muốn
|
Việc kiểm thử dựa vào sơ đồ các luồng dữ liệu và cơ sở dữ liệu
|
Đầy đủ và tiêu tốn nhiều thời gian nhất
|
Tốn ít thời gian nhất nhưng độ bao phủ các trường hợp không đầy đủ nhất
|
Tiêu tốn thời gian và độ bao phủ các trường hợp ở mức độ vừa phải
|
Được hoàn thiện bởi lập trình viên và kiểm thử viên
|
Được hoàn thiện bởi lập trình viên, kiểm thử viên và người dùng cuối
|
Được hoàn thiện bởi lập trình viên, kiểm thử viên và người dùng cuối
|
Nguyên lý kiểm thử phần mềm
Để quá trình kiểm thử không đi chệch mục tiêu đề ra và có được kết quả kiểm thử tối ưu, các tester cần tuân theo những nguyên lý nhất định. Dưới đây là 7 nguyên lý kiểm thử phần mềm được ứng dụng phổ biến mà các tester có thể tham khảo.
Kiểm thử đưa ra lỗi
Các phương pháp kiểm thử phần mềm giúp làm giảm xác suất lỗi còn tồn tại. Phần mềm có thể vẫn còn lỗi ngay cả khi đã kiểm thử nghiêm ngặt, vì vậy, tester phải thường xuyên áp dụng kỹ thuật khác nhau để phát hiện lỗi phần mềm.
Khi kiểm thử phần mềm, tester có thể nhận thấy hầu hết lỗi thường liên quan đến một số tính năng nhất định của hệ thống. Đây là điều thuận với nguyên lý Pareto, tức là, khoảng 80% lỗi sẽ được tìm thấy trong 20% tính năng của hệ thống.
Kiểm thử cạn kiệt là không thể
Trong một phần mềm, sẽ rất khó khăn để tiến hành kiểm tra trọn vẹn mọi thứ. Kiểm thử với mọi kịch bản và với tất cả đầu ra, đầu vào là không thể, trừ khi nó bao gồm rất ít trường hợp thì các tester mới có thể tiến hành kiểm thử toàn bộ.
Chính vì vậy, thay vì kiểm thử toàn bộ, hãy tiến hành kiểm thử một số điểm cần thiết, có khả năng cao xuất hiện lỗi. Ví dụ, khi bạn xác định hệ điều hành bị lỗi do mở 10 ứng dụng khác nhau cùng lúc, có thể bạn sẽ tìm thấy các lỗi trong hoạt động đa tác vụ.
Sự tập trung của lỗi
Thông thường, những module, thành phần chính của hệ thống là nơi tập trung lỗi. Hiểu được điều đó sẽ giúp tester tập trung tìm kiếm và phát hiện lỗi một cách nhanh chóng, chính xác. Đây cũng là một trong những nguyên lý thử nghiệm phần mềm mà các tester cần quan tâm.
Kiểm thử càng sớm càng tốt
Việc kiểm thử lỗi được thực hiện càng sớm càng tốt. Trong giai đoạn đầu của vòng đời phát triển phần mềm, tốt nhất nên tiến hành kiểm thử lỗi. Phát hiện lỗi trong giai đoạn thiết kế sẽ ít tốn kém hơn so với việc khắc phục, sửa chữa sau này. Kiểm thử lỗi sớm cho phép chuyển giao phần mềm chất lượng, khiến khách hàng hài lòng.
Nghịch lý thuốc trừ sâu
Thực tế, khi chúng ta sử dụng thuốc trừ sâu để tiêu diệt các loại sâu bọ một cách thường xuyên, lặp lại dẫn đến việc sâu bọ có khả năng kháng thuốc. Tức là, sâu bọ ngày càng chịu được một lượng thuốc trừ sâu lớn hơn lượng thuốc sử dụng trong thời gian đầu.
Áp dụng trong kiểm thử phần mềm, khi kiểm thử viên sử dụng lặp lại một bộ test case thì những lần sau sẽ rất khó để phát hiện lỗi mới. Sau một số lần kiểm thử, hiệu quả sẽ giảm đi đáng kể. Do đó, kiểm thử viên cần xem xét, thay đổi liên tục, thêm bộ test case mới để có thể phát hiện lỗi dễ dàng và chính xác.
Kiểm thử phụ thuộc vào ngữ cảnh
Theo nguyên lý này thì tester cần có hướng tiếp cận, phương pháp và chiến lược kiểm thử phần mềm theo những ngữ cảnh khác nhau. Chẳng hạn, phương pháp và chiến lược kiểm thử ứng dụng di động sẽ khác hẳn so với kiểm thử web thương mại điện tử.
Không có lỗi – sai lầm
“Không có lỗi” là một nhận định sai lầm khi kiểm thử phần mềm. Việc tester chưa phát hiện ra lỗi không có nghĩa là sản phẩm đã sẵn sàng để được tung ra thị trường. Không tìm thấy lỗi cũng có thể do bộ kiểm thử được tạo ra chỉ có khả năng phát hiện lỗi nhất định thay vì tìm kiếm những lỗi mới.
Bài viết đã giúp bạn đọc hiểu rõ hơn về các
phương pháp kiểm thử phần mềm cơ bản: kiểm thử hộp đen, kiểm thử hộp trắng và kiểm thử hộp xám. Ngoài ra, bài viết cũng chia sẻ chi tiết về 7 nguyên lý kiểm thử phần mềm, từ đó giúp các tester áp dụng và đánh giá được tính hiệu quả của hoạt động kiểm thử. Bạn có thể tham khảo:
Khóa học kiểm thử phần mềm tại Hà Nội của NIIT.
Đọc thêm:
Lộ trình học Tester cho người mới bắt đầu