Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 50 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
50
Dung lượng
1,16 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Đồn Trung Kiên KIỂM THỬ DỰA TRÊN MƠ HÌNH KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin HÀ NỘI - 2010 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CƠNG NGHỆ Đồn Trung Kiên KIỂM THỬ DỰA TRÊN MƠ HÌNH KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Cơng nghệ thơng tin Cán hướng dẫn: TS Phạm Ngọc Hùng Cán đồng hướng dẫn: ThS Đặng Việt Dũng HÀ NỘI - 2010 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên LỜI CẢM ƠN Lời em xin bày tỏ lòng biết ơn sâu sắc tới TS Phạm Ngọc Hùng ThS Đặng Việt Dũng, thầy hướng dẫn em tận tình suốt năm học vừa qua Em xin bày tỏ lịng biết ơn tới thầy, giáo Khoa Công nghệ thông tin - Trường Đại học Công nghệ - ĐHQGHN Các thầy cô dạy bảo, dẫn em tạo điều kiện tốt cho em học tập suốt trình học đại học đặc biệt thời gian làm khoá luận tốt nghiệp Con xin chân thành cảm ơn Ông Bà, Cha Mẹ động viên, ủng hộ vật chất lẫn tinh thần suốt thời gian qua Tôi xin cảm ơn quan tâm, giúp đỡ ủng hộ anh chị, bạn bè, đặc biệt bạn sinh viên lớp K51CB trường Đại học Công nghệ trình thực khóa luận Mặc dù cố gắng hồn thành khóa luận phạm vi khả cho phép chắn không tránh khỏi thiếu sót Em mong nhận thơng cảm, góp ý tận tình bảo q Thầy Cô bạn Hà Nội, ngày 05 tháng 05 năm 2008 Đoàn Trung Kiên i LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên TĨM TẮT Q trình sinh ca kiểm thử tự động dựa mơ hình gồm cơng đoạn chính: Xây dựng mơ hình, nhúng mã C, áp dụng công cụ Spin để sinh ca kiểm thử Trong xây dựng mơ hình cơng đoạn đầu tiên, nhiệm vụ từ mơ tả yêu cầu hệ thống chức xác định với liệu đầu vào phải xây dựng mơ hình hệ thống Xây dựng mơ hình có vai trị quan trọng, việc xây dựng mơ hình khơng xác công đoạn sau hệ thống kiểm thử dựa mơ hình khơng thể xác Do tầm quan trọng việc xây dựng mơ hình, khóa luận đề cập tới lý thuyết xây dựng mơ hình hệ thống ngơn ngữ mơ hình promela Trong khóa luận tơi trình bày phương pháp nhúng mã nguồn C vào mô tả promela để lọc trạng thái sinh ca kiểm thử cách tự động công cụ hỗ trợ kiểm thử Spin Từ áp dụng kỹ thuật vào toán cụ thể kitchen timer ii LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên MỤC LỤC CHƯƠNG GIỚI THIỆU .1 1.1 Đặt vấn đề 1.2 Nội dung nghiên cứu khóa luận 1.3 Cấu trúc khóa luận CHƯƠNG CƠ SỞ LÝ THUYẾT CHO KIỂM THỬ MƠ HÌNH 2.1 Khái niệm kiểm thử dựa mơ hình 2.2 Các bước thực .3 2.3 Thuận lợi khó khăn kiểm thử dựa mơ hình 2.4 Máy hữu hạn trạng thái ( Finite State Machines ) 2.5 Bài toán Kitchen Timer 2.5.1 Miêu tả toán .6 2.5.2 Xây dựng mơ hình CHƯƠNG GIỚI THIỆU PROMELA VÀ SPIN 3.1 Ngôn ngữ Promela 3.1.1 Khái niệm 3.1.2 Biến Kiểu 3.1.3 Định danh, Hằng số Biểu thức .10 3.1.4 Tiến trình .11 3.2 Công cụ Spin 12 3.2.1 Sơ lược Spin 12 3.2.2 Công cụ XSpin 12 CHƯƠNG SINH CA KIỂM THỬ TỰ ĐỘNG VÀ THỰC NGHIỆM 21 4.1 Phương pháp sinh ca kiểm thử tự động 21 4.2 Ví dụ áp dụng 22 4.2.1 Mơ tả tốn 23 4.2.2 Máy hữu hạn trạng thái Kitchen Timer 23 4.2.3 Đặc tả kitchen timer promela có nhúng mã C 24 4.2.4 Kết 30 CHƯƠNG KẾT LUẬN 32 Phụ lục A: Đặc tả kitchen timer promela có nhúng mã C 33 Phụ lục B: Một số ca kiểm thử .42 TÀI LIỆU THAM KHẢO 44 iii LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên DANH MỤC HÌNH VẼ Hình 1: Các bước thực kiểm thử mơ hình Hình 2: Mơ hình chuyển đổi trạng thái kitchen timer Hình 3: Màn hình cửa sổ XSpin 13 Hình 4: Cửa sổ chức Run Slicing algorithm 14 Hình 5: Cửa sổ chức Set Simulation Parameters .15 Hình 6: Cửa sổ chạy chức Run Simulation 16 Hình 7: Cửa sổ chức Set Verification Parameters .17 Hình 8: Cửa sổ chạy chức Run Verification 18 Hình 9: Cửa sổ chạy chức LTL Property Manager 19 Hình 10: Cửa sổ chạy chức View Spin Automaton .20 Hình 11: Kiến trúc hệ thống kitchen timer 23 Hình 12: Mơ hình máy hữu hạn trạng thái kitchen timer 24 iv LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên CHƯƠNG GIỚI THIỆU 1.1 Đặt vấn đề Trong công ty phát triển phần mềm hầu hết công việc kiểm thử kiểm thử viên thực thủ cơng tay Trong số lượng tình kiểm tra nhiều mà kiểm thử viên hoàn tất tay thời gian cụ thể Hoặc nhóm lập trình đưa nhiều phiên phần mềm liên tiếp để kiểm tra Thực tế cho thấy việc đưa phiên phần mềm hàng ngày, phiên bao gồm tính mới, tính cũ sửa lỗi hay nâng cấp Việc bổ sung sửa lỗi code cho tính phiên làm cho tính khác kiểm tra tốt chạy sai phần code không chỉnh sửa Để khắc phục điều này, phiên bản, kiểm thử viên không kiểm tra chức sửa, mà phải kiểm tra lại tất tính kiểm tra tốt trước Điều khó khả thi mặt thời gian kiểm tra thông thường Để giải vấn đề áp dụng kỹ thuật kiểm thử dựa mơ hình cho q trình sinh ca kiểm thử tự động Do đó, khố luận tập trung trình bày việc nghiên cứu kiểm thử dựa mơ hình ứng dụng cơng cụ Spin vào việc tự động sinh ca kiểm thử: Xây dựng mơ hình hệ thống thực nghiệm 1.2 Nội dung nghiên cứu khóa luận Bài tốn thực khóa luận tốn kiểm thử dựa mơ hình để sinh ca kiểm thử cách tự động Thiết kế hệ thống ngôn ngữ Promela nhúng mã C vào thiết kế Promela hai nội dung quan trình sinh ca kiểm thử tự động Tơi nghiên cứu phương pháp sử dụng để thực nội dung đó, áp dụng vào tốn sinh ca kiểm thử tự động hệ thống máy hẹn kitchen timer Quá trình thực nghiệm bao gồm thực nghiệm thiết kế hệ thống kitchen timer Promela, nhúng mã nguồn C vào thiết kế Promela hệ thống sử dụng Spin sinh ca kiểm thử cách tự động 1.3 Cấu trúc khóa luận Các phần cịn lại khóa luận có cấu trúc sau: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên Chương trình bày sở lý thuyết kiểm thử mơ hình, bao gồm khái niệm bản, bước thực hiện, lợi ích kiểm thử mơ hình cách thức xây dựng mơ hình (máy hữu hạn trạng thái) Chương trình bày khái niệm ngơn ngữ mơ hình promela, bao gồm định nghĩa khai báo biến kiểu, định danh, số, biểu thức, tiến trình Chương trình bày kết thực nghiệm trình mơ tả máy hẹn kitchen timer, thiết kế mơ hình hệ thống kitchen timer Promela, q trình sinh ca kiểm thử tự động Chương tóm tắt kết đạt được, kết luận, hạn chế hướng nghiên cứu phát triển tương lai LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên CHƯƠNG CƠ SỞ LÝ THUYẾT CHO KIỂM THỬ MƠ HÌNH Q trình thiết kế mơ hình hệ thống ngơn ngữ mơ hình Promela làm việc dựa khái niệm kiểm thử mơ hình Chương trình bày khái niệm kiểm thử mơ hình 2.1 Khái niệm kiểm thử dựa mơ hình Theo Colin Campbell, kiểm thử dựa mơ hình kỹ thuật kiểm thử mà hoạt động hệ thống chạy thử thời gian dự đốn trước, thực đặc tả hình thức mơ hình hệ thống Các mẫu thiết kế hay mơ hình mơ tả đơn giản hệ thống dựa yêu cầu hệ thống chức xác định, giúp hiểu dự đốn hành vi hệ thống 2.2 Các bước thực Q trình kiểm thử dựa mơ hình bắt đầu việc xác định yêu cầu hệ thống từ xây dựng mơ hình dựa vào u cầu chức hệ thống Việc xây dựng mơ hình cịn phải dựa yếu tố liệu đầu vào đầu Mơ hình sử dụng để sinh ca kiểm thử Chúng ta biết kết đầu mong đợi từ mơ hình từ quy định chuẩn ( oracle ) Khi chạy kịch kết thu so sánh với kết mong đợi Từ định hành động sửa đổi mơ hình dừng kiểm thử,… Các bước để thực kiểm thử dựa mơ hình: Xây dựng mơ hình dựa u cầu chức hệ thống Tạo đầu dự kiến từ mơ tả tốn Chạy kịch kiểm thử So sánh kết đầu thực tế với kết đầu dự kiến Quyết định hành động (Sửa đổi mơ hình, tạo thêm ca kiểm thử, dừng kiểm thử, đánh giá chất lượng phần mềm ) Các bước thực kiểm thử dựa mơ hình minh họa sơ đồ sau: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên Hình 1: Các bước thực kiểm thử mơ hình 2.3 Thuận lợi khó khăn kiểm thử dựa mơ hình Thuận lợi Trong phát triển phần mềm kiểm thử viên thường thực cơng việc phương pháp truyền thống nên thường thiếu thời gian để thực kiểm thử, giá thành sản phẩm hoàn thành thường cao… Và kiểm thử dựa mơ hình khắc phục số nhược điểm đó: Do q trình sinh ca kiểm thử tự động mà rút ngắn thời làm phần mềm, chất lượng phần mềm tốt Đặc biệt chi phí lớn cho việc xây dựng mơ hình điều khấu trừ chi phí bảo dưỡng thấp nhiều hệ thống hoạt động Quá trình sinh ca kiểm thử thực cách tự động nên sinh nhiều ca kiểm thử phát nhiều lỗi Người kiểm thử phần mềm cần thường xuyên trao đổi với người phát triển phần mềm xây dựng mơ hình hệ thống mà LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên tempNode.in_time = cur_in_time; tempNode.time = cur_time; tempNode.alm_time = cur_alm_time; tempNode.bTimeClk = cur_bTimeClk; strcpy(tempNode.input, cur_input); strcpy(tempNode.output, cur_output); } void printNode(Node n) { printf("Input: %s\n",n.input); printf("Output: %s\n",n.output); printf("STATE\n",n.label,n.in_time,n.tim e,n.alm_time,n.bTimeClk); } }; 4.2.4 Kết Cấu trúc ca kiểm thử: Input: Output: STATE Trong đó: Input biểu tượng đầu vào, Output biểu tượng đầu ra, Label nhãn trạng thái tiếp theo, In_time thời gian thiết lập, Time thời gian đồng hồ đếm ngược, Alm_time thời gian báo chuông, 30 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đoàn Trung Kiên bTimeClk trạng thái đồng hồ (0 OFF, ON) Sau vài trạng thái trích ca kiểm thử sinh từ chương trình ( tham khảo thêm Phụ lục B) Input: Output: STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xSTART Output: STATE Input: xSTART Output: STATE Input: xSTART Output: STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xSTART Output: Set Time = InTime * 6; Start clock STATE Input: xTIME_SET Output: Clear InTime; Clear Time; Stop clock STATE 31 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên CHƯƠNG KẾT LUẬN Trong khóa luận tơi tìm hiểu lý thuyết kiểm thử mô hình, bên cạnh tìm hiểu ngơn ngữ mơ hình Promela từ áp dụng cho việc xây dựng mơ hình hệ thống Sau xây dựng mơ hình hệ thống, kết hợp nhúng mã C vào mô tả promela sử dụng công cụ hỗ trợ kiểm thử Spin để tự động sinh ca kiểm thử Luận văn áp dụng lý thuyết tìm hiểu để tự động sinh ca kiểm thử cho ví dụ kitchen timer Kết thực nghiệm thu ca kiểm thử, kết cho thấy ứng dụng có ích, sử dụng ca kiểm thử để xác minh tính đắn phần mềm với thiết kế ban đầu hệ thống Tuy nhiên thời gian có hạn nên khóa luận dừng lại việc xây dựng mơ hình từ tự động sinh ca kiểm thử mà chưa kiểm tra cài đặt kitchen timer Bên cạnh chưa kiểm tra tính đắn việc xây dựng mơ hình so với u cầu tốn Trong tương lai tơi tiếp tục nghiên cứu phương pháp giải toán kiểm tra tính đắn việc xây dựng mơ hình với mô tả ban đầu hệ thống đồng thời kiểm tra chương trình thực tế 32 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên Phụ lục A: Đặc tả kitchen timer promela có nhúng mã C /* Kitchen timer */ /* Nhung ma C */ /* Cau truc du lieu cho mot Node */ c_decl{ typedef struct Node{ char label[256]; /*Nhan cua trang thai tiep theo */ int in_time; /*Thoi gian thiet lap*/ int time; /*Thoi gian dem nguoc*/ int alm_time; /*Thoi gian bao dong*/ unsigned bTimeClk; /*Chu ky dieu khien*/ char input[256]; /* bieu tuong dau vao */ char output[256]; /* bieu tuong dau */ }Node; } c_code{ char char char Node tempLabel[256] = "NUMINPUT"; tempInput[256] = ""; tempOutput[256] = ""; tempNode = {"NUMINPUT",0,0,0,0,"",""}; /* Thiet lap gia tri cho cac Node */ void setNode(char* cur_label, int cur_in_time, int cur_time, int cur_alm_time, unsigned cur_bTimeClk, char* cur_input, char* cur_output) { strcpy(tempNode.label,cur_label); tempNode.in_time = cur_in_time; tempNode.time = cur_time; tempNode.alm_time = cur_alm_time; tempNode.bTimeClk = cur_bTimeClk; strcpy(tempNode.input, cur_input); strcpy(tempNode.output, cur_output); } /* In cac Node */ void printNode(Node n) { printf("Input: %s\n",n.input); printf("Output: %s\n",n.output); printf("STATE\n",n.label,n.in_time, n.time,n.alm_time,n.bTimeClk); 33 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên } }; /* */ #define ON #define OFF #define MUSI skip mtype = {xTIME_SET, xSTART, TIMER_CLK } chan chanTimer = [0] of {mtype}; bool bTimeClk=0; int in_time=0; int time=0; int alm_time=0; /* Dat lai thoi gian thiet lap */ inline ClrInTime() { in_time=0; } /* Cap nhat thoi gian */ inline IncInTime() { in_time++; in_time=in_time&3; } /* Thiet lap thoi gian */ inline SetInTime(value) { in_time=value; } /* Dat lai thoi gian dem nguoc */ inline ClrTime() { time=0; } /* Thiet lap thoi gian dem nguoc */ inline SetTime() { time=in_time*6; } /* Dat lai thoi gian bao chuong */ inline ClrAlmTime() { alm_time=0; } /*Thong bao dong ho la ON hay OFF*/ inline SetTimerClk( value ) { d_step{ bTimeClk=value; if ::value==OFF ->printf("TIMER: STP TIMER_CLK\n") ::value==ON ->printf("TIMER: STA TIMER_CLK\n") fi } } inline SetEvtTimer( evt ) { chanTimer!evt } inline GetEvtTimer( evt ) { chanTimer?evt } 34 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên /* */ /* Tien trinh Timer() */ proctype Timer() { mtype evt; /* */ /* Thiet lap thoi gian */ NUMINPUT_ST: NUMINPUT: c_code{ strcpy(tempLabel,"NUMINPUT"); setNode(tempLabel,now.in_time,now.time,now.alm_time ,now.bTimeClk,tempInput,tempOutput); printNode(tempNode); }; GetEvtTimer(evt); if ::evt==TIMER_CLK -> atomic{ MUSI; c_code{ strcpy(tempInput,"TIME_CLK"); strcpy(tempOutput, ""); } } ::evt==xTIME_SET -> IncInTime(); atomic { c_code{ strcpy(tempInput,"xTIME_SET"); strcpy(tempOutput,"Increase InTime"); } } ::evt==xSTART -> if ::in_time==0 -> atomic{ MUSI; c_code{ strcpy(tempInput,"xSTART"); strcpy(tempOutput, ""); } } 35 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên ::else -> SetTime(); SetTimerClk(ON); /* Bat dong ho */ atomic{ c_code{ strcpy(tempInput,"xSTART"); strcpy(tempOutput, "Set Time = InTime * 6; Start clock"); }; /* Chuyen sang trang thai COUNTDOWN */ goto COUNTDOWN_ST; } fi; fi; goto NUMINPUT; /* */ /* Dem nguoc */ COUNTDOWN_ST: COUNTDOWN: c_code{ strcpy(tempLabel,"COUNTDOWN"); setNode(tempLabel,now.in_time,now.time,now.alm_time ,now.bTimeClk,tempInput,tempOutput); printNode(tempNode);}; GetEvtTimer(evt); if ::evt==TIMER_CLK -> time ; if ::time>0 -> atomic{ MUSI; c_code{ strcpy(tempInput,"TIMER_CLK"); strcpy(tempOutput, "Time "); } } ::else -> ClrAlmTime(); atomic{ c_code{ strcpy(tempInput,"TIMER_CLK"); strcpy(tempOutput, "Time ; Clear AlarmTime"); 36 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên }; /* Chuyen sang trang thai ALARM */ goto ALARM_ST; } fi; ::evt==xTIME_SET -> ClrInTime(); ClrTime(); SetTimerClk(OFF); /* Tat dong ho */ atomic{ c_code{ strcpy(tempInput,"xTIME_SET"); strcpy(tempOutput, "Clear InTime; Clear Time; Stop clock"); }; /* Chuyen sang trang thai NUMINPUT */ goto NUMINPUT_ST; } ::evt==xSTART -> SetTimerClk(OFF); /* Tat dong ho */ atomic{ c_code{ strcpy(tempInput,"xSTART"); strcpy(tempOutput, "Stop clock"); }; /* Chuyen sang trang thai PAUSE */ goto PAUSE_ST; } fi; goto COUNTDOWN; /* */ /* Tam dung */ PAUSE_ST: PAUSE: c_code{ strcpy(tempLabel,"PAUSE"); setNode(tempLabel,now.in_time,now.time,now.alm_time ,now.bTimeClk,tempInput,tempOutput); printNode(tempNode); }; GetEvtTimer(evt); if ::evt==TIMER_CLK -> 37 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên atomic{ MUSI; c_code{ strcpy(tempInput,"TIMER_CLK"); strcpy(tempOutput, ""); } } ::evt==xTIME_SET -> ClrInTime(); ClrTime(); atomic{ c_code{ strcpy(tempInput,"xTIME_SET"); strcpy(tempOutput, "Clear InTime; Clear Time"); }; /* Chuyen sang trang thai NUMINPUT */ goto NUMINPUT_ST; } ::evt==xSTART -> SetTimerClk(ON); atomic{ c_code{ strcpy(tempInput,"xSTART"); strcpy(tempOutput, "Start clock"); }; /* Chuyen sang trang thai COUNTDOWN */ goto COUNTDOWN_ST; } fi; goto PAUSE; /* */ /* Bao gio */ ALARM_ST: ALARM: c_code{ strcpy(tempLabel,"ALARM"); setNode(tempLabel,now.in_time,now.time,now.alm_time ,now.bTimeClk,tempInput,tempOutput); printNode(tempNode); }; GetEvtTimer(evt); if 38 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên ::evt==TIMER_CLK -> if ::alm_time atomic{ alm_time++; c_code{ strcpy(tempInput,"TIMER_CLK"); strcpy(tempOutput, "AlarmTime++"); } } ::else -> ClrAlmTime(); SetTimerClk(OFF); atomic{ c_code{ strcpy(tempInput,"TIMER_CLK"); strcpy(tempOutput, "Clear AlamrTime; Stop clock"); }; /* Chuyen sang trang thai ALARM_OFF */ goto ALARM_OFF_ST; } fi; ::evt==xTIME_SET -> ClrAlmTime(); SetTimerClk(OFF); atomic{ c_code{ strcpy(tempInput,"xTIME_SET"); strcpy(tempOutput, "Clear AlamrTime; Stop clock"); }; /* Chuyen sang trang thai ALARM_OFF */ goto ALARM_OFF_ST; } ::evt==xSTART -> ClrAlmTime(); SetTimerClk(OFF); atomic{ c_code{ strcpy(tempInput,"xSTART"); strcpy(tempOutput, "Clear AlamrTime; Stop clock"); }; /* Chuyen sang trang thai ALARM_OFF */ goto ALARM_OFF_ST; } 39 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên fi; goto ALARM; /* */ /* Ngung bao gio */ ALARM_OFF_ST: ALARM_OFF: c_code{ strcpy(tempLabel,"ALARMOFF"); setNode(tempLabel,now.in_time,now.time,now.alm_time ,now.bTimeClk,tempInput,tempOutput); printNode(tempNode); }; GetEvtTimer(evt); if ::evt==TIMER_CLK -> atomic{ MUSI; c_code{ strcpy(tempInput,"TIMER_CLK"); strcpy(tempOutput, ""); } } ::evt==xTIME_SET -> SetInTime(1); atomic{ c_code{ strcpy(tempInput,"xTIME_SET"); strcpy(tempOutput, "Set InTime = 1"); }; /* Chuyen sang trang thai NUMINPUT */ goto NUMINPUT_ST; } ::evt==xSTART -> SetTime(); SetTimerClk(ON); atomic{ c_code{ strcpy(tempInput,"xSTART"); strcpy(tempOutput, "Set Time = InTime * 6; Start clock"); }; ;/* Chuyen sang trang thai COUNTDOWN */ 40 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc A Đoàn Trung Kiên goto COUNTDOWN_ST } fi; goto ALARM_OFF; } /* */ /* Tien trinh Environment */ proctype Environment(){ ::true -> SetEvtTimer(xTIME_SET); ::true -> SetEvtTimer(xSTART); ::true -> if ::bTimeClk==1 -> SetEvtTimer(TIMER_CLK); ::bTimeClk==0 -> ; fi od } /* */ /* Tien trinh init */ init{ run Timer(); /* Chay tien trinh Timer() */ run Environment(); /*Chay tien trinh Environment()*/ } 41 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc B Đoàn Trung Kiên Phụ lục B: Một số ca kiểm thử Input: Output: STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xSTART Output: STATE Input: xSTART Output: STATE Input: xSTART Output: STATE 42 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ luc B Đoàn Trung Kiên Input: xTIME_SET Output: Increase InTime STATE Input: xTIME_SET Output: Increase InTime STATE Input: xSTART Output: Set Time = InTime * 6; Start clock STATE Input: xTIME_SET Output: Clear InTime; Clear Time; Stop clock STATE Input: TIME_CLK Output: STATE Input: TIME_CLK Output: STATE Input: TIME_CLK Output: STATE Input: xSTART Output: Set Time = InTime * 6; Start clock STATE Input: xSTART Output: Stop clock STATE … 43 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tài liệu tham khảo Đoàn Trung Kiên TÀI LIỆU THAM KHẢO [1] Andrew Ireland Distributed Systems Programming F21DS1 Promela School of Mathematical and Computer Sciences, Heriot-Watt University, Edinburgh [2] By Nedret OZAY Automated Software Test Generation Model-Based Testing, 2007 [3] El-Far and JA Whittaker Model-Based Software Testing Encyclopedia of Software Engineering (edited by J J Marciniak) Wiley, 2001 [4] Gerard Holzmann The Spin Model Checker Primer and Reference Manual Addison Wesley, 2003 [5] http://www.goldpractices.com/practices/mbt/index.php [6] http://spinroot.com/spin/Man/index.html [7] http://www.macs.hw.ac.uk/~air/dsp-spin/ 44 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... niệm kiểm thử mơ hình 2.1 Khái niệm kiểm thử dựa mơ hình Theo Colin Campbell, kiểm thử dựa mơ hình kỹ thuật kiểm thử mà hoạt động hệ thống chạy thử thời gian dự đoán trước, thực đặc tả hình thức... luanvanchat@agmail.com Kiểm thử dựa mơ hình Đoàn Trung Kiên CHƯƠNG CƠ SỞ LÝ THUYẾT CHO KIỂM THỬ MƠ HÌNH Q trình thiết kế mơ hình hệ thống ngơn ngữ mơ hình Promela làm việc dựa khái niệm kiểm thử mô hình Chương... luanvanchat@agmail.com Kiểm thử dựa mơ hình Đồn Trung Kiên Hình 1: Các bước thực kiểm thử mơ hình 2.3 Thuận lợi khó khăn kiểm thử dựa mơ hình Thuận lợi Trong phát triển phần mềm kiểm thử viên thường thực