1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

57 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 1,62 MB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ Phạm Thanh Hải 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 LUẬN VĂN THẠC SĨ CƠNG NGHỆ THÔNG TIN Hà Nội - 2015 HÀ NỘI - 2011 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ Phạm Thanh Hải Lời Cam Đoan 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 Ngành: Công nghệ thông tin Chuyên ngành : Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS.TS Nguyễn Việt Hà Hà Nội - 2015 i LỜI CÁM ƠN Đầu tiên xin gửi lời cảm ơn sâu sắc tới thầy giáo PGS.TS Nguyễn Việt Hà, môn công nghệ phần mềm, khoa công nghệ thông tin, trƣờng Đại học Công nghệ – Đại học Quốc Gia Hà Nội ngƣời định hƣớng đề tài tận tình hƣớng dẫn bảo tơi suốt q trình thực luận văn tốt nghiệp Tôi xin trân trọng cảm ơn quý thầy cô Khoa Công nghệ thông tin trƣờng Đại học Công nghệ – Đại học Quốc Gia Hà Nội tận tình giảng dạy, truyền đạt kiến thức quý báu suốt hai năm học làm tảng cho thực luận văn tốt nghiệp Tôi xin đƣợc cảm ơn tác giả cơng trình nghiên cứu, tài liệu đƣợc tơi sử dụng, trích dẫn luận văn cung cấp nguồn tƣ liệu quý báu kiến thức liên quan để thực luận văn Con xin cảm ơn cha mẹ gia đình sinh nuôi dạy khôn lớn, bên cạnh động viên ủng hộ đƣờng mà yêu thích lựa chọn Cám ơn bạn học viên cao học Khoa cơng nghệ thơng tin khóa K19 Các bạn giúp đỡ ủng hộ nhiều nhƣ đóng góp nhiều ý kiến quý báu, qua giúp tơi hồn thiện luận văn tốt Mặc dù nỗ lực, cố gắng nhƣng hẳn luận văn tơi cịn nhiều thiếu sót Tơi mong nhận đƣợc nhiều ý kiến đánh giá q, phê bình q thầy cơ, anh chị bạn Một lần xin chân thành cảm ơn! Hà Nội, tháng 11 năm 2015 Phạm Thanh Hải ii LỜI CAM ĐOAN Tôi xin cam đoan luận văn tốt nghiệp “Nghiên cứu đặc tả kiểm chứng ràng buộc thời gian thành phần chƣơng trình tƣơng tranh” cơng trình nghiên cứu riêng dƣới hƣớng dẫn PGS.TS Nguyễn Việt Hà Các số liệu kết đƣợc trình bày luận văn hồn tồn trung thực chƣa đƣợc công bố cơng trình khác Tơi trích dẫn đầy đủ tài liệu tham khảo, cơng trình nghiên cứu liên quan nƣớc quốc tế Ngoại trừ tài liệu tham khảo này, luận văn hoàn toàn cơng việc riêng tơi Nếu có phát gian lận chép tài liệu, cơng trình nghiên cứu tác giả khác mà không đƣợc ghi rõ phần tài liệu tham khảo, chịu hoàn toàn trách nhiệm kết luận văn iii MỤC LỤC LỜI CÁM ƠN i LỜI CAM ĐOAN ii MỤC LỤC iii DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT .v DANH SÁCH BẢNG vi DANH SÁCH HÌNH VẼ vii Chƣơng Giới thiệu .1 1.1 Bối cảnh 1.2 Một số nghiên cứu liên quan 1.3 Nội dung nghiên cứu 1.4 Cấu trúc luận văn Chƣơng Kiến thức sở 2.1 Kiểm chứng phần mềm 2.1.1 Kiểm chứng hình thức 2.1.1.1 Kiểm chứng mơ hình 2.1.1.2 Chứng minh định lý 2.1.2 Kiểm chứng thời điểm thực thi .6 2.2 Một số vấn đề chƣơng trình tƣơng tranh .6 2.3 Sự tƣơng tranh Java .7 2.4 Lập trình hƣớng khía cạnh 2.4.1 Thực thi cắt ngang .11 2.4.2 Điểm nối 12 2.4.3 Hƣớng cắt 12 2.4.4 Mã hành vi 12 2.4.5 Khía cạnh .14 2.4.6 Cơ chế hoạt động AspectJ .15 2.5 Kết luận 16 Chƣơng Ràng buộc thời gian thành phần chƣơng trình tƣơng tranh 17 iv 3.1 Giới thiệu 17 3.2 Bài toán kiểm chứng ràng buộc thời gian thành phần tƣơng tranh 17 3.3 Phƣơng pháp đặc tả kiểm chứng ràng buộc thời gian .19 3.3.1 Mô tả phƣơng pháp 19 3.3.2 Đặc tả ràng buộc thời gian 19 3.3.3 Biểu thức quy thời gian .21 3.3.4 Phƣơng pháp sinh mã aspect .21 3.3.4.1 Đọc phân tích biểu thức quy thời gian .21 3.3.4.2 Sinh mã aspect 22 3.4 Kết luận 22 Chƣơng Thực nghiệm 26 4.1 Xây dựng công cụ TVG 26 4.1.1 Đọc phân tích biểu thức quy thời gian 27 4.1.2 Sinh mã aspect .30 4.2 Kiểm chứng số chƣơng trình 33 4.2.1 Kiểm chứng chƣơng trình .33 4.2.2 Kiểm chứng chƣơng trình tƣơng tranh 36 Chƣơng Kết luận 40 Phụ lục 41 Phụ lục A Công cụ sinh mã kiểm chứng TVG .41 A.1 Giới thiệu .41 A.2 Hƣớng dẫn sử dụng 41 A.2.1 Các yêu cầu cài đặt .41 A.2.2 Các chức 42 A.2.3 Hƣớng dẫn thực 42 TÀI LIỆU THAM KHẢO .44 Tiếng Việt 44 Tiếng Anh 44 v DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Dạng viết tắt Dạng đầy đủ Diễn giải AOP Aspect Oriented Programming Lập trình hƣớng khía cạnh CFG Context Free Grammar Văn phạm phi ngữ cảnh IDE Integrated Development Môi trƣờng pháp triển tích hợp Environment MCS Method Call Sequence Tuần tự gọi phƣơng thức OOP Object Oriented Programming Lập trình hƣớng đối tƣợng TVG Timed Verify Generator Công cụ kiểm sinh mã TC Timing constraint Ràng buộc thời gian TRE Timed Regular Expressions Biểu thức quy thời gian vi DANH SÁCH BẢNG Bảng 2.1 - Ánh xạ loại điểm nối (joinpoint) hƣớng cắt (pointcut) tƣơng ứng 14 vii DANH SÁCH HÌNH VẼ Hình 1.1 – Kiểm chứng chƣơng trình mức cài đặt sử dụng lập trình AOP Hình 2.1 – Ví dụ sử dụng phƣơng thức run Hình 2.2 – Xung đột tiến trình Java Hình 2.3 – Sử dụng synchoronized để giải tƣơng tranh Hình 2.4 – Xử lý cắt ngang lập trình OOP 10 Hình 2.5 – Xử lý cắt ngang lập trình AOP 10 Hình 2.6 – Biểu diễn khía cạnh với mã hành vi trƣớc sau 13 Hình 2.7 – Cấu trúc khía cạnh 14 Hình 3.1 – Mã nguồn chƣơng trình bao gồm thành phần tƣơng tranh 17 Hình 3.2 – Mơ tả q trình chạy phƣơng thức 18 Hình 3.3 – Phƣơng pháp kiểm chứng ràng buộc thời gian .20 Hình 3.4 – Thuật tốn đọc biểu thức quy thời gian 23 Hình 3.5 – Ví dụ mẫu aspect .24 Hình 3.6 – Thuật toán Sinh mã aspect 25 Hình 4.1 – Cài đặt cơng cụ TVG Netbean 7.0.1 26 Hình 4.2 – Một đoạn mã aspect sinh từ công cụ TVG 27 Hình 4.3 – Pattern kiểm tra thành phần TRE 28 Hình 4.4 – Lớp TimingMethod .28 Hình 4.5 – Quá trình đọc phân tích biểu thức TRE .30 Hình 4.6 – Tạo mã aspect từ mẫu định nghĩa .31 Hình 4.7 – Template aspectHead 32 Hình 4.8 – Template aspectTail 32 Hình 4.9 – Mã nguồn chƣơng trình 34 Hình 4.10 – Kết thực nghiệm ca kiểm thử chƣơng trình 35 Hình 4.11 – Kết thực nghiệm ca kiểm thử sai chƣơng trình 35 Hình 4.12 – Mã nguồn chƣơng trình tƣơng tranh .38 Hình 4.13 – Kết thực nghiệm ca kiểm thử chƣơng trình tƣơng tranh 39 Hình 4.14 – Kết thực nghiệm ca kiểm thử sai chƣơng trình tƣơng tranh .39 viii Hình A.1 – Giao diện cơng cụ sinh mã TVG 41 Hình A.2 – Đặc tả ràng buộc thời gian thành phần TRE .42 Hình A.3 – Đan mã aspect với mã chƣơng trình Java viết Eclipse 43 33 4.2 Kiểm chứng số chƣơng trình 4.2.1 Kiểm chứng chƣơng trình Một đoạn chƣơng trình Java đơ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 Hình 4.9 Với phƣơng thức chƣơng trình tác giả xây dựng test test sai Trong với test thành phần tuân thủ ràng buộc thời gian đặc tả ngƣợc lại Với phƣơng thức tác giả thiết lập hai biến số đại diện cho test test sai Tác giả lần lƣợt truyền hai biến số vào chƣơng trình tiến hành chạy thử nghiệm Đặc tả biểu thức quy thời gian chƣơng trình 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 quy thời gian ta thấy phƣơng thức TestSequenceFirst() đƣợc thực với thời gian đáp ứng [1000, 5000] nano giây Tiếp phƣơng thức TestSequenceSecond() đƣợc thực với thời gian đáp ứng cho phép [1000, 30000] nano giây Cuối phƣơng thức TestSequenceThird() đƣợc thực với thời gian đáp ứng cho phép [100000, 300000] nano giây Trong môi trƣờng thực thi thực tế phƣơng thức kết thúc phƣơng đƣợc thực thi tồn khoảng thời gian để chuyển hai phƣơng thức 𝜎 Do tổng thời gian thực thi thực tế chƣơng trình: 𝜃 = 𝜏 TestSequenceFirst … + 𝜏 TestSequenceSecond … + 𝜏 TestSequenceThird … +𝑛 ∗ 𝜎 Trong 𝑛 số lần chuyển phƣơng thức chƣơng trình Đối với đặc tả Hình 4.2 tổng thời gian chạy ƣớc lƣợng 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 Ở lấy khoảng thời gian cần thiết để chuyển hai phƣơng thức 𝜎 = 500000 nano giây với n = tƣơng ứng với hai lần chuyển phƣơng thức chƣơng trình 34 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 chƣơng trình Khi tiến hành đan mã aspect sinh từ công cụ TVG với mã nguồn chƣơng trình tiến hành chạy ca kiểm thử đối số truyền vào trueTest = 10 Thời gian thực thi phƣơng thức đƣợc mơ tả Hình 4.10 Phƣơng thức TestSequenceFirst() đƣợc thực thi với thời gian 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 ràng buộc thời gian thực thi [1000, 30000] nano giây Cuối phƣơng thức TestSequenceThird() đƣợc thực thi với thời gian 20486 nano giây thỏa mãn với ràng buộc thời gian lần lƣợt [10000, 35 30000] nano giây Tổng thời gian thực thi chƣơng trình 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 thực nghiệm ca kiểm thử chƣơng trình Ngƣợc lại ca kiểm thử sai với trueTest = 1000 đƣợc mơ tả Hình 4.11 thời gian thực thi phƣơng thức vƣợt 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 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 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 3498748 nano giây vƣợt ràng buộc thời gian cho phép [10000, 30000] nano giây Tổng thời gian thực thi chƣơng trình 5440261 nano giây vƣợt ràng buộc thời gian [1012000, 1065000] nano giây Đối với ca kiểm thử 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 thực nghiệm cho thấy phƣơng pháp phát đƣợc vi phạm ràng buộc thời gian chƣơng trình 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 Hình 4.11 – Kết thực nghiệm ca kiểm thử sai chƣơng trình 36 4.2.2 Kiểm chứng chƣơng trình tƣơng tranh Tác giả kiếm chứng chƣơng trình bao gồm thành phần tƣơng tranh đƣợc nêu Hình 3.1 Đoạn chƣơng trình bao gồm phƣơng thức: firstSequence(…), secondSequence(…), Producer.run(…), Consumer.run(…) Mã nguồn chi tiết chƣơng trình đƣợc trình bày Hình 4.6 Với phƣơng thức chƣơng trình tác giả xây dựng test test sai Trong với test thành phần tuân thủ ràng buộc thời gian đặc tả ngƣợc lại Với phƣơng thức tác giả thiết lập hai biến số đại diện cho test test sai Tác giả lần lƣợt truyền hai biến số vào chƣơng trình tiến hành chạy thử nghiệm Riêng hai phƣơng thức chạy song song thời điểm Producer.run(…), Consumer.run(…) với ca kiểm thử sai tác giả cho hai phƣơng thức tạm dừng khoảng thời gian để gia tăng thời gian thực thi package Test; import java.util.concurrent.*; public class ProgramDemo { public static void main(String[] args) throws Exception { int trueTest = 10; int falseTest = 1000; String rs1 = firstSequence(trueTest); String rs2 = secondSequence(trueTest); BlockingQueue queue = new ArrayBlockingQueue(1024); Producer producer = new Producer(queue); Consumer consumer = new Consumer(queue); Thread t1 = new Thread(producer); Thread t2 = new Thread(consumer); t1.start(); t2.start(); } public static String firstSequence(int input) { String rs = ""; for (int i = 0; i < input; i++) { if (input % == 0) { rs += i + "_"; } } return rs; 37 } public static String secondSequence(int input) { String rs = ""; int i = input; while (i > 0) { rs += i + "|"; i = i - 1; } return rs; } } package Test; import java.util.concurrent.BlockingQueue; public class Consumer implements Runnable { protected BlockingQueue queue = null; public Consumer(BlockingQueue queue) { this.queue = queue; } public void run() { try { queue.take(); queue.take(); queue.take(); } catch (InterruptedException e) { e.printStackTrace(); } } } package Test; import java.util.concurrent.BlockingQueue; public class Producer implements Runnable { protected BlockingQueue queue = null; public Producer(BlockingQueue queue) { this.queue = queue; } public void run() { try { //Thread.sleep(1000); queue.put("1"); //Thread.sleep(1000); queue.put("2"); //Thread.sleep(1000); queue.put("3"); } catch (InterruptedException e) { e.printStackTrace(); 38 } } } Hình 4.12 – Mã nguồn chƣơng trình tƣơng tranh Đặc tả biểu thức quy chƣơng trình tƣơng tranh Hình 4.6: [START] -> String_firstSequence(int:input)[30000,60000] -> String_ secondSequence(int:i)[10000,30000] -> ( void_Test.Consumer.run()[20000,300000] || void_Test.Producer.run()[30000,300000] ) -> [END] Từ đặc tả biểu thức quy thời gian ta thấy phƣơng thức firstSequence() đƣợc thực với thời gian đáp ứng [30000, 60000] nano giây Tiếp phƣơng thức secondSequence() đƣợc thực thi với thời gian đáp ứng [10000, 30000] nano giây Cuối hai phƣơng thức Test.Consumer.run() Test.Producer.run() đƣợc thực thi song song thời điểm với ràng buộc thời gian lần lƣợt [20000, 300000] nano giây [30000, 300000] nano giây Tƣơng tự nhƣ đoạn chƣơng trình Hình 4.9 ƣớc lƣợng tổng thời gian thực thi thực tế chƣơng trình 𝜃𝑚𝑖𝑛 = 30000 + 10000 + 20000 + 2*500000 = 1060000 nano giây 𝜃𝑚𝑎𝑥 = 60000+ 30000+ 300000+ 2*500000 = 1390000 nano giây Do hai phƣơng thức đƣợc thi song song thời điểm nên tổng thời gian thực thi nhỏ cho phép chƣơng trình đƣợc lấy theo phƣơng thức có thời gian thực thi nhỏ bé tổng thời gian thực thi lớn cho phép chƣơng trình đƣợc lấy theo phƣơng thức có thời gian thực thi lớn Ở lấy khoảng thời gian cần thiết để chuyển hai phƣơng thức 𝜎 = 500000 nano giây với n = (do hai phƣơng thức Test.Consumer.run() Test.Producer.run() đƣợc thực thi song song nên số lần chuyển phƣơng thức 2) Khi tiến hành đan mã aspect sinh từ công cụ TVG với mã nguồn chƣơng trình tiến hành chạy ca kiểm thử đối số truyền vào trueTest = 10 Thời gian thực thi phƣơng thức đƣợc mơ tả Hình 4.13 Phƣơng thức firstSequence() đƣợc thực thi với thời gian 40040 nano giây thỏa mãn ràng buộc thời gian thực thi [30000, 60000] nano giây Tiếp theo phƣơng thức lại secondSequence() đƣợc thi với thời gian 16761 nano giây thỏa mãn với ràng buộc thời gian [10000, 30000] nano giây Cuối phƣơng thức Test.Consumer.run() đƣợc thực với thời gian 29177 nano giây phƣơng thức Test.Producer.run() đƣợc thực với thời gian 49973 nano giây thỏa mãn ràng buộc thời gian [20000, 300000] nano giây [30000, 300000] nano giây Tổng thời gian thực thi chƣơng trình 1106774 nano giây thỏa mãn ràng buộc [1060000, 1390000] nano giây 39 Ngƣợc lại ca kiểm thử sai đƣợc mơ tả Hình 4.14 thời gian thực thi phƣơng thức vƣợt ràng buộc thời gian cho phép Cụ thể phƣơng thức firstSequence() đƣợc thực thi với thời gian 4113328 nano giây không thỏa mãn ràng buộc thời gian [30000, 60000] nano giây Tiếp theo phƣơng thức secondSequence() đƣợc thi với thời gian 4965668 nano giây vi phạm ràng buộc thời gian [10000, 30000] nano giây Cuối phƣơng thức Test.Consumer.run() đƣợc thực với thời gian 1027401 nano giây vi phạm ràng buộc thời gian [20000, 300000] nano giây Test.Producer.run() đƣợc thực với thời gian 1029574 nano giây vi phạm ràng buộc thời gian [30000, 300000] nano giây Tổng thời gian thực thi chƣơng trình 11154543 nano giây vƣợt ràng buộc thời gian [1060000, 1390000] nano giây INF: Time execute: execution(String Test.ProgramDemo.firstSequence(int)): 40040 nanosec INF: Time execute: execution(String Test.ProgramDemo.secondSequence(int)): 16761 nanosec INF: Time execute: execution(void Test.Producer.run()): 29177 nanosec INF: Time execute: execution(void Test.Consumer.run()): 49973 nanosec INF: CurrentTotal Time System: 1106774 nanosec Hình 4.13 – Kết thực nghiệm ca kiểm thử chƣơng trình tƣơng tranh Đối với ca kiểm thử 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 thực nghiệm cho thấy phƣơng pháp phát đƣợc vi phạm ràng buộc thời gian chƣơng trình INF: Time execute: execution(String Test.ProgramDemo.firstSequence(int)): 4113328 nanosec WRONG: Test.ProgramDemo.firstSequence(int) INF: Time execute: execution(String Test.ProgramDemo.secondSequence(int)): 4965668 nanosec WRONG: Test.ProgramDemo.secondSequence(int) INF: Time execute: execution(void Test.Producer.run()): 1027401 nanosec WRONG: Test.Producer.run() INF: Time execute: execution(void Test.Consumer.run()): 1029574 nanosec WRONG: Test.Consumer.run() INF: CurrentTotal Time System: 11154543 nanosec Over Total Time Alow Hình 4.14 – Kết thực nghiệm ca kiểm thử sai chƣơng trình tƣơng tranh 40 Chƣơng Kết luận Ràng buộc thời gian thành phần đóng vai trị quan trọng hệ thống phần mềm Đặc biệt hệ thống thời gian thực, hệ thống an toàn-bảo mật việc vi phạm ràng buộc thời gian gây lỗi hệ thống nghiêm trọng Các kỹ thuật truyền thống nhƣ mô phỏng, kiểm thử thƣờng ƣớc lƣợng đƣợc thời gian thực thi thành phần hệ thống với mức độ tin cậy Để tăng cƣờng tin cậy ràng buộc thời gian hệ thống thời gian thực, luận văn nghiên cứu phƣơng pháp kiểm chứng tuân thủ cài đặt thành phần phần mềm so với đặc tả ràng buộc thời gian cụ thể phƣơng thức chƣơng trình Java Phƣơng pháp sử dụng biểu thức quy thời gian (Timed Regular Expression) để đặc tả ràng buộc thời gian Các mã aspect đƣợc tự động sinh từ đặc tả đan tự động với mã thành phần để kiểm chứng tuân thủ cài đặt thành phần so với đặc tả ràng buộc thời gian thời điểm thực thi Tác giả cài đặt phƣơng pháp thành công cụ kiểm chứng TVG (Timed Verify Generator) chạy thử nghiệm mã aspect sinh từ công cụ với ngơn ngữ lập trình Java IDE Eclipse với test khác Với việc sử dụng ngôn ngữ thông dụng Java cho thấy khả ứng dụng thực tiễn công công cụ TVG Kết thử nghiệm cho thấy ban đầu phƣơng pháp hồn tồn phát đƣợc vi phạm ràng buộc thời gian thành phần so với đặc tả Hạn chế lớn phƣơng pháp nhƣ phƣơng pháp kiểm chứng động khác phải thực thi chƣơng trình, vi phạm đƣợc phát bƣớc kiểm thử, mã aspect đƣợc đan vào khơng thay đổi hành vi chƣơng trình nhƣng tăng kích thƣớc chƣơng trình Do gia tăng thời gian thực thi thời gian gia tăng khơng đáng kể hồn tồn nằm giới hạn cho phép Trong tƣơng lai tác giả mở rộng cơng cụ TVG để kiểm chứng hệ thống mã nguồn có quy mơ lớn Áp dụng TVG cho nhiều ngơn ngữ lập trình khác Kết hợp phƣơng pháp với phƣơng pháp kiểm thử tĩnh khác nhƣ kiểm chứng mơ hình để tiến tới phát triển phƣơng pháp kiểm chứng tự động hồn tồn từ mức mơ hình đến cài đặt 41 Phụ lục Phụ lục A Công cụ sinh mã kiểm chứng TVG A.1 Giới thiệu TVG – Timed Verify Generator công cụ sinh mã kiểm chứng AspectJ từ biểu thức quy thời gian TRE Mã kiểm chứng sau đƣợc đan xen với chƣơng trình Java để kiểm chứng tuân thủ ràng buộc thời gian chƣơng trình so với đặc tả Hình A.1 thể giao diện cơng cụ TVG Hình A.1 – Giao diện cơng cụ sinh mã TVG A.2 Hƣớng dẫn sử dụng A.2.1 Các yêu cầu cài đặt Môi trƣờng thực thi Java JRE phiên 1.4 cao hơn, Download địa http://www.oracle.com/ Cơng cụ TVG Download địa https://www.fshare.vn/file/Y1YH9JPLM37H Để chạy công cụ TVG môi trƣờng 42 Windows nháy đúp vào phần mở rộng jar Trong Unix, sử dụng lệnh: java –jar TVG.jar TVG khởi động cách import trực tiếp mã nguồn vào IDE NetBeans với phiên từ 7.0.1 cao A.2.2 Các chức Phiên TVG bao gồm ba chức chính: - Write TRE: Đặc tả trực tiếp biểu thức quy thời gian Generate Aspect: Sinh mã aspect từ đặc tả biểu thức quy thời gian Save Aspect: Lƣu mã aspect dƣới dạng file mở rộng *.aj Các file đƣợc đan xen với chƣơng trình Java để kiểm chứng tuân thủ ràng buộc thời gian so với đặc tả TRE A.2.3 Hƣớng dẫn thực - Sinh mã aspect kiểm chứng Nhấn vào nút WriteTRE tiến hành đặc tả ràng buộc thời gian thành phần biểu thức quy thời gian (TRE) vào textbox bên trái nhƣ Hình A.2 Hình A.2 – Đặc tả ràng buộc thời gian thành phần TRE Nhấn vào nút Generate Aspect để sinh mã aspect vào textbox bên phải Sau sinh đƣợc mã aspect chức Save Aspect giúp ngƣời sử dụng lƣu lại file aspect dƣới dạng ngơn ngữ lập trình AOP *.aj - Đan xen mã aspect với chƣơng trình: 43 AspectJ cho phép đan xen mã aspect với chƣơng trình Java ba mức khác nhau: mức mã nguồn (Hình A.3), mã bytecode thời điểm nạp chƣơng trình chƣơng trình đƣợc thực Hình A.3 – Đan mã aspect với mã chƣơng trình Java viết Eclipse 44 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Trịnh Thanh Bình, Trƣơng Ninh Thuận, Nguyễn Việt Hà (2010) Kiểm chứng tuân thủ ràng buộc thời gian ứng dụng phần mềm Tạp chí Tin học Điều khiển học, Số : 173-184 Tiếng Anh [2] A Colyer and A Clement., "Aspect-oriented programming with AspectJ," IBM Syst J., 44(2), 2005, p 301–308 [3] Addison-Wesley (2005), in Aspect-Oriented Software Development, R Filman, T Elrad, S Clarke and a M Ak¸sit, Eds., Boston [4] Benveniste A (September 1998), "Safety critical embedded systems design: the sacres approach," in In Formal Techniques in Real-Time and Fault Tolerant systems, FTRTFT’98 school, Lyngby, Denmark [5] B Berard, M Bidoit, A Finkel, F Laroussinie, A Petit, L Petrucci and a P Schnoebelen (1999), Systems and software verification : model-checking techniques and tools, New York, NY: Springer-Verlag New York, Inc [6] B Long, P Strooper and a L Wildman (2007), "A method for verifying concurrent Java components based on an analysis of concurrency failures: Research articles," Concurr Comput : Pract Exper.,19, p 281–294 [7] C Baier and J.-P Katoen (2008), Principles of Model Checking(Representation and Mind Series), The MIT Press [8] C Yoonsik and A Perumandla (2005), "A Specifying and checking method call sequences in JML," in In Software Engineering Research and Practice, CSREA Press [9] C Yoonsik and A Perumandla (2007), "Specifying and checking method call sequences of Java programs," in Software Quality Control 45 [10] D Dymek and K Leszek (2008), "Estimation of system workload time characteristic using uml timing diagrams," in In Proceedings of the 2008 Third International Conference on Dependability of Computer Systems, Washington, DC, USA [11] E Asarin, Maler and P C a Oded, "Timed regular expressions," Journal of the ACM,, no 49, Journal of the ACM [12] E Bodden and K Havelund (2010), "Aspect-oriented race detection in Java," IEEE Trans Softw Eng., 36(4), p 509–527 [13] E Bodden (2004), A lightweight LTL runtime verification tool for Java, New York, NY: In Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications, OOPSLA ’04 [14] E Bodden (2005), J-LO - A tool for runtime-checking temporal assertions, Diploma thesis [15] E Clarke, O Grumberg and a D Long (1994), "Model checking and abstraction," ACM Trans Program Lang Syst., 16(5), pp 1512–1542 [16] E Hilsdale and J Hugunin (2004), "Advice weaving in AspectJ," in In Proceedings of the 3rd international conference on Aspect-oriented software development, New York, NY, USA [17] E Hajiyev, L Hendren, O d Moor, P Avgustinov, E B.- den, O Lhotak, N Ongkingco, D Sereni, G Sittampalam, J Tibble and a M Verbaere (2006), "Aspects for Trace Monitoring," vol volume 4262 of Lecture Notes in Computer Science, Springer, In Klaus Havelund, Manuel Nunez, Grigore Rosu, and Burkhart Wolff, editors, Formal Approaches to Testing Systems and Runtime Verification (FATES/RV), p 20–39 [18] e Saddek Bensalem and Doron Peled (2009), Runtime Verification : 9th International Workshop, Grenoble: Selected Papers Springer-Verlag, Berlin, Heidelberg [19] G Andrews (1991), Concurrent Programming : Principles and Practice, AddisonWesley 46 [20] G Hui and J Woo (2007), "Compositional verification of timing constraints for embedded real-time systems," in In Proceedings of the 6th Conference on WSEAS International Conference on Applied Computer Science, USA [21] G Holzmann (2003), Spin model checker, the : primer and reference manual, 1st ed., Addison-Wesley Professional [22] G Kiczales, E Hilsdale, J Hugunin, M Kersten, J Palm and a W G Griswold (2001), "An Overview of AspectJ," in In ECOOP ’01 : Proceedings of the 15th European Conference on Object-Oriented Programming, London, UK [23] G Kiczales, J Lamping, A Mendhekar, C Maeda, C Lopes, J m Loingtier and a J Irwin (1997), Aspect-oriented programming, SpringerVerlag: In ECOOP [24] I Sommerville (2007), Software Engineering, 9th ed., Addison-Wesley Pulishing Company, p 9780321493750 [25] J.-R Abrial (2006), "Formal methods in industry : achievements, problems, future," Swiss Federal Institute of Technology Zurich, In ICSE, p 761–768 [26] J.-R Abrial (2010), Modeling in Event-B : System and Software Engineering, New York, NY: Cambridge University Press [27] J.-R Abrial (1996), The B-book : assigning programs to meanings, New York, NY: Cambridge Uni- versity Press [28] L Yang (2008), "The Automated Translation of Integrated Formal Specifications into Concurrent Programs," PhD thesis, University of Southampton, Southampton [29] M Ben-Ari (2008), Principles of the Spin Model Checker, 1st ed [30] Nixon P and Shi L (1996), "Concurrent semantics for structured design methods," in In Proceedings of the First IFIP TC10 International Workshop on Software Engineering for Parallel and Distributed Systems, London, UK, UK [31] P Strooper and L Wildman (2007), "Testing Concurrent Java Components," in In Companion to the proceedings of the 29th International Conference on Software Engineering, Washing- ton, DC, USA 47 [32] S Berezin (2002), Model checking and theorem proving : a unified framework, Pittsburgh, PA: PhD thesis [33] Wegener J and Grochtmann M (1998), "Verifying timing constraints of real-time systems by meansof evolutionary testing," Real-Time Syst, p 275–298 [34] W Visser, K Havelund, G Brat and a S Park (2000), "Model checking programs," in In ASE ’00 : Proceedings of the 15th IEEE international conference on Automated software engineering, Washington, DC, USA [35] Y Jin (2007), "Formal verification of protocol properties of sequential Java programs," in In Proceedings of the 31st Annual International Computer Software and Applications, Washington ... để kiểm chứng tuân thủ ràng buộc thời gian thành phần chƣơng trình so với đặc tả 17 Chƣơng Ràng buộc thời gian thành phần chƣơng trình tƣơng tranh 3.1 Giới thiệu Ràng buộc thời gian thành phần. .. pháp chƣa kiểm chứng đƣợc ràng buộc thời gian thành phần Guo Lee [20] đề xuất phƣơng pháp kết hợp đặc tả kiểm chứng ràng buộc thời gian cho hệ thống thời gian thực Trong đó, ràng buộc thời gian với... đƣợc ràng buộc thời gian thành phần so với đặc tả 1.3 Nội dung nghiên cứu Trong luận văn này, tác giả tập trung nghiên cứu phƣơng pháp để kiểm chứng ràng buộc thời gian chƣơng trình tƣơng tranh

Ngày đăng: 16/03/2021, 11:23

w