Một số ứng dụng

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Kiểm định phần mềm theo tiếp cận hệ thống (Trang 56 - 74)

CHƢƠNG 3 MỘT SỐ ỨNG DỤNG CỤ THỂ CỦA QUI TRèNH KIỂM THỬ

3.2. Một số ứng dụng

Kiểm thử tự động

Cỏc chức năng và hành vi của hệ thống phần mềm hoặc một phần xỏc định của hệ thống khụng bị thay đổi hoặc ớt nhất khụng bị đi ngƣợc lại khi cú sự thay đổi trong mó nguồn. Vỡ vậy, với mục đớch đảm bảo chƣơng trỡnh khụng bị đi ngƣợc lại, cần thiết phải thực hiện việc kiểm thử hồi qui. Cú hai kiểu kiểm thử thƣờng gọi kiểm thử hồi qui.

Cỏc kiểm thử chức năng kiểm tra toàn bộ hệ thống cú thoả món cỏc yờu cầu và

cỏc mục đớch nhƣ sự thực hiện. Việc kiểm thử này đƣợc thực hiện bởi khỏch hàng cho phộp hiểu và theo dừi sự phỏt triển của dự ỏn. Trong đú dữ liệu thực tế cú thể đƣợc sử dụng nhƣ đầu vào cho hệ thống và cỏc đầu ra cú thể đƣợc so sỏnh với cỏc kết quả mong đợi. Đụi khi cú cỏc đặc tả cụ thể về chức năng cũng sẽ cung cấp cỏc trƣờng hợp kiểm thử tốt.

Kiểm thử đơn vị đƣợc tạo bởi ngƣời lập trỡnh để kiểm tra mỗi mặt của từng thành

phần trong hệ thống nhƣ cỏc lớp hoặc cỏc module trong cỏc hành vi đƣợc mong đợi. Mục đớch là để kiểm thử độc lập mỗi thành phần mó. Điều này rất quan trọng, bởi vỡ nú hỗ trợ trực tiếp cho ngƣời lập trỡnh trong cụng việc hàng ngày.

Cỏch tiếp cận thƣờng đƣợc sử dụng là viết cỏc trƣờng hợp kiểm thử đơn vị trƣớc khi mó hoỏ thực sự. Cỏc trƣờng hợp kiểm thử sau khi đƣợc thiết kế, sẽ đƣợc kiểm tra bằng cỏch thực hiện bờn ngoài cỏc đơn vị thực sự để xem chỳng cú lỗi hay khụng, vỡ chỳng cú thể bị sai. Sau đú cú thể kiểm tra trờn cỏc đơn vị khỏc cho đến khi tất cả cỏc trƣờng hợp kiểm thử thành cụng. Vỡ thế ngƣời lập trỡnh biết đƣợc khi nào cụng việc cần thiết hoàn thành. Để thực hiện cỏc trƣũng hợp kiểm thử, ngƣời lập trỡnh cần một giao diện để thực hiện kiểm thử tự động bằng cỏch nào đú, vỡ vậy phải thiết kế cho

Việc thực hiện kiểm thử hồi qui cú nghĩa là thực hiện nhiều trƣờng hợp kiểm thử khỏc nhau và thực hiện chỳng thƣờng xuyờn. Vỡ thế khụng thể chấp nhận việc thực hiện thủ cụng, bởi vỡ sẽ rất mất thời gian và cũng khụng tin cậy. Do đú, cần thiết thực hiện một cỏch tự động.

Giao diện kiểm thử

Để cú thể thực hiện cỏc trƣờng hợp kiểm thử, cần thiết kế cho chƣơng trỡnh trỡnh một giao diện để kiểm thử. Cú nhiều cỏch thiết kế giao diện khỏc nhau.

