Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 86 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
86
Dung lượng
2,66 MB
Nội dung
MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG GIỚI THIỆU TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1.1 Khái niệm kiểm thử phần mềm 1.2 Mục đích kiểm thử 1.3 Các giai đoạn kiểm thử viên nên nghĩ tới trình kiểm thử 1.4 Các mức kiểm thử phần mềm .7 1.4.1 Kiểm thử tiến hành đội ngũ dự án 1.4.2 Kiểm thử tiến hành quan bên 1.4.3 Yêu cầu mức kiểm thử 1.5 Luồng thông tin kiểm thử .9 1.6 Thiết kế trường hợp kiểm thử 10 CHƯƠNG MỘT SỐ KỸ THUẬT KIỂM THỬ PHẦN MỀM 11 2.1 Biểu đồ luồng (Flow Graph) kiểm thử đường dẫn (Path Testing) 11 2.1.1 Các khái niệm kiểm thử đường dẫn 11 2.1.1.1 Định nghĩa 11 2.1.1.2 Dự đoán lỗi .11 2.1.1.3 Biểu đồ luồng điều khiển 12 2.1.2 Kiểm thử đường dẫn .15 2.1.2.1 Đường dẫn, nút liên kết .15 2.1.2.2 Tiêu chuẩn cho lựa chọn đường dẫn 16 2.1.2.3 Tiêu chuẩn cho kiểm thử đường dẫn .16 2.1.2.4 Ý nghĩa chiến lược chung .17 2.1.2.5 Hiệu kiểm thử đường dẫn 17 2.2 Kiểm thử luồng giao dịch (Transaction-Flow Testing) 18 2.2.1 Giới thiệu 18 2.2.2 Luồng giao dịch 18 2.2.2.1 Định nghĩa 18 2.2.2.2 Sử dụng 19 2.2.2.3 Thực 19 2.2.3.Kỹ thuật kiểm thử luồng giao dịch 20 2.2.3.1 Để có luồng giao dịch 20 2.2.3.2 Cơ sở liệu kiểm thử .20 2.2.3.3 Thực 20 2.3 Kiểm thử luồng liệu (Data-Flow Testing) .21 2.3.1 Định nghĩa .21 2.3.2 Các mô hình – Các cỗ máy luồng liệu .21 2.3.3 Biểu đồ luồng liệu 21 2.3.3.1 Trạng thái đối tượng liệu sử dụng 22 2.3.3.2 Các luồng liệu bất thường 22 2.3.3.3 Biểu đồ trạng thái luồng liệu bất thường 23 2.3.4 Mô hình luồng liệu 23 2.3.4.1 Các thành phần mô hình 23 2.3.4.2 Ví dụ: Xét hình 2.10 24 2.3.5 Các chiến lược kiểm thử luồng liệu 25 2.3.5.1 Các thuật ngữ 25 2.3.5.2 Các chiến lược 26 2.4 Kiểm thử miền (Domain Testing) .27 2.4.1 Mô hình 27 2.4.2 Kích thước miền .29 2.4.3 Các miền tốt, miền xấu 29 2.4.3.1 Các miền tốt 29 2.4.3.2 Các miền xấu 31 2.4.4 Dự đoán lỗi 31 2.4.5 Chiến lược kiểm thử miền 31 2.5 Kiểm thử cú pháp (Syntax Testing) 32 2.5.1 Tổng quan .32 2.5.2 Cú pháp cho định dạng - Ký hiệu BNF 32 2.5.2.1 Các phần tử 32 2.5.2.2 Các toán tử BNF .33 2.5.2.3 Sự lặp lại 33 2.5.2.4 Ví dụ 33 2.5.3 Thiết kế trường hợp kiểm thử 34 2.5.3.1 Chiến lược .34 2.5.3.2 Các lỗi cú pháp mức đỉnh, mức trung gian, mức trường .34 2.5.3.3 Lỗi dấu phân cách 36 2.5.3.4 Lỗi cú pháp phụ thuộc bối cảnh 37 2.5.3.5 Lỗi phụ thuộc trạng thái 37 2.6 Kiểm thử hộp đen (Black-box Testing) 37 2.6.1 Phân hoạch cân 39 2.6.2 Phân tích cực biên 39 2.6.3 Đoán lỗi 40 2.6.4 Kỹ thuật biểu đồ nguyên nhân - kết .40 2.6.5 Kiểm thử so sánh 41 2.7 Kiểm thử hộp trắng (White-box Testing) 42 CHƯƠNG CÁC CHIẾN LƯỢC KIỂM THỬ CHO CÁC LẬP TRÌNH VIÊN VÀ CÁC KIỂM THỬ VIÊN 43 3.1 Các chiến lược kiểm thử cho lập trình viên 43 3.1.1 Lập trình hợp tác 43 3.1.2 Sự bảo trì .43 3.1.3 Tự thẩm định 44 3.1.4 Thiết kế trường hợp kiểm thử 44 3.1.5 Thứ tự ưu tiên loại kiểm thử 45 3.2 Các chiến lược cho kiểm thử viên độc lập .45 3.2.1 Tổng quát 45 3.2.2 Sự thay đổi ngữ nghĩa 45 3.2.3 Các thay đổi kiểu 47 3.2.4 Các thay đổi biểu diễn 47 3.2.5 Những kết hợp nạp chồng 47 3.2.6 Các phương pháp truy xuất khác 48 3.2.7 Các tài nguyên động .48 3.2.8 Thay đổi phiên 49 3.2.9 Đọc mã tài liệu thiết kế khác .49 CHƯƠNG ỨNG DỤNG THIẾT KẾ MỘT CÔNG CỤ KIỂM THỬ TỰ ĐỘNG 50 4.1 Giới thiệu .50 4.2 Thiết kế mô hình tổng thể 50 4.3 Xây dựng công cụ 53 4.3.1 Không gian tên (Namespace) 53 4.3.2 .NET Reflection .55 4.3.3 Bảng tính (Spreadsheet) XML 55 4.3.4 Không gian tên NET CodeDOM 58 4.3.5 Thiết kế form 60 4.3.5.1 Giao diện công cụ 60 4.3.5.2 Form Kiểu kiểm thử .61 4.3.5.3 Form Quyết định kiểm thử tự động/bằng tay 61 4.4 Kết chạy thử nghiệm 62 4.4.1 Kiểm thử assembly – Kiểm thử đơn vị 62 4.4.2 Kiểm thử tham số truyền đối tượng - Kiểm thử tích hợp 71 4.4.3 Kiểm thử với nhiều tập liệu kiểm thử 76 4.4.4 Kiểm thử phương thức nạp chồng 77 4.4.5 Kiểm thử tham số truyền mảng 79 4.5 Nhận xét, đánh giá kết thu 80 4.5.1 Cải tiến kiểm thử đơn vị .80 4.5.2 Tự động tạo liệu kiểm thử .81 4.5.3 Cách tiếp cận cho kiểm thử tích hợp 81 4.5.4 Có khả cập nhật với khả kiểm thử 81 4.5.5 Viết test script dựa vào liệu 81 KẾT LUẬN 83 TÀI LIỆU THAM KHẢO .84 PHỤ LỤC .85 LỜI NÓI ĐẦU Công nghệ phần mềm (Software Engineering) áp dụng cách có hệ thống, có kỷ luật định lượng cho việc phát triển, hoạt động bảo trì phần mềm Ngành học kỹ nghệ phần mềm bao gồm kiến thức, công cụ phương pháp cho việc định nghĩa yêu cầu phần mềm, thực tác vụ thiết kế phần mềm, xây dựng phần mềm, kiểm thử phần mềm (Software testing) bảo trì phần mềm Kiểm thử phần mềm giai đoạn kỹ nghệ phần mềm, giai đoạn mấu chốt quy trình phát triển phần mềm nhằm đảm bảo chất lượng phần mềm Trong thời đại ngày nay, mà ngành công nghiệp phần mềm phát triển vũ bão yêu cầu chất lượng phần mềm ngày trở nên nghiêm ngặt Tuy nhiên thực tế Việt Nam nhiều nước khác, kiểm thử phần mềm chưa coi trọng vai trò Việc thiết kế kiểm thử kiểm thử chưa tiến hành cách có hệ thống, có phương pháp Để nắm vững phần triển khai ứng dụng lĩnh vực này, em chọn đề tài “Kiểm thử phần mềm ứng dụng thiết kế công cụ kiểm thử tự động” làm đồ án tốt nghiệp Mục đích đồ án tìm hiểu, hệ thống khái niệm bản, chiến lược, kỹ thuật kiểm thử phần mềm, sở xây dựng thử nghiệm hệ thống kiểm thử phần mềm đơn giản Đồ án gồm nội dung sau: Chương Giới thiệu tổng quan kiểm thử phần mềm Chương Một số kỹ thuật kiểm thử phần mềm Chương Các chiến lược kiểm thử cho lập trình viên kiểm thử viên Chương Ứng dụng phát triển công cụ kiểm thử tự động Hiện Việt Nam công cụ, phần mềm ứng dụng chưa sử dụng cách rộng rãi, phần mềm ứng dụng đểu nhằm đạt mục tiêu giải toán cụ thể chưa phải phần mềm có tính chất thương mại, sử dụng cho lớp rộng rãi lĩnh vực gần nhau, chưa xuất nhiều việc có phần mềm nhằm lớp toán cạnh tranh với Trong bối cảnh đó, việc xây dựng phần mềm kiểm thử để đánh giá hiệu phần mềm chưa phải vấn đề cấp bách, song với xu phát triển nước giới công nghệ phần mềm, việc xây dựng phần mềm kiểm thử, đánh giá tính đắn hiệu phần mềm ứng dụng việc làm tất yếu đến Song trước mắt việc thực đề tài gặp nhiều khó khăn, kết nghiên cứu thực nghiệm có nhiều hạn chế Em hy vọng tương lai tiếp tục phát triển ý tưởng xây dựng sản phẩm kiểm thử đáp ứng yêu cầu thực tiễn hữu ích cho người sử dụng CHƯƠNG GIỚI THIỆU TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM Mục đích chương đưa nhìn tổng thể kiểm thử phần mềm: kiểm thử phần mềm gì, có loại kiểm thử phần mềm nào, mục đích kiểm thử phần mềm tiến trình kiểm thử phần mềm tiến hành nào? 1.1 Khái niệm kiểm thử phần mềm Kiểm thử phần mềm khâu mấu chốt để đảm bảo chất lượng phần mềm, đánh giá cuối đặc tả, thiết kế mã hoá Kiểm thử phần mềm trình chạy thử ứng dụng để phát lỗi xem có thoả mãn yêu cầu đặt Trong trình phát triển phần mềm, người phát triển phần mềm kỹ sư kiểm thử làm việc để phát lỗi đảm bảo chất lượng sản phẩm Một sản phẩm phần mềm phân phối phải có đầy đủ chức yêu cầu tương thích với phần cứng khách hàng Hoạt động kiểm thử nhà quản lý ý tốn kém, thời gian phát lỗi Hơn nữa, tổ chức phát triển phần mềm không chấp nhận chi đến 40% tổng lực dự án cho kiểm thử Trong số trường hợp, kiểm thử phần mềm liên quan đến người (như kiểm soát chuyến bay, điều khiển lò phản ứng hạt nhân) tốn gấp ba đến năm lần tất bước kỹ nghệ phần mềm khác cộng lại Kết phần lớn ứng dụng không kiểm thử đầy đủ phân phối mà tiềm ẩn lỗi 1.2 Mục đích kiểm thử Ít lập trình viên thích công việc kiểm thử, chí với thiết kế kiểm thử hơn, đặc biệt thiết kế kiểm thử kiểm thử nhiều thời gian thiết kế viết mã Những số liệu cho thấy lập trình tốt có 1-3 lỗi 100 câu lệnh Vấn đề phải làm để ngăn ngừa phát lỗi sớm tốt Thiết kế kiểm thử kiểm thử nên tập trung vào ngăn ngừa lỗi Với khu vực thiết kế kiểm thử kiểm thử không ngăn ngừa lỗi chúng nên phát dấu hiệu lỗi Các lần kiểm thử nên cung cấp chuẩn đoán dễ hiểu để lỗi dễ dàng sửa Ngăn ngừa lỗi mục tiêu kiểm thử, ngăn ngừa lỗi tốt phát sửa lỗi ngăn ngừa lỗi sửa mã Hơn nữa, không cần phải kiểm tra lại xem việc sửa lỗi đắn, không tiêu tốn nhớ, không phá vỡ kế hoạch làm việc Có vai trò lớn hơn, thiết kế kiểm thử công cụ ngăn chặn lỗi tốt biết đến Mục đích tạo kiểm thử có ích để phát loại bỏ lỗi trước chúng viết mã Trên thực tế thiết kế kiểm thử phát loại bỏ lỗi giai đoạn trình thiết kế phần mềm, từ ý tưởng đến đặc tả, thiết kế, viết mã phần lại 1.3 Các giai đoạn kiểm thử viên nên nghĩ tới trình kiểm thử Tại phải kiểm thử? Mục đích việc kiểm thử gì? Tiến trình mô tả năm giai đoạn sau: Giai đoạn 0: Không có khác biệt kiểm thử gỡ lỗi, kiểm thử để hỗ trợ cho gỡ lỗi Giai đoạn 1: Kiểm thử thấy phần mềm làm việc Giai đoạn 2: Kiểm thử thấy phần mềm không làm việc Giai đoạn 3: Mục đích kiểm thử làm giảm rủi ro nhận thấy phần mềm không làm việc tới mức chấp nhận Giai đoạn 4: Kiểm thử quy luật mà hoạt động trí óc để thu phần mềm với rủi ro thấp mà không nhiều công sức 1.4 Các mức kiểm thử phần mềm Các phép kiểm thử có mặt mức khác tiến hành cá nhân khác trình phát triển ứng dụng 1.4.1 Kiểm thử tiến hành đội ngũ dự án Được gọi kiểm thử phát triển (Development tesingt) bao gồm: Kiểm thử đơn vị (Unit testing): tiến hành cho đơn vị mã nhỏ hàm, module Kiểm thử tích hợp (Integration testing): kiểm thử mặt logic xử lý khối, kiểm thử việc truyền tin chúng Kiểm thử viên tiến hành kiểm thử giao diện, tương tác thành phần, module, cửa sổ Kiểm thử chức (Functional testing): kiểm thử mức độ (lớp, module, giao diện hay hệ thống) để kiểm tra xem có với đặc tả hay không? Kiểm thử hệ thống (System testing): kiểm thử hệ thống cách toàn diện để đánh giá đặc tả chức có đáp ứng, thao tác giao diện có giống thiết kế không? Kiểm thử tích hợp hệ thống (System integration testing): kiểm tra hệ thống có tích hợp với phần mềm hãng thứ ba hay giao diện hệ thống khác hay không? Kiểm thử thực thi (Performance testing): Để kiểm tra hiệu suất chương trình có đáp ứng mong đợi hay không? 1.4.2 Kiểm thử tiến hành quan bên Được gọi đảm bảo chất lượng (Quality Assurance - QA) kiểm thử chấp nhận (Acceptance testing) Người người sử dụng hay đại diện người dùng nằm điều khiển quản lý người quản lý dự án QA testing tương tự system testing mặt mục đích cách tiến hành Các báo cáo kiểm thử QA gửi thường xuyên tới người quản lý dự án Các QA lập kế hoạch kiểm tra để đảm bảo ứng dụng thực tất chức cần thiết Kiểm thử QA bước cuối trước ứng dụng sản xuất đại trà 1.4.3 Yêu cầu mức kiểm thử Mỗi mức kiểm thử đòi hỏi phải xác định chiến lược kiểm thử Đó là: Black box testing hay White box testing: Black box testing: kiểm tra mặt chức phi chức mà không tham khảo cấu trúc bên thành phần hay hệ thống Kết dự đoán so sánh với kết thực tế để đánh giá mức độ thành công White box testing: việc kiểm tra dựa phân tích cấu trúc bên thành phần hệ thống Top-down hay bottom-up: Top-down: phương thức kiểm tra tích hợp mà thành phần hệ thông cấp bậc kiểm tra trước, với thành phần cấp thấp xem phần gốc Bottom-up: việc kiểm tra tích hợp thành phần thuộc lớp thấp kiểm tra trước, sau dùng để làm cho việc kiểm tra thành phần thuộc lớp cao dễ dàng Qui trình lặp lại thành phần đầu cấu trúc kiểm tra Các chiến lược kiểm thử không loại trừ lẫn nhau, sử dụng riêng rẽ hay đồng thời Với ứng dụng phải sử dụng nhiều chiến lược để phát hết lỗi Các chiến lược sau xác định áp dụng để tạo trường hợp kiểm thử cụ thể 1.5 Luồng thông tin kiểm thử Cấu hình phần mềm Đánh giá Kết kiểm thử Dữ liệu tỷ lệ lỗi Kiểm thử Cấu hình kiểm thử Lỗi Gỡ lỗi Sửa chữa Kết trông đợi Mô hình tin cậy Hình 1.1.Luồng thông tin kiểm thử Độ tin cậy dự kiến Hai lớp vào cung cấp cho tiến trình kiểm thử: Cấu hình phần mềm, bao gồm: đặc tả yêu cầu phần mềm, đặc tả thiết kế chương trình gốc Cấu hình kiểm thử, bao gồm: kế hoạch thủ tục kiểm thử Kiểm thử tiến hành tất kết đánh giá Khi liệu lỗi phát việc gỡ lỗi bắt đầu Quá trình gỡ lỗi phần khó dự kiến trước tiến trình kiểm thử, lỗi sai biệt độ 0.01% kết mong đợi thực tế giờ, ngày, tháng để chuẩn đoán sửa chữa Sau kết kiểm thử thu thập đánh giá, cần có dẫn định lượng chất lượng độ tin cậy phần mềm Nếu hay gặp phải lỗi nghiêm trọng yêu cầu sửa đổi thiết kế chất lượng độ tin cậy phần mềm đáng ngờ, cần phải có thêm kiểm thử Còn chức phần mềm làm việc đúng, lỗi gặp phải dễ sửa rút hai kết luận: Chất lượng độ tin cậy phần mềm chấp nhận Kiểm thử chưa thấy lỗi nghiêm trọng Nếu kiểm thử không phát lỗi cấu hình kiểm thử chưa cân nhắc mức lỗi tiềm ẩn phần mềm 1.6 Thiết kế trường hợp kiểm thử Thiết kế kiểm thử cho phần mềm sản phẩm kĩ nghệ khác khó khăn việc thiết kế ban đầu cho sản phẩm Các kỹ sư phần mềm thường xem kiểm thử việc giải sau, xây dựng trường hợp kiểm thử “cảm thấy đúng” không đảm bảo tính đầy đủ 10 public double Triangle(double length1, double length2) { Double height=Math.Sqrt(Math.Pow(length1, 2)-Math.Pow(length2/2, 2)); return (length2 * height)/2; } public double Triangle(double length1, double length2, double length3) { SortIT(ref length1, ref length2, ref length3); double len4 = GetTriangleHeight(length1,length2,ref length3); return length3*len4/2; } private void SortIT(ref double len1, ref double len2, ref double len3) { ArrayList lengthArr = new ArrayList(); lengthArr.Add(len1); lengthArr.Add(len2); lengthArr.Add(len3); lengthArr.Sort(); len1 = (double)lengthArr[0]; len2 = (double)lengthArr[1]; len3 = (double)lengthArr[2]; } public double GetTriangleHeight(double len1, double len2, ref double len3) { SortIT(ref len1, ref len2, ref len3); double x=len1 * 0.75; bool isRight; isRightTriangle(len1,len2,ref len3, out isRight); 72 if (isRight) { len3 = len1; return len2; } while (Math.Abs(x*x - (len1*len1 -(len3-Math.Sqrt(len2*len2 - x*x)) *(len3-Math.Sqrt(len2*len2 - x*x)))) > 0.00001) { x = x - (x*x - (len1*len1 -(len3-Math.Sqrt(len2*len2 - x*x))* (len3-Math.Sqrt(len2*len2 - x*x))))/(4*x-len1*len1-len3*len3+2*len3*x/ (Math.Sqrt(len2*len2-x*x))-len2*len2); } return Math.Abs(x); } public void isRightTriangle(double len1, double len2, ref double len3, out bool isRight) { if (len1*len1 + len2*len2 == len3*len3) isRight = true; else isRight = false; } public double Square(double length) { return length * length; } public double Circle(double Radius) { return Math.PI * Math.Pow(Radius, 2); } 73 public void SimpleCalc(LowLevelObj.SimpleMath lvlMath, LowLevelObj.Math_ENUM operation, out int Result) { Result = 0; switch (operation) { case LowLevelObj.Math_ENUM.Add: Result = lvlMath.FirstNum + lvlMath.SecondNum; break; case LowLevelObj.Math_ENUM.Subtract: Result = lvlMath.FirstNum - lvlMath.SecondNum; break; case LowLevelObj.Math_ENUM.Multiply: Result = lvlMath.FirstNum * lvlMath.SecondNum; break; case LowLevelObj.Math_ENUM.Divide: try { Result = lvlMath.FirstNum / lvlMath.SecondNum; } catch (Exception e) { throw e; } break; } } public double Sum(double[] anArray) { double sum=0; 74 foreach (double arrItem in anArray) { sum += arrItem; } return sum; } } } Kiểm thử assembly này: Chạy ứng dụng, nhấn nút Kiểm thử, hộp thoại xuất Tìm đường dẫn đến thư mục chứa assembly HighLevelObj.dll, chọn assembly nhấn Open, cửa sổ Các kiểu để kiểm thử xuất Đánh dấu lớp AdvancedCalc hộp danh sách kiểm tra Nhấn nút Chấp nhận Trang Excel mở chứa tất constructor phương thức lớp AdvancedCalc Phương thức SimpleCalc() có tham số đối tượng LowLevelObj.SimpleMath Sửa giá trị thành new Lưu thay đổi lại Hình 4.33 Dữ liệu tất phương thức, thuộc tính lớp AdvancedCal Quay trở lại giao diện chương trình Chắc chắn hộp kiểm tra thực tay đánh dấu 75 Nhấn nút Tạo Script Công cụ bắt đầu tạo test script phát giá trị new cho tham số LowLevelObj.SimpleMath Hộp thoại mở tệp xuất để xác định assembly tạo nên đối tượng SimpleMath Tìm đến thư mục chứa assembly LowLevelObj.dll chọn 10 Nhấn nút Open Cửa sổ Thực tự động/bằng tay mở 11 Nhấn nút Browse Hộp thoại mở tệp xuất để tìm đến assembly nơi đối tượng SimpleMath tạo 12 Tìm đường dẫn đến thư mục chứa tệp TestLowLevelObj.exe, chọn nhấn Open 13 Nhấn nút Chấp nhận Test script tạo 14 Biên dịch test script thu kết hình 4.11 Hình 4.34 Kết kiểm thử lớp AdvancedCalc Kết trả cho biết việc kiểm thử tích hợp module LowLevel.dll với module HighLevel.dll thành công lỗi xảy 4.4.3 Kiểm thử với nhiều tập liệu kiểm thử Test script chạy lại, lần chạy lại kỹ sư kiểm thử sử dụng liệu lưu trữ hay khác Thông thường kỹ sử kiểm thử muốn chạy test script với nhiều tệp Excel lưu liệu lần Vì công cụ kiểm thử xây dựng tệp để lưu tập tệp Excel Giả sử vừa xây dựng xong test script cho assembly LowLevelObj.dll Để tạo nhiều liệu kiểm thử, thực theo bước sau: 76 1.Tìm đến thư mục chứa tệp lưu trữ liệu kiểm thử testLowLevelObjData.xls Sao chép tệp số tệp với tên khác Mở tệp để gán giá trị cho tham số Lưu lại thay đổi Quay trở giao diện ứng dụng Nhấn nút Thêm liệu Hộp thoại xuất Tìm đến thư mục chứa tệp liệu vừa chép Nhấn Open Lúc cửa sổ ứng dụng hình 4.12 Nhấn nút Ghi liệu cửa sổ ứng dụng Nội dung hộp văn ghi vào tệp fileArray.txt nằm thư mục \Bin\Debug dự án test script 10 Chạy lại tệp thi hành testLowLevelObj.exe để chạy lại test script Nó chạy số lần tương ứng với số tệp lưu trữ tệp fileArray.txt Hình 4.35 Kiểm thử với nhiều liệu kiểm thử 4.4.4 Kiểm thử phương thức nạp chồng Một vài phương thức lớp thường bị nạp chồng vài lần để giải vấn đề tình khác nhau, đồng thời làm tăng tính mềm dẻo sản phẩm phần mềm 77 Công cụ kiểm thử giải vấn đề phương thức nạp chồng cách liệt kê tất phương thức nạp chồng với tham số tương ứng chúng, giúp xác định phương thức cần kiểm thử Trong ví dụ xây dựng assembly HighLevelObj.dll lớp AdvancedCalc có hai constructor ba phương thức Triangle() bị nạp chồng Kiểm thử phương thức này: Chạy ứng dụng Nhấn nút Kiểm thử Tìm đường dẫn tới assembly HighLevelObj.dll Chọn lớp AdvancedCalc để kiểm thử Bảng Excel mở với thông tin constructor, phương thức thuộc tính lớp Thay đổi giá trị tham số phương thức Triangle để tạo nên trường hợp kiểm thử khác Phải luôn phải gán giá trị new cho đối tượng lvlMath để kiểm thử phương thức SimpleCalc() Lưu lại thay đổi Quay lại cửa sổ ứng dụng Không đánh dấu kiểm tra hộp kiểm tra Thực tay Nhấn nút Tạo Script chạy dự án cho test script Kết kiểm thử hình 4.13 Hình 4.36 Kết kiểm thử phương thức nạp chồng constructor Kết trả phương thức Triangle nạp chồng thứ ba (ô D6) giá trị trả phương pháp xấp xỉ Newton-Raphson Có sai khác kết 78 thực tế kết mong đợi Nếu độ sai khác chấp nhận kiểm thử thành công 4.4.5 Kiểm thử tham số truyền mảng Phương pháp xử lý giá trị mảng tính tiện lợi để tạo nên công cụ kiểm thử tự động Trong assembly HighLevelObj.dll xây dựng phương thức Sum() có tham số truyền mảng Kiểu giá trị mảng double Phương thức Sum() cộng tất giá trị phần tử mảng trả kết tổng Để kiểm thử tham số truyền mảng, thực bước sau: Chạy ứng dụng Nhấn nút Kiểm thử Tìm đường dẫn đến vị trí assembly HighLevelObj.dll Nhấn Open Hộp thoại xuất Chọn lớp AdvancedCalc 6.Nhấn OK Trang Excel xuất Sao chép dòng chứa phương thức Sum() dán thêm xuống vài dòng Thay đổi giá trị mảng Lưu lại thay đổi Hình 4.14 bảng liệu sau chỉnh sửa Hình 4.37 Bảng liệu sau chỉnh sửa 79 Không đánh dấu ô kiểm tra Thực tay 10 Nhấn nút Tạo Script chạy dự án cho test script này, kết thu hình 4.15 Hình 4.38 Kết kiểm thử phương thức có tham số mảng Kết trả tổng phần tử mảng cột Actual Return với giá trị phần tử cho kiểm thử viên 4.5 Nhận xét, đánh giá kết thu 4.5.1 Cải tiến kiểm thử đơn vị Những công cụ kiểm thử tạo test script thiết kế đối chiếu Tuy nhiên kiểm thử viên phải xác định đơn vị hay phương thức kiểm thử Các test script kiểm thử phương thức thời điểm Khi lớp có nhiều phương thức, số lượng test script làm cho việc kiểm thử khó khăn yêu cầu phải làm việc tập trung Công cụ kiểm thử phát triển xem xét tất phương thức assembly để kiểm thử Sau kiểm thử viên cung cấp assembly, công cụ tạo test script để kiểm thử tất constructor, phương thức, thuộc tính, bao gồm phương thức kế thừa từ lớp sở Những người phát triển thường tạo constructor hay phương thức nạp chồng để tạo nên tính mềm dẻo cho ứng dụng Công cụ kiểm thử kiểm thử phương thức với tập tham số khác chúng bị nạp chồng 80 4.5.2 Tự động tạo liệu kiểm thử Để gán giá trị thích hợp cho tham số, kiểm thử viên phải dành thời gian để học module ứng dụng kiểm thử Đây trở ngại cho kiểm thử tự động Công cụ kiểm thử phát triển cho phép tự động tạo giá trị kiểm thử dựa vào giá trị nguyên thuỷ tham số Nó sử dụng trường hợp kiểm thử lưu trữ tài liệu XML cung cấp người phát triển viết mã Sử dụng công cụ kiểm thử viên khai báo mảng cho tham số truyền mảng 4.5.3 Cách tiếp cận cho kiểm thử tích hợp Xảy không tương thích kiểm thử tích hợp kiểm thử thao tác phận Các công cụ kiểm thử ngày cho phép kiểm thử viên thêm vào đối tượng gốc hay đối tượng giả lập để kiểm thử phương thức có tham số đối tượng Công cụ phát triển sử dụng lại đối tượng trả từ test script trước Test script trước thực thành công tạo đối tượng thực lớp kiểm thử Khi phát đối tượng lớp mức thấp kiểm thử lớp mức cao, test script tạo trước gọi để cung cấp đối tượng 4.5.4 Có khả cập nhật với khả kiểm thử Có thể phát triển công cụ kiểm thử với nhiều khả kiểm thử khác đáp ứng yêu cầu kiểm thử dựa theo cách tiếp cận tương tự cách tiếp cận để xây dựng công cụ 4.5.5 Viết test script dựa vào liệu Công cụ kiểm thử không sử dụng phương pháp bắt giữ/phát lại (capture/playback) để viết test script mà sử dụng phương pháp tìm kiếm qua toàn assembly kiểm thử để tìm tất thành viên Tiếp chuẩn bị đối tượng lưu trữ liệu với trường hợp kiểm thử thích hợp cho tất thành viên Dựa vào thành viên tìm thấy trường hợp kiểm thử soạn, test script tạo Cuối dịch test script sang assembly 81 thi hành (.exe) hay thư viện liên kết động (.dll) Assembly chạy độc lập, liệu lưu trữ chép hay chỉnh sửa DLL hay EXE assembly gọi đến kiểm thử tích hợp Tuy nhiên công cụ xây dựng giải toán nhỏ lớp toán kiểm thử phần mềm Trong dự án phần mềm thường sử dụng nhiều công cụ để kiểm thử với chức nhiệm vụ khác nhau, sử dụng giai đoạn cụ thể thường phải định lựa chọn công cụ sử dụng, sử dụng giai đoạn Thêm vào phát triển vũ bão công nghệ, kỹ thuật đại Chính để xây dựng công cụ giải vấn đề, đáp ứng yêu cầu kiểm thử phần mềm tự động khó khăn 82 KẾT LUẬN Trong trình thực đồ án tốt nghiệp em thu số kết sau: 1) Nắm khái niệm chung kiểm thử 2) Tìm hiều nắm số kỹ thuật kiểm thử phần mềm 3) Tìm hiểu nắm chiến lược kiểm thử cho lập trình viên hay kiểm thử viên 4) Bước đầu ứng dụng xây dựng công cụ kiểm thử tự động đơn giản với số chức cải tiến 5) Nâng cao khả đọc, hiểu dịch tài liệu tiếng Anh cho thân Tuy nhiên thời gian có hạn, kinh nghiệm thân thực tế chưa nhiều vấn đề mẻ không thân em mà mẻ Việt Nam nên chắn báo cáo nhiều hạn chế Hy vọng bước đệm tốt cho nghiên cứu công việc sau Em mong nhận nhận xét, bảo thầy cô để làm sở cho hướng phát triển sau Em xin chân thành cảm ơn! 83 TÀI LIỆU THAM KHẢO [1] Boris Beizer, Software Testing Techniques, Second Edition, 1990 [2] Kanglin Li Menqi Wu, Effective Software Test Automation: Developing an Automated Software Testing Tool, Sybex 2004 [3] Website: http://www.wikipedia.org [4] Website: http://www.VietNameseTestingBoard.com [5] Professional C#, nd Edition, Wrox Press Ltd [6] Website: http://www.ddth.com [7] Website: http://www.Diendantinhoc.org [8] Website: http://ttvnol.com 84 PHỤ LỤC Hình 1.1.Luồng thông tin kiểm thử Hình 2.1.Các thành phần biểu đồ luồng điều khiển 12 Hình 2.2.Chương trình ví dụ 13 Hình 2.3 Biểu đồ trình tự 1-1 14 Hình 2.4 Biểu đồ luồng điều khiển 14 Hình 2.5 Ký hiệu biểu đồ luồng điều khiển đơn giản 14 Hình 2.6 Ký hiệu biểu đồ luồng điều khiển đơn giản 15 Hình 2.7 Ký hiệu biểu đồ luồng điều khiển danh sách liên kết 15 Hình 2.8 Luồng giao dịch thực .19 Hình 2.9 Biểu đồ luồng liệu bất thường .23 Hình 2.10 Các biểu đồ luồng điều khiển 25 Hình 2.11 Quan hệ chiến lược kiểm thử có cấu trúc .27 Hình 2.12 Biểu đồ biểu diễn kiểm thử miền 27 Hình 2.13 Miền chiều 28 Hình 2.14 Một số miền tốt hai chiều .29 Hình 2.15 Một vài đường biên khôngđầy đủ 30 Hình 2.16 Các đường biên nghiêng 30 Hình 2.17 Các đường biên tuyến tính không trực giao 31 Hình 2.18 Biểu đồ định nghĩa phone_number 34 Hình 2.19 Kiểm thử hộp đen 37 Hình 2.20 Biểu đồ nguyên nhân kết chức tạo khách hàng 41 Hình 2.21 Kiểm thử hộp trắng 42 Hình 3.1 Cấu trúc tài nguyên động 49 Hình 4.1 Các bước trình kiểm thử tự động 51 Hình 4.2 Giao diện công cụ 60 Hình 4.3 Form Kiểu kiểm thử 61 Hình 4.4 Form Quyết định kiểm thử tự động/bằng tay 61 Hình 4.5 Các kiểu lớp tìm thấy LowLevelObj.dll 67 Hình 4.6 Các thông tin thu thập từ lớp SimpleMath 67 Hình 4.7 Chú thích cho tham số 68 Hình 4.8 Sau gán giá trị cho tham số thêm vài phương thức 69 Hình 4.9 Báo cáo kết kiểm thử 70 Hình 4.10 Dữ liệu tất phương thức, thuộc tính lớp AdvancedCal .75 Hình 4.11 Kết kiểm thử lớp AdvancedCalc 76 Hình 4.12 Kiểm thử với nhiều liệu kiểm thử 77 Hình 4.13 Kết kiểm thử phương thức nạp chồng constructor 78 85 Hình 4.14 Bảng liệu sau chỉnh sửa .79 Hình 4.15 Kết kiểm thử phương thức có tham số mảng .80 86 [...]... lập ở rất nhiều nơi khác nhau Kiểm thử đường dẫn có thể ứng dụng để kiểm thử đơn vị với phần mềm mới, yêu cầu kiểm thử viên phải có hiểu biết đầy đủ về cấu trúc của chương trình và thường được sử dụng bởi những lập trình viên để kiểm tra từng phần trong mã nguồn Tác dụng của nó giảm khi kích thước của phần mềm tăng sau mỗi lần kiểm thử và ít khi được sử dụng cho kiểm thử hệ thống 2.1.1.2 Dự đoán lỗi... thiết kế kiểm thử cú pháp có thể và nên được làm tự động 7 Thực hiện kiểm thử một cách tự động là cần thiết cho kiểm thử cú pháp bởi vì phương pháp này sinh ra rất nhiều phép kiểm thử 2.5.2 Cú pháp cho các định dạng - Ký hiệu BNF 2.5.2.1 Các phần tử Mỗi đầu vào có thể được xem như là một chuỗi các ký tự Việc định nghĩa cú pháp phải mang tính hình thức, bắt đầu với các phần tử cơ bản nhất Dưới đây là một. .. sách liên kết Mỗi nút đều có tên và có một lối vào trong danh sách cho mỗi liên kết trong biểu đồ 2.1.2 Kiểm thử đường dẫn 2.1.2.1 Đường dẫn, nút và liên kết Một đường dẫn trong chương trình là một chuỗi các câu lệnh hoặc các khai báo bắt đầu một đầu vào, một điểm nối hay một quyết định và kết thúc ở một 15 điểm khác có thể là một điểm nối, một quyết định hay đầu ra Một đường dẫn có thể đi qua nhiều... được thiết kế nên các lập trình viên và kiểm thử viên tự thiết kế cơ sở dữ liệu của mình nhưng lại không thích hợp Kết quả là mỗi kiểm thử viên cần tới sự trợ giúp của toàn bộ hệ thống Thông thường thì những kiểm thử viên độc lập cần nhiều thiết kế kiểm thử tỉ mỉ hơn các lập trình viên, vì vậy yêu cầu phải thành lập các nhóm kiểm thử Lúc này lỗi thứ hai xảy ra Để tránh lặp lại sự lộn xộn trên, sẽ có một. .. thuật kiểm thử đường dẫn là cổ nhất trong số các kỹ thuật kiểm thử có cấu trúc được sử dụng tại IBM hơn hai thập niên Ý tưởng thực hiện mỗi câu lệnh và mỗi nhánh ít nhất một lần sau vài lần kiểm thử là của những người nghiên cứu sâu về kiểm thử phần mềm Chúng cũng là các kỹ thuật đầu tiên được nghiên cứu tỉ mỉ về lý thuyết Có nhiều bằng chứng chứng tỏ kiểm thử đường dẫn được phát hiện và sử dụng một cách... biên thuộc về hai miền khác nhau nên các điểm được sử dụng để kiểm thử một miền cũng có thể sử dụng để kiểm thử các miền bên cạnh Làm các kiểm thử và bằng phân tích cuối cùng xác định các đường biên nào là lỗi Làm một số kiểm thử cần thiết để kiểm tra lại mỗi đường biên của mỗi miền 2.5 Kiểm thử cú pháp (Syntax Testing) 2.5.1 Tổng quan Kiểm thử cú pháp bao gồm các bước sau: 1 Nhận dạng ngôn ngữ... này và việc biểu diễn là đúng thì sẽ dễ dàng tạo nên các luồng giao dịch Mục đích là có được phác thảo những gì xảy ra với các giao dịch - phác thảo sự phát triển của các hành động 2.2.3.2 Cơ sở dữ liệu kiểm thử Khoảng 30%-40% công sức thiết kế kiểm thử luồng giao dịch là việc thiết kế và bảo trì cơ sở dữ liệu kiểm thử Có hai lỗi chính trong thiết kế cơ sở dữ liệu Đầu tiên, do không biết có một kiểm thử. ..CHƯƠNG 2 MỘT SỐ KỸ THUẬT KIỂM THỬ PHẦN MỀM Toàn bộ chương này được sử dụng để trình bày các kỹ thuật kiểm thử thường được sử dụng trong các dự án phần mềm Còn có rất nhiều kỹ thuật kiểm thử khác được sử dụng trong quá trình phát triển phần mềm Tuy nhiên, các kỹ thuật được trình bày dưới đây là các kỹ thuật cơ bản nhất đối với các kiểm thử viên hay thậm chí với cả các lập... yêu cầu kiểm thử Một hệ thống thông thường với khoảng nửa triệu dòng mã nguồn có thể cần tới bốn hoặc năm cơ sở dữ liệu không tương thích hỗ trợ cho kiểm thử Việc thiết kế các cơ sở dữ liệu này quan trọng không kém việc thiết kế các cấu trúc dữ liệu của hệ thống, yêu cầu những nhà thiết kế phải có kinh nghiệm, năng lực, khéo léo, tỉ mỉ - kinh nghiệm trong cả thiết kế hệ thống và thiết kế kiểm thử 2.2.3.3... định nghĩa: item ::= atype / btype / ctype / dtype etype Sau đây là một số trường hợp kiểm thử: Làm cho nó sai: Sử dụng một phần tử đúng ở một số mức cú pháp thấp hơn khác nhưng không phải ở mức này 34 Sử dụng một kết hợp sai: phần tử cuối cùng là kết hợp của hai phần từ khác theo thứ tự đã chỉ ra Đảo lộn thứ tự của các phần tử và kết hợp chúng lại dtype atype / btype etype / etype dtype / etype