Phương pháp phân hoạch quy hoạch toán học và ứng dụng của phân hoạch tương đương vào kiểm thử hộp đen kiểm thử dựa theo đặc tả không quan tâm tới mã nguồn cùng ví dụ áp dụng được trình b
Trang 2DƯƠNG THỊ PHƯỢNG
CƠ SỞ TOÁN HỌC CHO CÁC KỸ THUẬT
KIỂM THỬ PHẦN MỀMChuyên ngành: BẢO ĐẢM TOÁN CHO MÁY TÍNH
Trang 3MỤC LỤC
MỞ ĐẦU 5
1.1 Đặt vấn đề 3
1.2 Nội dung nghiên cứu 4
1.3 Cấu trúc luận văn 5
Chương 1: Tổng quan về kiểm thử phần mềm 6
1.1 Các khái niệm cơ bản về kiểm thử phần mềm 6
1.1.1 Kiểm thử phần mềm là gì? 6
1.1.2 Lý do kiểm thử phần mềm 7
1.1.3 Vai trò của kiểm thử phần mềm 8
1.1.4 Mục đích của kiểm thử phần mềm 9
1.2 Tiến trình kiểm thử phần mềm 10
Chương 2 : Phương pháp phân hoạch (quy hoạch) toán học trong kiểm thử hộp đen 12
2.1 Phương pháp kiểm thử dựa trên phân hoạch tương đương 12
2.1.1 Phân lớp tương đương mạnh 17
2.1.2 Phân lớp tương đương yếu 18
2.1.3 Phân lớp tương đương truyền thống 19
2.2 Ứng dụng 21
2.2.1 Kiểm thử chương trình nhập điểm thi cao học 21
2.2.2 Kiểm thử chương trình sau khi lập trình viên đã sửa lỗi 26
Chương 3: Cơ sở toán học trong kiểm thử hộp trắng 27
3.1 Ứng dụng đồ thị lưu trình trong lý thuyết đồ thị vào kiểm thử luồng điều khiển (Basic Path Testing) 27
3.2 Áp dụng vào kiểm thử đoạn mã chương trình trong ví dụ "Nhập điểm thi cao học" 33
3.2.1 Trường hợp 1: Đoạn mã chương trình A 34
3.2.2 Trường hợp 2: Đoạn mã chương trình B (đã chỉnh sửa) 39
Chương 4: Kết luận 44
Trang 4DANH MỤC CÁC BẢNG VÀ HÌNH VẼ
Hình 1.1 - Giai đoạn kiểm thử trong xử lý phần mềm 9
Hình 1.2 - Tiến trình kiểm thử phần mềm 10
Bảng 2.1 - Mẫu bảng liệt kê các lớp tương đương 13
Hình 2.1 - Nguyên tắc phân hoạch tập hợp 14
Hình 2.2 - Phân lớp tương đương cho bài toán điểm thi cao học 16
Bảng 2.2 Bảng liệt kê các lớp tương đương cho bài toán điểm thi cao học 16
Hình 2.3 - Chọn giá trị tại mỗi lớp tương đương cho bài toán điểm thi cao học 16
Bảng 2.3 - Danh sách các ca kiểm thử sinh ra theo phân lớp tương đương mạnh
Bảng 2.4 - Danh sách các ca kiểm thử sinh ra theo phân lớp tương đương yếu 18
Bảng 2.5 - Danh sách các ca kiểm thử sinh ra theo phân lớp tương đương truyền thống 19
Hình 2.4 - Giao diện màn hình nhập điểm thi cao học 21
Bảng 2.6 Kết quả kiểm thử với trường hợp phân lớp tương đương mạnh 22
Bảng 2.7 Kết quả kiểm thử qua với trường hợp phân hoạch tương đương yếu 24
Bảng 2.8 Kết quả kiểm thử với trường hợp phân lớp tương đương truyền thống 24
Bảng 2.9 Bảng kết quả chạy thực tế với đoạn mã chương trình A 26
Hình 3.1 - Ký hiệu đồ thị lưu trình 29
Hình 3.2 - Điều kiện phức 30
Hình 3.3 - Đồ thị lưu trình 30
Hình 3.4 - Đồ thị lưu trình trên đoạn mã chương trình A 35
Bảng 3.1: Kết quả kiểm thử theo phương pháp kiểm thử luồng điều khiển trên đoạn mã chương trình A 38
Hình 3.4 - Đồ thị lưu trình trên đoạn mã chương trình B 40
Bảng 3.2: Kết quả kiểm thử theo phương pháp kiểm thử luồng điều khiển trên đoạn mã chương trình B 43
Trang 5MỞ ĐẦU 1.1 Đặt vấn đề
Việc phát triển phần mềm ngày càng được hỗ trợ bởi nhiều công cụ tiên tiến giúp cho việc xây dựng phần mềm hiệu quả hơn, với chất lượng tốt hơn Tuy nhiên, vì độ phức tạp của phần mềm và những giới hạn về thời gian và chi phí, cho dù các hoạt động đảm bảo chất lượng phần mềm nói chung và kiểm thử phần mềm nói riêng ngày càng chặt chẽ và khoa học, chung ta vẫn rất khó khăn trong việc đảm bảo tính đúng đắn của các sản phẩm phần mềm Lỗi vẫn luôn tiềm ẩn trong mọi sản phẩm phần mềm và cũng có thể gây những thiệt hại khôn lường khi triển khai chúng trong thực tế [13]
Để xây dựng được một phần mềm đáp ứng yêu cầu người sử dụng và có chất lượng cao, các dự án phát triển phần mềm cần phải trải qua một quy trình gồm các khâu sau: Phân tích yêu cầu, phân tích hệ thống, thiết kế phần mềm, lập trình, kiểm thử phần mềm, triển khai phần mềm và bảo trì phần mềm [2,
6, 13] Trong quy trình này, kiểm thử phần mềm đóng vai trò hết sức quan trọng nhằm đảm bảo chất lượng của sản phẩm Nó giúp cho người xây dựng
hệ thống và khách hàng thấy được hệ thống mới đã đáp ứng yêu cầu đặt ra hay chưa Tuy nhiên, kiểm thử phần mềm đang được xem là một khâu yếu nhất trong quy trình phát triển phần mềm Mỗi dự án gia công phần mềm cho Công ty nước ngoài, trên thực tế 50% dùng để chi phí cho lập trình, còn lại 50% dùng chi phí cho việc kiểm thử [13] Hiện tại các Công ty phần mềm làm công tác kiểm thử chưa tốt và là công việc khó khăn trong Công ty phần mềm, nên công tác đào tạo về kiểm thử cần được coi trọng
Quy trình kiểm thử phần mềm gồm bai giai đoạn chính: sinh các ca kiểm thử và chạy các ca kiểm thử này nhằm phát hiện các lỗi/khiếm khuyết của hệ thống [5] Nếu sản phẩm chạy qua tất cả các ca kiểm thử với kết quả thu được
Trang 6giống với kết quả mong muốn thì ta có thể tin tưởng vào chất lượn của sản phẩm Ngược lại, một kết quả không đúng giúp ta tìm và sửa các lỗi và kết quả là ta phải chạy lại toàn bộ các ca kiểm thử Trong hai giai đoạn này, việc sinh các ca kiểm thử có vai trò quyết định đến khả năng phát hiện lỗi/khiếm khuyết của quá trình kiểm thử Làm thế nào để sinh được bộ kiểm thử tốt (gồm các ca kiểm thử) là bài toán khó trong kiểm thử phần mềm Việc sinh bộ kiểm thử tốt phụ thuộc vào phương pháp chúng ta sử dụng Có nhiều phương pháp sinh ra bộ kiểm thử [10], mỗi phương pháp đều có ưu và nhược điểm riêng Vì vậy, người sinh ra bộ kiểm thử phải bơi trong biển các phương pháp kiểm thử Trong nhiều trường hợp, có thể họ sử dụng một phương pháp kiểm thử nào đó nhưng không nắm được bản chất toán học của phương pháp này nên sinh ra các ca kiểm thử không tốt Điều này giống như việc khi mua m ột chiếc máy tính mới cấu hình mạnh, tính năng sử dụng nhiều nhưng người sử dụng lại không biết khai thác điểm mạnh của nó mà chỉ sử dụng thường xuyên như chiếc máy tính cũ Theo khảo sát của chúng tôi, hầu hết những người làm kiểm thử đều ít để ý đến bản chất toán học của các phương pháp sinh bộ kiểm thử Trong thực tế, mỗi phương pháp kiểm thử đều dựa trên một
cơ sở toán học Việc nắm rõ bản chất toán học của các phương pháp kiểm thử giúp cho chúng ta khai thác tối đa khả năng phát hiện lỗi/khiếm khuyết của các phương pháp này Hơn nữa, công việc này cũng là cơ sở quan trọng để đào tạo nguồn nhân lực về kiểm thử phần mềm trong môi trường thường xuyên biến động và ngày càng có nhiều phương pháp kiểm thử mới ra đời
1.2 Nội dung nghiên cứu
Nhằm tìm hiểu cơ sở toán học của các phương pháp kiểm thử, luận văn tập trung nghiên cứu các nội dung chính như sau
Tìm hiểu các kỹ thuật kiểm thử nhằm đảm bảo chất lượng phần mềm
Trang 7Tập trung nghiên cứu cơ sở toán học của phương pháp phân hoạch tương đương (một kỹ thuật kiểm thử hộp đen) và phương pháp kiểm thử luồng điều khiển (một kỹ thuật kiểm thử hộp trắng)
Áp dụng các kỹ thuật trên nhằm kiểm thử một số chương trình đơn giản
1.3 Cấu trúc luận văn
Phần còn lại của luận văn được cấu trúc như sau Chương 1 giới thiệu tổng quan về kiểm trử phần mềm gồm khái niệm về phần mềm, lý do kiểm thử phần mềm, vai trò của kiểm thử phần mềm và mục đích của kiểm thử phần mềm Phương pháp phân hoạch (quy hoạch) toán học và ứng dụng của phân hoạch tương đương vào kiểm thử hộp đen (kiểm thử dựa theo đặc tả không quan tâm tới mã nguồn) cùng ví dụ áp dụng được trình bày trong Chương 2 Chương 3 mô tả về đồ thị lưu trình trong lý thuyết đồ thị và ứng dụng vào kiểm thử luồng điều khiển chương trình trong kiểm thử hộp trắng cùng ví dụ áp dụng Cuối cùng, Chương 4 trình bày kết luận của luận văn và hướng nghiên cứu tiếp theo
Trang 8CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1.1 Các khái niệm cơ bản về kiểm thử phần mềm
Kiểm thử phần mềm
Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay thành phần dưới những điều kiện xác định, quan sát và ghi lại các kết quả, và đánh giá một khía cạnh nào đó của hệ thống hay thành phần đó [5]
Kiểm thử phần mềm thường đồng nghĩa với việc tìm ra lỗi chưa được phát hiện Tuy nhiên, có nhiều bối cảnh kiểm thử không bộc lộ ra lỗi Kiểm thử phần mềm là quá trình thực thi một hệ thống phần mềm để xác định xem phần mềm đó có đúng với đặc tả không và thực hiện trong môi trường như mong đợi hay không
Trên thực tế, hệ thống đang thực hiện khác biệt với việc duyệt lại mã nguồn Thông thường, người phát triển thực hiện việc đọc lại và phân tích mã nguồn Nói cách khác, kiểm thử đòi hỏi một hệ thống chạy được Đặc tả là căn cứ chủ yếu hỗ trợ cho việc kiểm thử Nó xác định những hành vi đúng và làm cho dễ dàng hơn trong việc xác định những hành vi không đúng Mỗi hành vi không đúng chính là một lỗi phần mềm Nói chung, người phát triển phải tự chẩn đoán nguyên nhân sinh lỗi trong mã nguồn
Mục đích của kiểm thử phần mềm là tìm ra lỗi chưa được phát hiện, tìm một cách sớm nhất có thể và đảm bảo rằng lỗi đã được sửa, mà kiểm thử phần mềm không làm công việc chẩn đoán nguyên nhân gây ra lỗi đã được phát hiện và sửa lỗi Chúng ta sẽ nghiên cứu kĩ hơn vấn đề này ở những phần tiếp theo
Trang 9Mục tiêu của kiểm thử phần mềm là thiết kế tài liệu kiểm thử một cách
có hệ thống và thực hiện nó sao cho có hiệu quả, nhưng tiết kiệm được thời gian, công sức và chi phí
Kiểm thử phần mềm là một tiến trình hay một tập hợp các tiến trình được thiết kế để đảm bảo mã hóa máy tính thực hiện theo cái mà chúng đã được thiết kế để làm, và không thực hiện bất cứ thứ gì không mong muốn Đây là một pha quan trọng trong quá trình phát triển hệ thống, giúp cho người xây dựng hệ thống và khách hàng thấy được hệ thống mới đã đáp ứng yêu cầu đặt
ra hay chưa
1.1.1 Lý do kiểm thử phần mềm
Mặc dù kiểm thử phần mềm là một quy trình bắt buộc trong vòng đời phát triển phần mềm nhưng hầu hết các phần mềm hiện tại vẫn còn lỗi lọt đến khách hàng hoặc được chính người sử dụng tìm ra trong quá trình kiểm thử chấp nhận sản phẩm (acceptance test) Nguyên nhân một phần lớn là do kiểm thử viên chưa làm đúng quy trình trong quá trình xây dựng các ca kiểm thử
Vì vậy chúng ta cần hiểu rõ lý do của việc kiểm thử để từ đó thấy được ý nghĩa của việc xây dựng ca kiểm thử hiệu quả Có một số lý do chính của hoạt động kiểm thử phần mềm như sau Lý do thứ nhất, về khía cạnh xem xét sản phẩm, người phát triển muốn kiểm tra phần mềm như một phần tử của hệ thống hoạt động thì cần phải thực hiện thông qua hoạt động kiểm thử phẩn mềm Lý do quan trọng thứ hai là khi thực hiện tốt hoạt động kiểm thử, chúng
ta sẽ hạn chế được chi phí cho các thất bại do lỗi gây ra sau này Đây chính là hiệu quả của hoạt động kiểm thử mang lại và cũng chính là mục tiêu của người phát triển hệ thống khi thực hiện hoạt động kiểm thử phần mềm Ngoài
ra còn có một lý do liên quan đến giải pháp phát triển, khi thực hiện hoạt động kiểm thử, đội phát triển sẽ có kế hoạch tốt nâng cao chất lượng suốt quá trình phát triển phần mềm [4]
Trang 10Chất lượng phần mềm là một khái niệm đa chiều, không dễ định nghĩa đơn giản theo cách chung cho các sản phẩm là: “Sản phẩm được phát triển phù hợp với đặc tả của nó.” (Ian Somerville [6] trích dẫn định nghĩa của Crosby) Có một số vấn đề khó trong hệ thống phần mềm, đó là: Đặc tả phải định hướng theo những đòi hỏi về chất lượng của khách hàng (như tính hiệu quả, độ tin cậy, tính dễ hiểu, tính bảo mật,…) và những yêu cầu của chính tổ chức phát triển phần mềm vốn không có trong đặc tả (như các yêu cầu về khả năng bảo trì, tính sử dụng lại, )
Một số yêu cầu về chất lượng cũng rất khó chỉ ra một cách rõ ràng (như tính bảo trì) Những đặc tả phần mềm thường không đầy đủ và hay mâu thuẫn Vì thế phải có sự thỏa hiệp về chất lượng: Chúng ta không thể đợi các đặc tả hoàn thiện trước khi chú ý đến quản lý chất lượng, chúng ta phải sắp xếp các thủ tục để hoàn thiện chất lượng mặc dù đặc tả chưa hoàn thiện
Quản lý chất lượng không chỉ quan tâm đến việc làm hạn chế tối thiểu những khiếm khuyết của sản phẩm và đảm bảo tuân theo đặc tả, mà còn phải quan tâm đến những thuộc tính chất lượng khác của sản phẩm
Trên quan điểm qui trình, kiểm thử phần mềm là một phần của xác minh
và thẩm định phần mềm Nếu phần mềm là thành phần của hệ thống lớn hơn thì kiểm thử phần mềm cũng được xem như là một phần của quản lý và đảm bảo chất lượng Và để đạt phần mềm chất lượng cao, thì kiểm thử có thể coi là một thành phần chủ yếu của hoạt động đảm bảo chất lượng phần mềm
1.1.2 Vai trò của kiểm thử phần mềm
Thực tế đã chứng minh hoạt động kiểm thử có vai trò vô cùng quan trọng trong tiến trình phát triển phần mềm Vai trò đó được thể hiện qua chi phí và hiệu quả của hoạt động kiểm thử mang lại Về mặt chi phí, hoạt động kiểm thử chiếm khoảng 40% tổng công sức phát triển phần mềm và chiếm tới hơn
Trang 1130% tổng thời gian phát triển Ngoài ra với các phần mềm có ảnh hưởng tới sinh mạng thì chi phí kiểm thử có thể gấp từ 3 đến 5 lần tổng các chi phí khác cộng lại [4] Vai trò của hoạt động kiểm thử phần mềm còn thể hiện ở hiệu quả mà nó mang lại, khi việc kiểm thử phần mềm đạt kết quả tốt sẽ có hiệu quả rất lớn trong việc giảm chi phí phát triển và làm tăng độ tin cậy của sản phẩm phần mềm
1.1.3 Mục đích của kiểm thử phần mềm
Là thiết kế được những trường hợp kiểm thử để có thể phát hiện một cách có hệ thống những loại lỗi khác nhau và thực hiện công việc đó với lượng thời gian và tài nguyên tối ưu nhất Tuy nhiên kiểm thử phần mềm không thể khẳng định rằng phần mềm không còn khiếm khuyết Như vậy ta
có thể kết luận, mục tiêu đầu tiên và trước mắt của hoạt động kiểm thử phần mềm là tạo ra các ca kiểm thử để tìm ra lỗi của phần mềm Mục tiêu cuối cùng và cũng là mục tiêu mà người phát triển hướng tới là kiểm thử phần mềm sẽ giúp cho người phát triển có một chương trình tốt, chi phí thấp nhưng vẫn đảm bảo được chất lượng phần mềm trước khi bàn giao sản phẩm Hình 1.1 mô tả vị trí của kiểm thử phần mềm trong quy trình phát triển phần mềm Trong quy trình này, kiểm thử phần mềm được tiến hành sau khi cài đặt xong các đơn vị (unit) hoặc tiến hành tích hợp hệ thống và kiểm thử chấp nhận
Hình 1.1 Giai đoạn kiểm thử trong quy trình phát triển phần mềm
Phân tích Thiết kế Mã hóa KIỂM
THỬ Bàn giao
SP
Kế hoạch kiểm thử Các trường hợp kiểm thử
Dữ liệu kiểm thử
Các báo cáo kiểm thử
Trang 121.2 Quy trình kiểm thử phần mềm
Hình 1.2 Quy trình kiểm thử phần mềm
Qui trình kiểm thử phần mềm chứa các bước cơ bản như mô tả trong
hình 1.2 Dưới đây là mô tả chi tiết nội dung của các bước trên
- Lập kế hoạch kiểm thử Bước đầu tiên là lập kế hoạch cho tất cả các
hoạt động sẽ được thực hiện và các phương pháp được sử dụng Các
chuẩn IEEE 1012-1986 bao gồm các thông tin về tác giả chuẩn bị kế
hoạch, danh sách liệt kê của kế hoạch kiểm thử
- Thiết kế các ca kiểm thử Các ca kiểm thử là các đặc tả đầu vào cho
kiểm thử và đầu ra mong đợi của hệ thống cùng với các câu lệnh được
kiểm thử Có một vài phương pháp thiết kế ca kiểm thử và các qui tắc
từ các nhà thiết kế kiểm thử có kinh nghiệm Tuy nhiên, có hai chiến
lược kiểm thử cơ bản;
+ Phương pháp kiểm thử hộp đen để kiểm thử dựa trên chức năng
Phương pháp này có khả năng phát hiện ra các lỗi/khiếm khuyết
do thiếu sót các chức năng của hệ thống
Kết quả kiểm thử
Thiết kế các
ca kiểm thử
Chuẩn bị dữ liệu kiểm thử
Chạy chương trình với dữ liệu kiểm thử
So sánh các kết quả với các trường hợp kiểm thử
Các ca kiểm thử
Dữ liệu kiểm thử
Báo cáo kiểm thử
Trang 13+ Phương pháp kiểm thử hộp trắng để kiểm thử cấu trúc bên trong của chương trình Phương pháp này cho phép phát hiện các lỗi tiềm năng mà rất khó phát hiện bởi phương pháp kiểm thử hộp đen
+ Giống như nguyên lý tảng băng trôi, phương pháp kiểm thử hộp đen chỉ phát hiện ra được các lỗi ứng với phần nổi của tảng băng trong khi phương pháp kiểm thử hộp trắng cho phép phát hiện các lỗi ứng với phần chìm của nó
- Xử lý đo lường kiểm thử bằng cách thu thập dữ liệu Ở đây, người kiểm thử không thể trực tiếp cải tiến chương trình mà họ chỉ có thể đánh giá
nó
- Đánh giá sản phẩm phần mềm để xác nhận sản phẩm có thể sẵn sàng phát hành được chưa? Đưa ra báo cáo kiểm thử để hoàn thành quá trình kiểm thử
Trang 14CHƯƠNG 2
PHƯƠNG PHÁP PHÂN HOẠCH TRONG KIỂM THỬ HỘP ĐEN
2.1 Phương pháp kiểm thử dựa trên phân hoạch tương đương
Theo lý thuyết tập hợp và logic của tác giả Hoàng Xuân Sính - NXB Giáo dục – 1999, phương pháp phân hoạch tương đương được định nghĩa như sau:
Quan hệ trên hai tập A và B là một tập con của tích đề các A B, nghĩa là a b trong đó a A và b B
Quan hệ có thể được định nghĩa trên chính tập A, tức là khi B = A Quan hệ trên tập A gọi là phản xạ nếu a a với aA
Quan hệ trên tập A gọi là đối xứng nếu a b b a với a, bA Quan hệ trên tập A gọi là bắc cầu nếu a b và b c a c với
a,b,c A
Một quan hệ có tính phản xạ, đối xứng và bắc cầu gọi là quan hệ tương đương Chẳng hạn quan hệ “=” trên tập N (số nguyên) là quan
hệ tương đương nhưng quan hệ “>” trên tập N thì không phải
Một quan hệ tương đương phân hoạch tập hợp thành các lớp tương đương rời rạc Chẳng hạn quan hệ =(a,b): a, b N, a+b là số chẵn
có hai phân hoạch {0, 2, 4, …} và {1, 3, 5, …}
Như vậy dựa vào bản chất của toán học nói trên, trong kiểm thử phần mềm người ta đã áp dụng để đưa ra phương pháp "Phân hoạch tương đương" Phương pháp phân hoạch tương đương trong kiểm thử phần mềm được thực hiện như sau: Các lớp tương đương được nhận dạng bằng cách lấy mỗi điều kiện đầu vào (thông thường là một câu lệnh hoặc một cụm từ trong đặc tả) và
Trang 15phân hoạch nó thành hai hoặc nhiều nhóm Các lớp tương đương biểu diễn một tập các trạng thái hợp lệ hoặc không hợp lệ cho điều kiện đầu vào Điều kiện đầu vào là giá trị số xác định, hoặc miền giá trị, tập giá trị có liên quan, hoặc điều kiện logic Để làm điều này, chúng ta sử dụng bảng liệt kê các lớp tương đương
Bảng 2.1 - Mẫu bảng liệt kê các lớp tương đương
Điều kiện vào/ra Các lớp tương đương
hợp lệ
Các lớp tương đương không hợp lệ
Các lớp tương đương có thể được định nghĩa theo các nguyên tắc:
1 Nếu điều kiện đầu vào xác định một khoảng giá trị, thì phân hoạch
thành một lớp tương đương hợp lệ và một lớp tương đương không hợp
lệ Chẳng hạn, nếu đầu vào x nằm trong khoảng [0,100], lớp hợp lệ là (0 <= x <= 100), các lớp không hợp lệ là (x < 0) và (x > 100)
2 Nếu điều kiện đầu vào yêu cầu một giá trị xác định, phân hoạch thành
một lớp tương đương hợp lệ và hai lớp tương đương không hợp lệ Chẳng hạn, nếu đầu vào x=5, thì lớp hợp lệ là (x= 5), các lớp không hợp lệ là (x <5) và (x >5)
3 Nếu điều kiện đầu vào xác định một phần tử của tập hợp, thì phân
hoạch thành một lớp tương đương hợp lệ và một lớp tương đương không hợp lệ Chẳng hạn, nếu đầu vào x thuộc tập các giá trị tháng trong năm, Months = {“Jan”, …, “Dec”}, thì lớp tương đương hợp lệ là (x Months) và lớp tương đương không hợp lệ là (x Months)
4 Nếu điều kiện đầu vào là Boolean, thì phân hoạch thành một lớp tương
đương hợp lệ và một lớp tương đương không hợp lệ tương ứng với hai trạng thái True và False
Trang 16Ngoài ra, một nguyên tắc thứ năm được bổ sung là sử dụng khả năng phán đoán, kinh nghiệm và trực giác của người kiểm thử
Cơ sở của việc phân chia miền dữ liệu đầu vào thành các lớp tương đương là vì dữ liệu trong một lớp tương đương tác động như nhau lên chương trình, tạo ra cùng một trạng thái đúng hay sai của chương trình, tức là các phần tử trong cùng một lớp tương đương sẽ có cùng tính chất và thuộc tính [4] Giả sử các tập con A1, A2, A3 … của tập X tạo nên một phân hoạch của
X, nếu:
) (
Hình 2.1 - Nguyên tắc phân hoạch tập hợp
Công thức mô tả trong hình 2.1 cho chúng ta thấy rằng, để tránh việc đưa
ra các lớp tương đương không hợp lệ tức là thực hiện phân hoạch tương đương không chính xác, cần chú ý một số nguyên tắc sau: Các lớp phân hoạch con là những lớp hoàn toàn độc lập tức là hai lớp tương đương bất kì không được có phần tử chung giao nhau Khi chúng ta thực hiện phân lớp tương đương thì không để tồn tại một lớp con là tập rỗng Hợp của các lớp con phải chứa toàn bộ các phần tử của tập ban đầu để đảm bảo tính đầy đủ của dữ liệu sau khi phân lớp tương đương Việc thiết kế ca kiểm thử cho phân lớp tương đương dựa trên sự đánh giá về các lớp tương đương với một điều kiện vào
Xác định các trường hợp kiểm thử
Bước thứ hai trong phương pháp phân hoạch tương đương là thiết kế các
ca kiểm thử (sinh test cases) dựa trên sự ước lượng của các lớp tương đương cho miền đầu vào Tiến trình này được thực hiện như sau:
1 Gán một giá trị duy nhất cho mỗi lớp tương đương
Trang 172 Đến khi tất cả các lớp tương đương hợp lệ được phủ bởi các trường
hợp kiểm thử thì viết một trường hợp kiểm thử mới phủ nhiều nhất
có thể các lớp tương đương hợp lệ chưa được phủ
3 Đến khi tất cả các lớp tương đương không hợp lệ được phủ bởi các trường hợp kiểm thử thì hãy viết các trường hợp kiểm thử mới sao
cho mỗi trường hợp kiểm thử mới chỉ phủ duy nhất một lớp tương
đương không hợp lệ chưa được phủ
Các trường hợp không hợp lệ được phủ bởi các trường hợp kiểm thử riêng biệt do việc kiểm tra đầu vào có lỗi này sẽ bị che hoặc bỏ sót việc kiểm tra đầu vào có lỗi khác
Ví dụ 1: Sinh các ca kiểm thử cho một chương trình thống kê danh sách
kết quả các thí sinh thi cao học gồm:
- Dữ liệu đầu vào là 3 đầu điểm:
- Kết quả trả về mong muốn:
"Dữ liệu sai" nếu: D1, D2 [0, 10]; D3 [0, 100]
"Đỗ" nếu: D1, D2 [5, 10]; D3 [50, 100]
"Trượt" nếu: D1, D2 [0, 5); D3 [0, 50)
Áp dụng “Phân hoạch tương đương” theo lý thuyết tập hợp trong toán học ta chia điểm của mỗi môn thành từng phân hoạch như hình 2.2:
Trang 18Hình 2.2 - Phân lớp tương đương cho bài toán điểm thi cao học Bảng 2.2 Bảng liệt kê các lớp tương đương cho bài toán điểm thi cao học
Điều kiện vào/ra Các lớp tương đương hợp lệ Các lớp tương đương không
Hình 2.3 - Chọn giá trị tại mỗi lớp tương đương
cho bài toán điểm thi cao học
Trang 192.1.1 Phân lớp tương đương mạnh
Với phương pháp này, sau khi phân hoạch miền giá trị của các biến đầu vào thành các lớp tương đương thì việc sinh các trường hợp kiểm thử thực hiện theo nguyên tắc mỗi ca kiểm thử là một phần tử của tích đề các của các phân hoạch con đó Do đó số lượng ca kiểm thử sinh ra chính là số phần tử của tích đề các này vậy số ca kiểm thử được sinh ra trong ví dụ là:
4 x 4 x 4 = 64 ca kiểm thử
Bảng 2.3 Danh sách ca kiểm thử được sinh theo phân lớp tương đương mạnh
Đầu ra mong muốn
Trang 20Ở trường hợp phân lớp tương đương mạnh sẽ gần như bắt lỗi được tất cả các trường hợp và đầu ra thực tế đúng như đầu ra mong muốn, tuy nhiên số lượt các ca kiểm thử tương đối nhiều
2.1.2 Phân lớp tương đương yếu
Phân lớp tương đương yếu là một phương pháp hay được sử dụng khi lựa chọn phân lớp tương đương Phương pháp này vẫn dựa trên nguyên tắc chung của phân lớp tương đương, tức là chúng ta cũng chia miền dữ liệu của các biến đầu vào thành các lớp con tương đương Việc sinh các trường hợp kiểm thử trong phân lớp tương đương yếu phải đảm bảo mỗi lớp con được kiểm tra ít nhất một lần Điều này có nghĩa là trong tập ca kiểm thử sinh ra thì giá trị của phần tử đại diện cho mỗi lớp con phải được kiểm thử ít nhất một lần Như vậy, số trường hợp kiểm thử trong phân lớp tương đương yếu bằng giá trị lớn nhất của số phân hoạch biến đầu vào hay chính là lực lượng lớn nhất của phân hoạch
Theo nguyên tắc của phân lớp tương đương yếu, ở ví dụ 1 chúng ta xây dựng được 04 ca kiểm thử được biểu diễn trong bảng 2.4 dưới đây
Bảng 2.4 Danh sách các ca kiểm thử sinh ra theo phân lớp tương đương yếu
TC_ID Đầu vào (Input) Đầu ra mong
Trang 212.1.3 Phân lớp tương đương truyền thống
Phân lớp tương đương truyền thống là phương pháp đơn giản nhất trong các kỹ thuật kiểm thử theo phân lớp tương đương Với phương pháp này thì việc phân lớp tương đương cho miền giá trị của các biến đầu vào chỉ cần quan tâm 02 lớp sau: Lớp tương đương hợp lệ (chứa dữ liệu của biến đầu vào nằm trong miền hợp lệ) và lớp tương đương không hợp lệ (chứa dữ liệu của biến đầu vào nằm trong miền không hợp lệ) Ý tưởng của việc sinh ca kiểm thử cho phương pháp này thực hiện theo nguyên tắc: Khi chúng ta xây dựng ca kiểm thử cho trường hợp đúng thì chỉ cần lấy các giá trị biến đầu vào nằm trong miền hợp lệ Tức là ca kiểm thử sinh ra với điều kiện giá trị đầu vào của tất cả các biến đều nằm trong miền hợp lệ Khi tạo ca kiểm thử cho trường hợp sai thì chỉ cần lấy một trong các biến đầu vào có giá trị không nằm trong miền hợp lệ Tức là với các biến đầu vào không hợp lệ, mỗi ca kiểm thử sẽ bao gồm một biến đầu vào có giá trị nằm trong miền không hợp lệ và các biến còn lại có giá trị nằm trong miền hợp lệ
Số lượng ca kiểm thử theo phân lớp tương đương truyền thống = số lượng ca kiểm thử theo phân lớp tương đương mạnh - số lượng ca kiểm thử
có trên 2 đầu vào sai và bằng những ca kiểm thử có dưới một đầu vào sai Với "Ví dụ 1" ta sẽ sinh ra được 28 ca kiểm thử được biểu diễn trong bảng 2.5 dưới đây
Bảng 2.5 Danh sách các ca kiểm thử sinh ra theo
phân lớp tương đương truyền thống
TC_ID
Đầu vào (Input)
Đầu ra mong muốn
Trang 22TC_ID
Đầu vào (Input)
Đầu ra mong muốn
Trang 232.2 Ứng dụng
Với ví dụ 1 như đã nêu ở mục 2.1, tôi xây dựng một chương trình thực tế chạy thử qua tất cả các ca kiểm thử đã được sinh ra ở cả ba phương pháp: phương pháp phân lớp tương đương mạnh, phương pháp phân lớp tương đương yếu, phương pháp phân lớp tương đương truyền thống đã trình bày ở trên nhằm kiểm tra việc bắt lỗi chương trình
Hình 2.4 - Giao diện màn hình nhập điểm thi cao học
Khảo sát "Chương trình nhập điểm thi cao học" được viết trên ngôn ngữ Visual Studio
2.2.1 Kiểm thử chương trình nhập điểm thi cao học
2.2.1.1 Phương pháp phân lớp tương đương mạnh
Trang 24Ta có kết quả sau khi chạy qua tất cả các ca kiểm thử được sinh ra theo phương pháp phân lớp tương đương mạnh: đầu ra thực tế đã không đúng với đầu ra mong muốn là 4 trường hợp NOT OK (Bảng 2.6) Như vậy kiểm thử viên có thể khẳng định rằng chương trình "Nhập điểm thi cao học" có lỗi
Bảng 2.6 Kết quả kiểm thử với trường hợp phân lớp tương đương mạnh
TC_ID Dữ liệu vào Đầu ra thực tế Đầu ra mong
muốn Kết quả