Cỏc kiểm thử hƣớng lụ: khi giao diện cho chƣơng trỡnh là một dũng lệnh, thỡ chỉ cỏc bộ kiểm thử tự động cú thể đƣợc thực hiện, bắt đầu chƣơng trỡnh với cỏc tham số đó cho và xem xột đầu ra, cỏc tập tin cú thể đƣợc tạo ra. Kiểm thử hƣớng lụ dễ viết và dễ thực hiện tự động, nhƣng bằng cỏch này khú thực hiện kiểm thử cỏc đơn vị riờng lẻ của hệ thống lớn, khi khụng cú cỏch truy cập phự hợp trờn cỏc tham số dũng lệnh.

Kiểm thử dựa trờn luồng: Cỏch này bao gồm hầu hết cỏc phƣơng phỏp kiểm thử. Sự quan tõm đầu tiờn là cỏc chƣơng trỡnh dựa trờn thiết bị giao tiếp với ngƣời dựng trờn cỏc kờnh nhập xuất chuẩn. Đa số cỏc chƣơng trỡnh này nhận cỏc luồng đầu vào nhƣ một lệnh rồi thực hiện điều gỡ đú và phỏt ra một thụng điệp cỏc kết quả nào đú.

Kiểm thử GUI: cỏc giao diện ngƣời dựng đồ hoạ cho việc kiểm thử cú một vài vấn đề. Mặc dự cú cỏc cụng cụ cho cỏc giao diện đồ hoạ kiểm thử bằng cỏch làm lại cỏc hành động đƣợc ghi lại trƣớc đú giống nhƣ cỏc sự kiện phớm bấm hoặc chuột và cỏc màn hỡnh so sỏnh, chỳng khụng thể đối phú tốt với cỏc sự cải biờn thay đổi rất nhiều của cỏc thành phần giao diện. Vỡ thế, cỏc trƣờng hợp kiểm thử cần đƣợc ghi lại sau mỗi thay đổi của giao diện ngƣời dựng. Cỏc kiểm thử dựa trờn lƣu trỡnh làm việc xung quanh vấn đề này bằng cỏch sử dụng cỏc biểu thức chuẩn tắc để làm phự hợp cỏc kết quả. Cỏch tốt nhất để kiểm thử tự động cỏc giao diện ngƣời dựng là sinh ra cỏc sự kiện trong chớnh cỏc ứng dụng. Vớ dụ, cỏc nỳt lệnh đƣợc “nhấn” bằng cỏch gởi thụng điệp đến nỳt lệnh và dữ liệu để kiểm tra kết quả của cỏc trƣờng hợp kiểm thử. Vỡ thế kiểm thử trở nờn độc lập với sự cải biờn của cỏc thành phần màn hỡnh.

Cỏc giao diện và mó kiểm thử nhỳng: Trong trƣờng hợp cỏc kiểm thử trờn lƣu trỡnh và hƣớng lụ đơn giản trờn giao diện của ứng dụng là khụng thể đƣợc bởi vỡ giao diện khụng cung cấp đủ truy cập hoặc khi GUI cần đƣợc kiểm thử, nhƣng tập hợp cỏc thành phần đƣợc sử dụng khụng cung cấp giao diện kiểm thử thớch hợp, cỏc giao diện kiểm thử nhỳng trong ứng dụng là rất hữu ớch. Đõy là ý tƣởng tốt, chia cỏc kiểm thử thành cỏc giao diện luồng đƣợc nhỳng vào ứng dụng và bộ kiểm thử bờn ngoài cung cấp dữ liệu kiểm thử và kiểm tra cỏc kết quả. Vỡ thế kiểm thử giao diện ngƣời dựng và kiểm thử đơn vị cú thể đƣợc kết hợp chặt chẽ thành một cơ cấu kiểm thử đơn.

Hỡnh 3.1– Giao diện kiểm thử nhỳng

Phỏt biểu bài toỏn

Để lấy vớ dụ cụ thể cho qui trỡnh kiểm thử, chỳng ta cú thể khảo sỏt việc thực thi kiểm thử cho một chƣơng trỡnh cụ thể nào đú. Ở đõy, chỳng ta cú thể sử dụng cỏc thuật toỏn sắp xếp để minh hoạ. Cỏc thuật toỏn này cú một số thuộc tớnh thớch hợp để làm vớ dụ tốt, thuật toỏn rất đơn giản nhƣng mỗi thuật toỏn cú thể bao gồm nhiều module phõn biệt hoặc cỏc điều kiện cần đƣợc kiểm thử.

