SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Bài 7: Kiểm thử và sửa lỗi


    Giảng viên: Nguyễn Thị Minh Huyền
    nguyenthiminhhuyen@hus.edu.vn
               Đỗ Thanh Hà
          dothanhha@hus.edu.vn
Tài liệu tham khảo
   BigJava – chương 10




    2009-2010   OOP - http://mim.hus.edu.vn/elearning   2
Kiểm thử đơn vị
   Công cụ kiểm thử quan trọng nhất
   Kiểm thử từng phương thức đơn hoặc 1 tập
    các phương thức phối hợp với nhau
   Không kiểm thử chương trình tổng thể mà
    kiểm thử từng lớp riêng biệt
   Với mỗi lần kiểm thử, tạo 1 lớp đơn giản gọi
    là dụng cụ kiểm thử (test harness)
   Dụng cụ kiểm thử cung cấp tham biến cho
    các phương thức được kiểm tra

2009-2010        OOP - http://mim.hus.edu.vn/elearning   3
Ví dụ: Tạo các dụng cụ kiểm
thử
   Để tính căn bậc 2 của a dùng thuật toán sau:
           Phỏng đoán 1 giá trị x có thể gần với giá trị căn
            bậc 2 cần tìm (VD x = a)
           Giá trị căn bậc 2 phải nằm giữa x và a/x
           Thay x bằng điểm giữa (x+a/x)/2
           Lặp lại quá trình trên cho đến khi 2 giá trị xấp xỉ ở
            2 bước lặp liền nhau có giá trị rất gần nhau




2009-2010                OOP - http://mim.hus.edu.vn/elearning   4
Kiểm thử chương trình
   Xem RootApproximator.java, Numeric.java,
    RootApproximatorTester.java (ch10/root1)
   Lớp RootApproximator có cho kết quả đúng
    với với mọi dữ liệu vào?
           Cần thử với nhiều giá trị
           Lặp phép thử nhiều lần với dữ liệu nhập từng lần
            không phải là ý tưởng hay:
                Nếu có lỗi thì sau khi sửa lỗi cần nhớ các dữ liệu đã thử
                 để làm lại các phép thử
           Giải pháp: Viết dụng cụ thử để dễ lặp lại các phép
            thử đơn vị

2009-2010                    OOP - http://mim.hus.edu.vn/elearning           5
Chuẩn bị dữ liệu vào cho kiểm
thử (1)
   Có nhiều cách thức để chuẩn bị các tình
    huống cho kiểm thử (test case)
   Cách 1: Viết cứng các dữ liệu thử vào dụng
    cụ thử
           Mỗi lần phát hiện lỗi, khi sửa xong chỉ cần thực
            hiện lại dụng cụ thử
           Có thể đặt dữ liệu thử trong 1 tệp riêng
           Xem RootApproximatorHarness1.java (ch10/root2)


2009-2010                OOP - http://mim.hus.edu.vn/elearning   6
Chuẩn bị dữ liệu vào cho kiểm
thử (2)
   Cách 2: Tạo các tình huống thử tự động
           Nếu dữ liệu vào thuộc phạm vi hẹp, có thể viết
            chương trình lặp để duyệt qua 1 phần dữ liệu đại
            diện
           Xem RootApproximatorHarness2.java (ch10/root2)
   Cách 3: Sinh ngẫu nhiên tình huống thử
           Dữ liệu vào thuộc phạm vi rộng
           Xem RootApproximatorHarness3.java (ch10/root2)


2009-2010               OOP - http://mim.hus.edu.vn/elearning   7
Chuẩn bị dữ liệu vào cho kiểm
thử (3)
   Chọn các tình huống thử tốt là 1 kĩ năng quan trọng
    để tìm lỗi chương trình
   Xét tất cả các đặc tính của phương thức đang kiểm
    thử
           Xét các tình huống tiêu biểu (VD với chương trình tính căn
            bậc 2: 100, ¼, 0.01, 2, 10E12)
           Xét các tình huống biên: dữ liệu nằm ở phần biên của tập
            giá trị cho phép (VD tính căn 0)
                Người lập trình thường mắc lỗi khi xử lí các điều kiện biên: chia
                 cho 0, lấy kí tự từ xâu rỗng, truy cập đến con trỏ null
           Xét các tình huống dữ liệu không hợp lệ (VD tính căn -2).


