Báo cáo nghiên cứu khoa học PHÂN TÍCH KHẢ NĂNG KIỂM THỬ các đơn vị PHẦN mềm

8 217 0
Báo cáo nghiên cứu khoa học   PHÂN TÍCH KHẢ NĂNG KIỂM THỬ các đơn vị PHẦN mềm

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

Thông tin tài liệu

PHÂN TÍCH KHẢ NĂNG KIỂM THỬ CÁC ĐƠN VỊ PHẦN MỀM TESTABILITY ANALYSIS OF SOFTWARE COMPONENTS NGUYỄN THANH BÌNH Trường Đại học Bách khoa, Đại học Đà Nẵng TÓM TẮT Bài báo trình bày phương pháp phân tích khả kiểm thử đơn vị phần mềm để đánh giá tiên lượng khó khăn gặp phải trình kiểm thử phần mềm Để phân tích khả kiểm thử, đề xuất giải pháp sử dụng kỹ thuật biểu diễn gán đơn tĩnh SSA cách chuyển đơn vị kiểm thử sang dạng biểu diễn luồng liệu Kết phân tích mặt giúp người kiểm thử phân bổ tài nguyên kiểm thử hợp lí hơn, mặt giúp người thiết kế khắc phục cố mát thông tin sửa đổi lại chương trình nguồn ABSTRACT This paper presents the result of testability analysis of software components to evaluate and predict some difficulties encountered in the testing phase In our solution, we concentrate on testability analysis of software components We propose the use of the Static Single Assignment (SSA) form to transform a software component into a data-flow representation, and testability analysis is based on this SSA form This results helps designers during the specification phases of the components, and testers during the testing phases to evaluate and eventually modify the components Đặt vấn đề Trong tiến trình phần mềm, giai đoạn kiểm thử (testing) đóng vai trò quan trọng Phần mềm lớn phức tạp, thủ tục kiểm thử đòi hỏi nhiều thời gian công sức Để nâng cao hiệu sản phẩm, người tham gia xây dựng phần mềm cần có sớm thông tin hệ thống chương trình cần kiểm thử Những thông tin có nhờ phân tích khả kiểm thử (PTKNKT) phần mềm Một mặt, kết phân tích cho phép phát phần chương trình vừa chứa đựng nhiều lỗi, vừa khó kiểm thử, đơn vị chương trình nên đầu tư nhiều công sức Mặt khác, PTKNKT giúp phân bổ tài nguyên kiểm thử tốt hơn, yêu cầu người thiết kế sửa đổi lại nội dung thiết kế để cải thiện khả kiểm thử (KNKT) PTKNKT đưa số chất lượng nhờ phép đo độ phức tạp kiểm thử phần mềm Trước đây, PTKNKT phần mềm đánh giá độ phức tạp chương trình McCabe [1] Nejmeh [2] đánh giá độ phức tạp dựa số lượng dòng lệnh thực số lượng liệu kiểm thử, chưa đề cập đến KNKT Sau đó, Freedman [3] người đưa vào khái niệm KNKT, cách dựa khả quan sát (observability) khả điều khiển (controllability) Phương pháp đánh giá chương trình dựa miền liệu vào miền liệu Hai tác giả Voas Miller [4] định nghĩa KNKT phần mềm khả phần mềm bị cố (failure) gặp lỗi kiểm thử đánh giá chương trình qua miền liệu vào miền liệu Trong phạm vi đánh giá KNKT phần mềm giao tiếp, Petrenko nhóm tác giả [5] sử dụng ôtômat hữu hạn, Karoui nhóm tác giả [6] sử dụng đặc tả quan hệ, v.v Gần đây, Le Traon Robach [7] phát triển phương pháp PTKNKT sử dụng công cụ SATAN (System’s Automatic Testability Analysis) Các tác giả xây dựng mô hình chức gồm đồ thị có hướng phù hợp để biểu diễn truyền thông tin theo thiết kế luồng liệu (data flow) Đó biểu đồ đặc tả nhờ máy tính (Computer Aided Specification) mà biểu đồ CAS tập hợp đơn thể chương trình kết nối với nhờ luồng liệu Dữ liệu đầu đơn thể liệu đầu vào đơn thể khác Do áp dụng cho thiết kế luồng liệu, hạn chế phương pháp không áp dụng để PTKNKT đơn thể chương trình viết ngôn ngữ mệnh lệnh, chẳng hạn ngôn ngữ C Trong báo này, đề xuất phương pháp PTKNKT phần mềm sử dụng biểu đồ CAS Các đơn thể chương trình viết ngôn ngữ C, công ty Thales Avionics cung cấp Để áp dụng công cụ SATAN, đề xuất sử dụng phép gán đơn tĩnh SSA (Static Single Assignment) [10], [11], [12] để chuyển đổi mã nguồn chương trình sang dạng biểu diễn luồng liệu Sử dụng kết PTKNKT, người thiết kế sửa đổi lại nội dung thiết kế, người kiểm thử có giải pháp phân bố tài nguyên kiểm thử chọn lựa chiến lược kiểm thử tốt Nội dung báo sau: phần giới thiệu ngắn gọn mô hình phân tích cách đo KNKT sử dụng công cụ SATAN; phần trình bày kỹ thuật gán đơn tĩnh SSA; phần cách áp dụng công cụ SATAN để phân tích đơn thể chương trình đánh giá kết Phân tích khả kiểm thử hệ thống phần mềm Trước tiên, trình bày mô hình chức dựa thiết kế luồng liệu [8] sử dụng mô hình để đo KNKT, đánh giá lưu lượng truyền tin, hay lưu chuyển luồng liệu, đồ thị có hướng mô hình 2.1 Mô hình chức Nguyên tắc mô hình hóa truyền tin biểu diễn đồng thời luồng điều khiển luồng liệu đồ thị, gọi đồ thị truyền tin ITG (Information Transfer Graph) Đồ thị có hai loại nút nút thông tin (place) nút chuyển tiếp (transition) Các nút thông tin đơn thể (module) biểu diễn toán tử, đơn vị, câu lệnh , nút liệu vào nút liệu hệ thống Trong biểu diễn đồ thị, đơn thể có hình e-líp; nút liệu vào/ra có dạng nửa hình e-líp; nút chuyển tiếp đoạn thẳng nằm ngang (hình 1) Các cạnh nối liền nút ITG Đồ thị bắt đầu nút liệu vào kết thúc nút liệu nút liệu vào cạnh nút chuyển tiếp nút đơn thể nút liệu Hình Các loại nút đồ thị truyền tin ITG Các nút chuyển tiếp phục vụ truyền tin nút thông tin Có ba cách truyền tin (hình 2):  Phối kết: nhiều nút nguồn chuyển tới nút đích;  Phân phối: nút số nút nguồn khác chuyển tới nút đích;  Lựa chọn: nút nguồn đến nhiều nút đích khác Phối kết Phân phối Lựa chọn Hình Ba cách truyền tin ITG Đồ thị truyền tin ITG dùng để xác định đường truyền tin, hay gọi luồng liệu (dataflow) Mỗi luồng chứa tập hợp nút (nút thông tin nút chuyển tiếp) cạnh Luồng xuất phát từ vài nút liệu vào, qua nút đơn thể để đến nút liệu Mỗi luồng xem đồ thị con, hay hệ thống con, hoạt động độc lập so với phần lại hệ thống 2.2 Đo khả kiểm thử Phân tích cách truyền tin nút luồng của đồ thị ITG, KNKT đo dựa khả điều khiển khả quan sát đơn thể chương trình hệ thống xét Khả điều khiển đánh giá qua lượng thông tin đến từ đầu vào Khả quan sát đánh giá qua lượng thông tin nhận đầu (xem hình 3) Từ đó, KNKT đơn thể lượng thông tin thất lạc từ miền liệu vào, qua đơn thể đến đầu hệ thống luồng Khả điều khiển Đơn thể Khả quan sát Hệ thống Hình Khả kiểm thử đơn vị chương trình Gọi IF đầu vào OF đầu luồng F, IM đầu vào OM đầu đơn thể M, khả điều khiển đơn thể M luồng F tính công thức: T (I F , I M ) COF  M   (1) C(IM ) đó, T(IF, IM) lượng thông tin lớn mà đơn thể M nhận từ đầu vào IF luồng F C(IM) toàn thông tin mà đơn thể M nhận đứng độc lập Khả quan sát đơn thể M luồng F tính công thức tương tự (1): T (OM , OF ) OBF  M   (2) C (OM ) T(OF,, OM) lượng thông tin lớn mà đầu OF luồng F nhận từ đầu OM đơn thể M C(IM) toàn thông tin mà đơn thể M sinh từ đầu OM Khả điều khiển COF(M) khả quan sát OBF(M) có giá trị nằm đoạn [0,1], tốt có giá trị 1, có giá trị KNKT đơn thể M luồng F hàm theo COF(M) OBF(M) (xem chi tiết [8]): TEF ( M )  f (COF ( M ), OBF (M )) (3) Kỹ thuật gán đơn tĩnh SSA Kỹ thuật gán đơn tĩnh SSA dạng biểu diễn trung gian dùng để xây dựng luồng liệu cho đồ thị ITG Kỹ thuật SSA sử dụng chủ yếu cho thuật toán tối ưu mã chương trình dịch viết ngôn ngữ mệnh lệnh Một chương trình chuyển sang dạng SSA qua hai bước Trong bước thứ nhất, hàm đặc biệt  đưa vào nút nối (join node) đồ thị luồng điều khiển chương trình Một hàm  nút X có dạng V  (R, S, …), V, R, S, … biến Số lượng biến số nhánh rẽ đứng trước nút X Hàm  kết hợp giá trị khác biến để tạo giá trị phụ thuộc vào nhánh rẽ Trong bước thứ hai, biến R, S, … đổi tên thành V1, V2, cho Vi xuất phép gán toàn chương trình Ví dụ, xét chương trình gốc hàm delta, sau chuyển sang biểu diễn SSA, hai hàm  chèn vào sau câu lệnh điều kiện để xác định giá trị hai biến a b, sau hai biến đổi tên thành biến có số (hình 4) Dạng biểu diễn SSA có đặc điểm biến xuất định nghĩa hay phép gán Cả chương trình gốc dạng biểu diễn SSA có đồ thị luồng điều khiển giống có ngữ nghĩa Sử dụng dạng SSA để biểu diễn luồng liệu chương trình tuần tự, ta xây dựng đồ thị truyền tin ITG để PTKNKT int delta(int a, int b) { if (a > b) a = a – b; else b = b – a; return (a * b); } a) Chương trình gốc int delta(int a0, int b0) { if (a0 > b0) a1 = a0 – b0; else b1 = b0 – a0; a2  (a0, a1); b2  (b0, b1); return (a2 * b2); } b) Kết dạng SSA Hình Chuyển hàm sang biểu diễn SSA Ví dụ áp dụng Công ty Hàng không châu Âu Thales Avionics cho phép sử dụng biểu đồ CAS gồm chương trình viết ngôn ngữ C Phương pháp SSA áp dụng cho đơn vị THR để PTKNKT, gồm bước sau:  Sử dụng trình dịch GCC1 (GNU Compiler Collection) để chuyển mã nguồn THR thành SSA  Xây dựng đồ thị truyền tin ITG từ SSA  Tính số lượng luồng ITG  Đo KNKT cho đơn thể luồng Đơn vị THR dùng để tính giá trị ngưỡng giá trị đầu vào Mã nguồn THR sử dụng kiểu số thực (numeric) Hình minh hoạ kết chuyển mã THR thành biểu diễn SSA sử dụng GCC Từ biểu diễn SSA, đồ thị ITG THR xây dựng sau: Các toán tử biến biểu diễn thành nút đơn thể Các toán tử gồm sub, add, uminus, comp1 comp2, comp1 comp2 toán tử so sánh “>” “ value) { output = input - value; } else if (input < -value) { output = input + value; 10 } 11 else 12 { 13 output = 0.0; 14 } 15 return output; } numeric thr(const numeric input, const numeric value) { /* khai báo bi?n */ if (input > value) { output1 = input - value; } else if (input < -value) { output2 = input + value; } else { output3 = 0.0; } output4 = (output2, output3); output5 = (output1, output4); return output5; 10 11 12 13 14 15 16 17 } Hình Chuyển mã THR thành biểu diễn SSA sử dụng GCC Đồ thị có luồng liệu có nút liệu vào {input, value} nút liệu {output5} Tập hợp đơn thể Fi luồng xác định sau: F1 = {then1, comp1, output1, sub} F2 = {else1, comp1, output4, then2, output2, comp2, add, uminus} F3 = {else1, comp1, output4, else2, comp2, output3, uminus} Mỗi luồng tính giá trị đầu {output5} từ giá trị đầu vào {input, value} Chẳng hạn, luồng F3 tô đậm hình GCC phiên 3.0 input value value t28 t29 t25 uminus input add t27 t26 output3 output2 comp2 t24 t23 then2 else2 value input t21 t22 t17 sub output4 input value t15 t16 output1 comp1 t13 t14 then1 else1 t12 t11 output5 Hình Đồ thị truyền tin ITG THR Khả kiểm thử đơn thể đồ thị ITG tính theo luồng nhờ công cụ SATAN Mỗi đơn thể có cặp giá trị tương ứng với khả điều khiển khả quan sát Bảng Giá trị khả kiểm thử từ đồ thị ITG luồng/ thể add comp1 comp2 else1 else2 uminus output1 output2 output3 output4 sub then1 then2 đơn F1 (1.0, 1.0) (1.0, 1.0) F2 F3 (1.0, 1.0) (1.0, 1.0) (1.0, 1.0) (1.0, 1.0) (1.0, 1.0) (0.1538, 1.0) (1.0, 1.0) (1.0, 1.0) (1.0, 0.0833) (1.0, 0.0833) (1.0, 1.0) (1.0, 1.0) (1.0, 1.0) (0.0833, 1.0) (1.0, 1.0) (1.0, 1.0) (1.0, 1.0) (1.0, 1.0) Từ kết cho bảng 1, ta xác định đơn thể có cặp giá trị khả điều khiển khả quan sát thấp Trong trường hợp này, đơn thể uminus có giá trị khả quan sát thấp luồng F2 F3 Điều dễ hiểu, qua luồng F2 F3 có mát thông tin từ đầu vào input đến đơn thể comp2, liệu đầu uminus có kiểu số thực, liệu đầu đơn thể comp2 có kiểu boolean Ta nhận thấy giá trị KNKT cho phép xác định luồng hiệu để quan sát đơn thể Ví dụ, giá trị khả điều khiển output4 thấp luồng F2, lại cao luồng F3 Luồng F3 nên lựa chọn để quan sát đơn thể output4 Phương pháp phân tích đưa hai số: 1) Số luồng để kiểm thử cho phép đánh giá độ phức tạp đơn vị chương trình cần kiểm thử, bao gồm số lượng liệu kiểm thử cần thiết 2) Các giá trị KNKT mát thông tin từ liệu đầu vào đến đầu ra, giúp người kiểm thử nhận biết khó khăn phải xử lý quan sát theo dõi kiểm thử Chẳng hạn, phân tích cho thấy đơn vị THR có luồng quan sát, đơn giản giá trị KNKT lại có mát thông tin đáng kể, cần phải trọng quan sát kiểm thử Chúng phân tích đơn vị phần mềm khác Công ty Hàng không Thales Avionics Kết PTKNKT giúp kỹ sư kiểm thử công ty phát nhiều vấn đề kiểm thử cần giải Kết luận Giải pháp PTKNKT dựa đồ thị truyền tin ITG sử dụng công cụ SATAN áp dụng cho biểu đồ thiết kế luồng liệu CAS Ưu giải pháp khắc phục tính không tương thích ngôn ngữ lập trình Các đơn vị chương trình tham gia kiểm thử đặc tả biểu đồ CAS thường không viết ngôn ngữ luồng liệu (như Esterel hay Lustre), mà viết ngôn ngữ mệnh lệnh Từ đó, chuyển đổi đơn vị kiểm thử sang biểu diễn SSA sử dụng công cụ SATAN để PTKNKT Giải pháp mang lại nhiều thông tin hữu ích cho người kiểm thử người thiết kế phần mềm Một mặt giúp người kiểm thử định hướng xây dựng tập hợp liệu kiểm thử, mặt khác, giải pháp giúp họ phân bổ tài nguyên kiểm thử hợp lí hơn, khắc phục cố mát thông tin Phương pháp trình bày không phụ thuộc vào phương pháp kiểm thử nào, cung cấp thông tin cần thiết trợ giúp người kiểm thử Hơn nữa, sử dụng phương pháp này, người xây dựng phần mềm sửa đổi lại chương trình nhằm cải thiện khả kiểm thử Chúng tiếp tục áp dụng phương pháp cho mã nguồn phần mềm khác ngôn ngữ lập trình Chúng nhắm tới khả tự động hóa trình PTKNKT xây dựng đồ thị truyền tin ITG từ biểu diễn SSA TÀI LIỆU THAM KHẢO [1] T J McCabe, A Complexity Measure, IEEE Transactions on Software Engineering, SE-2(4), 308-320, 1976 [2] B A Nejmeh, NPATH: A Measure of Execution Path Complexity and Its Applications, Communication of the ACM, 31(2), 188-200, 1988 [3] R S Freedman, Testability of Software Components, IEEE Transactions on Software Engineering, 17(6), 553-564, 1991 [4] J M Voas and K.W Miller, Semantic Metrics for Software Testability, Journal of Systems and Software, No 20, 207-216, 1993 [5] R Petrenko, R Dssouili and H Koenig, On Evaluation of Testability of Protocol Structures, Proceedings of the International Workshop on Protocol Test Systems, Pau, France, 1993 [6] K Karoui and R Dssouli, Testablity Analysis of the Communication Protocols Modeled by Relations, Technical Report, No 1050, Département d’Informatique et de Recherche Opérationnelle, Faculté des Arts et des Sciences, Université de Montréal, 1996 [7] Y Le Traon, C Robach, Testability Measurements for Data Flow Designs, Proceedings of the Fourth International Software Metrics Symposium, Albuquerque, New Mexico, USA, 91-98, 1997 [8] Dammak, Etude des Mesures de Testabilité de Systèmes Logiques, Université de Paris-Sud, Centre d’Orsay, Paris, Thesis, 1985 [9] R Cytron, B Rosen, M Wegman, and F Zadeck, Efficiently Computing Static Single Assignment Form and the Control Dependence Graph, ACM Transactions on Programming Languages and Systems, 13(4), 451-490, 1991 [10] Nguyễn Thanh Bình, M Delaunay, and C Robach, Testability Analyis with Respect to Testing Criteria for Software Components, Proceedings of the 6th ISATED International Conference on Software Engineering and Applications, Cambridge, USA, 558-563, 2002 [11] Nguyễn Thanh Bình, M Delaunay, and C Robach, Testability Analysis of Data-Flow Software, Proceedings of International Workshop on Test and Analysis of Component Based Systems, Barcelona, Spain, 193-203, 2004 [12] Đỗ Huy Vũ, Nguyễn Thanh Bình, M Delaunay, C Robach, Analyse de la Testabilité des Logiciels Flots de Données Synchrones, Acts de la Première Conférence Internationale Associant Chercheurs Vietnamiens et Francophones, Hanoi, Vietnam, 223-232, 2003 ... người kiểm thử có giải pháp phân bố tài nguyên kiểm thử chọn lựa chiến lược kiểm thử tốt Nội dung báo sau: phần giới thiệu ngắn gọn mô hình phân tích cách đo KNKT sử dụng công cụ SATAN; phần trình... SATAN; phần trình bày kỹ thuật gán đơn tĩnh SSA; phần cách áp dụng công cụ SATAN để phân tích đơn thể chương trình đánh giá kết Phân tích khả kiểm thử hệ thống phần mềm Trước tiên, trình bày mô hình... sát đơn thể output4 Phương pháp phân tích đưa hai số: 1) Số luồng để kiểm thử cho phép đánh giá độ phức tạp đơn vị chương trình cần kiểm thử, bao gồm số lượng liệu kiểm thử cần thiết 2) Các giá

Ngày đăng: 20/12/2015, 06:24

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

Tài liệu liên quan