Vấn đề kiểm thử phần mềm, ngoài mục đich phỏt hiện lỗi cũn nhằm để đảm bảo chất lƣợng phần mềm. Do đú, khi chọn cỏc thuật toỏn sắp xếp làm vớ dụ về qui trỡnh kiểm thử, ngoài lý do đó nờu trờn, việc lựa chọn này cũn vỡ nhằm kiểm tra về khả năng thực hiện của phần mềm (mỗi thuật toỏn cú ƣu nhƣợc điểm khỏc nhau về bộ nhớ, thời gian,..).

Phỏt biểu cho một bài toỏn sắp xếp nhƣ sau: Với P là chƣơng trỡnh sắp xếp.

S là bảng đặc tả cho P nhƣ sau:

Giao diện kiểm thử được nhỳng Giao diện người dựng

Ứng dụng Bộ kiểm thử Lệnh và dữ liệu Cỏc kết quả

+ P nhận đầu vào với một số nguyờn N (N > 0) và một dóy N số nguyờn gọi là cỏc phần tử của dóy.

0 ≤ K ≤ e -1 với e nào đú. + K là phần tử bất kỳ của dóy.

+ Chƣơng trỡnh P sắp xếp dóy theo thứ tự tăng dần và xuất ra dóy đó sắp xếp. P đƣợc xem là đỳng với đặc tả S nếu và chỉ nếu: với mỗi đầu vào hợp lệ, đầu ra

của P tƣơng ứng với đặc tả của S. Phạm vi giải quyết

Cú nhiều phƣơng phỏp sắp xếp khỏc nhau đó đƣợc nghiờn cứu và phỏt triển. Mỗi phƣơng phỏp cú ƣu và nhƣợc điểm riờng về độ phức tạp tớnh toỏn và thời gian thực hiện. Vỡ vậy, để lấy vớ dụ tốt cho việc kiểm thử về khả năng thực hiện, chỳng ta chọn hai nhúm thuật toỏn sau để thực hiện kiểm thử hộp đen và so sỏnh kết quả thực hiện.

Độ phức tạp O(n2

): Insertion Sort, Selection Sort, Shell Sort, Bubble Sort. Độ phức tạp O(n log n): Heap Sort, Quick Sort, Merge Sort.

Việc kiểm thử đơn vị trờn cỏc mođun của cỏc thuật toỏn này sử dụng cỏc phƣơng phỏp kiểm thử hộp trắng (phƣơng phỏp đƣờng dẫn cơ sở). Và để minh hoạ cho qui trỡnh kiểm thử tớch hợp chỳng ta thử lấy module MergeSort để thiết kế bộ kiểm thử. Phỏt sinh cỏc trƣờng hợp kiểm thử

Chiến lƣợc kiểm thử

Việc kiểm thử thuật toỏn sắp xếp đƣợc thực hiện theo nhiều mức khỏc nhau: Mức cao: bao gồm việc kiểm thử chức năng, kiểm thử khả năng thực hiện (thời

gian, khả năng tối đa,…)

Mức thấp: bao gồm việc kiểm thử đơn vị và kiểm thử khi tớch hợp cỏc thành phần.

Với việc kiểm thử ở mức cao cho cỏc thuật toỏn sắp xếp, chỳng ta sẽ thiết kế cỏc trƣờng hợp kiểm thử nhằm kiểm tra khả năng tối đa (số phần tử tối đa của dóy) và hiệu quả của thuật toỏn. (thời gian thực hiện, … của mỗi thuật toỏn trờn cỏc bộ dữ liệu vào khỏc nhau). Ở mức kiểm thử này, chỳng ta khụng can thiệp vào cấu trỳc mó bờn trong của thuật toỏn, mà chỉ dựa vào đặc tả thuật toỏn để phỏt sinh dữ liệu kiểm thử. Vỡ vậy,

