Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
914,16 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÀI TẬP – CÁC KỸ THUẬT KIỂM THỬ VÀ GỠ RỐI CHƯƠNG TRÌNH ÁP DỤNG CHO JAVA VÀ PYTHON BÀI TẬP NHĨM MƠN HỌC IT3040 – KỸ THUẬT LẬP TRÌNH 2018-2019 Giảngviênhướngdẫn Lớp : PGS TS Huỳnh Quyết Thắng : KSTN_CNTT_K62 HÀ NỘI 2019 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python II.2.1.A: Mô tả thuật toán: 1/ Bubble Sort: - Bubble sort thuật toán so sánh đơn giản Thuật toán so sánh cặp phần tử liền kề sau đổi chỗ chúng chúng khơng theo thứ tự - Thuật tốn khơng phù hợp để sử dụng cho liệu lớn thời gian tính tốn trung bình tình tồi O - Cách thức thuật tốn làm việc: Giả sử có mảng gồm phần tử chưa xếp ta muốn xếp tăng dần: A = [2, 5, 1, 10, 29] Chúng ta bắt đầu với cặp phần tử (2, 5), thứ tự cặp với yêu cầu Ta chuyển qua cặp (5, 1) sau xếp đổi chỗ phần tử (1, 5), đến hết phần tử mảng Kết sau vòng lặp là: A = [2, 1, 5, 10, 29] Và khơng cịn cặp giá trị cần xếp thuật tốn kết thúc 2/ Insertion Sort: - Đây thuật toán xếp dựa vào vị trí so sánh Giả sử có phần thấp mảng xếp ta xét phần tử mảng cần biết vị trí phù hợp để chèn phần tử vào dãy phụ xếp trước - Thuật tốn khơng phù hợp với liệu lớn, thời gian tính trung bình trường hợp tồi O - Cách thức làm việc thuật tốn: Giả sử ta có mảng chưa xếp: B = [10, 29, 21, 5, 50] Ban đầu ta xét phần tử B[1] (29) thấy theo thứ tự ta dãy xếp (10, 29) Ta chuyển lên phần tử B[2] = 21 So sánh với phần tử B[1] = 29, ta tiến hành đổi B[2] = 29, B[1] = 21 Dãy xếp (10, 21, 29) Tiếp tục với phần tử B[3] = Đầu tiên ta đổi chỗ B[3] B[2], B[2] lúc 5, ta lại tiếp tục đổi B[2] A[1], cuối B[1] B[0] Ta thu dãy xếp (5, 10, 21, 29) Tiếp tục phần tử cuối ta được: 22 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python B = [5, 10, 21, 29, 50] 3/ Selection Sort: - Đây thuật toán xếp đơn giản Thuật toán xếp dựa vào so sánh vị trí Thuật taons chia mảng thành phần phần bên trái dãy xếp phần bên phải phần chưa xếp - Thuật toán khơng phù hợp với liệu lớn thời gian tính tốn trung bình trường hợp xấu O - Cách thức làm việc thuật tốn: Giả sử có mảng số chưa xếp muốn xếp tăng dần: C = [12, 10, 5, 29, 21] Đầu tiên ta tìm phần tử nhỏ mảng tiến hành đổi vị trí với phần tử ngồi bên trái Lúc chia làm dãy: dãy bên trái C1 = [5], dãy bên phải C2 = [12, 10, 29, 21] C = [5, 12, 10, 29, 21] Tiếp tục tìm kiếm phần tử nhỏ phần bên phải đổi chỗ cho phần tử bên trái C2 Lúc phần tử nhỏ thêm vào C1 ta được:C1 = [5, 10], C2 = [12, 29, 21] Cứ tiếp tục thuật toán ta thu được: C = [5, 10, 12, 21, 29] 4/ Merge sort: -Merge sort thuật toán chia để trị Thuật toán chia mảng cần xếp thành nửa Tiếp tục lặp lại việc nửa mảng chia Sau gộp nửa thành mảng xếp Hàm merge() sử dụng để gộp hai nửa mảng Hàm merge(arr, l, m, r) tiến trình quan trọng gộp hai nửa mảng thành mảng xếp, nửa mảng arr[l…m] arr[m+1…r] sau gộp thành mảng xếp -Hình ảnh hiển thị cho bạn tồn sơ đồ tiến trình thuật tốn merge sort cho mảng {38, 27, 43, 3, 9, 82, 10} Nếu nhìn kỹ vào sơ đồ này, thấy mảng ban đầu lặp lại hành động chia kích thước mảng sau chia Khi kích thước mảng 1, tiến trình gộp bắt đầu thực gộp lại mảng hoàn thành mảng xếp 33 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python -Các thức thuật toán thực hiện: mergeSort(arr[], l, r) If r > l Tìm số nằm mảng để chia mảng thành nửa: middle m = (l+r)/2 Gọi đệ quy hàm mergeSort cho nửa đầu tiên: mergeSort(arr, l, m) Gọi đệ quy hàm mergeSort cho nửa thứ hai: mergeSort(arr, m+1, r) Gộp nửa mảng xếp (2) (3): merge(arr, l, m, r) -Cách hàm merge hoạt động: Với trường hợp mảng có phần tử, ta việc xem phần tử nhỏ đẩy lên đầu, phần tử lại đặt phía sau Do vậy, mảng cần gộp lại có tính chất ln tăng dần Giả sử ta có mảng là: 44 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python arr1 = [1 10 10] , n1 = // chiều dài mảng arr2 = [3 9], n2 = sort_arr = [] // Mảng lưu lại tiến trình gộp Khởi tạo i = 0, j = tương ứng số bắt đầu arr1 arr2 Xét thấy arr1[i] < arr2[j] => chèn arr1[i] vào cuối mảng sort_arr, tăng i lên đơn vị => sort_arr = [1], i = Xét thấy arr1[i] > arr2[j] => chèn arr2[j] vào cuối mảng sort_arr, tăng j lên đơn vị => sort_arr = [1, 3], i = 1, j = Xét thấy arr1[i] > arr2[j] => chèn arr2[j] vào cuối mảng sort_arr, tăng j lên đơn vị => sort_arr = [1, 3, 5], i = 1, j = Xét thấy arr1[i] > arr2[j] => chèn arr2[j] vào cuối mảng sort_arr, tăng j lên đơn vị => sort_arr = [1, 3, 5, 7], i = 1, j = Xét thấy arr1[i] = arr2[j] => chèn arr1[i] arr2[j] vào cuối mảng sort_arr Giả sử chọn arr1, tăng i lên đơn vị => sort_arr = [1, 3, 5, 7, 9], i = 2, j = Xét thấy arr1[i] > arr2[j] => chèn arr2[j] vào cuối mảng sort_arr, tăng j lên đơn vị => sort_arr = [1, 3, 5, 7, 9, 9], i = 1, j = Do j >= n2, tiếp tục tăng i chừng i < n1 thi thêm phần tử arr1[i] vào sort_arr Sau ta mảng xếp sort_arr = [1, 3, 5, 7, 9, 9, 10, 10] 5/ Shell sort Shell Sort giải thuật xếp mang lại hiệu cao dựa giải thuật xếp chèn (Insertion Sort) Giải thuật tránh trường hợp phải tráo đổi vị trí hai phần tử xa giải thuật xếp chọn (nếu phần tử nhỏ vị trí bên phải xa so với phần tử lớn bên trái) Đầu tiên, giải thuật sử dụng giải thuật xếp chọn phần tử có khoảng cách xa nhau, sau xếp phần tử có khoảng cách hẹp Khoảng cách gọi khoảng (interval) – số vị trí từ phần tử tới phần tử khác Khoảng tính dựa vào cơng thức Knuth sau: h=h*3+1 với h khoảng (interval) với giá trị ban đầu Giải thuật hiệu với tập liệu có kích cỡ trung bình mà độ phức tạp 55 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python trường hợp xấu trường hợp trung bình O(n), với n số phần tử Giải thuật: Bước 1: Khởi tạo giá trị h Bước 2: Chia list thành sublist nhỏ tương ứng với h Bước 3: Sắp xếp sublist sử dụng xếp chèn (Insertion Sort) Bước 4: Lặp lại list xếp 6/ Quick sort Sắp xếp nhanh (Quicksort), gọi xếp kiểu phân chia (part sort) thuật toán xếp phát triển C.A.R Hoarec thành hai danh sách Khác với xếp trộn, chia danh sách cần xếp thành hai danh sách có kích thước tương đối nhờ số đứng danh sách, xếp nhanh chia thành hai danh sách cách so sánh phần tử danh sách với phần tử chọn gọi phần tử chốt Những phần tử nhỏ phần tử chốt đưa phía trước nằm danh sách thứ nhất, phần tử lớn chốt đưa phía sau thuộc danh sách đứng sau Cứ tiếp tục chia tới danh sách có độ dài Kỹ thuật chọn phần tử chốt ảnh hưởng nhiều đến khả rơi vào vịng lặp vơ hạn trường hợp đặc biệt Tốt chọn phần tử chốt trung vị danh sách Khi sau log2(n) lần phân chia ta đạt tới kích thước danh sách Tuy nhiên điều khó Có cách chọn phần tử chốt sau: • Chọn phần tử đứng đầu đứng cuối làm phần tử chốt • Chọn phần tử đứng danh sách làm phần tử chốt • Chọn phần tử trung vị phần tử đứng đầu, đứng đứng cuối làm phần tử chốt • Chọn phần tử ngẫu nhiên làm phần tử chốt (Cách dẫn đến khả rơi vào trường hợp đặc biệt) 7/ Tìm kiếm tuần tự(Linear Search) -Đây giải thuật tìm kiếm đơn giản, thích hợp với mảng liệu ngắn phần tử mảng chưa xếp Trong thuật toán này, phần tử mảng duyệt từ đầu mảng tìm vị trí giá trị cần tìm 66 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Thuật toán: 1: Khởi tạo i = 2: Nếu i > array’s length, trả ( khơng tìm được) 3: Nếu array[i] == value trả i 4: Nếu array[i] != value tăng I, quay lại bước Thời gian thực hiện: (n) 8/ Tìm kiếm nhị phân(Binary Search) Thuật tốn thực tìm kiếm mảng xếp Ý tưởng thuật toán so sánh giá trị cần tìm với phần tử trung tâm, trả true, khác tùy vào lớn hay nhỏ thứ tự xếp phần tử mảng để gọi đệ quy Thuật toán (giả sử mảng array xếp tăng dần): 1: Đặt mid = array’s length/2 2: Nếu array[mid] = value trả vể mid, kết thúc chương trình Nếu array[mid] > value thực hiên Binary Search mảng array[1 mid-1] Nếu array[mid] < value, thực hiên Binary Search mảng array[mid+1 array’s length] 8/ Interpolation Search Interpolation search(Tìm kiếm nội suy) tiến hành việc tìm kiếm phần tử cụ thể việc tính tốn vị trí dị (Probe Position) Đây phương pháp tìm kiếm cải tiến từ binary 77 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python search phải hoạt động list xếp Ban đầu vị trí dị vị trí phần tử nằm tập liệu Nếu phần tử nằm phần tử cần tìm kết thúc chương trình Phần tử xác đinh theo công thức sau : mid = Lo + ((Hi - Lo) / (A[Hi] - A[Lo])) * (X - A[Lo]) Trong đó: A = danh sách Lo = mục thấp danh sách Hi = mục cao danh sách A[n] = giá trị lưu giữ mục n danh sách X = phần tử cần tìm Nếu phần tử cần tìm có giá trị lớn phần tử phần tử cần tìm mảng bên phải phần tử lại tiếp tục tính vị trí dị; khơng phần tử cần tìm mảng bên trái phần tử Tiến trình tiến tụp diễn mảng kích cỡ mảng giảm Độ phức tạp thời gian chạy Interpolation Search Ο(log (log n)), Binary Search Ο(log n) Bởi cải tiến giải thuật Binary Search nên đề cập tới bước để tìm kiếm mục giá trị cần tìm sử dụng vị trí dị Bước : Bắt đầu tìm kiếm liệu từ phần danh sách Bước : Nếu so khớp (một kết nối), trả mục phần tử, thoát Bước : Nếu khơng phải so khớp, vị trí dị Bước : Chia danh sách sử dụng phép tính tìm vị trí dị tìm vị trí 88 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Bước : Nếu liệu cần tìm lớn giá trị vị trí giữa, tìm kiếm mảng bên phải Bước : Nếu liệu cần tìm nhỏ giá trị vị trí giữa, tìm kiếm mảng bên trái Bước : Lặp lại tìm thấy so khớp 10/Hash table Hashing kĩ thuật chuyển đổi cặp (key,value) thành phần tử array với index đặc biệt Ở hàm hash đơn giản lấy phần dư : Như tìm kiếm phần tử ta cần biết key tìm Để tránh collision , người ta sử dụng kĩ thuật Linear Probing , đơn giản key bị collision với hàm trước đẩy cạp (key,value) lên tiếp tìm chỗ mà chưa có cặp (key,value) II.2.1.B: Mơ tả thuật tốn xếp Selection Sort Algorithm: Python: Java: II.2.2: White-box testing: II.2.2.1/ White-box testing: 1/ Khái niệm: • White-box testing cịn gọi clear box testing, glass box testing, transparent box testing, or structural testing, thường thiết kế trường hợp kiểm thử dựa vào cấu trúc bên phần mềm, dựa vào mã nguồn cấu trúc chương trình • Một người sử dụng White-box testing địi hỏi kĩ thuật lập trình am hiểu cấu trúc bên phần mềm (các đường, luồng liệu, chức năng, kết quả) 2/ Khi cần kiểm thử hộp trắng: • Kỹ thuật chủ yếu dùng để kiểm thử đơn vị Trong lập trình hướng đối tượng, kiểm thử đơn vị kiểm thử tác vụ của1 class chức 99 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python • Kiểm thử hộp trắng tất vả cuối để đảm bảo chất lượng hệ thống, kỹ thuật quan trọng thiếu đặc biệt áp dụng hệ thống, phần mềm lớn, quan trọng 3/ Ưu điểm nhược điểm: *Ưu điểm: • Kiểm thử hộp trắng tỉ mỉ quét tất tình xảy mà hệ thống gặp phải cách kiểm tra cấp mã nguồn, tìm lỗi cịn sót sửa chúng *Nhược điểm: • Thời gian kiểm tra dài, khó thực chi phí cao • Thường tốn nhiều thời gian công sức mức độ kiểm thử nâng lên cấp kiểm thử tích hợp hay kiểm thử hệ thống 4/ Phân loại kiểm thử hộp trắng: *Có hoạt động kiểm thử hộp trắng: • Kiểm thử dịng liệu: cơng cụ mạnh để phát việc dùng không hợp lý biến lỗi coding phần mềm gây ra: phát biểu gán hay nhập liệu vào biến không đúng, thiếu định nghĩa biến trước dùng, … • Kiểm thử luồng điều khiển: Đường thi hành (Execution path): kịch thi hành đơn vị phần mềm tương ứng: danh sách có thứ tự lệnh thi hành ứng với lần chạy cụ thể đơn vị phần mềm, điểm nhập đơn vị phần mềm đến điểm kết thúc đơn vị phần mềm Mục tiêu phương pháp kiểm thử luồng điều khiển đảm bảo đường thi hành đơn vị phần mềm cần kiểm thử chạy II.2.2.2/ Xây dựng kịch White-box testing cho Selection Sort Algorithm: 1/ Step 1: Xác định tính năng, thành phần, chương trình thực kiểm thử -Chúng ta chia nhỏ thành phần hệ thống nhỏ tốt, kiểm thử hộp trắng dành cho hệ thống quan trọng cần kiểm soát kỹ lưỡng Kiểm thử hộp trắng tốn thời gian cơng sức Do đó, ta cần ý đến việc cân nỗ lực kiểm thử nhu cầu kiểm thử -Với Selection Sort ta xem xét khả xếp với thành phần: vòng lặp, so sánh phần tử hốn đổi vị trí 2/ Step 2: Xây dựng đồ thị dòng điều khiển tương ứng 10 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python • Các tester theo phương pháp black box khơng có “mối ràng buộc” với code, nhận thức tester đơn giản: source code có nhiều lỗi Sử dụng nguyên tắc, "Hỏi bạn nhận" tester black box tìm nhiều bug nơi mà DEV khơng tìm thấy • Tester khơng phải IT chun nghiệp, khơng cần phải biết ngơn ngữ lập trình làm phần mềm thực • Các tester thực quan độc lập từ developer, cho phép nhìn khách quan tránh phát triển thiên vị • Hệ thống thật với tồn u cầu kiểm thử xác • Thiết kế kịch kiểm thử nhanh, mà yêu cầu chức xác định • Nhược điểm kiểm thử hộp đen Dữ liệu đầu vào yêu cầu khối lượng mẫu (sample) lớn • Nhiều dự án khơng có thơng số rõ ràng việc thiết kế test case khó khó viết kịch kiểm thử cần xác định tất yếu tố đầu vào, thiếu thời gian cho việc tập hợp • Khả để thân kỹ sư lạc lối kiểm thử cao • Chỉ có số nhỏ đầu vào kiểm tra nhiều đường dẫn chương trình để lại chưa kiểm tra • Kiểm thử black box xem "là bước mê cung tối đen mà khơng mang đèn pin” tester khơng biết phần mềm test xây dựng Có nhiều trường hợp tester viết nhiều trường hợp test để kiểm tra số thứ test trường hợp test và/hoặc vài phần cuối không test hết Nội dung công việc công đoạn test Kế hoạch test: Chỉ rõ ràng mục đích phạm vi công đoạn test để kiểm tra xem test approach Điều chỉnh resource thành viên định schedule Thiết kế test: Quyết định xem sử dụng cho mục đích loại test càn thực công đoạn test đó, chức đối tượng test, phương pháp test, import export test Ngoài định cụ thể nguyên liệu cần thiết để thực test hay tiêu chuẩn định thành công/ không thành công Tạo testcase: Tạo document ghi trạng thái trước bắt đầu test kết mong đợi (kết chạy đối tượng test theo điều kiện trình tự thao tác thực test 18 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python nào) cột trạng thái (cột ghi lại kết thao tác đối tượng test) Thực test: Vừa xem testcase vừa cho chạy phần mềm thực tế để tiến hành test, sau đánh dấu kết dấu pass fail vào cột trạng thái testcase Trường hợp có testcase khác với kết mong đợi ghi dấu fail vào cột trạng thái, tạo báo cáo lỗi Trong báo cáo lỗi: trình bày nội dung mơ tả tượng khác với kết mong đợi tượng phát sinh trường hợp (thao tác, giả nhập, điều kiện, ) Báo cáo test: Tóm tắt kết để báo cáo Căn vào loại liệu (mục thực hiện, hiệu việc test, công số thực hiện, ) liệu lỗi (số lỗi tìm ra, số lỗi theo mức độ quan trọng, ) để đánh giá xem có thỏa mãn tiêu chuẩn pass/ fail test khơng? Ngồi đề xuất thêm risk sinh sau release mục cần bổ sung dự án cho giai đoạn Ví dụ: Bộ test để kiểm thử cho thuật toán selection sort chuỗi số thực, chuỗi có phần tử khơng thuộc kiểu số thực code báo lỗi Ví dụ với test có 5000 số code chạy bình thường Với test 5000 số 10000, code chạy chậm Với test 10000 số, code báo lỗi Nguyên nhân: Thuật toán có độ phức tạp O(n^2), số phép tính q lớn khiến cho chương trình chạy chậm máy khơng chạy 19 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python II.2.4: Kiểm thử tích hợp 2.4.1: Lý thuyết kiểm thử tích hợp - Là kiểm thử mà module phần mềm riêng biệt lại kết hợp lại kiểm thử theo nhóm - Có thể coi kiểm thử tích hợp kết hợp kiểm thử hộp trắng hộp đen Các tester can thiệp vào source code mức độ module, test test kiểm thử hộp đen Các phương pháp tiếp cận: a: Big bang integration b: Bottom-up integration c: Top-down integration d: Sanwich testing a : Big bang integration Là phương pháp tích hợp tất module lại với để kiểm thử thời điểm Ưu điểm: tất thứ tích hợp để test thời điểm Nhược điểm: khó xác định lỗi hệ thống 20 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python b : Top-down integration Là kiểm thử theo thứ tự từ xuống Module có level cao ưu tiên kiểm thử đầu Ở bước module mức thấp tích hợp để đưa vào kiểm thử Ví dụ hình dưới, bước kiểm thử là: Test U1 Test (U1, U2, U3) Test (U1, U2, U3, U4, U5, U6) Ưu điểm: Nhược điểm: c : Bottom-up integration Là kĩ thuậ kiểm thử từ lên, module mức thấp ưu tiên kiểm thử trước Ví dụ hình ta có sơ đồ kiểm thử: Test U4, Test U5, Test U6 Test(U3, U4, U5, U6) Test(U1, U2, U3, U4, U5, U6) Ưu điểm: 21 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Nhược điểm: d : Sanwich testing Là kết hợp hai phương pháp bottom-up top-down Trong module có mức thấp cao ưu tiên kiểm thử trước Ví dụ hình bên: Test A, Test E, Test F, Test g, Test H Test(A,B, C, D), Test(B, E, F), Test(D, G, H) Test(A, B, C, D, E, F, G, H) Ưu điểm: Nhược điểm: 2.4.2: Vận dụng vào toán 2.1B Với toán selection sort, xây dựng chương trình sau: 22 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Chương trình có tất module, với sơ đồ phân cấp: Trong sử dụng kĩ thuật bottom-up Khi sơ đồ kiểm thử là: Test(swap), Test(find_min_index) Test(selectionsort, swap, find_min_index) Bước 1: Test find_min_index(), swap() (riêng lẻ): Ta thực kiểm thử với liệu nhập từ bàn phím + Với find_min_index(): 23 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Input: mảng số thực số tự nhiên i Output: vị trí phần tử nhỏ mảng đứng sau i(tính i) Mảng cho i Output [5.1, 6.3, 62, 2.6, -24, 45, -73] [4.4,-3,5.5,-4.5,0,3,72,-4] [15,73,0.4,-2,-73,45,25.6,65] [1,5,2,78,36,84,-25,-26,4,-3] +Với swap(): Input: Mảng thực hai số tự nhiên i, j Output: Mảng thu từ mảng ban đầu cách đổi chỗ hai phần tử thứ i j Mảng cho i J Output [5.1, 6.3, 62, 2.6, -24, 45, -73] [5.1, 6.3,45, 2.6, -24, 62, -73] [4.4,-3,5.5,-4.5,0,3,72,-4] [4.4,-3,5.5,72,0,3,-4.5,-4] [15,73,0.4,-2,-73,45,25.6,65] [15,0.4,73,-2, 73,45,25.6,65] [1,5,2,78,36,84,-25,-26,4,-3] [1,5,2,78,84,36,-25,-26,4,-3] Bước 2: Test selectionsort(), find_min_index(), swap() (thực đồng thời): Input Output [4, 7, 25, 9.3, -54, 2, -5.2 ,37] [-54, -5.2, 2, 4, 9.3, 25, 27] [15, 73, -25, 26, 0, 25, 27, 47] [-25, 0, 15, 25, 26, 27,47,73] [-1, -3, -6, 6, -8, 3, -7, -8, -25] [-25, -8, -8, -7, -6, -3, -1, 3, 6] [2.6, 63.6, 4, 7.4, 3.3, -35, -62.5] [-62.5, -35, 2.6, 3.3, 4, 7.4, 63.6] 24 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python II.2.5: Debug: Python Pdb module dành riêng cho debug Python Do việc install dễ dàng nhẹ phù hợp cho máy cấu hình thấp khơng muốn phải sử dụng công cụ GUI phức tạp Chúng ta dể dàng cài đặt câu lệnh pip : Do thư viện nên việc làm dòng lệnh 25 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Trước hết để bắt đầu bàn phải thêm câu lệnh sau vào nơi mà bạn muốn break : Khi gặp câu lệnh python vào cửa sổ debug với lời nhắc (pdb) bạn bắt đầu q trình debug Dấu ‘>’ cho biết câu lệnh số file selection_sort Dấu ‘->’ cho biết câu lệnh thực thi Print expression Với câu lệnh p , in giá trị mà muốn Tất nhiên in giá trị có chương trình cịn khơng in lỗi hình :v Stepping Through Code 26 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Chúng ta chạy câu lệnh câu lệnh n(next) : Hoặc s(step) : Hai lệnh giống Có điểm khác lệnh n gặp lời gọi hàm thực hàm xong thực tiếp câu lệnh hàm Cịn lệnh s thực lệnh hàm 3.Listing Source Code Chúng ta dung lệnh list (l) để xem code Breakpoints Chúng ta dung lệnh b để đặt lệnh breakpoint theo quy tắc sau : 27 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Filename khơng cần Lineno số dịng đặt breakpoint Có điều thú vị condition , nghĩa đặt break point thời điểm mà hàm gọi Và dung lệnh b để in list breakpoint set Chúng ta bật tắt breakpoint với enable disable theo sau breakpoint muốn thao tác 28 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Khi xem trạng thái breakpoint bật hay tắt xem trạng thái ENB Để xóa break point dung lệnh cl : Để tiếp tục thực chương trình dung câu lệnh c (continue) : 29 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python Chương trình tiếp tục thực gặp break point kết thúc chương trình Java Jdb cơng cụ debug dịng lệnh tích hợp sẵn cài đặt java Nó có lệnh đủ để debug chương trình Tập lệnh khác giống với Pdb nên không nhiều thời gian để làm quen Sau trình bày debug chương trình selection_sort Để bắt đầu cần mở cmd lên vào thư mục mà chưa file cần 30 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python thực thi Sau dùng lệnh jdb bắt đầu q trình debug Nhưng để xem giá trị biến trình debug bạn phải làm bước sau : Đầu tiên phải tạo compile file java để tạo file class với câu lệnh sau Sau chạy jdb vơi tên file ko có Giờ bắt đầu trình debug Chúng ta liệt kê tất lệnh cách gõ help (hoặc ?) : Chúng ta dùng lệnh run để bắt đầu chương trình dừng lại điểm breakpoint chạy đến hết 31 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python breakpoint Chúng ta tạo điểm break point câu lệnh stop Có hai kiểu break : Stop at : đặt breakpoint dòng Stop in : đặt breakpoint function Dùng lệnh clear để xem tất breakpoint Và dùng lệnh clear + breakpoint để xóa : Stepping 32 ... tương ứng 10 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python *Xây dựng đồ thị dòng điều khiển: 11 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python *Tính độ phức tạp... yêu cầu 16 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng cho Java Python II.2.3: Kỹ thuật kiểm thử hộp đen - Black box Testing Khái niệm Kiểm thử hộp đen: phương pháp kiểm thử phần mềm thực mà... kiểm thử hộp trắng: • Kỹ thuật chủ yếu dùng để kiểm thử đơn vị Trong lập trình hướng đối tượng, kiểm thử đơn vị kiểm thử tác vụ của1 class chức 99 Bài tập 2- Các kỹ thuật kiểm thử gỡ rối áp dụng