2009-2010                     OOP - http://mim.hus.edu.vn/elearning              8
Đọc dữ liệu thử từ tệp
   Đặt dữ liệu thử trong 1 tệp trông “đẹp” hơn.
   Chuyển hướng dòng dữ liệu vào
           java Program < data.txt
           Một số IDE không hỗ trợ chuyển hướng dòng vào. Trong trường
            hợp đó cần dùng cửa sổ lệnh
   Chuyển hướng dòng dữ liệu ra:
           java Program > output.txt
   VD:
           Xem RootApproximatorHarness4.java (ch10/root2)
           Dữ liệu vào: tệp test.in
           Chạy chương trình:
                java RootApproximatorHarness4 < test.in > test.out



2009-2010                      OOP - http://mim.hus.edu.vn/elearning      9
Đánh giá các tình huống thử
   Làm sao biết được kết quả ra là đúng?
           Tính bằng tay
           Chọn các dữ liệu vào mà đã biết kết quả ra
           Kiểm tra xem các kết quả ra có thoả mãn một số thuộc tính
            nào đó (VD: bình phương của căn bậc hai 1 số phải bằng số
            đó)
           Sử dụng 1 “nhà tiên tri” (Oracle): dùng 1 phương thức chậm
            hơn nhưng tin cậy để tính kết quả tương ứng (VD: Dùng
            Math.pow(x, 0.5) để tính căn bậc 2).
   VD:
           Xem RootApproximatorHarness5.java,
            RootApproximatorHarness6.java (ch10/root3)

2009-2010                  OOP - http://mim.hus.edu.vn/elearning    10
Độ bao trùm kiểm thử
   Kiểm thử hộp đen: Kiểm tra chức năng phần mềm
    mà không xét đến cấu trúc cài đặt bên trong
   Kiểm thử hộp trắng: Xét đến cấu trúc bên trong khi
    thiết kế tình huống kiểm thử
   Độ bao trùm kiểm thử (test coverage): đánh giá bao
    nhiêu phần của chương trình đã được kiểm thử
           Đảm bảo mỗi phần của chương trình đều được thử nghiệm
            ít nhất 1 lần bởi 1 tình huống thử
                VD: đảm bảo mỗi nhánh lệnh trong chương trình đều đã được
                 thực hiện trong ít nhất 1 tình huống thử




2009-2010                    OOP - http://mim.hus.edu.vn/elearning       11
Kiểm thử đơn vị với JUnit
   http://junit.org
   Triết lí: Mỗi khi cài đặt 1 lớp thì cũng tạo ngay 1 lớp
    kiểm thử đi kèm
   Có trong nhiều IDE như BlueJ và Eclipse
   VD:
     
            Xem ch10/junit, chạy    chương trình kiểm thử trong
            BlueJ và Eclipse




2009-2010                 OOP - http://mim.hus.edu.vn/elearning   12
Theo vết chương trình
   In các thông báo lần theo các bước thực hiện chương
    trình
           if (status == SINGLE){
              System.out.println("status is SINGLE");
              . . .
            }
            . . .
           Nhược điểm: Phải bỏ các thông báo đó khi kiểm thử xong,
            nếu có lỗi khác lại phải thêm các thông báo vào
   Giải pháp: Dùng lớp Logger để có thể tắt đi các
    thông báo vết mà không cần xoá khỏi chương trình


2009-2010                 OOP - http://mim.hus.edu.vn/elearning       14
Ghi nhật kí (logging)
   Các thông báo log có thể ngừng kích hoạt khi thực
    hiện xong việc kiểm thử
   Dùng đối tượng Logger.global
   Ghi lại 1 thông báo:
           Logger.global.info("status is SINGLE");
   Ngầm định, các thông báo log được in ra. Khi cần tắt
    các thông báo này dùng lệnh:
           Logger.global.setLevel(Level.OFF);
   Tránh log quá nhiều hoặc quá ít
   Một số người lập trình thích dò lỗi (debugging) hơn

