Làm Thế Nào Để Cải Thiện Kỹ Năng Debug? – Phần 1

Tổng quan

Dù bạn đã đạt đến trình Senior hay chỉ là một Junior mới bước chân vào con đường lập trình thì việc gặp bugs khi coding là điều thường xuyên và gần như không thể tránh khỏi. Sự khác biệt là một lập trình viên giỏi sẽ biết cách cải thiện kỹ năng debug của mình, giúp việc đối mặt với bugs trở nên “bớt đáng sợ” hơn.

Làm thế nào để đối phó với bugs?

  • Prebugging: giảm thiểu các lỗi trước khi chúng được tạo ra.
  • Debugging: xác định, khắc phục và loại bỏ lỗi khi tìm thấy chúng.
  • Post-debugging: có lỗi không mong muốn hoặc không xác định.

Chúng ta hãy xem xét từng vấn đề để hiểu rõ hơn về chúng.

1. Prebugging là gì?

Nếu chúng ta hay gặp lỗi ở một chương trình thông qua việc lập trình, điều đó có nghĩa là chúng ta cần tự hướng dẫn mình để giảm số lượng lỗi mà chúng ta gặp phải. Tôi gọi quá trình hướng dẫn bản thân này là “Prebugging”. Đây là một kỹ năng debug khá cơ bản.

Tôi đã tìm kiếm rất nhiều và có thể thấy một khái niệm khái quát nhất về Prebugging, đây là quá trình xác định và loại bỏ các lỗi khỏi phần cứng hoặc phần mềm của máy tính.

1.1. Lỗi cú pháp

Mỗi ngôn ngữ lập trình đều có các quy tắc riêng và các dev có trách nhiệm tuân theo các quy tắc đó. Ngôn ngữ lập trình nghiêm ngặt về các quy tắc và sẽ đưa ra lỗi bất cứ khi nào các quy tắc đó bị vi phạm.

Ví dụ, hãy tưởng tượng rằng bạn bỏ qua dấu ngoặc đơn của một hàm hoặc phương thức như sau: function {}

Bug sẽ lập tức xuất hiện.

Việc làm quen với thông báo lỗi của một lỗi cú pháp và cách khắc phục nó sẽ giúp bạn có lợi hơn trong khi gỡ lỗi. Cá nhân tôi nhận thấy rằng hầu hết các lỗi liên quan đến cú pháp luôn đề cập đến một số từ khóa giúp bạn tìm ra phần code nào đang có bug.

let school = { name: "Harvard", location: "Heaven On Earth", admit: function() { return "weeew! You are admitted" } } console.log(school.names); // undefined
Code language: JavaScript (javascript)

Lỗi “Không xác định” được trả về cho chúng ta biết liệu đối tượng hoặc thuộc tính đang truy cập có khả dụng hay không. Chúng tôi có thể tìm ra vấn đề ở đâu nếu chúng tôi chú ý đến thông báo lỗi.

1.2. Lỗi logic

Các lỗi logic rất khó xử lý vì chúng luôn có vẻ như không có lỗi – nhưng bạn vẫn không nhận được kết quả như mong đợi.

Ví dụ: một cách đơn giản để xác nhận loại lỗi này là kiểm tra mã bên dưới trong bảng điều khiển của trình duyệt

‌prompt("enter

Bạn có thể mong đợi một số như một đầu ra, nhưng nó sẽ trả về một chuỗi. Tóm lại, bạn sẽ không nhận được kết quả như mong đợi. Do đó việc lên kế hoạch trước khi code và hiểu những điều cơ bản về ngôn ngữ lập trình đang sử dụng có thể giúp bạn đối phó với các lỗi logic – miễn là bạn hiểu các yêu cầu chương trình đưa ra cho bạn.

1.3. Lỗi biên dịch

Chương trình của bạn có thể không biên dịch vì bạn có thể đã vi phạm một số quy tắc mà trình biên dịch mong muốn bạn tuân theo.

Ví dụ: viết một chuỗi mà không có dấu ngoặc kép thông thường, như trong const name = Ayobami, sẽ dẫn đến lỗi biên dịch vì một chuỗi phải được trích dẫn. Vì vậy, code sẽ không biên dịch.

‌‌Điều này tương tự như lỗi cú pháp, và càng viết nhiều code, bạn càng xử lý tốt hơn các lỗi biên dịch. Bạn có thể làm việc hiệu quả hơn và giảm những lỗi này bằng cách biên dịch hoặc kiểm tra code của mình thường xuyên.

1.4. Lỗi resources

Đôi khi, chương trình của bạn có thể vượt quá giới hạn bộ nhớ hoặc sử dụng hết tài nguyên có sẵn. Điều đó có thể khiến ứng dụng của bạn ngừng hoạt động hoặc hoạt động sai. Đoạn code dưới đây là một ví dụ trong thế giới thực về đoạn mã dẫn đến lỗi resources.

function factorial(num) { var result = 1; for(var i = num; i > 0; i--){ result = num * factorial(num-1); } return result; } factorial(5); factorial(10); factorial(20); factorial(0);
Code language: JavaScript (javascript)

Hàm factorial() bị treo hoặc làm chậm trình duyệt vì không gian ngăn xếp, tức là bộ nhớ mà trình duyệt phân bổ cho chuỗi lệnh gọi hàm, đã được sử dụng hết. Trong trường hợp này, lỗi là lỗi resources vì nó xảy ra do sử dụng hết bộ nhớ được cấp phát.

1.5. Lỗi giao diện‌‌

Đôi khi chúng tôi thiết kế các API chương trình để sử dụng theo những cách nhất định nhưng người dùng sử dụng các chương trình theo cách khác nhau và gây ra lỗi. Những lỗi như vậy được gọi là lỗi giao diện.

‌‌Ví dụ, giả sử rằng phương thức go(string) mong đợi một chuỗi nhưng thay vào đó chúng ta gọi nó bằng một số. Điều đó sẽ dẫn đến lỗi nếu người tạo ra chương trình không mong đợi và quản lý cách chương trình sẽ phản hồi trong trường hợp như vậy.

‌‌Hầu hết mọi thứ trong phần mềm đều tuân theo các tiêu chuẩn. Nếu các tiêu chuẩn đã xác định của bạn không được tuân thủ, bạn cần cung cấp cho người dùng của mình thông báo lỗi hoặc hướng dẫn để giúp họ tìm ra họ đang sử dụng ứng dụng sai. Việc ghi lại các API của bạn có thể giúp ích rất nhiều trong trường hợp này.

Tham khảo khóa học lập trình web 6 tháng, đảm bảo 100% công việc đầu ra!

Nguồn: https://topdev.vn/blog/cai-thien-ky-nang-debug/


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Leave a Reply

Your email address will not be published. Required fields are marked *