Máy trạng thái đƣợc dùng phổ biến để biểu diễn việc tạo các ca kiểm thử dựa trên mô hình [9]. Tuy nhiên, việc tạo ra các máy trạng thái một cách thủ công rất tốn kém và dễ xảy ra lỗi. Trong các phần tiếp theo của chƣơng này, luận văn cung cấp việc chuyển đổi tự động từ mô hình ca sử dụng (UCMod) sang máy trạng thái UML ở cấp hệ thống (UML state machine). Máy trạng thái chính là đầu vào trong việc sinh các ca kiểm thử một cách tự động. Hình 3.1 trình bày tổng quan phƣơng pháp, bao gồm 3 bƣớc chính nhƣ sau:
- Đặc tả ca sử dụng: Sử dụng ngôn ngữ RUCM để mô tả ca sử dụng. RUCM là một ngôn ngữ thể hiện dƣới dạng văn bản nên phải sử dụng các phƣơng pháp xử lý ngôn ngữ tự nhiên để lấy dữ liệu từ mô tả ca sử dụng. Quy trình xử lý ngôn ngữ tự nhiên cần phải tuân theo một số luật nhất định thì mới có thể thực hiện đƣợc, nội dung này sẽ đƣợc trình bày chi tiết trong mục 3.3. - Chuyển đổi đặc tả ca sử dụng sang biểu đồ trạng thái: Trƣớc khi ca sử dụng
đƣợc chuyển đổi sang biểu đồ máy trạng thái thì nó cần phải đƣợc chuyển đổi sang siêu mô hình trung gian UCMeta. Sau đó, siêu mô hình UCMeta đƣợc chuyển đổi thành biểu đồ máy trạng thái bằng hệ thống luật chuyển đổi. Nội dung này sẽ đƣợc trình bày chi tiết trong mục 3.4.
- Sinh tự động các ca kiểm thử từ biểu đồ trạng thái: Biểu đồ máy trạng thái ở bƣớc trên sẽ đƣợc tinh chỉnh phù hợp trƣớc khi thực hiện sinh các ca kiểm thử một cách tự động. Nội dung này sẽ đƣợc trình bày chi tiết trong mục 3.5.
Hình 3.1: Qui trình tạo các ca kiểm thử từ mô hình ca sử dụng.
Việc chuyển đổi tự động từ ca sử dụng sang máy trạng thái UML cũng sẽ cho phép truy xuất tự động nguồn gốc từ các yêu cầu đến biểu đồ máy trạng thái. Khả năng truy xuất nguồn gốc rất quan trọng trong quá trình phát triển phần
17
mềm vì nó cho phép các kỹ sƣ hiểu mối liên hệ giữa các thành phần khác nhau của một hệ thống phần mềm. Khả năng truy xuất nguồn gốc cũng đƣợc yêu cầu bởi nhiều tiêu chuẩn (ví dụ: IEEE Std. 830-1998) để hỗ trợ, phân tích tác động của sự thay đổi hoặc xác minh tính an toàn.
Cơ sở của phƣơng pháp tiếp cận này là cách tiếp cận mô hình hóa ca sử dụng dƣới dạng văn bản của RUCM, RUCM dựa trên mẫu ca sử dụng và tập hợp các luật giới hạn đƣợc định nghĩa chặt chẽ đối với đặc tả ca sử dụng dạng văn bản (Use Case Specication-UCS) để giảm sự thiếu chính xác và không đầy đủ vốn có của đặc tả ca sử dụng bằng ngôn ngữ tự nhiên.
Mục 3.3 và 3.4 sẽ trình bày phƣơng pháp và công cụ aToucan [10], nhằm mục đích chuyển đổi mô hình ca sử dụng đƣợc tạo bằng ngôn ngữ RUCM thành mô hình phân tích UML (class and sequence diagram). aToucan bao gồm ba bƣớc nhƣ thể hiện nhƣ sau:
- Đầu tiên, cần xác định thủ công các ca sử dụng dựa trên ngôn ngữ RUCM. - Thứ hai, aToucan sẽ đọc đặc tả ca sử dụng dạng văn bản để xác định Part-
Of-Speech (POS) và quan hệ ngữ pháp phụ thuộc của câu, sau đó ghi lại thông tin đó vào siêu mô hình trung gian UCMeta (intermediate metamodel) [11].
- Thứ ba, eToucan chuyển đổi siêu mô hình trung gian UCMeta thành máy trạng thái UML. Trong quá trình biến đổi này, aToucan sẽ thiết lập các liên kết xác định nguồn gốc giữa ca sử dụng UCMod và biểu đồ máy trạng thái UML đã đƣợc tạo. Máy trạng thái này sau đó đƣợc tinh chỉnh bởi các kỹ sƣ kiểm thử để các ca kiểm thử đƣợc tạo ra có thể thực thi đƣợc.
Mục 3.5 trình bày phƣơng pháp sinh tự động các ca kiểm thử từ biểu đồ trạng thái. Phƣơng pháp này đƣợc cấu thành bởi một số bƣớc:
- Đầu tiên, máy trạng thái đƣợc chuyển đổi thành biển diễn toán học trong AMPL. Trong bƣớc này, mô hình của AMPL đƣợc tạo ra bằng cách sử dụng một số phép biến đổi mô hình. Sau đó, với thuật toán tìm kiếm theo chiều sâu (Depth First Search – DFS) và dựa trên tiêu chỉ phủ All- Transitions hoặc All-States, các đƣờng đi trừu trƣợng từ máy trạng thái đƣợc lựa chọn.
- Thứ hai, sử dụng phép thực thi tƣợng trƣng, đƣờng đi trừu tƣợng đƣợc tạo và các ràng buộc của các phần tử trên đƣờng đi trừu tƣợng này đƣợc chuyển đổi thành dữ liệu của mô hình hóa toán học đƣợc sinh ra.
18
- Thứ ba, vấn đề toán học tạo ra đƣợc giải quyết với trạng thái hiện tại và các bộ giải có giao diện với AMPL, sau đó dữ liệu kiểm thử đƣợc tạo ra cho mỗi ca kiểm thử trừu tƣợng.
- Cuối cùng, dữ liệu kiểm thử đƣợc tạo và các đƣờng đi trừu tƣợng đƣợc chuyển đổi thành bài kiểm tra đơn vị Java có thể thực thi đƣợc.
Cần lƣu ý rằng mỗi bộ giải đƣợc thực hiện một (một số) thuật toán cụ thể hoặc suy nghiệm (heuristic). Các thuật toán này có thể khác nhau giữa các bộ giải. Do đó, mỗi phép giải chỉ có thể giải quyết một (một số) dạng vấn đề cụ thể. Parteg có thể giải quyết các loại vấn đề khác nhau bằng cách sử dụng các trình giải khác nhau. Kurth [12] liệt kê một số bộ giải AMPL nhƣ: Cplex, Minos, Gecode, Jacop và Couenne.
Tiêu chí về độ bao phủ All-Transitions và All-States đƣợc sử dụng cho thuật toán tìm kiếm, cũng chính là tiêu chí để đánh giá chất lƣợng các ca kiểm thự đƣợc sinh ra. Để tăng khả năng phát hiện lỗi của thuật toán, việc phân tích giá trị biên đƣợc sử dụng để tạo ra dữ liệu kiểm thử biên. Bằng cách sử dụng các bộ giải khác nhau, các ca kiểm thử đƣợc sinh ra cho từng vấn đề nhƣ: vấn đề tuyến tính và phi tuyến tính, có thể quyết định và không thể quyết định, đó là đƣợc xác định bởi các ràng buộc OCL trong mô hình kiểm thử.
3.3. Đặc tả ca sử dụng
Luận văn đề xuất ngôn ngữ RUCM (Restricted Use Case Modeling) [13] để đặc tả ca sử dụng. Ngôn ngữ này bao gồm một khuôn mẫu văn bản, một tập các từ khóa, và một tập các luật rút gọn đƣợc định nghĩa để đặc tả ca sử dụng. Các đặc tả RUCM làm giảm sự mơ hồ và tạo điều kiện thuận lợi để chuyển mô hình ca sử dụng sang các mô hình phân tích trong phát triển phần mềm.