2009-2010              OOP - http://mim.hus.edu.vn/elearning   15
Ghi nhật kí (2)
   Khi theo vết thực hiện 1 chương trình,
    các sự kiện quan trọng nhất là điểm vào
    và điểm ra 1 phương thức
           Ở đầu phương thức, in ra giá trị các tham
            biến
           Ở cuối phương thức, in ra kết quả trả lại
   VD: xem chương trình trong ch10/log

2009-2010              OOP - http://mim.hus.edu.vn/elearning   16
Sử dụng công cụ dò lỗi
(debugger)
   Công cụ dò lỗi:
           Cho phép chạy/tạm dừng/chạy lại 1
            chương trình và phân tích các trạng thái
            (giá trị các biến) trong quá trình chạy
   3 khái niệm chính:
           Điểm dừng (breakpoints)
           Thực hiện từng bước một (single-stepping)
           Khảo sát biến (inspecting variables)

2009-2010              OOP - http://mim.hus.edu.vn/elearning   17
Breakpoint: điểm dừng của debugger
Khảo sát biến




2009-2010   OOP - http://mim.hus.edu.vn/elearning   19
Dò lỗi
   Khi chạy công cụ dò lỗi một chương trình, chương trình đó được
    thực hiện bình thường cho đến khi gặp dòng lệnh được đánh
    dấu điểm dừng thì tạm ngừng. Khi đó, ta có thể:
           Khảo sát giá trị các biến
           Thực hiện từng dòng lệnh một
           Hoặc tiếp tục chạy cho đến khi gặp điểm dừng sau
   Khi chương trình kết thúc, công cụ dò lỗi cũng kết thúc
   Các điểm dừng vẫn được kích hoạt cho đến khi bị xoá đi
   Có 2 dạng lệnh chạy từng bước một:
           Step Over: gặp lời gọi phương thức thì thực hiện trong 1 bước
           Step Into: gặp lời gọi phương thức thì thực hiện từng lệnh một
            trong phương thức đó



2009-2010                    OOP - http://mim.hus.edu.vn/elearning           20
Ví dụ dò lỗi
   Lớp Word đếm số âm tiết trong 1 từ
           Mỗi cụm nguyên âm (a, e, i, o, u, y) liền nhau
            được đếm là 1 âm tiết
           Tuy nhiên, chữ e ở cuối từ không được đếm là 1
            âm tiết
           Nếu thuật toán cho giá trị đếm = 0 thì tăng thành
            1
           Hàm dựng bỏ đi các kí tự không phải là chữ cái ở
            đầu và cuối
   Xem tệp Word.java và WordTester.java
    (ch10/debugger)

2009-2010               OOP - http://mim.hus.edu.vn/elearning   21
Thực hiện dò lỗi chương trình
   Với xâu vào là "hello yellow peach.", kết quả
    lỗi:
           Syllables in hello: 1
            Syllables in yellow: 1
            Syllables in peach: 1
   Đặt breakpoint vào dòng đầu tiên của phương thức
    countSyllables trong lớp Word
   Thực hiện chương trình, khi dừng tại breakpoint thì
    thực hiện từng bước cho đến lệnh kiểm tra nếu kí tự
    cuối bằng 'e'
           Khảo sát biến ch chứa kí tự cuối: ch = 'l' => lỗi


2009-2010                  OOP - http://mim.hus.edu.vn/elearning   22
Các lỗi khác?
   Giá trị của end = 3 chứ không phải 4
   text chứa "hell" thay vì "hello"
           => countSyllables trả lại 1 là bình thường
           => lỗi nằm ở chỗ khác
   Bắt đầu lại chương trình, đặt breakpoint tại đầu hàm
    dựng của lớp Word.
           Nhập xâu đầu vào "hello."
           Ngừng lại sau khi thực hiện xong vòng lặp thứ 2 trong hàm
            dựng
                Khảo sát i và j: giá trị đúng
                Tại sao text được đặt bằng "hell" ???

2009-2010                    OOP - http://mim.hus.edu.vn/elearning   24
Dò lỗi...
   Sửa lỗi và thực hiện lại chương trình với xâu
    vào ban đầu "hello yellow peach."
   Còn lỗi => lặp lại quá trình dò lỗi như trên,
    sửa lỗi cho đến khi thu được kết quả đúng:
           Syllables in hello: 2
            Syllables in yellow: 2
            Syllables in peach.: 1
   Đến đây có thể kết luận là chương trình đã
    hết lỗi không???
2009-2010            OOP - http://mim.hus.edu.vn/elearning   26

Mais conteúdo relacionado

Mais procurados

Bai tap testing junit…..
Bai tap testing junit…..Bai tap testing junit…..
Bai tap testing junit…..Mua Xuong
 
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.Nguyễn Anh
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)Đông Đô
 
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT Cusanlui
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignmentHoangbach Nguyen
 

Mais procurados (10)

Bai tap testing junit…..
Bai tap testing junit…..Bai tap testing junit…..
Bai tap testing junit…..
 
Bài 6
Bài 6Bài 6
Bài 6
 
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
 
Cac kythuatktpm
Cac kythuatktpmCac kythuatktpm
Cac kythuatktpm
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)
 
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT
 
Adp junit
Adp junitAdp junit
Adp junit
 
Oop 13
Oop 13Oop 13
Oop 13
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignment
 
Bai 8
Bai 8Bai 8
Bai 8
 

Semelhante a Oop 7

PMMNM.docx
PMMNM.docxPMMNM.docx
PMMNM.docxNgnHng26
 
Lớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngLớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngEnter Focus
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfHiNht6
 
Lesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingLesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingThang Man
 
Khai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình Thắng
Khai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình ThắngKhai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình Thắng
Khai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình ThắngSecurity Bootcamp
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taintvb2tin09
 
De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011Hoang Nguyen
 
csience.pptx a document of technology design
csience.pptx a document of technology designcsience.pptx a document of technology design
csience.pptx a document of technology designchamson2
 

Semelhante a Oop 7 (20)

PMMNM.docx
PMMNM.docxPMMNM.docx
PMMNM.docx
 
Lớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngLớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đông
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdf
 
Oop 0
Oop 0Oop 0
Oop 0
 
Oop 6
Oop 6Oop 6
Oop 6
 
Oop 8
Oop 8Oop 8
Oop 8
 
Oop 1
Oop 1Oop 1
Oop 1
 
Lesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingLesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell Programming
 
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình JavaĐề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
Đề tài: Công cụ sinh dữ liệu thử tự động cho chương trình Java
 
Oop 2
Oop 2Oop 2
Oop 2
 
Java Tieng Viet
Java Tieng VietJava Tieng Viet
Java Tieng Viet
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taint
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taint
 
Khai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình Thắng
Khai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình ThắngKhai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình Thắng
Khai thác lỗi phần mềm thi chứng chỉ của Microsoft - Phạm Đình Thắng
 
Jmeter tool
Jmeter toolJmeter tool
Jmeter tool
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taint
 
De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011
 
csience.pptx a document of technology design
csience.pptx a document of technology designcsience.pptx a document of technology design
csience.pptx a document of technology design
 
chuong 5
chuong 5chuong 5
chuong 5
 
Hot potatoes (1)
Hot potatoes (1)Hot potatoes (1)
Hot potatoes (1)
 

Mais de Thai Hoc Vu

Mais de Thai Hoc Vu (9)

Ngôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đạiNgôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đại
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trình
 
Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1
 
Danh mục cable
Danh mục cableDanh mục cable
Danh mục cable
 
OOP-9
OOP-9OOP-9
OOP-9
 
Oop 5
Oop 5Oop 5
Oop 5
 
Oop 4
Oop 4Oop 4
Oop 4
 
Oop 3
Oop 3Oop 3
Oop 3
 
Oop 11
Oop 11Oop 11
Oop 11
 

Último

BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...Nguyen Thanh Tu Collection
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxnhungdt08102004
 
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Học viện Kstudy
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếngTonH1
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx22146042
 
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )lamdapoet123
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdftohoanggiabao81
 
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocVnPhan58
 
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...Nguyen Thanh Tu Collection
 
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHTư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHThaoPhuong154017
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...Nguyen Thanh Tu Collection
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...Nguyen Thanh Tu Collection
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxendkay31
 
Nhóm 10-Xác suất và thống kê toán-đại học thương mại
Nhóm 10-Xác suất và thống kê toán-đại học thương mạiNhóm 10-Xác suất và thống kê toán-đại học thương mại
Nhóm 10-Xác suất và thống kê toán-đại học thương mạiTruongThiDiemQuynhQP
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...Nguyen Thanh Tu Collection
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếngTonH1
 

