Làm DEV không KHÓ, KHÓ làm sao fix được BUG?

Người TIP
07/2024
Đã 7 năm kể từ ngày đầu tiên anh Trần Đức Nguyên gia nhập đại gia đình TMA. Hiện tại, anh đang là một Subject Matter Expert và là một thành viên chủ chốt của dự án. Hãy cùng #TIPTalk kỳ này lắng nghe những chia sẻ “xương máu” từ anh dành cho một lập trình viên nhé!

Làm bạn với BUG (lỗi)

Trước khi bắt đầu vào công việc của một lập trình viên, ngoài việc phải nắm vững nhiều ngôn ngữ coding thì việc tập làm quen với sự xuất hiện của bug cũng là điều không thể tránh khỏi. Vậy nên bạn hãy thử tưởng tượng đơn giản, Bug là những con pet mà các lập trình viên vô tình tạo ra và nuôi dưỡng trong quá trình viết code, làm cho kết quả không hoạt động như mong muốn. Để phát hiện những chú pet này, ngay sau khi những dòng code đầu tiên được viết, bạn cần thực hiện Debug. Đây là quá trình tìm kiếm và phát hiện lỗi trong phần mềm trước khi launching, đưa sản phẩm đến tay người dùng. Debug diễn ra và tiếp tục được thực hiện cho đến khi kết hợp với những unit khác của lập trình tạo thành một sản phẩm phần mềm hoàn chỉnh. Sau khi đã tiến hành Debug và phát hiện ra Bug, bạn cần nhanh chóng Fix bug nhằm duy trì hoặc nâng cao chất lượng sản phẩm.

Có rất nhiều loại bug khác nhau trong quá trình tạo ra một sản phẩm có thể kể đến như:

  • Logical bug 

Loại bug này xảy ra do sai sót trong logic lập trình, dẫn đến kết quả không mong muốn. Ví dụ: tính toán sai, so sánh sai, vòng lặp vô hạn... 

  • System-Level Integration Bug

Bug tích hợp cấp hệ thống chủ yếu xuất hiện khi hai hoặc nhiều đơn vị code do các developer khác nhau viết không tương tác với nhau. Những bug này chủ yếu xảy ra do sự mâu thuẫn hoặc không tương thích giữa hai hoặc nhiều thành phần.

  • Out of Bound Bug

Lỗi ngoài giới hạn xuất hiện khi người dùng hệ thống tương tác với giao diện người dùng theo cách không chủ ý. Những lỗi này xảy ra khi người dùng cuối nhập một giá trị hoặc một tham số nằm ngoài giới hạn sử dụng ngoài ý muốn.

  • Runtime bug

Có thể nói đây là loại bug phức tạp bởi vì nó chỉ xuất hiện trên hệ thống của khách hàng, tức là nó có thể vượt qua vòng testing của Dev và QA để tới được hệ thống của khách hàng.




Biến “xấu” thành “tốt” 


Sau khi hiểu bug là gì, chúng ta ắt hẳn sẽ chẳng muốn phải “chạm trán” với chúng. Tuy nhiên, sau mỗi lần “vò đầu bứt tai” để fix bug thì bạn cũng có thể học đôi điều về cách lập trình tối ưu và rút kinh nghiệm cho những lần sau. Thế nên thay vì sợ hãi thì hãy nhìn theo hướng tích cực và tận hưởng niềm vui mà việc fix bug thành công mang lại cho lập trình viên. 


Tích lũy thêm kinh nghiệm về kỹ năng tìm kiếm, phán đoán vị trí code có bug từ feedback, các logging files. Sau nhiều lần tốn thời gian cho việc fix bug thì việc lắng nghe và thấu hiểu feedback luôn là chìa khóa cho quá trình phát triển sản phẩm và đồng thời cũng là một hình thức báo cáo bug khác về code của bạn rằng có thật sự ổn hay chưa. 


