LỜI CẢM ƠN
Luận văn này là thành quả của quá trình học tập nghiên cứu của tôi cùng sự
giúp đỡ, khuyến khích của các quý thầy sau 2 năm tôi theo học Chương trình đào tạo
Thạc sỹ, chuyên ngành Công nghệ phần mềm của Khoa Công nghệ, Trường Đại học
Công nghệ Hà Nội.
Tôi xin đặc biệt cảm ơn Thầy giáo hướng dẫn TS. Trương Anh Hoàng. Thầy đã
nhiệt tình hướng dẫn tôi, giúp đỡ và động viên tôi rất nhiều, cho tôi có cơ hội được
tiếp xúc với các tài liệu tham khảo quý giá trong quá trình nghiên cứu để hoàn thành
đề tài này.
Xin trân trọng cảm ơn các Thầy giáo của Khoa Công Nghệ và Viện Công nghệ
thông tin đã dạy dỗ tôi trong hai năm học, cảm ơn các cán bộ công tác tại Phòng Sau
Đại học-Đại Học Công nghệ Hà Nội đã giúp đỡ tôi nhiều trong quá trình học tập và
công tác bảo vệ luận văn.
MỘT LẦN NỮA TÔI XIN CHÂN THÀNH CẢM ƠN!!
MỤC LỤC
CHƯƠNG 1. ĐẶT VẤN ĐỀ 7
1.1. Tầm quan trọng của yêu cầu phần mềm 7
1.2. Khái niệm về Test case 7
1.3. Vấn đề sinh Test case từ yêu cầu phần mềm 8
CHƯƠNG 2. TỔNG QUAN VỀ QUÁ TRÌNH 9
SINH TEST CASE TỰ ĐỘNG 9
2.1. Giới thiệu 9
2.2. Tổng quan về các phương pháp sinh Test case 9
2.2.1. Sinh Test case dựa trên đặc tả 10
2.2.2. Sinh Test case dựa trên mô hình 10
2.2.3. Sinh Test case hướng đường dẫn 11
2.3. Kiểm thử phần mềm và UML 11
CHƯƠNG 3. CÁC KỸ THUẬT VÀ PHƯƠNG PHÁP SINH 12
TEST CASE TỰ ĐỘNG 12
3.1. Giới thiệu 12
3.2. Kỹ thuật sinh Test case dựa trên đặc tả 13
6 Sự kiện gọi (call events)
7 Sự kiện báo hiệu (signal events)
8 Sự kiện thời gian (time Events)
9 Sự kiện thay đổi (Change Events)
10 Qúa trình chung cho việc tạo ra các Test case từ đặc tả UML
11 Cấu trúc của file MDL cho biểu đồ lớp và biểu đồ chuyển trạng thái.
12 Biểu đồ lớp của mô hình thiết kề
13 OCD cho việc sinh ra các Test case chỉnh sửa đầy đủ các thuộc tính
14 OCD cho việc sinh ra các Test case chỉnh sửa chuyển tiếp
15 OCD cho việc sinh ra các Test case chỉnh sửa cặp chuyển tiếp.
16 Thuật toán phân tích đặc tả SCR
17 Thuật toán phân tách đặc tả UML
18 Biểu đồ cộng tác mức độ đặc tả
19 Biểu đồ cộng tác cho một thao tác
20 Các cặp cộng tác
21 Một đường chuỗi thông điệp
22 Thuật toán instrumentation
23 Mô hình hóa các vùng trong thiết kế phần mềm
24
Các hoạt động của cách tiếp cận được đề xuất bên trong quá trình phát
triển phần mềm.
25 Biểu đồ trạng thái mức độ cao nhất cho ví dụ use case của bảng 3.
26 Cải tiến biểu đồ trạng thái cho ví dụ use case của bảng 3
27 Mô hình cách sử dụng có thể cho ví dụ thư viện của bảng 3.
28 Mô hình hành vi
29 Các lược đồ test và các giá trị test
30 Test case cho kịch bản chính
DANH MỤC CÁC BẢNG BIỂU
Stt Tên bảng biểu Số trang
1 Phân biệt các biểu đồ UML và mức độ test
nghiên cứu và xây dựng một kỹ thuật sinh Test case hiệu quả từ yêu cầu người dùng.
• Chương 2: Giới thiệu tổng quan về sinh Test case tự động. Trên cơ sở đó chọn
hướng tiếp cận sẽ đi sâu vào nghiên cứu ở Chương 3.
• Chương 3: Trình bày các phương pháp và kỹ thuật sinh Test case tự động hiện
có. Từ đó đề xuất một kỹ thuật sinh Test case tự động và phân tích ưu điểm của nó so
với các kỹ thuật trước.
• Chương 4: Trình bày quá trình sinh Test case hiệu quả dựa trên kỹ thuật được
đề xuất. Đồng thời xây dựng chương trình demo quá trình sinh Test case tự động.
Sau khi nghiên cứu và thử nghiệm, trong phần Kết luận có nêu một số tổng kết và
nhận xét về việc sinh Test case tự động, đồng thời đề ra hướng nghiên cứu tiếp theo.
CHƯƠNG 1. ĐẶT VẤN ĐỀ
1.1. Tầm quan trọng của yêu cầu phần mềm
Các yêu cầu phần mềm là rất quan trọng với mọi dự án phần mềm. Các dự án
thành công hoặc thất bại có nguyên nhân là do chất lượng của các yêu cầu. Các yêu
cầu này cấu thành pham vi của tất cả các công việc sau đó cho nhóm phát triển dự án.
Không có các yêu cầu tốt, các dự án sẽ thất bại, bị chậm trễ, tốn kém, hoặc làm ra các
hệ thống không bao giờ được sử dụng.
Các vấn đề yêu cầu nên được cố định sớm, trước khi vào giai đoạn thiết kế, bởi
vì các vấn đề là do các yêu cầu kém có khuynh hướng gắn chặt vào trong thiết kế và
khó để cho việc sửa chữa sau này. Những người phát triển và người dùng có một sự
nhìn khác nhau từ những yêu cầu khi người phát triển xem xét yêu cầu từ quan điểm
làm thế nào để thực hiện còn người dùng chỉ cảm nhận vấn đề là sử dụng nó như thế
nào. Cách an toàn nhất để bảo đảm rằng nhu cầu của người dùng đã được đáp ứng
những gì đã được đưa ra, ta nên làm hai tài liệu song song, những gì người dùng cần,
và những gì một hệ thống sẽ phải làm để đáp ứng nhu cầu đó. Đây là các yêu cầu
người dùng và các đặc tả hệ thống theo thứ tự định sẵn.
Vậy tại sao cần có các yêu cầu phần mềm tốt? Bất kỳ lỗi nào được phát hiện
trong giai đoạn đầu trong quá trình phát triển dự án phần mềm là kết quả rất quan
trọng. Nếu ở các giai đoạn sau lỗi mới được phát hiện ra thì chi phí cho việc sửa chữa
hệ thống phần mềm sẽ tốn kém hơn rất nhiều. Nếu những người thiết kế hệ thống
Test case có một ý nghĩa vô cùng quan trọng, mục đích đưa ra các trường hợp
test nhằm phát hiện ra các lỗi nhiều nhất có thể, để cho chất lượng các dự án phát triển
phần mềm được tốt hơn.
1.3. Vấn đề sinh Test case từ yêu cầu phần mềm .
Trong quá trình phát triển dự án phần mềm, thường công việc tạo ra các Test
case từ yêu cầu người dùng do các Tester phụ trách. Nhưng không phải Tester nào viết
các tài liệu Test case này cũng như nhau.Vì vậy trong các công ty phần mềm cũng như
các tổ chức thực hiện dự án phần mềm sẽ phát sinh một vấn đề là: Tester nào viết tài
liệu Test case tốt, có hiệu quả thì chất lượng phần mềm sẽ tốt hơn những dự án có các
Tester viết Test case tồi (có nhiều trường hợp test trùng lặp nhau). Vậy chúng ta phải
chuẩn hóa và đồng bộ hóa để làm sao tạo ra Test case một cách hiệu quả và có chuẩn
về chất lượng. Để làm điều này, chúng ta phải nghiên cứu các phương pháp và kỹ
thuật để tự động tạo ra các Test case. Việc tạo ra Test case một cách tự động cũng làm
giảm bớt công sức và thời gian của các tester, giúp giảm bớt chi phí phát triển phần
mềm.
Qúa trình tạo ra các Test case sẽ giúp các tester phát hiện ra các vấn đề mâu
thuẫn hoặc chưa rõ ràng của yêu cầu phần mềm. Nếu bước này được làm sớm, các vấn
đề có thể được loại bỏ sớm, tiết kiệm thời gian và nguồn lực.
Vậy việc nghiên cứu các phương pháp và công cụ sinh Test case một cách tự
động từ yêu cầu người dùng rất hữu ích và cần thiết trong quá trình phát triển các dự
án phần mềm. Quá trình này nhằm mục đích tạo ra Test case một cách có hiệu quả, có
chất lượng. Giúp giảm bớt công sức và thời gian của các tester, làm giảm bớt chi phí
phát triển phần mềm và chất lượng phần mềm được nâng cao hơn.
CHƯƠNG 2. TỔNG QUAN VỀ QUÁ TRÌNH
SINH TEST CASE TỰ ĐỘNG
2.1. Giới thiệu
Việc test phần mềm là một công việc rất quan trọng trong vòng đời phát triển
của phần mềm. Để cắt giảm chi phí của việc test bằng tay và tăng độ tin cậy của phần
mềm thì chúng ta đang cố gắng thực hiện tự động hóa nó. Một trong những công việc
quan trọng trong môi trường test là tạo ra Test case một cách tự động mô tả về cách
tính toán phức tạp để xác định Test case.
Rất nhiều nghiên cứu về việc sinh ra các Test case tối ưu dựa trên các đặc tả,
tuy nhiên không thể đạt 100% các Test case tối ưu. Ngôn ngữ mô hình được sử dụng
để có được đặc tả và sinh ra các Test case. Kể từ khi UML (Unified Modeling
Language) là ngôn ngữ được sử dụng rộng rãi nhất thì nhiều nghiên cứu sử dụng lược
đồ UML như state-chart diagrams, use-case diagrams, sequence diagrams,… để sinh
ra các Test case và dẫn đến việc sinh ra Test case dựa trên mô hình.
2.2.1. Sinh Test case dựa trên đặc tả
Sinh Test case dựa trên đặc tả là phương pháp sinh Test case mà phỏng theo trạng
thái được xác định trước dựa trên đặc tả để tạo ra Test case từ biều đồ trạng thái UML.
Việc kiểm thử đủ các thuộc tính, các cặp chuyển tiếp và chỉnh sửa các câu lệnh là các
kỹ thuật được đưa ra trong Chương 3. Các kỹ thuật đã sử dụng các biểu đồ trạng thái
UML như một cở sở và tự động sinh ra các bộ phận điều khiển test và test script để
xác nhận các thành phần khi test. Cách tiếp cận trong một mẫu, chỉ ra các lớp và đặc tả
biểu đồ trạng thái tương ứng cho hành vi của lớp đó, định rõ ánh xạ đưa ra bằng sự kết
hợp các mã với đặc tả. Sau đó tester chọn các tiêu chuẩn để chỉnh sửa. Tóm lại, các lỗi
được phát hiện ra như sự không nhất quán giữa hành vi và đặc tả biểu đồ trạng thái
được đưa ra bởi người sử dụng. Mục tiêu là để xác định các đặc tả được cải tiến được
dựa trên các tiêu chuẩn chỉnh sửa thích hợp cho hệ thống và để phát triển các kỹ thuật
cho việc tạo ra bộ điều khiển test với ít nhất thao tác của con người.
2.2.2. Sinh Test case dựa trên mô hình
UML đã nhận được một sự quan tâm lớn từ các công đồng phát triển và thiết kế
phần mềm, và các công việc đang được thực hiện để tăng cường và mở rộng các tính
năng của nó. Tuy nhiên, cộng đồng test phần mềm đã không quan tâm nhiều và thảo
luận nhiều về UML, sự thiếu hụt lớn khi tiêu chuẩn mô hình hóa được phát triển. Đây
là vấn đề cần quan tâm, bởi vì trong các tổ chức phát triển phần mềm, chi phí của việc
test có thể chiếm hơn 40% tổng chi phí phát triển cho một hệ thống phần mềm. Đưa ra
các thực tế này để phát hiện ra khả năng sử dụng UML cho việc test phần mềm.
Đa phần công việc test dựa trên mô hình của các hệ thống tập trung vào việc sử
dụng của các biểu đồ trạng thái hoặc lớp.Các biểu đồ lớp chỉ một tập các lớp, các giao
Correctness, error handling pre/post
conditions, invariants
Class and state
diagrams
Function Functional
Functional and API behavior,
intergration issuses
Interaction and class
diagrams
System
Operational
scenarios
Workload, contention, synchron,
recovery
Use case, activity, and
interaction diagrams
Regresstion Functional
Unexpected behavior from
new/changed function
SAME AS FUNCTION
Solution
Inter-System
commun
Interop. Problems
Use case and
deployment diagrams
Bảng 1: Phân biệt các biểu đồ UML và các mức độ test
Tuy nhiên, vấn đề của việc sử dụng UML không kết thúc bằng sự chú ý đơn
thuần trong quá trình test mà các biểu đồ có thể được sử dụng hữu ích trong nhiều giai
đoạn khác nhau của quá trình này. Một vài vấn đề phải được giải quyết trước khi UML
Chú ý rằng cả test dựa trên chương trình và test dựa trên đặc tả, tính chính xác
của các kết quả chương trình phải được kiểm tra với các yêu cầu hoặc đặc tả. Tuy
nhiên, trong cả hai trường hợp, đánh giá sự phù hợp của test không phụ thuộc vào các
kết quả của việc kiểm tra này. Thêm vào đó, sự định nghĩa về các tiêu chuẩn được dựa
trên đặc tả đã đưa trước đó không coi là sự tồn tại của một đặc tả chuẩn.
Hình 2:Kiểm thử dựa trên đặc tả
Hình 3: Kiểm thử dựa trên chương trình
3.2. Kỹ thuật sinh Test case dựa trên đặc tả
Kiểm thử dựa trên đặc tả lấy được các thông tin test từ một đặc tả của phần
mềm khi test.Tuy nhiên, khi việc thực hiện được phát triển không chuẩn mực từ một
đặc tả chuẩn mực, đặc tả có thể đóng một vai trò chủ yếu trong quá trình test bằng
cách cho phép chúng ta thu được các đầu vào test và các kết quả mong đợi từ các đầu
vào này. Có hai vai trò chính một đặc tả có thể đóng vai trò trong test phần mềm [3].
Đầu tiên là cung cấp các công tin cần thiết để kiểm tra hoặc là đầu ra của chương trình
có đúng hay không. Thứ hai là cung cấp thông tin để lựa chọn các Test case và để
đánh giá sự phù hợp của test.
Kiểm thử dựa trên đặc tả đưa ra nhiều ưu điểm trong test phần mềm. Đặc tả
chuẩn của một sản phầm phần mềm có thể được sử dụng như một sự hướng dẫn cho
việc thiết kế các test chức năng cho sản phẩm. Đặc tả xác định chính xác các khía cạnh
cơ bản của phần mềm, trong khi thông tin cấu trúc và chi tiết bị loại bỏ. Dó đó, tester
có các thông tin thiết yếu về tính năng của sản phẩm không phải triết xuất nó ra từ các
chi tiết thiết yếu.
Kiểm thử dựa trên đặc tả từ các đặc tả chuẩn đưa ra một cách tiếp cận chuẩn
hơn, được cấu trúc và đơn giản hơn cho sự phát triển của các test chức năng hơn là các
kỹ thuật test không dựa trên đặc tả. Mối quan hệ mạnh mẽ giữa đặc tả và test giúp phát
hiện ra các lỗi và có thể đơn giản quá trình hồi quy. Đặc tả là một bản mô tả thẩm
quyền của hành vi hệ thống và có thể được sử dụng để lấy được các kết quả mong
muốn cho các dữ liệu test. Các lợi ích khác của kiểm thử dựa trên đặc tả gồm phát
triển test cùng lúc với việc thực hiện và thiết kế, sử dụng các test đã lấy được để phê
chuẩn đặc tả gốc, và kiểm định đã được đơn giản của quá trình test. Đặc tả có thể cũng
Thông thường, một conditional event là một event mà xuất hiện khi các điều kiện nhất
định tiếp tục.
Các mode và mode transitions xác định các thuộc tính của hệ thống mà giữ
những điều kiện nhất định. Một mode invariant phải là True khi hệ thống tham gia vào
mode, phải duy trì True trong khi hệ thống ở trong mode đó, và có thể hoặc là True
hoặc là False khi hệ thống không còn ở trong mode đó. Sự không thay đổi của mode là
các thuộc tính bất biến của một mode hệ thống. Nếu các điều kiện nhất định tiếp tục
sau đó hệ hoặc là hệ thống là ở trong một mode cụ thể, các điều kiện hệ thống nhất
định có các giá trị bất biến. Các đặc tả SCR xác định hành vi chức năng hệ thống phần
mềm. Sự bất biến của hệ thống là rõ ràng hoặc đôi khi là rõ ràng được xác định trong
đặc tả. Một đặc tả SCR có thể gồm một bộ của các biến không đổi an toàn như một sự
khẳng định, nhưng hệ thống các biến không đổi này không phải là các ràng buộc thêm
vào của hành vi đuợc yêu cầu, chúng không đuợc tính vào, chỉ là các mục tiêu mà các
yêu cầu được trình bày thành dạng bảng được mong muốn được đưa đến. Thêm vào
đó, nếu các biến bất biến này không đuợc liệt kê rõ ràng, sau đó chúng ta có thể nên
lấy chúng từ đặc tả. Các biến không đổi có được có thể được so sánh với các biến rõ
không đổi rõ ràng giống như các tiêu chuẩn xác định.
3.2.2. Kỹ thuật sinh ra Test case dựa theo đặc tính của SCR
Kiểm thử các mức độ trong phát triển phần mềm thực tế đã được thực hiện từ
lâu được dựa trên các phân tích không chuẩn mực của các yêu cầu phần mềm. Điều
này dẫn đến các kết quả không thống nhất, các vấn đề trong việc hiểu mục đích và kết
quả của việc kiểm thử, hoàn thành thiếu tính hiệu quả trong việc kiểm thử. Việc xác
định đúng cho một yêu cầu rõ ràng để thực hiện kiểm thử bởi chúng mô tả chính xác
phần mềm đóng vai trò như thế nào trong việc trợ giúp việc cung cấp một mẫu cái mà
có thể tự động điều khiển. Kỹ thuật sinh Test case dựa theo đặc tả SCR thiết lập các
tiêu chuẩn và giải quyết việc sinh ra các ca kiểm thử mức độ hệ thống từ các xác
nhận/các yêu cầu chức năng. Những tiêu chuẩn này cung cấp một quá trình chuẩn, một
phương pháp để đo lường việc kiểm thử, và một nền tảng cho việc tự động hóa hoàn
toàn việc tạo ra các ca kiểm thử.
3.2.2.1. Mô hình kiểm thử
độ nên được sử dụng. Hai mức độ sau có ý nghĩa độc lập, chỉnh sửa các cặp chuyển
tiếp hướng đến để kiểm thử các giao diện giữa các trạng thái; và kiểm thử các kết quả
hoàn thành là hướng đến kiểm thử phần mềm bằng việc thực thi phần mềm thông qua
các luồng xử lý hoàn chỉnh. Như nó đã diễn ra, chỉnh sửa các cặp chuyển tiếp vào
trong sự chuyển tiếp, nhưng chúng được thiết lập để kiểm thử phần mềm trong rất
nhiều cách khác nhau.
(1) Mức độ chỉnh sửa kế tiếp
Mức độ này là tương tự với tiêu chuẩn chỉnh sửa nhánh trong kiểm thử cấu trúc.
Yêu cầu ở đây là mỗi sự chuyển tiếp trong đồ thị đặc tả được thực hiện ít nhất một lần.
Điều này là một cách khác của việc đòi hỏi rằng mỗi điều kiện ban đầu trong một đặc
tả được thỏa mãn ít nhất một lần.
Tóm lại, mức độ chỉnh sửa kế tiếp đòi hỏi mỗi sự chuyển tiếp trong đồ thị đặc
tả được thực hiện ít nhất một lần.
(2) Mức độ chỉnh sửa đầy đủ các thuộc tính
Một câu hỏi trong khi kiểm thử đó là các thuộc tính trong đặc tả có được lập
công thức chính xác hay không. Những sai xót nhỏ trong các đặc tả có thể dẫn tới rắc
rối lớn khi phát triển sản phẩm phần mềm. Mức độ chỉnh sửa đầy đủ các thuộc tính
thực hiện vai trò kiểm thử phân mềm, ít nhất chúng ta nên cung cấp các dữ liệu đầu
vào để kiểm thử mỗi mệnh đề. Mức độ này đòi hỏi rằng mỗi mệnh đề trong mỗi thuộc
tính trên mỗi sự chuyển tiếp được kiểm thử một cách độc lập, do đó cố gắng để nêu rõ
câu hỏi về mệnh đề nào là cần thiết và nó đã được lập công thức chính xác hay chưa.
• Một mệnh đề là một biểu thức Boolean mà không bao gồm những toán tử
Boolean. Ví dụ, các biểu thức liên quan và các biến số Boolean là các mệnh đề.
• Một thuộc tính là một biểu thức Boolean nó gồm các mệnh đề và không hoặc
nhiều toán tử Boolean. Một thuộc tính không có một toán tử Boolean cũng là một
mệnh đề. Nếu một mệnh đề xuất hiện hơn một lần trong một thuộc tính, mỗi sự xuất
hiện là một mệnh đề riêng biệt.
Quan điểm về chỉnh sửa các thuộc tính đầy đủ được dựa trên tiêu chuẩn kiểm
thử cấu trúc của việc sửa quyết định/điều kiện, mà đòi hỏi mọi quyết định và rất nhiều
điều kiện trong quyết định đã dẫn đến mỗi kết quả ít nhất một lần, và mỗi điều kiện đã
Hình 4: Xây dựng các yêu cầu Test case từ cây biểu thức cú pháp
Hình số 4 minh họa quá trình cho biểu thức bên trên, chỉ ra cả B và C của mệnh
đề kiểm thử. Trong trình từ trên, B là mệnh đề kiểm thử (được chỉ ra trong hộp có ô
được gạch). Trong cây 2, nhánh của nó, A được gán cho giá trị False, và trong cây 3, C
được gán giá trị True. Trong trình từ cuối cùng, C là mệnh đề kiểm thử. Trong cây 2,
nhánh của C là một nút V, và được gán cho giá trị True. Trong cây 3, A được gắn giá
trị True. Ghi nhớ rằng trong cây 3, A hoặc B có thể được gán giá trị True; tùy vào sự
lựa chọn.
Mẫu Test case đầy đủ thuộc tính từ cả sự dịch chuyển phù hợp và không phù
hợp, với chỉ một sự chuyển tiếp là phù hợp mỗi lần. Thêm vào đó, các kỹ sư kiêm thử
có thể chọn những sự kết hợp đầy đủ ý nghĩa của các điều kiện. Kiểm thử với những
dữ liệu đầu vào không phù hợp có thề giúp tìm ra các lỗi trong khi thực hiện cũng như
sự trình bày rõ ràng của các đặc tả. Rất nhiều nhà phát triển tin rằng một thành phần
phần mềm có các trạng thái ban đầu tốt, nó là trách nhiệm của người sử dụng để bảo
đảm rằng các điều kiện ban đầu đó đã được đáp ứng. Điều này có nghĩa rằng thành
phần không cần được kiểm thử với các dữ liệu đầu vào mà đã vi phạm các điều kiện
đầu tiên. Không giải quyết một khía cạnh của vấn đề này, công nghệ được mô tả ở đây
cung cấp một cơ chế cho việc phát triển các dự liệu đầu vào không phù hợp; chúng có
thể được sử dụng hoặc không khi những người kiểm thử nhận thấy là phù hợp.
Như một ví dụ rõ ràng, xem xét công thức của cây phân đoạn được đề cập ở trên,
(A v B) ^ C. Bảng giá trị đúng sau đây cung cấp các giá trị cho mệnh đề kiểm thử:
(A v B) ^ C
1 T
2 F
3 T
4 F
5 T
6 F
Để chắc chắn yêu cầu mà mệnh đề kiểm thử phải kiểm soát kết quả cuối cùng,
bảng đúng từng phần phải được làm rộng ra như sau (cho hai thực thể cuối cùng, là A
Không thể chắc chắn rằng bất kỳ kiểm thử thành công nào cũng có thể dựa trên
các phương pháp thông thường, đôi khi kinh nghiệm và sự hiểu biết của các kỹ sư
kiểm thử phải được sử dụng. Đặc biệt ở mức độ hệ thống, việc kiểm thử hiệu quả có
thể đòi hỏi một kiến thức chi tiết về lĩnh vực đó. Một mức độ trình tự hoàn chỉnh là
một tuần tự của các chuyển tiếp trạng thái mà tạo ra một sự sử dụng thực tiễn hoàn
chỉnh của hệ thống. Trong hầu hết các ứng dụng thực tế, số lượng các tuần tự có thể là
quá lớn để chọn tất cả các tuần tự hoàn chỉnh. Trong nhiều trường hợp, số các tuần tự
hoàn chỉnh là được xác định.
Mức độ tuần tự hoàn chỉnh: Các kỹ sư kiểm thử phải xác định các tuần tự đầy
đủ của các chuyển tiếp trên đồ thị đặc tả bằng việc chọn các tuần tự trạng thái nên
được đưa vào.
Đôi khi việc chọn các tuần tự nào chỉ có thể được quyết định bởi kỹ sư kiểm
thử với việc sử dụng kiến thức và kinh nghiệm của mình. Đây là một mức độ tự động
hóa ít nhất của quá trình kiểm thử.
3.2.2.2. Tổng kết
Phần này đưa ra một phương pháp để tạo ra các Test case. Phương pháp này
cho tất cả bốn mức độ của việc kiểm thử được đưa ra cùng nhau, bởi vì có một số khá
lớn trùng với nhau. Nếu không sử dụng cả bốn mức độ, một số bước này nên được bỏ
qua. Các bước được đưa ra để xây dựng cho việc làm tự động khi mà rất nhiều bước
có thể được phát triển.
Quá trình chung được chỉ ra ở hình 5, điều này đơn thuần phản ánh khía cạnh
các bước của quá trình sinh ra các ca kiểm thử.
Hình 5: Qúa trình chung của việc tạo ra các Test case từ đặc tả SCR
1. Phát triển các điều kiện chuyển tiếp. Bước đầu tiên để phát triển các điều
kiện chuyển tiếp là các thuộc tính định nghĩa dưới các điều kiện mỗi chuyển tiếp sẽ
được thực hiện. Với một vài ngôn ngữ đặc tả (ví dụ SCR), các điều kiện chuyển tiếp là
được mã hóa trực tiếp vào trong các đặc tả. Với các ngôn ngữ khác, các điều kiện có
thể phải được chuyển hóa.
2. Phát triển đồ thị đặc tả. Đồ thị đặc tả được mô tả trong hình 5. Nó có thể lấy
trực tiếp từ bảng đặc tả, và các cạnh được tự động với các điều kiện bắt nguồn từ bước 1.
7. Xây dựng các đặc tả kiểm thử. Với mỗi một yêu cầu kiểm thử cụ thể, việc
tạo ra các giá trị tiền tố, các giá trị Test case, xác nhận các điều kiện, giải phóng các
điều kiện, và các kết quả mong muốn. Chú ý rằng có thể sự trùng nhau khá nhiều trong
số các yêu cầu kiểm thử, do đó có sự hạn chế nhất định. Tạo ra các giá trị thực tế có
thể liên quan đến một số phương trình đại số. Cho ví dụ, nếu một điều kiện là A>B,
giá trị của A và B phải được lựa chọn để đưa ra thuộc tính giá trị phù hợp. Ở điểm này
nó cũng có thể phát hiện ra một số việc kiểm thử không phù hợp.
8. Xây dựng các tập lệnh kiểm thử. Mỗi đặc tả kiểm thử được sử dụng để xây
dựng một tập lệnh. Các tập lệnh kiểm thử thực sự phải phản ánh cú pháp đưa vào của
chương trình, vì vậy sự am hiểu về cú pháp đưa vào của chương trình được yêu cầu
cho bước này. (lưu ý rằng đây chỉ là một bước kiểm thử mà đòi hỏi sự hiểu biết về
việc thực hiện, tất cả các bước tiếp theo phụ thuộc rất lớn vào các đặc tả chức năng).
Chú ý:
Nó là có thể để tự động hóa hoàn toàn tất cả quá trình lấy ra này. Nếu một dạng
máy có thể đọc được của bảng đặc tả là sẵn có, các điều kiện chuyển tiếp có thể được
đọc trực tiếp từ bảng. Đồ thị đặc tả sau đó có thể được tự động tạo ra từ các trạng thái
và điều kiện chuyển tiếp. Các yêu cầu kiểm thử lấy dạng của các bảng có phần đúng
xác định trên các thuộc tính chuyển tiếp, các thuộc tính trạng thái, và các cặp của
thuộc tính trạng thái. Đưa ra đặc tả chức năng chuẩn, hầu như không phải tất cả các
yêu cầu kiểm thử này có thể được tạo ra một cách tự động. Tiền tố của một test case
gồm các đầu vào cần thiết để đặt hệ thống vào trong một trạng thái ban đầu nhất định.
Đưa ra biểu đồ đặc tả, nhiều trong số những tiền tố này có thể được tạo ra tự động. Nó
cũng có thể cải tiến tự động các đặc tả kiểm thử vào các tập lệnh kiểm thử. Cuối cùng,
các thuật toán cho việc tự động tạo ra các tập lệnh kiểm thử có thể được phát triển,
mặc dầu cú pháp đưa vào của chương trình sẽ là cần thiết. Bước cuối cùng, tạo ra việc
kiểm thử trình tự hoàn chỉnh, không thể được tự động hóa hoàn toàn. Nhưng một giao
diện phù hợp có thể đưa ra đồ thị đặc tả, và cho phép các tester chọn các trình tự của
các trạng thái bằng cách chỉ và nhấn vào màn hình. Mỗi lần một trạng thái được chọn,
việc chuyển tiếp từ trạng thái trước đó có thể được tự động dịch sang các giá trị và
được lưu giữ như một phần của Test case. Điều này sẽ cho phép công việc của tester
Mỗi trong số các trường này là một tùy chọn-thậm chí tên có thể được bỏ đi nếu
nó rõ ràng khi sự việc chuyển tiếp xảy ra.
Sự kiện là tên của việc chuyển tiếp. Thông thường đây chỉ là một thứ được xác
định cho chuyển tiếp. Chuyển tiếp có một danh sách đối số tùy chọn để chỉ ra khi nào
dữ liệu được đưa ra trong chuyển tiếp, chẳng hạn một mã bị lỗi hoặc một giá trị được
giám sát. Danh sách đối số này được đưa vào trong ngoặc đơn giống như việc gọi chức
năng chuẩn. Điều kiện bảo đảm được đưa ra trong dấu ngoặc vuông. Một bảo đảm là
một điều kiện mà phải được thỏa mãn trước khi việc chuyển tiếp được thực hiện. Danh
sách sendEvent là một danh sách được ngăn cách bởi dấu phẩy. Mỗi sự kiện được
hướng tới một đối tượng mục tiêu, và có thể có các đối số. Những sự kiện như vậy sẽ
được phổ biến bên ngoài của các đối tượng đi kèm như một kết quả của sự chuyển tiếp
này. Đây là một cách mà các trạng thái đang xảy ra liên lạc với nhau, cho phép một sự
chuyển tiếp trong một máy trạng thái ảnh hưởng tới các máy trạng thái đang tồn tại
khác. Cuối cùng, danh sách toán tử xác nhận danh sách được ngăn cách bởi dấu hai
chấm của các chức năng (mỗi cái đi với một đối số) mà sẽ được gọi là một kết quả của
sự chuyển tiếp được thực hiện.
Trong các trạng thái, cả các hành động vào và ra, cũng như các hành động sắp
diễn ra, có thể được chỉ rõ. Một hành động vào là một chức năng mà được gọi khi
trạng thái được đưa vào (thậm chí khi sự chuyển tiếp được tự định hướng). Một hành
động thoát là một chức năng mà được thực hiện khi trạng thái được thoát (thậm chí
việc chuyển tiếp được tự định hướng). Các hành động chứng tỏ việc xử lý đang tiếp
tục được hoàn thành, hoặc cho đến khi được ngăn chặn bởi một sự chuyển tiếp (thậm
chí khi sự chuyển tiếp bản thân nó được tự định hướng).
Các đối tượng kiểm thử cho mô hình chuyển tiếp trạng thái là các đường dẫn
chuyển tiếp, các đường dẫn thông qua biểu đồ đưa ra một chu kỳ sống toàn bộ của đối
tượng từ lúc sinh ra đến lúc bị phá hủy. Đó là, mỗi đối tượng kiểm thử đưa ra một trình
tự có thể của các trạng thái giữa việc sinh ra và mất đi của một đối tượng. Chúng ta
không thể kiểm thử một mô hình chu kỳ sống của đối tượng với mô hình hiện có, mà
chỉ là một phần của nó thôi.
UML phân loại các chuyển trạng thái vào trong năm loại sau: chuyển trạng thái
Send) mà đã tạo ra nó. Các ngoại lệ là các ví dụ của các sự kiện báo hiệu. Các sự kiện
báo hiệu được mô hinh hóa như các loại được dập khuôn, được đưa ra trong hình 7. Sự
phụ thuộc của sự kiện send chỉ ra rằng một thao tác đưa một dấu hiệu cụ thể.
Một sự kiện thời gian đưa ra sự chuyển qua của một khoảng thời gian được chỉ
định sau một sự kiện được chỉ định (thường là đầu vào của một trạng thái hiện tại)
hoặc sự kiện của một thời gian nhất định. Trong UML, sự kiện thời gian được mô hình
hóa bằng sử dụng các từ khóa after được theo sau bởi một vài biểu thức mà đánh giá
tới một khoảng thời gian. Hình 8 minh họa một sự kiện thời gian.
Hình 8: Sự kiện thời gian (time Events)
Một sự kiện thay đổi xuất hiện khi một biểu thức boolean rõ ràng trở thành
đúng như một kết quả của một sự thay đổi trong giá trị của một hoặc nhiều các thuộc
tính hoặc các kết hợp. Một sự kiện thay đổi được đưa rõ ràng và không là kết quả của
một hành động thay đổi sự kiện. Sự kiện thay đổi thì khác với một sự bảo vệ. Một sự
bảo vệ không chỉ được đánh giá tại thời điểm một sự kiện được gửi đi, ngược lại, dựa