Kiểm chứng chƣơng trình tuần tự

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu về đặc tả và kiểm chứng ràng buộc thời gian giữa các thành phần trong chương trình tương tranh 002 (Trang 43 - 46)

Chƣơng 4 Thực nghiệm

4.2. Kiểm chứng một số chƣơng trình

4.2.1. Kiểm chứng chƣơng trình tuần tự

Một đoạn chƣơng trình Java tuần tự đơn giản bao gồm ba phƣơng thức: TestSequenceFirst(…), TestSequenceSecond(…), TestSequenceThird(…).

Mã nguồn chi tiết chƣơng trình đƣợc trình bày trong Hình 4.9. Với mỗi phƣơng thức trong chƣơng trình tác giả xây dựng một test đúng và một test sai. Trong đó với test đúng thì thành phần sẽ tuân thủ ràng buộc thời gian trong đặc tả và ngƣợc lại. Với mỗi phƣơng thức tác giả thiết lập hai biến số đại diện cho test đúng và test sai. Tác giả lần lƣợt truyền hai biến số này vào chƣơng trình và tiến hành chạy thử nghiệm.

Đặc tả biểu thức chính quy thời gian của chƣơng trình trong Hình 4.9: [START] -> long_TestSequenceFirst(long:n)[1000,5000] -> void_TestSequenceSecond()[1000,30000] ->

String_TestSequenceThird(long:n)[100000,300000] -> [END]

Từ đặc tả biểu thức chính quy thời gian ta thấy phƣơng thức TestSequenceFirst() đƣợc thực hiện với thời gian đáp ứng là [1000, 5000] nano giây. Tiếp đó phƣơng thức TestSequenceSecond() đƣợc thực hiện với thời gian đáp ứng cho phép là [1000, 30000] nano giây. Cuối cùng phƣơng thức TestSequenceThird() đƣợc thực hiện với thời gian đáp ứng cho phép là [100000, 300000] nano giây. Trong môi trƣờng thực thi thực tế khi một phƣơng thức kết thúc và phƣơng tiếp theo đƣợc thực thi tồn tại một khoảng thời gian để chuyển giữa hai phƣơng thức là 𝜎. Do đó tổng thời gian thực thi thực tế chƣơng trình:

𝜃 = 𝜏 TestSequenceFirst … + 𝜏 TestSequenceSecond … + 𝜏 TestSequenceThird … + 𝑛 ∗ 𝜎

Trong đó 𝑛 là số lần chuyển phƣơng thức trong chƣơng trình.

Đối với đặc tả trong Hình 4.2 thì tổng thời gian chạy ƣớc lƣợng của chƣơng trình theo đặc tả là:

𝜃𝑚𝑖𝑛 = 1000 + 1000 + 10000 + 2*500000 = 1012000 nano giây.

𝜃𝑚𝑎𝑥 = 5000 + 30000 + 30000 + 2*500000 = 1065000 nano giây.

Ở đây chúng ta lấy khoảng thời gian cần thiết để chuyển giữa hai phƣơng thức 𝜎 = 500000 nano giây và với n = 2 tƣơng ứng với hai lần chuyển phƣơng thức trong chƣơng trình.

package Test;

public class ProgramSequence {

public static void main(String[] args) { long trueTest = 10; long falseTest = 1000; TestSequenceFirst(trueTest); TestSequenceSecond(); TestSequenceThird(trueTest); };

public static long TestSequenceFirst(long n) { long max = 1; while (n > max) { n = n - max; } return n; }

public static void TestSequenceSecond() { long trueTest = 10;

long falseTest = 100000;

for (int i = 0; i < trueTest; i++) { falseTest = falseTest - 1; }

}

public static String TestSequenceThird(long n) { String rs = "Hello TVG"; while (n > 0) { rs = rs + n; n = n - 1; } return rs; } }

Hình 4.9 – Mã nguồn một chƣơng trình tuần tự

Khi tiến hành đan mã aspect sinh ra từ công cụ TVG với mã nguồn chƣơng trình và tiến hành chạy đối với ca kiểm thử đúng đối số truyền vào trueTest = 10. Thời gian thực thi các phƣơng thức đƣợc mô tả trong Hình 4.10. Phƣơng thức TestSequenceFirst() đƣợc thực thi với thời gian là 2484 nano giây thỏa mãn ràng buộc thời gian thực thi [1000, 5000] nano giây. Phƣơng thức TestSequenceSecond() đƣợc thi với thời gian 1552 nano giây thỏa màn ràng buộc thời gian thực thi là [1000, 30000] nano giây. Cuối cùng phƣơng thức TestSequenceThird() đƣợc thực thi với thời gian là 20486 nano giây thỏa mãn với ràng buộc thời gian lần lƣợt là và [10000,

30000] nano giây. Tổng thời gian thực thi của chƣơng trình là 1025000 nano giây thỏa mãn ràng buộc [1012000, 1065000] nano giây.

INF: Time execute: execution(long

Test.ProgramSequence.TestSequenceFirst(long)): 2484 nanosec INF: Time execute: execution(void

Test.ProgramSequence.TestSequenceSecond()): 1552 nanosec INF: Time execute: execution(String

Test.ProgramSequence.TestSequenceThird(long)): 20486 nanosec INF: CurrentTotal Time System: 1025000 nanosec

Hình 4.10 – Kết quả thực nghiệm ca kiểm thử đúng chƣơng trình tuần tự.

Ngƣợc lại đối với ca kiểm thử sai với trueTest = 1000 đƣợc mô tả trong Hình 4.11 thời gian thực thi của phƣơng thức đều vƣợt quá ràng buộc thời gian cho phép. Cụ thể phƣơng thức TestSequenceFirst() đƣợc thực thi với thời gian là 10863 nano giây không thỏa mãn ràng buộc thời gian [1000, 5000] nano giây, phƣơng thức TestSequenceSecond() đƣợc thi với thời gian 644065 nano giây vƣợt quá ràng buộc thời gian cho phép [1000, 30000] nano giây. Và phƣơng thức TestSequenceThird() đƣợc thực thi với thời gian là 3498748 nano giây vƣợt quá ràng buộc thời gian cho phép là [10000, 30000] nano giây. Tổng thời gian thực thi của chƣơng trình là 5440261 nano giây vƣợt quá ràng buộc thời gian [1012000, 1065000] nano giây. Đối với mỗi ca kiểm thử đúng và sai tác giả tiến hành chạy 25 lần để kiểm tra ràng buộc thời gian. Kết quả thực nghiệm cho thấy phƣơng pháp đã phát hiện đƣợc các vi phạm ràng buộc thời gian trong chƣơng trình tuần tự.

INF: Time execute: execution(long

Test.ProgramSequence.TestSequenceFirst(long)): 10863 nanosec WRONG: Test.ProgramSequence.TestSequenceFirst(long)

INF: Time execute: execution(void

Test.ProgramSequence.TestSequenceSecond()): 644065 nanosec WRONG: Test.ProgramSequence.TestSequenceSecond()

INF: Time execute: execution(String

Test.ProgramSequence.TestSequenceThird(long)): 3498748 nanosec WRONG: Test.ProgramSequence.TestSequenceThird(long))

INF: CurrentTotal Time System: 5440261 nanosec Over Total Time Alow

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu về đặc tả và kiểm chứng ràng buộc thời gian giữa các thành phần trong chương trình tương tranh 002 (Trang 43 - 46)

Tải bản đầy đủ (PDF)

(57 trang)