Code của bạn sẽ dễ debug và fix bug hơn trong tương lai. Khi bạn phát hiện ra một bug, đó là cơ hội để bạn hiểu sâu hơn về hệ thống của mình. Bạn phải phân tích nguyên nhân gốc rễ của vấn đề, xem xét cách các thành phần của hệ thống tương tác với nhau và tìm hiểu những gì đã dẫn đến lỗi. Quá trình này không chỉ giúp bạn sửa lỗi hiện tại mà còn giúp bạn có cái nhìn toàn diện hơn về cách hệ thống hoạt động. Kết quả là bạn sẽ viết code cẩn thận hơn trong tương lai, giảm thiểu nguy cơ gặp phải các lỗi tương tự.


Kinh nghiệm trong việc dự đoán và chuẩn bị các execution environment giống với các hệ thống của khách hàng. Qua mỗi lần sửa lỗi, lập trình viên sẽ hiểu rõ hơn về cách cấu hình và thiết lập môi trường thực thi giống với môi trường của khách hàng. Điều này bao gồm việc chọn đúng phiên bản của các phần mềm, cấu hình mạng, hệ điều hành, và các thông số khác.


Fix bug đem lại niềm vui cho cả bạn và khách hàng. Bởi lẽ, để tạo ra một tính năng mới cần tốn khá nhiều thời gian, trong khi việc fix một bug có thể chỉ cần một giờ đồng hồ. Mỗi bug được fix xong sẽ đem đến niềm vui khi đã đạt được điều gì. Và đó là một cảm giác tuyệt vời! Hơn thế nữa, khách hàng sẽ tin tưởng vào sản phẩm và dịch vụ của bạn hơn khi họ thấy rằng bạn quan tâm và nhanh chóng khắc phục những vấn đề phát sinh.


“Quan trọng là trải nghiệm của bạn”

Phát triển phần mềm không bao giờ là một nhiệm vụ dễ dàng, và việc xuất hiện các lỗi (bug) là điều không thể tránh khỏi. Tuy nhiên, có một số cách hiệu quả để giảm thiểu tối đa số lượng bug trong quá trình phát triển. Dưới đây là ba phương pháp quan trọng về coding, testing, và debugging mà anh Nguyên đúc kết được.

- Coding:
  • Cần kiểm tra mọi input data trước và trong khi xử lý, đặt biệt là data do người dùng nhập hoăc data được tải từ internet.
  • Luôn có code xử lý tất cả những trường hợp không hợp lệ, không nên bỏ qua bất cứ trường hợp không hợp lệ nào.
  • Sử dụng các thư viện, các tool hỗ trợ kiểm tra chất lượng của code như viết unit test cho các function, method, sử dụng các code analysis tool để nâng cao chất lượng code.

- Debugging:
  • Tạo các logging file ghi chi tiết về lỗi xảy ra trong lúc chạy debug để cách ly những đoạn code có khả năng có bug
  • Sử dụng các tool hỗ trợ runtime analysis để theo dõi resources usage, performance

- Testing:
  • Chuẩn bị đầy đủ testbed
  • Test toàn bộ các trường hợp có thể xảy ra khi sử dụng sản phẩm
  • Đặt biệt không nên bỏ qua bất testbed hoặc testcase nào.

Dù vậy, quan trọng vẫn là trải nghiệm của chính bản thân bạn. Ngoài những kinh nghiệm anh Nguyên chia sẻ, việc bạn va chạm và gặp phải những “con pet” ngoài mong muốn sẽ trở thành case study thực tế mà không một ai có thể chỉ rõ cho bạn. Chỉ cần bạn dành thời gian tập trung hết khả năng của bản thân để tìm ra nguyên nhân và cách khắc phục chúng, bạn sẽ có thể lên trình coding và “truy tìm” bug nhanh chóng. Chúc các bạn sớm chinh phục thành công trên con đường của một lập trình viên và không ngừng giữ vững niềm đam mê này nhé!