Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 74 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
74
Dung lượng
2,36 MB
Nội dung
1 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ HẠNH NGHIÊN CỨU ỨNG DỤNG “NMODEL” TRONG VIỆC PHÁT TRIỂN HỆ THỐNG NHÚNG THỜI GIAN THỰC LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội - Năm 2014 z ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ HẠNH NGHIÊN CỨU ỨNG DỤNG “NMODEL” TRONG VIỆC PHÁT TRIỂN HỆ THỐNG NHÚNG THỜI GIAN THỰC 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 Đặng Văn Đức Hà Nội - Năm 2014 z LỜI CAM ĐOAN Tôi xin cam đoan nội dung kết luận văn tốt nghiệp tự nghiên cứu dƣới hƣớng dẫn PGS.TS Đặng Văn Đức Trong toàn nội dung luận văn, điều đƣợc trình bày cá nhân đƣợc tổng hợp từ nhiều nguồn tài liệu khác Tất tài liệu tham khảo đƣợc trích dẫn rõ ràng phần cuối luận văn Tơi xin hồn tồn chịu trách nhiệm chịu hình thức kỷ luật theo quy định cho lời cam đoan Hà Nội, ngày 10 tháng 06 năm 2014 Học viên Nguyễn Thị Hạnh z LỜI CẢM ƠN Trong trình học tập nghiên cứu khoa Công nghệ thông tin trƣờng Đại học Công nghệ - Đại học Quốc gia Hà Nội, đến tơi hồn thành chƣơng trình học luận văn tốt nghiệp Tôi quên gửi lời cảm ơn tới thầy cơ, gia đình bạn bè Đầu tiên, xin đƣợc bày tỏ lòng biết ơn sâu sắc tới giúp đỡ giảng viên hƣớng dẫn PGS.TS Đặng Văn Đức Trong suốt thời gian làm luận văn, thầy giúp đỡ bảo nhiệt tình để tơi hồn thành luận văn đạt đƣợc kết tốt Tôi xin gửi lời cám ơn đến tập thể thầy cô giáo Khoa CNTT – ĐH Công Nghệ - ĐH Quốc Gia Hà Nội bạn học viên cao học khóa K18 tạo điều kiện cho tơi tiếp thu kiến thức, làm việc theo nhóm có môi trƣờng học tập tốt Cuối cùng, xin gửi lời cảm ơn tới gia đình tơi – ngƣời thân động viên vật chất lẫn tinh thần suốt thời gian học tập Tuy rằng, cố gắng trình làm luận văn nhƣng khơng thể tránh khỏi thiếu sót, tơi mong nhận đƣợc góp ý thầy cô bạn Hà Nội, ngày 10 tháng 06 năm 2014 Học viên Nguyễn Thị Hạnh z MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC .5 DANH MỤC CÁC HÌNH VẼ CHƢƠNG GIỚI THIỆU 10 1.1 Đặt vấn đề 10 1.2 Nội dung nghiên cứu 10 1.3 Tầm quan trọng kiểm thử dựa mơ hình 11 1.4 Cấu trúc luận văn 11 CHƢƠNG TỔNG QUAN VỀ HỆ THỐNG NHÚNG 12 2.1 Các khái niệm hệ thống nhúng .12 2.1.1 Hệ thống nhúng .12 2.1.2 Hệ thời gian thực 13 2.2 Cấu trúc phần cứng hệ thống nhúng 14 2.2.1 Các thành phần .14 2.2.1.1 Đơn vị xử lý trung tâm (CPU) 14 2.2.1.2 Bộ nhớ 14 2.2.1.3 Thiết bị ngoại vi 15 2.2.1.4 Bus địa chỉ, bus liệu bus điều khiển 17 2.2.2 Một số phần cứng nhúng thông dụng 18 2.2.2.1 Vi điều khiển nhúng 18 2.2.2.2 Chip DSP 19 2.3 Kiến trúc phần mềm nhúng 19 2.3.1 Kiến trúc Round-Robin (RR) 19 2.3.2 Kiến trúc Round-Robin với ngắt (RRI) 20 2.3.3 Kiến trúc Lập lịch dòng chức (FQS) 21 2.3.4 Kiến trúc Hệ điều hành thời gian thực (RTOS) .21 2.4 Hệ điều hành thời gian thực 22 2.4.1 Khái niệm hệ điều hành thời gian thực 22 2.4.2 Tác vụ (Task) trạng thái tác vụ 23 2.4.3 Queue trạng thái queue 24 z 2.4.4 Các phƣơng pháp lập lịch .26 CHƢƠNG NGHIÊN CỨU VỀ KIỂM THỬ VÀ PHÂN TÍCH DỰA TRÊN MƠ HÌNH .28 3.1 Tổng quan .28 3.1.1 Khái niệm NModel 28 3.1.2 Khái niệm chƣơng trình mơ hình .28 3.1.3 Khái niệm phân tích dựa mơ hình .29 3.1.4 Khái niệm kiểm thử dựa mơ hình .29 3.1.5 Chƣơng trình mơ hình quy trình phần mềm 30 3.2 Hệ thống với mơ hình hữu hạn .30 3.2.1 Chƣơng trình mơ hình 30 3.2.1.1 Hành động (Action) 30 3.2.1.2 Hành vi (Behavior) 31 3.2.1.3 Cấu trúc chƣơng trình mơ hình hợp đồng C# 31 3.2.2 Thăm dị phân tích chƣơng trình mơ hình hữu hạn .32 3.2.2.1 Máy trạng thái hữu hạn (FSM-Finite State Machines) 32 3.2.2.2 Thăm dò .33 3.2.2.3 Phân tích 36 3.2.3 Cấu trúc chƣơng trình mơ hình với thành phần (Composition) .36 3.2.3.1 Điều khiển kịch (Scenario control) .37 3.2.3.2 Thành phần (Composition) 37 3.2.4 Kiểm thử hệ thống đóng 43 3.2.4.1 Tạo kiểm thử (test suite) cho phƣơng pháp kiểm thử ngoại tuyến (Offline) 43 3.2.4.2 Dấu vết giới hạn 43 3.2.4.3 Bản khai thác kiểm thử (Test harness) việc thực thi kiểm thử (Test execution) 44 3.2.4.4 Hạn chế kiểm thử ngoại tuyến 46 3.2.5 Kiểm thử hệ thống với trạng thái phức tạp 46 3.2.5.1 Kiểm thử “on-the-fly” 46 3.2.5.2 Các chiến lƣợc 50 CHƢƠNG XÂY DỰNG DEMO VÀ KIỂM THỬ HỆ THỐNG VỚI NMODEL 53 4.1 Giới thiệu NModel 53 z 4.1.1 Cài đặt NModel 53 4.1.2 Cách sử dụng công cụ mpv, otg, ct 53 4.1.2.1 Công cụ mpv 53 41.2.2 Công cụ otg 54 4.1.2.3 Công cụ ct 54 4.2 Xây dựng thực nghiệm với demo hệ thống client/server .55 4.2.1 Mơ tả tốn 55 4.2.2 Kiểm thử demo NModel 57 4.2.2.1 Kiểm thử ngoại tuyến (Offline) 57 4.2.2.2 Kiểm thử on-the-fly 65 CHƢƠNG KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 67 5.1 Kết luận 68 5.2 Hƣớng phát triển .68 TÀI LIỆU THAM KHẢO .69 PHỤ LỤC 70 z DANH MỤC CÁC HÌNH VẼ Hình 2.1: Mẫu xe thi Micom Car Rally (chip Renesas H8) 12 Hình 2.2: Một số hệ thống nhúng thông dụng nhƣ robot, máy in điện thoại 13 Hình 2.3:Cấu trúc CPU 14 Hình 2.4: Kiến trúc nhớ Von Neumann Havard 15 Hình 2.5: Cấu trúc ghép nối máy tính thiết bị ngoại vi 16 Hình 2.6: Chu kỳ hoạt động bus dồn kênh 18 Hình 2.7: Kiến trúc nguyên lý VĐK với cấu trúc Havard 19 Hình 2.8: Minh họa kiến trúc RR giả mã đồ thị 20 Hình 2.9: Minh họa kiến trúc RRI giả mã 21 Hình 2.10: So sánh kiến trúc RTOS OS chuẩn 22 Hình 2.11: Cấu trúc hệ điều hành thời gian thực 23 Hình 2.12: Cấu trúc Task .24 Hình 2.13: Các trạng thái task .24 Hình 2.14: Hàng đợi Queue 25 Hình 2.15: Trạng thái Queue 25 Hình 2.16: Phân loại phƣơng pháp lập lịch 26 Hình 2.17: Giản đồ thời gian thực lịch tác vụ 27 Hình 3.1: Sơ đồ hoạt động MBT 29 Hình 3.2: Mơ hình chữ V phát triển phần mềm dựa mơ hình 30 Hình 3.3: Một thuật tốn thăm dị đầy đủ 35 Hình 3.4: Chƣơng trình mơ hình M1 .38 Hình 3.5: Chƣơng trình mơ hình M2 .39 Hình 3.6: MP M1xM2 - sản phẩm M1 M2 .39 Hình 3.7: Phần mở rộng vịng lặp M1 39 Hình 3.8: Phần mở rộng vịng lặp M2 40 Hình 3.9: MP M1xM2, trạng thái đôi hành động phù hợp .41 Hình 3.10: Các trạng thái , hành động M1xM2 41 Hình 3.11: M1 dƣới dạng FSM text file 42 Hình 3.12: Bag implementation 47 Hình 3.13: Bag Model 48 Hình 3.14: Một tính mơ hình kịch 49 Hình 3.15: Bag stepper 50 Hình 3.16: Giao diện IStrategy 51 Hình 4.1 Thiết bị điều khiển từ xa – Hệ thống Client/Server 55 Hình 4.2: Giao thức client/server 56 z Hình 4.3: FSM MP hợp đồng .58 Hình 4.4: FSM MP kịch 59 Hình 4.5: FSM MP kịch kết hợp với MP hợp đồng 59 Hình 4.6: FSM test suite đƣợc tạo với MP hợp đồng .62 Hình 4.7: FSM test suite đƣợc tạo MP hợp đồng biên soạn với MP kịch 63 Hình 4.8: Kết kiểm thử ngoại tuyến với trƣờng hợp sử dụng MP hợp đồng 64 Hình 4.9: Kết kiểm thử ngoại tuyến với trƣờng hợp sử dụng điều khiển kịch (MP hợp đồng đƣợc biên soạn với MP kịch bản) 64 Hình 4.10: Kết kiểm thử ngẫu nhiên sử dụng MP hợp đồng 66 Hình 4.11: Kết kiểm thử ngẫu nhiên sử dụng điều khiển kịch (1) 66 Hình 4.12: Kết kiểm thử ngẫu nhiên sử dụng điều khiển kịch (2) 67 z 10 CHƢƠNG GIỚI THIỆU 1.1 Đặt vấn đề Ngày nay, hệ thống nhúng phát triển với ứng dụng rộng rãi nhiều lĩnh vực công nghiệp đời sống Các hệ thống nhúng có kiến trúc phần cứng nhƣ phần mềm đa dạng phong phú Nhƣ biết, phát triển phần mềm hoạt động kiểm thử có vai trị quan trọng, mang tính sống cịn sản phẩm với phần mềm nhúng ngoại lệ Sự phát triển hệ thống nhúng kéo theo yêu cầu phát triển hoạt động kiểm thử phần mềm nhúng Thông thƣờng, cách phổ biến để kiểm thử phần mềm cho hệ thống nhúng nói chung chạy phần mềm chƣơng trình giả lập phần cứng, chƣơng trình giả lập vi điều khiển ảo chƣơng trình mơ hình dung hệ thống mạch bao gồm vi điều khiển thiết bị khác Tuy nhiên nay, hệ thống nhúng Việt Nam phát triển khiêm tốn so với giới, lĩnh vực kiểm thử nhúng lại khiêm tốn Có báo, tài liệu nói hoạt động kiểm thử nhúng nhƣ khơng có nhiều cơng cụ hỗ trợ cho việc kiểm thử Do đó, việc nghiên cứu tìm hiểu phƣơng pháp, kỹ thuật kiểm thử nhƣ công cụ cho phần mềm nhúng vấn đề cần thiết nay, góp phần thúc đẩy phát triển lĩnh vực hệ thống nhúng, lĩnh vực giàu tiềm nhƣng bƣớc đầu phát triển việt nam Trong luận văn này, tơi chọn nghiên cứu kiểm thử dựa mơ hình với NModel việc phát triển phần mềm nhúng, cụ thể kiểm thử cho toán hệ thống Client/Server – thiết bị điều khiển từ xa có sử dụng cảm biến nhiệt độ 1.2 Nội dung nghiên cứu Mục tiêu luận văn: Mục tiêu đặt nghiên cứu phƣơng pháp kiểm thử dựa mô hình để hỗ trợ cho việc phát triển hệ thống nhúng Nhiệm vụ luận văn: Trong luận văn này, nhiệm vụ nghiên cứu ứng dụng cụ thể NModel sau áp dụng kiểm thử tốn thiết bị điều khiển từ xa Client/Server Luận văn tập trung nghiên cứu khảo sát tổng quan lý thuyết hệ thống nhúng; lý thuyết phân tích kiểm thử dựa mơ hình kỹ thuật kiểm thử phần mềm; luận văn nghiên cứu loại chƣơng trình mơ hình NModel để kiểm thử toán thiết bị điều khiển từ xa Client/Server Từ hiểu biết phân tích kiểm thử phần mềm, luận văn áp dụng quy trình phƣơng pháp kiểm thử ngoại tuyến kiểm thử trực tuyến (on-the-fly) để kiểm thử toán Hệ thống Client/Server – thiết bị điều khiển từ xa toán hệ thống nhúng đơn giản nhƣng đầy đủ, khơng sử dụng hệ điều hành nhúng Các chƣơng trình đƣợc viết ngôn ngữ C# kiểm thử đƣợc chạy mô công cụ NModel z 60 Bƣớc thứ ba, tạo kiểm thử (test suite) công cụ otg: Gõ lệnh >otg @otg_contract.txt để tạo kiểm thử cho trƣờng hợp sử dụng MP hợp đồng Tên tệp tin test suite ContractTest.txt đƣợc lƣu trữ tự động thƣ mục MP Bộ ca kiểm thử gồm có ca kiểm thử có nội dung nhƣ sau: TestSuite( TestCase( ServerSocket(), ServerBind(), ClientSocket(), ServerListen(), ClientConnect(), ServerAccept(), ServerSend(double("99,9")), ServerCloseConnection(), ServerClose(), ClientReceive_Start(), ClientReceive_Finish(double("99,9")), ClientClose() ), TestCase( ClientSocket(), ServerSocket(), ServerBind(), ServerListen(), ClientConnect(), ServerAccept(), ClientSend(), ServerReceive(), ServerSend(double("99,9")), ClientReceive_Start(), ClientReceive_Finish(double("99,9")), ServerCloseConnection(), ServerClose(), ClientClose() ), TestCase( ClientSocket(), ServerSocket(), ServerBind(), ServerListen(), ClientConnect(), ServerAccept(), ServerSend(double("100")), ServerCloseConnection(), ClientReceive_Start(), ClientReceive_Finish(double("100")), ClientClose(), ServerClose() ), TestCase( z 61 ServerSocket(), ServerBind(), ServerListen(), ClientSocket(), ClientConnect(), ServerAccept(), ClientClose(), ServerCloseConnection(), ServerClose() ), TestCase( ServerSocket(), ClientSocket(), ServerBind(), ServerListen(), ClientConnect(), ServerAccept(), ServerSend(double("100")), ClientReceive_Start(), ClientReceive_Finish(double("100")), ServerSend(double("100")), ServerCloseConnection(), ServerClose(), ClientReceive_Start(), ClientReceive_Finish(double("100")), ClientClose() ), TestCase( ClientSocket(), ServerSocket(), ServerBind(), ServerListen(), ClientConnect(), ServerAccept(), ServerSend(double("99,9")), ServerCloseConnection(), ClientReceive_Start(), ClientReceive_Finish(double("99,9")), ClientClose(), ServerClose() ) ) Sau tạo ca kiểm thử dùng lệnh >mpv @mpv_contract_test.txt để xem kết ca kiểm thử dƣới dạng FSM nhƣ hình 4.6 Gõ lệnh >otg @otg_scenario.txt để tạo ca kiểm thử đƣợc sinh từ MP hợp đồng đƣợc biên soạn với MP kịch (tên kiểm thử ScenarioTest.txt) Bộ kiểm thử gồm có ca kiểm thử có nội dung nhƣ sau: TestSuite( TestCase( ServerSocket(), z 62 ServerBind(), ServerListen(), ClientSocket(), ClientConnect(), ServerAccept(), ServerSend(double("100")), ClientReceive_Start(), ClientReceive_Finish(double("100")), ServerSend(double("99,9")), ClientReceive_Start(), ClientReceive_Finish(double("99,9")), ClientSend(), ServerReceive(), ClientClose(), ServerCloseConnection(), ServerClose() ) ) Sau sử dụng lệnh >mpv @mpv_scenario_test.txt để xem kết kiểm thử dƣới dạng FSM nhƣ hình 4.7 Hình 4.6: FSM kiểm thử đƣợc tạo với MP hợp đồng z 63 Hình 4.7: FSM kiểm thử đƣợc tạo MP hợp đồng biên soạn với MP kịch Bƣớc cuối dùng công cụ ct để kiểm thử: Để chạy đƣợc kiểm thử, phải viết khai thác kiểm thử (stepper) để kết nối implementation tới ct (stepper đƣợc trình bày phần phụ lục) Gõ lệnh >build để xây dựng thƣ viện chƣơng trình Gõ lệnh >ct @ct_contract.txt để thực kiểm thử ngoại tuyến từ MP hợp đồng (không sử dụng điều khiển kịch bản) Kết kiểm thử đƣợc thể hình 4.8 Kiểm thử báo thành công không phát lỗi hay khuyết tật z 64 Gõ lệnh >ct @ct_scenario.txt để thực kiểm thử ngoại tuyến đƣợc tạo từ MP hợp đồng đƣợc biên soạn với MP kịch Kết kiểm thử báo lỗi đƣợc thể nhƣ hình 4.9 Hình 4.8: Kết kiểm thử ngoại tuyến với trƣờng hợp sử dụng MP hợp đồng Hình 4.9: Kết kiểm thử ngoại tuyến với trƣờng hợp sử dụng điều khiển kịch (MP hợp đồng đƣợc biên soạn với MP kịch bản) z 65 Nhƣ kiểm thử ngoại tuyến chƣơng trình client/server phát lỗi (hình 4.9) kiểm thử có sử dụng điều khiển kịch Thơng điệp kiểm thử lỗi giá trị trả thực tế hành động cuối 99, không giống nhƣ giá trị trả mong đợi 99.9 đƣợc tính MP đƣợc lƣu trữ ca kiểm thử Phân tích lỗi: Sau vài điều tra phát khuyết tật đoạn mã khơng xác (khơng đúng) gây thất bại Trong mã lệnh (code) lớp Client đƣợc xây dựng có đệm nhận client đƣợc gán với bytes long Trong đó, tơi lại dự định 40 Đây lỗi đánh máy mà không bị bắt (caught) trình biên dịch, kiểm tra kiểm thử đơn vị Khi server gửi nhiều ký tự, ví dụ nhƣ 100.0 client đọc đƣợc ký tự 100 Và sau ký tự lại đệm đƣợc nhận vào lần Client gọi phƣơng thức Receive Bằng cách này, mẫu nhiệt độ đơn giản gây cho Client trở nên khơng đồng với Server, kết việc đọc không xảy với nhiều mẫu nhiệt độ Từ kết kiểm thử tơi so sánh kết đánh giá kiểm thử ngoại tuyến hai trƣờng hợp kiểm thử ngoại tuyến không dùng điều khiển kịch (tức sử dụng MP hợp đồng để sinh test case tự động) kiểm thử ngoại tuyến có sử dụng điều khiển kịch (kết hợp MP hợp đồng MP kịch bản) nhƣ sau: trƣờng hợp không dùng điều khiển kịch có test suite với nhiều test case nên việc kiểm thử không đƣợc kỹ lƣỡng triệt để, phát lỗi hơn, cụ thể toán kiểm thử thành công không phát đƣợc lỗi hay khuyết tật Cịn với trƣờng hợp có sử dụng điều khiển kịch test suite có số lƣợng test case tối ƣu (ở cụ thể test case) việc kiểm thử đƣợc kỹ lƣỡng triệt để hơn, phát lỗi khuyết tật tốt 4.2.2.2 Kiểm thử on-the-fly Kiểm thử on-the-fly không cần phải tạo kiểm thử trƣớc mà cần implementation MP stepper Kiểm thử on-the-fly kiểm thử ngẫu nhiên Bƣớc 1: Tạo file ct_contract_random.txt với nội dung sau: /r:Stepper.dll /iut:ClientServerImpl.Stepper.Create /r: \Model\ClientServer.dll /mp:ClientServer /runs:1 Bƣớc 2: Trên dòng lệnh cmd gõ lệnh >ct @ct_contract_random.txt để thực kiểm thử ngẫu nhiên trƣờng hợp sử dụng MP hợp đồng Kết kiểm thử thơng báo gặp thất bại nhƣ hình 4.10 z 66 Hình 4.10: Kết kiểm thử ngẫu nhiên sử dụng MP hợp đồng Kiểm thử bị gián đoạn dẫn đến trạng thái chết (mặc dù chọn ngẫu nhiên đƣờng chạy nào) Để kiểm thử đạt kết tốt, tệp tin ct đƣợc tạo có sử dụng điều khiển kịch ct_scenario_random.txt với nội dung sau: /r:Stepper.dll /iut:ClientServerImpl.Stepper.Create /r: \Model\ClientServer.dll /mp:ClientServer /fsm: \Model\Scenario.txt /runs:1 Tiếp theo, chƣơng trình cmd gõ lệnh >ct @ct_scenario_random.txt để thực kiểm thử ngẫu nhiên với trƣờng hợp sử dụng điều khiển kịch Kết kiểm thử đƣợc nhƣ hình 4.11 Hình 4.11: Kết kiểm thử ngẫu nhiên sử dụng điều khiển kịch (1) z 67 Kiểm thử thành công server khơng gửi 100 thơng điệp cuối Sau đó, vài kiểm thử ngẫu nhiên chạy, ct thực đƣờng chạy thất bại, làm lộ khuyết tật nhƣ kết đƣờng chạy đƣợc hiển thị hình 4.12 Hình 4.12: Kết kiểm thử ngẫu nhiên sử dụng điều khiển kịch (2) Tƣơng tự nhƣ phƣơng pháp kiểm thử ngoại tuyến, với trƣờng hợp kiểm thử có sử dụng điều khiển kịch phƣơng pháp trực tuyến (on-the-fly) đạt kết kiểm thử tốt so với trƣờng hợp không sử dụng điều khiển kịch z 68 CHƢƠNG KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 5.1 Kết luận Sau thời gian nghiên cứu thực luận văn “Nghiên cứu ứng dụng “NModel” việc phát triển hệ thống nhúng thời gian thực”, luận văn tơi đạt đƣợc kết nhƣ hƣớng phát triển luận văn thời gian tới nhƣ sau: Các kết đạt đƣợc đóng góp luận văn - Tìm hiểu nghiên cứu tài liệu lý thuyết hệ thống nhúng, lý thuyết phân tích kiểm thử dựa mơ hình: khái niệm chƣơng trình mơ hình, khái niệm phân tích dựa mơ hình, khái niệm kiểm thử dựa mơ hình, khái niệm máy trạng thái hữu hạn - Cài đặt thành công NModel NET framework 3.5 - Hiểu đƣợc q trình phân tích kiểm thử: Viết chƣơng trình mơ hình, thực thăm dị phân tích MP hữu hạn, sinh kiểm thử công cụ otg, tiến hành kiểm thử ngoại tuyến công cụ ct - Xây dựng đƣợc chƣơng trình mơ hình làm đầu vào cho cơng cụ từ toán thiết bị điều khiển từ xa – hệ thống Client/Server - Xây dựng tệp tin có định dạng txt (trong phần phụ lục) để điều khiển công cụ việc thực phân tích kiểm thử với NModel - Áp dụng q trình phân tích kiểm thử ngoại tuyến để kiểm thử thành công demo client/server với NModel 5.2 Hƣớng phát triển Trong luận văn này, tơi tìm hiểu thực đƣợc phân tích kiểm thử dựa mơ hình hệ thống đóng có trạng thái đơn giản Demo với chƣơng trình nhỏ nhƣng đầy đủ Tuy nhiên, gặp khó khăn mặt thời gian nên luận văn cịn số hạn chế tốn chƣa có điều kiện để cài đặt với hệ thống thực, tốn có khả chạy hệ thống thực nhƣng chƣa đáp ứng đƣợc mặt thời gian thực Do đó, tƣơng lai, tơi có hƣớng phát triển là: tơi tiếp tục tìm hiều nghiên cứu kiểm thử dựa mơ hình với NModel hệ thống phản ứng có trạng thái phức tạp, đáp ứng đƣợc mặt thời gian thực z 69 TÀI LIỆU THAM KHẢO Tiếng Việt TS Lƣu Hồng Việt, “Tài liệu tóm tắt giảng Hệ thống điều khiển nhúng”, Đại học Bách Khoa Hà Nội Tiếng Anh Colin Campbell, Margus Veanes, and Jonathan Jacky (2007, 2008), “NModel Reference” J A Cook J S Freudenberg (2008), “Embedded Software Architecture”, EECS 461 Jonathan Jacky, Margus Veanes, Colin Campbell, Wolfram Schulte Cambridge University Press (2008, available December 2007), “Model-based Software Testing and Analysis with C#”, Cambridge University Juhan Ernits, Margus Veanes, and Johannes Helander (June 2008), “Model-Based Testing of Robots with NModel” Juhan Ernits, Rivo Roo, Jonathan Jacky, Margus Veanes (2009), “Model-Based Testing of Web Applications Using NModel” M Veanes, C Campbell, W Grieskamp, L Nachmanson, W Schulte, and N Tillmann (2005), Model-based testing of object-oriented reactive systems with Spec Explorer, Tech Rep MSR-TR-2005-59, Microsoft Research Preliminary version of a book chapter in the forthcoming text book Formal Methods and Testing M Broy, B Jonsson, J.-P Katoen, M Leucker, and A Pretschner (The volume is the outcome of a research seminar that was held in Schloss Dagstuhl in January 2004), editors, Model-Based Testing of Reactive Systems Website http://nmodel.codeplex.com/ 10 http://blogs.msdn.com/b/specexplorer/archive/2009/10/27/what-is-modelbased-testing.aspx 11 http://nmodelrs.berlios.de/ 12 http://www.kiemthuphanmem.com/blogs/3/24/model-based-testing-l-g-mbt) 13 http://voer.edu.vn/c/he-dieu-hanh-cho-cac-he-thong-nhung-hdh-thoi-gianthuc/9f009757/07006533#.UzP9xc51mKE 14 http://www.testingvn.com/ z 70 PHỤ LỤC HỆ THỐNG CLIENT/SERVER Chƣơng trình mơ hình contract client/server có tên ClientServer: using NModel; using NModel.Attributes; using NModel.Execution; namespace ClientServer { public enum Socket { None, Created, Bound, Listening, Connecting, Connected, Disconnected, Closed } public enum Phase { Send, ServerReceive, ClientReceive } public static class ClientServer { const double EmptyBuffer = double.MaxValue; const double Temp2 = 99.9; // Temperature, digits const double Temp3 = 100.0; // Temperature, digits // Biến trạng thái điều khiển public static Socket serverSocket = Socket.None; public static Socket clientSocket = Socket.None; public static Phase phase = Phase.Send; // Trạng thái liệu public static double clientBuffer = EmptyBuffer; // Điều kiện trạng thái chấp nhận cho việc kiểm thử [AcceptingStateCondition] static bool BothClosed() { return (serverSocket == Socket.Closed && clientSocket == Socket.Closed); } // Các điều kiện hành động cho phép Server public static bool ServerSocketEnabled() { return (serverSocket == Socket.None); } [Action] public static void ServerSocket() { serverSocket = Socket.Created; } public static bool ServerBindEnabled() { return (serverSocket == Socket.Created); } [Action] public static void ServerBind() { serverSocket = Socket.Bound; } public static bool ServerListenEnabled() { return (serverSocket == Socket.Bound); } [Action] public static void ServerListen() { serverSocket = Socket.Listening; } public static bool ServerAcceptEnabled() { return (serverSocket == Socket.Listening && clientSocket == Socket.Connecting); z 71 } [Action] public static void ServerAccept() { serverSocket = Socket.Connected; clientSocket = Socket.Connected; } public static bool ServerReceiveEnabled() { return (serverSocket == Socket.Connected && phase == Phase.ServerReceive); } // Các hành động Send MP không cần tham số [Action] public static void ServerReceive() { phase = Phase.Send; } public static bool ServerSendEnabled() { return (serverSocket == Socket.Connected && phase == Phase.Send && clientSocket == Socket.Connected); } // Dùng tham số đây, Server gửi nhiệt độ khác [Action] public static void ServerSend([Domain("Temperatures")] double datum) { clientBuffer = datum; phase = Phase.ClientReceive; } // Tên miền cho tham số ServerSend t static Set Temperatures() { return new Set(Temp2, Temp3); } public static bool ServerCloseConnectionEnabled() { return (serverSocket == Socket.Connected); } [Action] public static void ServerCloseConnection() { serverSocket = Socket.Disconnected; } // Ngăn chặn Client bị treo public static bool ServerCloseEnabled() { return (serverSocket != Socket.None // && serverSocket != Socket.Listening && serverSocket != Socket.Connected && serverSocket != Socket.Closed); } [Action] public static void ServerClose() { serverSocket = Socket.Closed; } // Các điều kiện hành động phép Client public static bool ClientSocketEnabled() { return (clientSocket == Socket.None); } [Action] public static void ClientSocket() { z 72 clientSocket = Socket.Created; } public static bool ClientConnectEnabled() { return (clientSocket == Socket.Created && serverSocket == Socket.Listening); } [Action] public static void ClientConnect() { clientSocket = Socket.Connecting; } public static bool ClientSendEnabled() { return (clientSocket == Socket.Connected && phase == Phase.Send); } // Hành động Send client ko có tham số [Action] public static void ClientSend() { phase = Phase.ServerReceive; } public static bool ClientReceiveEnabled() { return (clientSocket == Socket.Connected && phase == Phase.ClientReceive); } // Trả giá trị cần thiết đây, server gửi giá trị khác nhaue [Action] public static double ClientReceive() { double t = clientBuffer; clientBuffer = EmptyBuffer; phase = Phase.Send; return t; } public static bool ClientCloseEnabled() { return (clientSocket == Socket.Connected && phase == Phase.Send); } [Action] public static void ClientClose() { clientSocket = Socket.Closed; } } public static class Factory { public static ModelProgram Create() { return new LibraryModelProgram(typeof(Factory).Assembly,"ClientServer"); } } Xây dựng test harness: using System; using NModel.Conformance; using NModel.Terms; namespace ClientServerImpl { public class Stepper: IStepper { const int port = 8000; z 73 const string host = "127.0.0.1"; // localhost Server s = new Server(); Client c = new Client(); public CompoundTerm DoAction(CompoundTerm action) { switch (action.Name) { case("Tests"): return null; // hành động chuỗi kiểm thử case("ServerSocket"): s.Socket(); return null; case("ServerBind"): s.Bind(host,port); return null; case("ServerListen"): s.Listen(); return null; case("ServerAccept"): s.Accept(); return null; case("ServerReceive"): s.Receive(); return null; case("ServerSend"): // s.Send gửi số double, string! s.Send((double)((Literal) action.Arguments[0]).Value); return null; case("ServerCloseConnection"): s.CloseConnection(); return null; case("ServerClose"): s.Close(); return null; case("ClientSocket"): c.Socket(); return null; case("ClientConnect"): c.Connect(host,port); return null; case("ClientSend"): c.Send("T"); return null; case("ClientReceive_Start"): // c.Receive trả số double, string return CompoundTerm.Create("ClientReceive_Finish", c.Receive()); case("ClientClose"): c.Close(); return null; default: throw new Exception("Unexpected action " + action); } } public void Reset() { s = new Server(); c = new Client(); } public static IStepper Create() { return new Stepper(); } } Xây dựng tệp tin dạng txt cho công cụ mpv, otg, ct: Tệp tin mpv_contract.txt: /r:ClientServer.dll /mp:ClientServer /livenessCheckIsOn+ Tệp tin mpv_scenario.txt: # FSM file with test scenario z 74 /fsm:Scenario.txt Tệp tin mpv_composition.txt: #Kết hợp MP hợp đồng với MP kịch /r:ClientServer.dll /mp:ClientServer /fsm:Scenario.txt /combineActions+ Tệp tin otg_contract.txt: # Referenced assembly /r:ClientServer.dll /mp:ClientServer /file:ContractTest.txt Tệp tin otg_scenario.txt: # Tạo kiểm thử MP hợp đồng kết hợp với MP kịch /r:ClientServer.dll /mp:ClientServer /fsm:Scenario.txt /file:ScenarioTest.txt Tệp tin ct_contract.txt: # Thực kiểm thử với kiểm thử đƣợc tạo từ MP hợp đồng /r:Stepper.dll /iut:ClientServerImpl.Stepper.Create /testSuite: \Model\ContractTest.txt Tệp tin ct_scenario.txt: # Kiểm thử với kiểm thử có kết hợp MP hợp đồng với MP kịch /r:Stepper.dll /iut:ClientServerImpl.Stepper.Create /testSuite: \Model\ScenarioTest.txt Tệp tin ct_contract_random.txt: /r:Stepper.dll /iut:ClientServerImpl.Stepper.Create /r: \Model\ClientServer.dll /mp:ClientServer /runs:1 Tệp tin ct_scenario_random.txt: # Kiểm thử ngẫu nhiên với kết hợp MP hợp đồng MP kịch /r:Stepper.dll /iut:ClientServerImpl.Stepper.Create /r: \Model\ClientServer.dll /mp:ClientServer /fsm: \Model\Scenario.txt /runs:1 z ... NGHỆ NGUYỄN THỊ HẠNH NGHIÊN CỨU ỨNG DỤNG ? ?NMODEL” TRONG VIỆC PHÁT TRIỂN HỆ THỐNG NHÚNG THỜI GIAN THỰC 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Ĩ... tiêu đặt nghiên cứu phƣơng pháp kiểm thử dựa mơ hình để hỗ trợ cho việc phát triển hệ thống nhúng Nhiệm vụ luận văn: Trong luận văn này, nhiệm vụ nghiên cứu ứng dụng cụ thể NModel sau áp dụng kiểm... số hệ thống nhúng thơng dụng nhƣ robot, máy in điện thoại 2.1.2 Hệ thời gian thực Thời gian thực khó định nghĩa xác Thơng thƣờng, tốn điều khiển hay gặp thuật ngữ ? ?thời gian thực? ?? Vậy thời gian