ở mức này chỳng ta sẽ sử dụng cỏc phƣơng phỏp hộp đen (trỡnh bày trong chƣơng 2) để sinh dữ liệu đầu vào và kiểm tra cỏc kết quả đầu ra theo đặc tả của thuật toỏn.

Ở mức thấp, để thực hiện kiểm thử cho cỏc thuật toỏn cần thiết kế cỏc trƣờng hợp kiểm thử với mục đớch tỡm lỗi của mó lệnh. Vỡ vậy, chỳng ta cần thõm nhập vào mó lệnh của thuật toỏn và ỏp dụng cỏc phƣơng phỏp hộp trắng (chẳng hạn phƣơng phỏp đƣờng dẫn cơ sở) để phỏt sinh cỏc trƣờng hợp kiểm thử, và xõy dựng bộ dữ liệu kiểm thử tƣơng ứng.

Kiểm thử đơn vị

Trong kiểm thử hộp trắng, giao diện ngƣời dựng đƣợc bỏ qua. Cỏc đầu vào và đầu ra đƣợc kiểm thử trực tiếp tại mức mó và cỏc kết quả đƣợc so sỏnh theo đặc tả. Dạng kiểm thử này bỏ qua cỏc chức năng của chƣơng trỡnh đang kiểm thử và sẽ chỉ tập trung trờn mó và cấu trỳc mó của nú. Cỏc trƣờng hợp kiểm thử đó đƣợc sinh ra sẽ đảm bảo mỗi điều kiện đƣợc thực hiện ớt nhất một lần.

Sử dụng lƣu đồ cho mỗi chức năng của module sắp xếp mảng, chỳng ta cú thể xỏc định tất cả cỏc đƣờng dẫn cần đƣợc kiểm thử và phỏt triển cỏc trƣờng hợp kiểm thử tƣơng ứng. Cỏc trƣờng hợp kiểm thử đƣợc thực hiện độc lập nờn dữ liệu kiểm thử đƣợc nạp lại cho mỗi trƣờng hợp kiểm thử.

Module Merge Sort

Module MergeSort cú cấu trỳc nhƣ sau:

Merge: Module này nối hai mảng đó sắp xếp, cỏc miền kề sỏt của mảng thành một mảng đơn, mảng đó sắp xếp. Sau đú vựng hai miền đƣợc ghi đố bởi mảng đó sắp xếp. Vỡ vậy chỳng ta cần cung cấp khụng gian tạm thời là tham số cho hàm.

Split : Hàm tỏch nhận vào một miền và chia thành hai nửa, đƣợc gọi đệ qui cho mỗi nửa, nếu nú chứa nhiều hơn một phần tử và sau đú nối hai nửa kề sỏt bằng hàm nối.

MergeSort:Module này sẽ là giao diện ngƣời dựng cuối cho chức năng sắp xếp. Trong đú bộ nhớ tạm thời đƣợc cấp phỏt và sau đú hàm tỏch đƣợc gọi với cỏc tham số khởi tạo.

Giao diện của cỏc module đƣợc thiết kế nhƣ sau:

Mergesort(data(),size)

Merge(data(), temp(), left, mid, right) Split(data(), temp(), left, right)

Chỳng ta sẽ khú để kiểm thử ba chức năng một cỏch độc lập, nhƣng đề xuất gọi phụ thuộc chỳng ta cú thể ỏp dụng kiểm thử khi tớch hợp cỏc chức năng này bằng cỏch tớch hợp từ trờn xuống hoặc tớch hợp từ dƣới lờn. Để dễ phỏt sinh cỏc trƣờng hợp kiểm thử và quan sỏt cỏc kết quả chỳng ta ỏp dụng chiến lƣợc kiểm thử từ dƣới lờn: merge sẽ đƣợc kiểm thử trƣớc bởi vỡ tất cả cỏc chức năng khỏc sẽ bị lỗi nếu merge khụng làm việc đỳng.

