Kiểm thử phần mềm đƣợc chia theo nhiều loại để dễ dàng bao phủ đƣợc hết các trƣờng hợp kiểm thử, dễ dàng quản lý lỗi và sửa lỗi. Để phân loại kiểm thử phần mềm, có nhiều tiêu chí để phân loại chúng. Dựa trên tài liệu chuẩn kiểm thử quốc tế [6], kiểm thử phần mềm đƣợc phân loại dựa trên mục tiêu của kiểm thử. Theo tiêu chí này, phần mềm đƣợc phân thành 4 loại: Kiểm thử chức năng, kiểm thử phi chức năng, kiểm thử kiến trúc và kiểm thử hồi quy. Dƣới đây là nội dung chi tiết của những loại kiểm thử này, dựa trên mục tiêu của kiểm thử mà áp dụng loại kiểm thử một cách phù hợp.
2.3.1. Kiểm thử chức năng
Mục tiêu thứ nhất của kiểm thử là kiểm thử chức năng (Functional Testing), nó là việc kiểm thử các chức năng của một hệ thống hoặc thành phần hệ thống, tức là kiểm tra xem “nó làm gì?”. Cái này thƣờng đƣợc miêu tả trong đặc tả yêu cầu, trong đặc tả chức năng hoặc trong ca sử dụng. Có thể có một vài chức năng đƣợc cung cấp “giả định” không có trong tài liệu mà cũng là phần yêu cầu cho hệ thống vẫn nên đƣợc xem xét kiểm thử, mặc dù nó là khó để thực hiện.[6]
Kiểm thử chức năng có thể tập trung vào tính hữu dụng, khả năng tƣơng tác, bảo mật, chính xác và tuân thủ.
Kiểm thử chức năng có thể đƣợc thực hiện từ hai quan đểm: dựa trên yêu cầu hoặc dựa trên quá trình kinh doanh
Kiểm thử dựa trên yêu cầu: sử dụng một bản đặc tả các yêu cầu về chức
năng cho hệ thống nhƣ là cơ sở để thiết kế các kiểm thử. Một cách tốt để bắt đầu kiểm thử là sử dụng bảng nội dung của đặc tả yêu cầu và liệt kê những vấn đề cần đƣợc kiểm thử và không cần kiểm thử, sau đó đánh mức độ ƣu tiên cho các yêu cầu dựa trên các tiêu chí đánh giá rủi ro (nếu nó chƣa có trong bản đặc tả) và sử dụng mức độ ƣu tiên này cho việc kiểm thử. Điều này sẽ đảm bảo rằng những phần quan trọng nhất và những kiểm thử quan trong nhất có trong nỗ lực kiểm thử.
Kiểm thử dựa trên quy trình kinh doanh: dựa trên kiến thức về quy trình
kinh doanh. Quy trình kinh doanh mô tả các tình huống liên quan đến việc kinh doanh hàng ngày sử dụng hệ thống.
Các kỹ thuật sử dụng cho kiểm thử chức năng thƣờng dựa trên đặc tả, nhƣng những kỹ thuật dựa trên kinh nghiệm cũng có thể đƣợc sử dụng. Các điều kiện kiểm thử và các ca kiểm thử đƣợc suy ra từ chức năng của thành phần hoặc hệ thống.
2.3.2. Kiểm thử phi chức năng
Mục tiêu thứ hai của kiểm thử là kiểm thử phi chức năng (Non-functional Testing), nó là việc kiểm thử các đặc tính về chất lƣợng, hoặc các thuộc tính không phải là chức năng của hệ thống/ thành phần/ nhóm tích hợp. Ở đây chúng ta quan tâm “làm thế nào thì tốt, làm thế nào thì nhanh”. Chúng ta sẽ kiểm thử mọi thứ mà chúng ta cần đo trên một thang của đo lƣờng, ví dụ nhƣ thời gian phản hồi. Kiểm thử phi chức năng bao gồm (nhƣng chƣa phải là giới hạn): kiểm thử hiệu năng, kiểm thử khả năng chịu tải, kiểm thử bảo trì, kiểm thử độ tin cậy, kiểm thử tính khả chuyển.[6]
Theo chuẩn ISO 9126 định nghĩa 6 đặc tính chất lƣợng và chia nhỏ mỗi đặc tính thành một số đặc tính con nhƣ sau:
Chức năng (functionality): tính phù hợp, tính chính xác, tính bảo mật, khả
năng tƣơng tác và tuân thủ
Độ tin cậy (reliability): khả năng chịu lỗi, khả năng thu hồi và tuân thủ
Tính hữu dụng (usability): dễ hiểu, dễ học, khả năng vận hành, hấp dẫn và
tuân thủ
Hiệu năng (efficiency): hiệu suất, nguồn tài nguyên sử dụng và tuân thủ
Khả năng bảo trì (maintainability): khả năng phân tích, khả năng thay đổi, sự
ổn định, khả năng kiểm thử và tuân thủ
Tính khả chuyển (portability): khả năng thích ứng, khả năng cài đặt, cùng tồn
tại, khả năng thay thế và tuân thủ.
đƣợc gọi là kiểm thử hộp trắng (white-box) hay hộp kính (glass-box) bởi vì chúng ta quan tâm đến những gì xảy ra “bên trong chiếc hộp” [6].
Kiểm thử kiến trúc thƣờng đƣợc sử dụng nhƣ một cách đo thông qua việc bao phủ một tập các yếu tố cấu trúc và các hạng mục. Nó có thể xảy ra ở bất kỳ mức độ kiểm thử nào, nhƣng thƣờng xu hƣớng của nó chủ yếu ở mức thành phần và tích hợp. Và nói chung là ít có khả năng ở mức độ kiểm tra cao hơn, trừ kiểm thử quy trình kinh doanh.
Tại mức tích hợp thành phần nó có thể dựa trên cấu trúc của hệ thống.
Tại mức thành phần và đến mức thấp hơn kiểm thử tích hợp thành phần, có những công cụ tốt để hỗ trợ việc đo độ bao phủ các đoạn mã. Công cụ đo độ bao phủ đánh giá phần trăm các yếu tố thực thi đƣợc thực hiện bởi một bộ kiểm thử. Nếu độ bao phủ không đạt 100% thì kiểm thử bổ sung cần đƣợc viết để chạy những phần chƣa đƣợc thực hiện. Điều này, tất nhiên sẽ phụ thuộc vào tiêu chuẩn đầu ra của sản phẩm.
2.3.4. Kiểm thử hồi quy
Mục tiêu cuối cùng của kiểm thử là kiểm thử hồi quy (Regression Testing), đƣợc thực hiện khi hệ thống có những thay đổi. Có 2 loại kiểm thử liên quan đến việc ngƣời dùng thay đổi một số yêu cầu về phần mềm[6]
Kiểm thử xác nhận/kiểm thử lại (Confirmation testing/re-testing):
Khi một kiểm thử thất bại và chúng ta xác nhận nguyên nhân là lỗi của phần mềm, một khuyết tật đƣợc báo cáo, và chúng ta mong đợi một phiên bản mới của phần mềm với khuyết tật đã đƣợc sửa. Trong trƣờng hợp này chúng ta sẽ thực hiện kiểm thử lại để xác nhận rằng lỗi đã đƣợc sửa. Cái này đƣợc gọi là kiểm thử xác nhận/kiểm thử lại.
Kiểm thử hồi quy (Regression testing):
Giống nhƣ kiểm thử xác nhận, kiểm thử hồi quy thực hiện kiểm thử lại với các trƣờng hợp kiểm thử đã thực hiện trƣớc đó. Khác với kiểm thử xác nhận, kiểm thử hồi quy bao gồm các trƣờng hợp kiểm thử đã vƣợt qua lần kiểm thử trƣớc đó (kiểm thử xác nhận chỉ thực hiện lại những trƣờng hợp kiểm thử thất bại trƣớc đó). Mục đích của kiểm thử hồi quy để xác nhận rằng những thay đổi về phần mềm hoặc môi trƣờng không gây tác dụng phụ không mong muốn, tức hệ thống vẫn đáp ứng yêu cầu của nó. Để tổ chức kiểm thử hồi quy, chúng ta thƣờng chuẩn bị các bộ/gói kiểm thử hồi quy, nó là một tập các trƣờng hợp kiểm thử đặc biệt sử dụng cho kiểm thử hồi quy. Bộ kiểm thử hồi quy sƣu tầm hầu hết các chức năng của hệ thống, nhƣng không phải kiểm thử một cách chi tiết. Tất cả các trƣờng hợp kiểm thử trong bộ kiểm thử hồi quy sẽ đƣợc thực hiện lại khi một phiên bản mới của phần mềm đƣợc đƣa ra. Điều này làm cho nó là ứng cử viên lý tƣởng của kiểm thử tự động, nếu bộ kiểm thử là rất lớn thì có thể lựa chọn một tập nhỏ ra để thực hiện tự động.