LẬP TRÌNH TRỰC QUAN - PHẦN II VISUAL BASIC - BÀI 17 docx

11 343 0
LẬP TRÌNH TRỰC QUAN - PHẦN II VISUAL BASIC - BÀI 17 docx

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình trực quan BÀI 17 DEBUG Bugs lỗi chương trình mà ta phát chạy Debug cơng việc loại tất lầm chương trình để chạy êm xi tình Thơng thường muốn sửa bug trước hết ta phải tìm hiểu lý khiến xuất Một biết duyên cớ ta nghĩ cách giải Nói chung, có hai loại bugs : chương trình khơng làm chuyện cần phải làm lập trình viên hiểu lầm Specifications hay cho tin tức sai lạc, chương trình bỏ sót chi tiết cần phải có Trường hợp ta giải cách giảm thiểu hiểu lầm qua nâng cấp khả truyền thơng Chương trình khơng thực ý lập trình viên muốn, tức lập trình viên muốn đàng mà bảo chương trình làm ngã vơ tình khơng viết chương trình cách Trường hợp ta giải cách dùng Software Tools (kể ngơn ngữ lập trình) thích hợp, có q trình làm việc có hệ thống Có nhiều yếu tố ảnh hưởng đến chất lượng chương trình chức chương trình, cấu trúc phận, kỹ thuật lập trình phương pháp debug Debug không hẳn nằm giai đoạn cuối dự án mà tùy thuộc nhiều vào yếu tố kể giai đoạn triển khai 17.1 Đặc tả chương trình (Program Specifications) Dầu chương trình lớn hay nhỏ, trước hết ta phải xác định rõ ràng tỉ mỉ cần phải làm gì, người dùng, mạng nào, database lớn bao nhiêu, phải chạy nhanh đến mức v.v Có nhiều chương trình phải bị thay đổi chừng lập trình viên hiểu lầm điều khách hàng muốn Do liên hệ với khách hàng ta cần phải hỏi đi, hỏi lại, phản hồi với khách hàng nhiều lần điều ta hiểu thư từ, tài liệu, để khách xác nhận ta biết ý họ trước xúc tiến việc thiết kế chương trình Nếu sau khách đổi ý, quyền họ, họ phải trả tiền thay đổi (variation) 136 Lập trình trực quan 17.1.1 Cấu trúc phận Chương trình có kiến trúc tương tự cỗ máy Mỗi phận đơn giản tốt cách ráp phận phải để ta dễ thử Trong thiết kế ta phải biết trước yếu điểm phận nằm đâu để ta chuẩn bị cách thử chúng Ta không tin phận hoàn hảo thử nó, dù đơn giản đến đâu Nếu ta muốn dùng kỹ thuật hồn cảnh mà ta khơng biết chạy khơng nên thử riêng rẽ trước Phương pháp gọi Prototype Ngoài ra, ta nên xây dựng kịch test cho trường hợp đặc biệt, điển hình bad data - người sử dụng bấm lung tung hay database chứa nhiều rác Nếu chương trình chạy real-time (tức data thu nhập qua Serial Com Port, Data Acquisition Card hay mạng), cần phải lưu ý trường hợp khác tùy theo việc xảy trước, việc xảy sau Lúc Logic chương trình tùy thuộc vào trạng thái (State) data Tốt nghĩ đến Scenarios để thử giai đoạn tình Ngày với kỹ thuật hướng đối tượng, giai đoạn thiết kế lúc định Data Structures (tables, records v.v.) số Forms với Classes Nhớ Class gồm có Data Structure Subs/Functions/Properties làm việc (operate) data Data structure phải chứa đầy đủ chi tiết (data fields, variables) ta cần Kế cách chương trình process data Subs/Functions cho bên ngồi gọi ta cho Public, cịn Subs/Functions khác hữu để phục vụ bên class ta cho Private 17.1.2 Kỹ thuật lập trình Kiến thức lập trình viên thói quen họ quan trọng Nói chung, người hấp tấp, nhảy vào viết chương trình trước suy nghĩ hay cân nhắc chín chắn sau bugs xuất nhiều điều tự nhiên 17.1.3 Dùng Subs Functions Nếu giai đoạn thiết kế kiến trúc chương trình ta chia Class, lập trình ta lại thiết kế chi tiết Subs, Functions v.v , thứ cần phải thử Nếu ta chia cơng việc giai đoạn giai đoạn mà call đến Sub Thứ cần phải tính hay lấy từ nơi khác thực Function 137 Lập trình trực quan Nhớ điểm khác biệt Sub Function Function cho ta kết mà không làm thay đổi parameters ta đưa cho Trong đó, dầu Sub khơng cho ta cách rõ ràng thay đổi trị số (value) parameters ta chuyển cho ByRef Nhắc lại ta chuyển parameter ByVal cho Sub giống ta đưa copy (bản sao) variable cho Sub, Sub sữa đổi nó bị bỏ qua, khơng ảnh hưởng đến original (bản chính) variable Ngược lại ta chuyển parameter ByRef cho Sub giống ta đưa variable cho Sub để sữa đổi Do để tránh trường hợp vơ tình làm cho trị số variable bị thay đổi ta dùng Sub/Function nên dùng ByVal chuyển parameter vào Sub/Function Thật ra, dùng ByRef cho parameter chuyển vào Function Trong trường hợp dĩ nhiên variable bị sữa đổi Điều gọi phản ứng phụ (side effect), bình thường làm Do đó, thật muốn vượt ngồi qui ước thơng thường nên Comment rõ ràng để cảnh báo người đọc chương trình sau Ngồi ra, lập trình viên thường có Source Code Library Subs/Functions ưng ý Chúng ta nên dùng Subs/Functions Library nhiều tốt, chúng thử nghiệm 17.2 Một số lưu ý 17.2.1 Đừng sợ Error Mỗi chương trình có Error, Compilation Error (vì ta viết code khơng văn phạm, ngữ vựng), Error chạy chương trình, khơng nên sợ Hãy bình tĩnh đọc Error Message để xem muốn nói Nếu khơng hiểu đọc đọc lại vài lần suy nghiệm xem có tìm hướng dẫn khơng Khi lập trình gặp Errors nhiều, nên phải tập bình tĩnh đối diện với chúng 138 Lập trình trực quan 17.2.2 Dùng Comment (Chú thích) Lúc viết code nhớ thêm Comment đầy đủ để trở lại đọc đoạn code tương lai không cần phải dựa vào tài liệu khác mà hiểu mục đích Sub/Function hay đoạn code Như không thiết phải viết nhiều Comment có điểm khác thường, bí hiểm cần thơng báo giải thích làm cách Có thể sau ta khám phá đoạn code có bugs; lúc đọc lại ta thấy dầu ý định thiết kế cách lập trình có phần thiếu kiểm sốt chẳng hạn Tính trung bình lập trình viên làm việc 18 tháng chỗ Tức là, gần chắn code viết người khác đọc bảo trì ( debug thêm bớt) Do đó, code phải đơn giản, dễ hiểu tốt Đừng lo ngại chương trình chạy chậm hay chiếm nhiều nhớ, ngày computer chạy nhanh nhớ rẻ Khi ta thật cần phải quan tâm vận tốc nhớ điều cần thiết kế cẩn thận khơng phải dựa vào tiểu xảo lập trình 17.2.3 Đặt tên variables có ý nghĩa Trong thực tế gặp nhiều khó khăn làm việc với variables có tên vắn tắt K, L, AA, XY Ta khơng có chút ý niệm chúng, mục đích sử dụng chúng làm Thay vào đó, ta đặt tên variables NumberOfItems, PricePerUnit, Discount v.v dễ hiểu Một bugs khó thấy ta dùng tên cho local variable (variable declared Sub/Function) global variable (variable declared Form hay Basic Module) Local variable che đậy global variable tên, nên muốn nói đến global variable hồn cảnh dùng lầm local variable 17.2.4 Dùng Option Explicit Chúng ta nên trung thành với cách dùng Option Explicit đầu Form, Class hay Module Nếu có variable đánh vần sai VB6 IDE cho biết Nếu không dùng Option Explicit, variable đánh vần sai xem variable với giá trị hay "" (empty string) 139 Lập trình trực quan Nói chung nên thận trọng assign data type cho variable với data type khác Chúng ta phải biết rõ làm để khỏi bị phản ứng phụ (side effect) 17.2.5 Desk Check Kiểm lại code trước compile Khi ta compile code, khơng có error có nghĩa Syntax code đúng, khơng có nghĩa logic Do ta cần phải biết code ta viết làm điều ta muốn cách đọc lại code trước compile lần Công việc gọi Desk Check (Kiểm bàn) Một chương trình Desk Checked kỹ cần debug chứa bugs khơng ngờ trước Lý scenarios tiên liệu chu đáo 17.2.6 Soạn Test Plan Test Plan liệt kê tất ta muốn thử cách thử chúng Khi thử theo Test Plan ta khám phá bug tìm cách loại chúng Hồ sơ ghi lại lịch sử Test Plan (trục trặc xảy ra, dùng biện pháp để giải quyết) bổ ích nhiều phương diện Ta học từ kinh nghiệm Debug biết rõ thứ dự án thử theo cách 17.3 Các kỹ thuật xử lý lỗi 17.3.1 Xử lý Error lúc Run time Khi EXE chương trình viết VB6 chạy, gặp Error, hiển thị Error Dialog cho biết lý gây lỗi Sau click OK, chương trình ngưng Nếu chạy chương trình VB6 IDE, có dịp bảo chương trình ngừng source code chỗ có Error cách bấm button Debug Error Dialog Tiếp theo tìm hiểu trị số variables để đốn ngun Error Do đó, bắt đầu cho dùng chương trình viết cho nội đơn vị, tiện vài tuần đầu, thay chạy EXE chương trình, chạy source code VB6 IDE Nếu có bug xảy ra, cho chương trình ngừng source code để debug Khi dùng statement: ON Error Resume Next Thì từ chỗ trở đi, chương trình gặp Error, bỏ qua (ignore) hoàn toàn Điểm tiện chỗ giúp chương trình EXE ta tránh bị treo điểm xuất bug Nhưng bất lợi khách hàng cho hay họ gặp trường hợp lạ, khơng giải thích (vì Error bị ignored mà khơng để ý), ta bí ln, khơng biết bắt 140 Lập trình trực quan đầu từ đâu để debug Do đó, dĩ nhiên lúc debug ta khơng nên dùng nó, trước giao cho khách hàng nên cân nhắc kỹ trước dùng 17.3.2 Dùng Breakpoints Cách hay để theo dõi execution chương trình dùng Breakpoint để làm cho chương trình ngừng lại chỗ ta muốn code, sau ta cho chương trình bước bước Trong dịp ta xem xét trị số variables để coi chúng có dự định khơng Chúng ta đốn trước execution qua chỗ code, chọn chỗ thích hợp click bên trái dịng code, chỗ dấu chấm trịn đỏ hình đây: Nếu click lên dấu chấm tròn đỏ lần hủy bỏ Một cách khác để đặt breakpoint để editor cursor lên dòng code bấm F9 Nếu bấm F9 lần cursor nằm dịng hủy bỏ break point Lúc chương trình dừng lại, xem trị số variable cách để cursor lên variable ấy, tooltip hiên hình đây: Có số chuyện khác làm lúc Chúng ta nắm dấu chấm trịn đỏ kéo (drag) ngược lên hay nhiều dịng code để thực thi trở lại vài dòng code Chúng ta cho chương trình thực thi dịng code cách bấm F8 Menu command tương đương với Debug | Step Into Sẽ có lúc khơng muốn chương trình bước 141 Lập trình trực quan vào bên Sub/Function mà muốn việc thực thi Sub/Function bước đơn giản Trong trường hợp đó, dùng Menu command Debug | Step Over hay Shift-F8 Nhớ chương trình chạy lại bấm F5, tương đương với Menu command Run | Continue Có muốn chương trình ngừng For Loop Iterator value có trị số lớn Nếu ta để sẵn breakpoint bấm F5 nhiều lần bất tiện Có phương pháp hữu hiệu dùng IF statement để thử Iterator value có trị số ta ngừng breakpoint statement Beep (thay statement Print ICounter) hình đây: Muốn hủy bỏ breakpoints dùng Menu command Debug | Clear All Breakpoints Để tiện việc debug, dùng Debug Toolbar cách hiển thị với Menu command View | Toolbars | Debug VB6 IDE hiển thị Debug Toolbar sau: 142 Lập trình trực quan 17.3.3 Dùng Immediate Window Immediate Window cho phép ta thực thi VB statement chương trình dừng lại Ta dùng Print statement để hiển thị trị số variable hay kết Function, gọi Sub hay thay đổi trị số variable trước tiếp tục cho chương trình chạy lại Để hiển thị Immediate Window, dùng Menu command View | Immediate Window Thay đánh "Print ICounter" đánh "? ICounter" Nhớ VB Statement đánh Immediate Window executed bấm Enter Chúng ta dùng lại VB statement Immediate Window, cần bấm Enter cuối dòng 17.3.4 Theo dấu chân chương trình (Tracing) Đơi khơng tiện để ngừng chương trình muốn biết chương trình làm Sub Chúng ta để code Sub/Function statement giống 143 Lập trình trực quan Debug.Print Format ( Now,"hh:mm:ss ") & "(Sub ProcessInput) Current Status:" & Status để chương trình hiển thị Immediate Window value Status thực thi bên Sub ProcessInput lúc Có cách khác thay cho hiển thị Immediate Window cho viết xuống (Log) vào text file Dưới Sub điển hình dùng để Log Event message: Sub LogEvent(ByVal GivenFileName, ByVal Msg As String, HasFolder As Boolean, IncludeTimeDate As Integer) ' Append event message Msg to a text Logfile GivenFileName ' If GivenFileName is fullPathName then HasFolder is true ' IncludeTimeDate = : No Time or Date ' = : Prefix with Time ' = : Prefix with Time and Date Dim FileNo, LogFileName, theFolder If HasFolder Then LogFileName = GivenFileName Else If Right(App.Path, 1) "\" Then theFolder = App.Path & "\" Else theFolder = App.Path End If LogFileName = theFolder & GivenFileName End If FileNo = FreeFile If Dir(LogFileName) "" Then Open LogFileName For Append As FileNo Else Open LogFileName For Output As FileNo End If Select Case IncludeTimeDate Case ' No Time or Date Print #FileNo, Msg Case ' Time only Print #FileNo, Format(Now, "hh:nn:ss ") & Msg Case ' Date & Time Print #FileNo, Format(Now, "dd/mm/yyyy hh:nn:ss ") & Msg 144 Lập trình trực quan End Select Close FileNo End Sub 17.3.5 Dùng Watch Window Đơi muốn chương trình ngừng chỗ định, trị số variable hay expression bao nhiêu, khơng biết variable tự nhiên có trị số Ví dụ muốn chương trình ngừng lại ICounter = 15 Chúng ta dùng Menu command Debug | Add Watch VB6 IDE hiển thị dialog Chúng ta đánh ICounter = 15 vào textbox Expression click option box Break When Value Is True hộp Watch Type Làm có nghĩa ta muốn chương trình ngừng ICounter 15 17.3.6 Dùng phương pháp loại suy (Elimination Method) Có phương pháp thông dụng debug loại bỏ dịng code nghi ngờ để xem bug có biến khơng Nó gọi Elimination Method Nếu bug biến dịng code loại bỏ thủ phạm Chúng ta Comment Out số dòng lúc cách highlight dòng click Comment Block Edit ToolBar 145 Lập trình trực quan Khi dùng Elimination Method phải cân nhắc Logic code định Comment Out dịng nào, khơng, phương pháp nguy hiểm Ngoài ra, Menu Command View | Locals Window liệt kê cho trị số tất variables Sub/Function View | Call Stack liệt kê thứ bậc Sub gọi từ ngồi vào vị trí code ngừng thời 146 ... cuối dịng 17. 3.4 Theo dấu chân chương trình (Tracing) Đơi khơng tiện để ngừng chương trình muốn biết chương trình làm Sub Chúng ta để code Sub/Function statement giống 143 Lập trình trực quan Debug.Print... vài lần suy nghiệm xem có tìm hướng dẫn khơng Khi lập trình gặp Errors nhiều, nên phải tập bình tĩnh đối diện với chúng 138 Lập trình trực quan 17. 2.2 Dùng Comment (Chú thích) Lúc viết code nhớ.. .Lập trình trực quan 17. 1.1 Cấu trúc phận Chương trình có kiến trúc tương tự cỗ máy Mỗi phận đơn giản tốt cách ráp phận phải

Ngày đăng: 24/07/2014, 16:21

Từ khóa liên quan

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

Tài liệu liên quan