Mó thuật toỏn MergeSort

Private Sub split(data() As Integer, temp() As Integer,_ ByVal left As Integer, ByVal right As Integer) Dim mid As Integer 'thực hiện đệ qui

If (right > left) Then

mid = (right + left) \ 2 split data, temp, left, mid split data, temp, mid + 1, right

merge data, temp, left, mid + 1, right End If

End Sub

Public Sub MergeSort(data() As Integer,ByVal num As Integer) m_sort data, temp, 0, num - 1

End Sub

MergeSort

Split

Xỏc định cỏc trƣờng hợp kiểm thử cú thể và thiết kế bộ kiểm thử

Cỏc trƣờng hợp kiểm thử cú thể đƣợc sinh ra từ cỏc mụ tả chức năng của đơn vị. Cú cỏc phƣơng phỏp luận kiểm thử với vài cỏch tiếp cận để phỏt sinh trƣờng hợp kiểm thử, nhƣng đụi khi cần suy đoỏn để tỡm cỏc trƣờng hợp kiểm thử cú khả năng phỏt hiện cỏc lỗi cú thể.

Để thiết kế cỏc trƣờng hợp kiểm thử cho cỏc module của mergesort chỳng ta cú thể ỏp dụng phƣơng phỏp kiểm thử đƣờng dẫn cơ sở.

Cỏc trƣờng hợp kiểm thử cho chức năng merge

Private Sub merge(data() As Integer, temp() As Integer,_ ByVal left As Integer, ByVal mid As Integer,_

ByVal right As Integer) Dim i As Integer

Dim left_end As Integer Dim num_elements As Integer Dim tmp_pos As Integer

'nối cỏc phần tử left_end = mid - 1 tmp_pos = left

num_elements = right - left + 1

Do While ((left <= left_end) And (mid <= right)) If (data(left) <= data(mid)) Then

temp(tmp_pos) = data(left) tmp_pos = tmp_pos + 1 left = left + 1 Else temp(tmp_pos) = data(mid) tmp_pos = tmp_pos + 1 mid = mid + 1 End If Loop

Do While (left <= left_end) temp(tmp_pos) = data(left) left = left + 1

tmp_pos = tmp_pos + 1 Loop

Do While (mid <= right)

temp(tmp_pos) = data(mid) mid = mid + 1 tmp_pos = tmp_pos + 1 Loop For i = 0 To (num_elements - 1) data(right) = temp(right) right = right - 1 Next i End Sub 2 1 3 4 8 5 6 9 10 11 7 12

Áp dụng phƣơng phỏp đƣờng dẫn cơ sở, chỳng ta xõy dựng đồ thị lƣu trỡnh nhƣ sau:

Vẽ đồ thị lƣu trỡnh cho hàm merge

Hỡnh 3.3 - Đồ thị lưu trỡnh của chức năng merge

Đối chiếu hỡnh 4.2, xỏc định độ phức tạp cyclomat V(G) theo 3 cụng thức: V(G) = số vựng = 6

V(G) = số cạnh - số đỉnh + 2 = 16 -12 + 2 = 6

V(G) = Số đỉnh điều kiện + 1 = 6 (Cỏc đỉnh 2, 3, 4, 8, 10 là cỏc đỉnh điều kiện) Vậy độ phức tạp cyclomat tớnh đƣợc V(G) = 6.

Giỏ trị V(G) này cho chỳng ta biết giới hạn trờn cho số đƣờng dẫn độc lập và cũng là giới hạn trờn cho số trƣờng hợp kiểm thử cần đƣợc thiết kế để đảm bảo phủ hết tất cả cỏc lệnh trong đoạn mó. Xỏc định tập cơ sở cỏc đƣờng dẫn độc lập + Đƣờng dẫn 1 : 1  2  8  10  12 + Đƣờng dẫn 2: 1  2  8  10  11  10 … + Đƣờng dẫn 3: 1  2  8  9  8  … + Đƣờng dẫn 4: 1  2  3  8  … + Đƣờng dẫn 5: 1  2  3  4  5  7  2  … R3 1 2 3 4 5 6 7 8 9 10 11 12 R1 R2 R4 R5 R6

