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 471 0
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

Đ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

ĐẠ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 suốt 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 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 hoà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 nhiều thiếu sót Tôi mong nhận đƣợc nhiều ý kiến đánh giá quý, phê bình quý 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 hoàn toà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 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ả 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 toá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 hoàn toà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ể hoàn toà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 hoàn toà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 [...]... Chƣơng 3 Ràng buộc thời gian giữa các thành phần trong chƣơng trình tƣơng tranh 3.1 Giới thiệu Ràng buộc thời gian giữa các thành phần đóng một vai trò quan trọng trong các hệ thống phần mềm đặc biệt với các hệ thống thời gian thực và hệ thống nhúng Ở chƣơng này luận văn nghiên cứu một phƣơng pháp kiểm chứng sự tuân thủ ràng buộc thời gian giữa các thành phần tƣơng tranh so với đặc tả sử dụng lập trình. .. cùng một thời điểm khi và chỉ khi t11 = t21 19 3.3 Phƣơng pháp đặc tả và kiểm chứng ràng buộc thời gian 3.3.1 Mô tả phƣơng pháp Luận văn nghiên cứu một phƣơng pháp kiểm chứng ràng buộc thời gian thực thi các thành phần cụ thể là các phƣơng thức trong chƣơng trình Java tuần tự và tƣơng tranh i Sử dụng các biểu thức chính quy thời gian (Timing Regular Expression – TRE) để đặc tả các ràng buộc thời gian. .. đầu vào với thời gian thực hiện nhanh nhất và chậm nhất Tuy nhiên phƣơng pháp này chƣa kiểm chứng đƣợc ràng buộc thời gian giữa các thành phần Guo và Lee [20] đề xuất phƣơng pháp kết hợp giữa đặc tả và kiểm chứng ràng buộc thời gian cho các hệ thống thời gian thực Trong đó, ràng buộc thời gian cùng với yêu cầu hệ thống đƣợc đặc tả bằng môđun TER nets [30] Giống nhƣ [4] phƣơng pháp này chỉ kiểm chứng. .. mỗi thành phần trong chƣơng trình để kiểm chứng sự tuân thủ với các ràng buộc thời gian đã đặc tả Khi chƣơng trình đƣợc chạy thì các mã aspect có thể phát hiện đƣợc chính xác các thành phần vi phạm với các ràng buộc thời gian Trong khi đó các hành vi của chƣơng trình sẽ không bị thay đổi Phƣơng pháp nghiên cứu của luận văn đƣợc trình bày tổng quát trong Hình 3.3 3.3.2 Đặc tả ràng buộc thời gian Trong. .. [1] Trong đó, ràng buộc thời gian giữa các thành phần đƣợc đặc tả bằng biểu thức chính quy thời gian Từ các đặc tả này mã aspect sẽ đƣợc tự động sinh ra đan với mã của các thành phần để từ đó kiểm chứng sự tuân thủ ràng buộc thời gian so với đặc tả Phƣơng pháp này đã đƣợc thực nghiệm với nhiều chƣơng trình khác nhau Kết quả thực nghiệm cho thấy phƣơng pháp đã phát hiện các vi phạm về ràng buộc thời gian. .. kiểm chứng ràng buộc thời gian chƣơng trình tƣơng tranh ở pha cài đặt mã nguồn chƣơng trình Sử dụng phƣơng pháp lập trình hƣớng khía cạnh (AOP) để 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 (Hình 1.1) cụ thể là thời gian thực thi của các phƣơng thức trong chƣơng trình Các vi phạm sẽ đƣợc phát hiện tại thời điểm thực thi chƣơng trình Trong hƣớng tiếp cận này, ràng. .. tổng quan về các phƣơng pháp kiểm chứng hình thức và kiểm chứng tại thời điểm thực thi Mục 2.2 và 2.3 trình bày một số vấn đề trong chƣơng trình tƣơng tranh và sự tƣơng tranh trong chƣơng trình Java Mục 2.4 giới thiệu các kiến thức cơ bản về phƣơng pháp lập trình hƣớng khía cạnh AOP đƣợc sử dụng để kiểm chứng sự tuân thủ ràng buộc thời gian của các thành phần trong chƣơng trình so với đặc tả của nó... đó Trong chƣơng này tác giả đã trình bày nội dung chính của luận văn là nghiên cứu một phƣơng pháp kiểm chứng sự tuân thủ giữa cài đặt của các thành phần phần mềm so với đặc tả các ràng buộc thời gian Phƣơng pháp này sử dụng biểu thức chính quy thời gian (Timed Regular Expression) để đặc tả các ràng buộc thời gian Mã aspect đƣợc tự động sinh ra từ các đặc tả nãy sẽ tự động đan với mã của các thành phần. .. mật việc vi phạm ràng buộc thời gian sẽ gây ra các lỗi hệ thống rất nghiêm trọng Do đó nhu cầu nghiên 2 cứu phƣơng pháp kiểm chứng ràng buộc về thời gian trong chƣơng trình tƣơng tranh trở nên cần thiết 1.2 Một số nghiên cứu liên quan Đã có một vài phƣơng pháp, công cụ đƣợc đề xuất để kiểm chứng ràng buộc thời gian trong các hệ thống phần mềm SACRES [4] là một môi trƣờng kiểm chứng cho các hệ thống nhúng,... tả MCS Đặc tả MCS sau đó đƣợc biên dịch sang mã nguồn và đan xen với mã nguồn chƣơng trình để kiểm chứng động sự tuân thủ của cài đặt so với đặc tả MCS Các mệnh đề tiền và hậu điều kiện của các phƣơng thức trong MCS cũng đƣợc đặc tả và kiểm chứng Tuy nhiên, phƣơng pháp này chƣa kiểm chứng đƣợc ràng buộc thời gian giữa các thành phần Yoonsik và Perumandla [8, 9] mở rộng ngôn ngữ đặc tả, và trình biên ... để 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: 06/04/2016, 16:44

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan