unit test, debug, optimize

23
By HBI

Upload: saobien

Post on 21-Apr-2015

54 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Unit Test, Debug, Optimize

By HBI

Page 2: Unit Test, Debug, Optimize
Page 3: Unit Test, Debug, Optimize

� WHAT?� Unit test? Là kiểm tra một đơn vị nhỏ nhất trong code có thể kiểm

tra được. Thường đó là một hàm, thủ tục, thao tác.

� WHY?� Đây là khâu đầu của quá trình test, unit test dùng để kiểm tra xem

code vi t ra có đúng v i yêu c u thi t k không?code viết ra có đúng với yêu cầu thiết kế không?

� Unit test thành công, từng chi tiết hoạt động đúng -> bộ phận mới cókhả năng hoạt động đúng -> hệ thống mới có khả năng hoạt độngđúng.

� WHEN?� Khi cho rằng một hàm hay thủ tục nào đó đã được viết xong.

Page 4: Unit Test, Debug, Optimize

� WHO?� Người lập trình cần tiến hành Unit Test do:

� Người lập trình (NLT) biết chương trình của mình gồm những phần nhỏ nào, ở đâu.

� Khi thực hiện Unit Test và sửa lỗi, NLT có cơ hội để kiểm tra xem mình hiểu đúng yêu cầu thiết kế hay chưa.xem mình hiểu đúng yêu cầu thiết kế hay chưa.

� NLT tìm hiểu được các lỗi có thể xảy ra trong từng unit -> Rút kinh nghiệm cho các lần code sau.

Page 5: Unit Test, Debug, Optimize

� BLACK BOX TESTING (Để kiểm tra chức năng)� Xác định các trường hợp cần test (test case)

� Đầu vào� Kiểu gì?

� Miền giá trị?

Có khuôn m u gì không?� Có khuôn mẫu gì không?

� Đầu ra� Đầu ra có thể là gì?

� Xác định đầu ra dự kiến� Đầu vào sai miền giá trị, kiểu, khuôn mẫu -> Thông báo gì?

� Đầu vào đúng -> Kết quả dự kiến là gì?

Page 6: Unit Test, Debug, Optimize

� BLACK BOX TESTING� Thực hiện test

� Nhập đầu vào

� Kiểm tra đầu ra thực tế

� Só sánh đầu ra thực tế với đầu ra dự kiếnSó sánh đầu ra thực tế với đầu ra dự kiến

� Đánh giá? Nếu có lỗi thì có thể sai ở đâu?

Page 7: Unit Test, Debug, Optimize

� WHITE BOX TESTING (Để kiểm tra cấu trúc)� Vẽ lưu đồ thuật toán

� Xác định các trường hợp cần test� Nhập đầu vào sao cho

� Các test có thể tới được mọi nút trên lưu đồ� Các test có thể tới được mọi nút trên lưu đồ

� Các test có thể đi qua mọi nhánh trên lưu đồ

� Các test có thể đi qua mọi đường trên lưu đồ

� Xác định đầu ra dự kiến

� Thực hiện test

Page 8: Unit Test, Debug, Optimize

� WHITE BOX TESTING� Các nút là: 1,2,3,4,5,6,7

� Đường đi Test 1: 12357

� Đường đi Test 2: 124567

� Các nhánh là: 12, 23, 24, � Các nhánh là: 12, 23, 24, 27, 35, 43, 56, 57, 67� Đường đi Test 1: 127

� Đường đi Test 2: 124357

� Đường đi Test 3: 123567

� Các đường là: 127, 12357, 123567, 124357, 1243567� Đường đi cho test: 5 đường

nêu trên -> 5 test case

Page 9: Unit Test, Debug, Optimize
Page 10: Unit Test, Debug, Optimize

� Checking the follow� Xác định đầu vào.

� Căn cứ đầu vào, xác định đường đi của chương trình.

� Đặt trong code các break point kiểm tra đường đi.

� Chạy chương trình ở chế độ debug.

Xác định các break point nào đã được đi qua, từ đó xác định hướng � Xác định các break point nào đã được đi qua, từ đó xác định hướng đi của chương trình

� So sánh hướng đi thực tế với lý thuyết

� Nếu tại một nút nào đó, chương trình rẽ nhánh không đúng? Kiểm tra điều kiện rẽ nhánh

Page 11: Unit Test, Debug, Optimize

� Checking the output� Xác định đầu vào.

� Căn cứ đầu vào, xác định đường đi của chương trình

� Đặt trong code các break point theo đường đi.

� Chạy chương trình ở chế độ debug.

Từ breakpoint đầu tiên, thực hiện chạy chương trình ở chế độ step by � Từ breakpoint đầu tiên, thực hiện chạy chương trình ở chế độ step by step.

� Tại từng đoạn code, xác định đầu vào và đầu ra dự kiến

� Nếu tại một đoạn nào đó, đầu ra không đúng như dự kiến -> kiểm tra đoạn code đó.

� Với đoạn code dài, dùng cách chia khoảng để nhanh chóng tìm được nơi gây lỗi.

Page 12: Unit Test, Debug, Optimize

� Immediate Window (Short Cut: Ctrl + ‘G’)� Cách dùng 1: Thêm code sau: Debug.Print “Some text”

� Ví dụ đoạn code sau:Public Function Hbi_Tinh (So1 as Integer, So2 as Integer, PhepToan as integer) as IntegerSelect Case PhepToan

Case 1Case 1‘Doan nay de kiem tra huong di cua chuong trinhDebug.Print “Hbi_Tinh - Thuc hien phep CONG”‘Doan nay de kiem tra dau vao, dau raDebug.Print So1So1 = So1 + So2Debug.Print So1

Case 2Debug.Print “Hbi_Tinh - Thuc hien phep TRU”

Case elseDebug.Print “Hbi_Tinh - Tim theo cach khac???”

End selectReturn So1

End Function

Page 13: Unit Test, Debug, Optimize

� Immediate Window (Short Cut: Ctrl + ‘G’)� Cách dùng 2: Nhập trực tiếp dòng lệnh trong quá trình debug

� Ví dụ:� Đoạn code trên, tạo 1 breakpoint tại dòng màu đỏ.

� Khi chương trình dừng tại dòng đó, nhập “?So1” + Enter vào Immediate Window -> Trả về giá trị của biến So1. Immediate Window -> Trả về giá trị của biến So1.

� Nhập tiếp: “So1 = So1 + 2” + Enter -> So1 được cộng thêm 2

� Nhập tiếp: “?So1” + Enter -> Trả về giá trị của biến So1 khác trước

� Nhập tiếp: “?Abs(So1)” + Enter -> Xem giá trị trả về của hàm Abs với đầu vào là So1

Page 14: Unit Test, Debug, Optimize

� Watch Windows� Thực hiện

� Tạo breakpoint tại nơi cần kiểm tra� Khi chương trình dừng tại break point đó, chọn biến, đối

tượng cần kiểm tra� Click chuột phải để hiện ra menu, chọn Add Watch� Cửa số watch hiện ra, ta có thể xem giá trị biến hay thuộc tính � Cửa số watch hiện ra, ta có thể xem giá trị biến hay thuộc tính

của đối tượng muốn kiểm tra

� Quick Watch (Shift + F9)� Thực hiện

� Tạo breakpoint tại nơi cần kiểm tra� Khi chương trình dừng tại break point đó, chọn biến, đối

tượng cần kiểm tra� Nhấn Shift + F9 -> Giá trị biến, thuộc tính của đối tượng được

hiện lên trên cửa số khác

Page 15: Unit Test, Debug, Optimize
Page 16: Unit Test, Debug, Optimize

� Memory� Mỗi đối tượng sinh ra trong khi chạy chương trình, cần

thực hiện hàm hủy cho nó. Nếu đối tượng không có hàm Dispose, có thể dùng phép gán với giá trị nothing để giảphóng bộ nhớ.

� Ví dụ:� Ví dụ:� Dim Var_1 as new Object_1, Arr_1(100) as Integer

� ‘(Some code here)

� Var_1.Dispose()

� Var_1 = new Object_1

� ‘(Some code here)

� Var_1.Dispose

� ‘Do Var_1 được tạo ra 2 lần trong lúc chạy-> Dispose 2 lần

� Arr_1 = Nothing

Page 17: Unit Test, Debug, Optimize

� Memory� Có thể dùng một biến với nhiều mục đích khác nhau

giảm số biến được cấp phát.

� Ví dụ:� Dim Tmp, So_1 as Integer = 0, So_2 as Integer = 50;

For Tmp = 0 to N ‘Tmp dùng làm biến chạy trong vòng lặp� For Tmp = 0 to N ‘Tmp dùng làm biến chạy trong vòng lặp� So_1 += Tmp

� Next

� Tmp = So_1: So_1 = So_2: So_2 = Tmp ‘Tmp làm biến trung gian để đổi giá trị 2 biến

Page 18: Unit Test, Debug, Optimize

� Speed� Using temporary variable

� Nếu kết quả của hàm nào đó cần dùng nhiều lần -> Lưu kết quả vảo biến tạm để đỡ mất công tính toán lại.

� Ví dụ:If ktrLoaiXe() ThenIf ktrLoaiXe() Then

If ktrTTinHD() ThenthemDanhMucXe()themHoaDonXe()

ElseMsgbox (“Thong bao 1 ”)

End IfElseIf ktrLoaiXe() = False Then

Msgbox (“Thong bao 2 ”)End If

Page 19: Unit Test, Debug, Optimize

� Ví dụ (sửa lại):Dim tmp as Boolean = ktrLoaiXe()If tmp Then

If ktrTTinHD() ThenthemDanhMucXe()themHoaDonXe()themHoaDonXe()

ElseMsgbox (“Thong bao 1 ”)

End IfElse

Msgbox (“Thong bao 2 ”)

End If

Page 20: Unit Test, Debug, Optimize

� Ví dụ (sửa lại lần 2):

If ktrLoaiXe() ThenIf ktrTTinHD() Then

themDanhMucXe()themHoaDonXe()

ElseElseMsgbox (“Thong bao 1 ”)

End IfElse

Msgbox (“Thong bao 2 ”)

End If

Page 21: Unit Test, Debug, Optimize

� Others� Example 1_0:

� Dim x as integer, y as boolean

� (Some code here)

� If y thenIf y then� X = 1

� Else� X = -1

� End if

� Example 1_1:� Dim x as integer, y as boolean

� (Some code here)

� X = iif (y, 1, -1)

Page 22: Unit Test, Debug, Optimize

� Others� Example 2_0:

� Dim i as integer

� For i = 0 to 100

� (Some code here)(Some code here)

� Next

� Example 2_1:� For i as integer = 0 to 100

� (Some code here)

� Next

Page 23: Unit Test, Debug, Optimize

� Others� Example 3_0:

� Dim x as integer, y, z as long ‘0 < x <4� (Some code here)� Select case x

� Case 1� Y = y + z

� Case 2� Y = y - z

� Case 3� Y = y *z

� End select

� Example 3_1:� Dim x as integer, y, z as long ‘0 < x <4� (Some code here)� Y = Choose (x, y+z, y-z, y*z)