+ Đƣờng dẫn 6: 1  2  3  4  6  7  2  …

Cỏc dấu chấm lửng (…) phớa sau cỏc đƣũng dẫn cú nghĩa là một đƣờng dẫn bất kỳ đi qua phần cũn lại của cấu trỳc đều cú thể chấp nhận đƣợc.

Chuẩn bị cỏc trƣờng hợp kiểm thử để mọi đƣờng dẫn trong tập cơ sở đều đƣợc thực hiện. Dữ liệu nờn chọn sao cho cỏc điều kiện tại cỏc đỉnh điều kiện là tập thớch hợp cho mỗi đƣờng dẫn.

+ Trƣờng hợp 1 (ứng với đƣờng dẫn 1): 1  2  8  10 12.

Theo đƣờng dẫn này thỡ cỏc điều kiện left <= left_end (2, 8), mid <= right (10) đều khụng thỏa món. Do đú, cú thể đề nghị dữ liệu kiểm thử cho trƣờng hợp này nhƣ sau:

Dữ liệu cần sắp xếp (Data): 1 3 2 7 5 6 2 Cỏc tham số (left, mid, right): 4 4 3 Kết quả mong đợi (Data): 1 3 2 7 5 6 2

+ Trƣờng hợp 2 (ứng với đƣờng dẫn 2): 1  2  8  10  11  10 ...

Dữ liệu sắp xếp (Data): 1 3 2 7 5 6 2 Cỏc tham số (left, mid, right): 4 4 6 Kết quả mong đợi (data): 1 3 2 7 5 6 2

+ Trƣờng hợp 3 (ứng với đƣờng dẫn 3): 1  2  8  9  8  …

Chỳng ta xột thấy đƣờng dẫn này khụng thể xảy ra, bởi vỡ tại nỳt (2) điều kiện left <= left_end khụng thỏa món, thỡ điều kiện này tại nỳt (8) cũng sẽ khụng thỏa món nờn đƣờng dẫn khụng thể đi qua nỳt (9). Đƣờng dẫn này sẽ đƣợc loại bỏ.

+ Trƣờng hợp 4 (ứng với đƣờng dẫn 4): 1  2  3  8  …

Dữ liệu sắp xếp (Data): 3 2 7 4 6 5 1 Cỏc tham số (left, mid, right): 4 5 4 Kết quả mong đợi (Data): 3 2 7 4 6 5 1

Dữ liệu sắp xếp (Data): 1 6 7 2 3 4 1 8 Cỏc tham số (left, mid, right): 0 4 7 Kết quả mong đợi (Data): 1 3 4 1 6 7 2 8

+ Trƣờng hợp 6 (ứng với đƣờng dẫn 6) 1  2 34 6 72…

Dữ liệu sắp xếp (Data): 3 2 7 4 1 5 8 2 3 Cỏc tham số (left, mid, right): 0 4 8

Kết quả mong đợi (Data): 1 3 2 5 7 4 8 2 3

Bảng 3.1 - Bảng cỏc trường hợp kiểm thử cho module Merge

Số hiệu Tờn kiểm thử Kiểu kiểm thử Đặc tả

Đầu vào Kết quả mong đợi 1.1 Merge1 Basic-Path Data: 1 3 2 7 5 6 2

Cỏc tham số : 4 4 3 1 3 2 7 5 6 2 1.2 Merge2 Basic-Path Data: 1 3 2 7 5 6 2

Cỏc tham số : 4 4 6 1 3 2 7 5 6 2 1.4 Merge4 Basic-Path Data: 3 2 7 4 6 5 1

Cỏc tham số :4 5 4 3 2 7 4 6 5 1

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Kiểm định phần mềm theo tiếp cận hệ thống (Trang 56 - 74)