Último (20)

BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
 
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
 
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdf
 
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
 
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
 
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHTư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
 
Nhóm 10-Xác suất và thống kê toán-đại học thương mại
Nhóm 10-Xác suất và thống kê toán-đại học thương mạiNhóm 10-Xác suất và thống kê toán-đại học thương mại
Nhóm 10-Xác suất và thống kê toán-đại học thương mại
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tế
 

Oop 7

  • 1. Bài 7: Kiểm thử và sửa lỗi Giảng viên: Nguyễn Thị Minh Huyền nguyenthiminhhuyen@hus.edu.vn Đỗ Thanh Hà dothanhha@hus.edu.vn
  • 2. Tài liệu tham khảo  BigJava – chương 10 2009-2010 OOP - http://mim.hus.edu.vn/elearning 2
  • 3. Kiểm thử đơn vị  Công cụ kiểm thử quan trọng nhất  Kiểm thử từng phương thức đơn hoặc 1 tập các phương thức phối hợp với nhau  Không kiểm thử chương trình tổng thể mà kiểm thử từng lớp riêng biệt  Với mỗi lần kiểm thử, tạo 1 lớp đơn giản gọi là dụng cụ kiểm thử (test harness)  Dụng cụ kiểm thử cung cấp tham biến cho các phương thức được kiểm tra 2009-2010 OOP - http://mim.hus.edu.vn/elearning 3
  • 4. Ví dụ: Tạo các dụng cụ kiểm thử  Để tính căn bậc 2 của a dùng thuật toán sau:  Phỏng đoán 1 giá trị x có thể gần với giá trị căn bậc 2 cần tìm (VD x = a)  Giá trị căn bậc 2 phải nằm giữa x và a/x  Thay x bằng điểm giữa (x+a/x)/2  Lặp lại quá trình trên cho đến khi 2 giá trị xấp xỉ ở 2 bước lặp liền nhau có giá trị rất gần nhau 2009-2010 OOP - http://mim.hus.edu.vn/elearning 4
  • 5. Kiểm thử chương trình  Xem RootApproximator.java, Numeric.java, RootApproximatorTester.java (ch10/root1)  Lớp RootApproximator có cho kết quả đúng với với mọi dữ liệu vào?  Cần thử với nhiều giá trị  Lặp phép thử nhiều lần với dữ liệu nhập từng lần không phải là ý tưởng hay:  Nếu có lỗi thì sau khi sửa lỗi cần nhớ các dữ liệu đã thử để làm lại các phép thử  Giải pháp: Viết dụng cụ thử để dễ lặp lại các phép thử đơn vị 2009-2010 OOP - http://mim.hus.edu.vn/elearning 5
  • 6. Chuẩn bị dữ liệu vào cho kiểm thử (1)  Có nhiều cách thức để chuẩn bị các tình huống cho kiểm thử (test case)  Cách 1: Viết cứng các dữ liệu thử vào dụng cụ thử  Mỗi lần phát hiện lỗi, khi sửa xong chỉ cần thực hiện lại dụng cụ thử  Có thể đặt dữ liệu thử trong 1 tệp riêng  Xem RootApproximatorHarness1.java (ch10/root2) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 6
  • 7. Chuẩn bị dữ liệu vào cho kiểm thử (2)  Cách 2: Tạo các tình huống thử tự động  Nếu dữ liệu vào thuộc phạm vi hẹp, có thể viết chương trình lặp để duyệt qua 1 phần dữ liệu đại diện  Xem RootApproximatorHarness2.java (ch10/root2)  Cách 3: Sinh ngẫu nhiên tình huống thử  Dữ liệu vào thuộc phạm vi rộng  Xem RootApproximatorHarness3.java (ch10/root2) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 7
  • 8. Chuẩn bị dữ liệu vào cho kiểm thử (3)  Chọn các tình huống thử tốt là 1 kĩ năng quan trọng để tìm lỗi chương trình  Xét tất cả các đặc tính của phương thức đang kiểm thử  Xét các tình huống tiêu biểu (VD với chương trình tính căn bậc 2: 100, ¼, 0.01, 2, 10E12)  Xét các tình huống biên: dữ liệu nằm ở phần biên của tập giá trị cho phép (VD tính căn 0)  Người lập trình thường mắc lỗi khi xử lí các điều kiện biên: chia cho 0, lấy kí tự từ xâu rỗng, truy cập đến con trỏ null  Xét các tình huống dữ liệu không hợp lệ (VD tính căn -2). 2009-2010 OOP - http://mim.hus.edu.vn/elearning 8
  • 9. Đọc dữ liệu thử từ tệp  Đặt dữ liệu thử trong 1 tệp trông “đẹp” hơn.  Chuyển hướng dòng dữ liệu vào  java Program < data.txt  Một số IDE không hỗ trợ chuyển hướng dòng vào. Trong trường hợp đó cần dùng cửa sổ lệnh  Chuyển hướng dòng dữ liệu ra:  java Program > output.txt  VD:  Xem RootApproximatorHarness4.java (ch10/root2)  Dữ liệu vào: tệp test.in  Chạy chương trình:  java RootApproximatorHarness4 < test.in > test.out 2009-2010 OOP - http://mim.hus.edu.vn/elearning 9
  • 10. Đánh giá các tình huống thử  Làm sao biết được kết quả ra là đúng?  Tính bằng tay  Chọn các dữ liệu vào mà đã biết kết quả ra  Kiểm tra xem các kết quả ra có thoả mãn một số thuộc tính nào đó (VD: bình phương của căn bậc hai 1 số phải bằng số đó)  Sử dụng 1 “nhà tiên tri” (Oracle): dùng 1 phương thức chậm hơn nhưng tin cậy để tính kết quả tương ứng (VD: Dùng Math.pow(x, 0.5) để tính căn bậc 2).  VD:  Xem RootApproximatorHarness5.java, RootApproximatorHarness6.java (ch10/root3) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 10
  • 11. Độ bao trùm kiểm thử  Kiểm thử hộp đen: Kiểm tra chức năng phần mềm mà không xét đến cấu trúc cài đặt bên trong  Kiểm thử hộp trắng: Xét đến cấu trúc bên trong khi thiết kế tình huống kiểm thử  Độ bao trùm kiểm thử (test coverage): đánh giá bao nhiêu phần của chương trình đã được kiểm thử  Đảm bảo mỗi phần của chương trình đều được thử nghiệm ít nhất 1 lần bởi 1 tình huống thử  VD: đảm bảo mỗi nhánh lệnh trong chương trình đều đã được thực hiện trong ít nhất 1 tình huống thử 2009-2010 OOP - http://mim.hus.edu.vn/elearning 11
  • 12. Kiểm thử đơn vị với JUnit  http://junit.org  Triết lí: Mỗi khi cài đặt 1 lớp thì cũng tạo ngay 1 lớp kiểm thử đi kèm  Có trong nhiều IDE như BlueJ và Eclipse  VD:  Xem ch10/junit, chạy chương trình kiểm thử trong BlueJ và Eclipse 2009-2010 OOP - http://mim.hus.edu.vn/elearning 12
  • 13.
  • 14. Theo vết chương trình  In các thông báo lần theo các bước thực hiện chương trình  if (status == SINGLE){ System.out.println("status is SINGLE"); . . . } . . .  Nhược điểm: Phải bỏ các thông báo đó khi kiểm thử xong, nếu có lỗi khác lại phải thêm các thông báo vào  Giải pháp: Dùng lớp Logger để có thể tắt đi các thông báo vết mà không cần xoá khỏi chương trình 2009-2010 OOP - http://mim.hus.edu.vn/elearning 14
  • 15. Ghi nhật kí (logging)  Các thông báo log có thể ngừng kích hoạt khi thực hiện xong việc kiểm thử  Dùng đối tượng Logger.global  Ghi lại 1 thông báo:  Logger.global.info("status is SINGLE");  Ngầm định, các thông báo log được in ra. Khi cần tắt các thông báo này dùng lệnh:  Logger.global.setLevel(Level.OFF);  Tránh log quá nhiều hoặc quá ít  Một số người lập trình thích dò lỗi (debugging) hơn 2009-2010 OOP - http://mim.hus.edu.vn/elearning 15
  • 16. Ghi nhật kí (2)  Khi theo vết thực hiện 1 chương trình, các sự kiện quan trọng nhất là điểm vào và điểm ra 1 phương thức  Ở đầu phương thức, in ra giá trị các tham biến  Ở cuối phương thức, in ra kết quả trả lại  VD: xem chương trình trong ch10/log 2009-2010 OOP - http://mim.hus.edu.vn/elearning 16
  • 17. Sử dụng công cụ dò lỗi (debugger)  Công cụ dò lỗi:  Cho phép chạy/tạm dừng/chạy lại 1 chương trình và phân tích các trạng thái (giá trị các biến) trong quá trình chạy  3 khái niệm chính:  Điểm dừng (breakpoints)  Thực hiện từng bước một (single-stepping)  Khảo sát biến (inspecting variables) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 17
  • 18. Breakpoint: điểm dừng của debugger
  • 19. Khảo sát biến 2009-2010 OOP - http://mim.hus.edu.vn/elearning 19
  • 20. Dò lỗi  Khi chạy công cụ dò lỗi một chương trình, chương trình đó được thực hiện bình thường cho đến khi gặp dòng lệnh được đánh dấu điểm dừng thì tạm ngừng. Khi đó, ta có thể:  Khảo sát giá trị các biến  Thực hiện từng dòng lệnh một  Hoặc tiếp tục chạy cho đến khi gặp điểm dừng sau  Khi chương trình kết thúc, công cụ dò lỗi cũng kết thúc  Các điểm dừng vẫn được kích hoạt cho đến khi bị xoá đi  Có 2 dạng lệnh chạy từng bước một:  Step Over: gặp lời gọi phương thức thì thực hiện trong 1 bước  Step Into: gặp lời gọi phương thức thì thực hiện từng lệnh một trong phương thức đó 2009-2010 OOP - http://mim.hus.edu.vn/elearning 20
  • 21. Ví dụ dò lỗi  Lớp Word đếm số âm tiết trong 1 từ  Mỗi cụm nguyên âm (a, e, i, o, u, y) liền nhau được đếm là 1 âm tiết  Tuy nhiên, chữ e ở cuối từ không được đếm là 1 âm tiết  Nếu thuật toán cho giá trị đếm = 0 thì tăng thành 1  Hàm dựng bỏ đi các kí tự không phải là chữ cái ở đầu và cuối  Xem tệp Word.java và WordTester.java (ch10/debugger) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 21
  • 22. Thực hiện dò lỗi chương trình  Với xâu vào là "hello yellow peach.", kết quả lỗi:  Syllables in hello: 1 Syllables in yellow: 1 Syllables in peach: 1  Đặt breakpoint vào dòng đầu tiên của phương thức countSyllables trong lớp Word  Thực hiện chương trình, khi dừng tại breakpoint thì thực hiện từng bước cho đến lệnh kiểm tra nếu kí tự cuối bằng 'e'  Khảo sát biến ch chứa kí tự cuối: ch = 'l' => lỗi 2009-2010 OOP - http://mim.hus.edu.vn/elearning 22
  • 23.
  • 24. Các lỗi khác?  Giá trị của end = 3 chứ không phải 4  text chứa "hell" thay vì "hello"  => countSyllables trả lại 1 là bình thường  => lỗi nằm ở chỗ khác  Bắt đầu lại chương trình, đặt breakpoint tại đầu hàm dựng của lớp Word.  Nhập xâu đầu vào "hello."  Ngừng lại sau khi thực hiện xong vòng lặp thứ 2 trong hàm dựng  Khảo sát i và j: giá trị đúng  Tại sao text được đặt bằng "hell" ??? 2009-2010 OOP - http://mim.hus.edu.vn/elearning 24
  • 25.
  • 26. Dò lỗi...  Sửa lỗi và thực hiện lại chương trình với xâu vào ban đầu "hello yellow peach."  Còn lỗi => lặp lại quá trình dò lỗi như trên, sửa lỗi cho đến khi thu được kết quả đúng:  Syllables in hello: 2 Syllables in yellow: 2 Syllables in peach.: 1  Đến đây có thể kết luận là chương trình đã hết lỗi không??? 2009-2010 OOP - http://mim.hus.edu.vn/elearning 26