Đơn vị 5 / 12

Gỡ lỗi và khắc phục sự cố

Lợi nhuận:

  • Khả năng mô tả lỗi một cách hiệu quả cho AI bằng thông báo lỗi, dấu vết ngăn xếp và trường hợp sao chép nhỏ nhất
  • Khả năng chạy quy trình gỡ lỗi có hệ thống với AI để tìm ra nguyên nhân cốt lõi bằng cách đưa ra giả thuyết và thu hẹp từng bước
  • Khả năng xác minh rằng bản sửa lỗi mà AI đề xuất đã thực sự khắc phục được sự cố bằng cách tái tạo và kiểm tra hồi quy

Gỡ lỗi là nhiệm vụ tìm ra lý do tại sao một chương trình hoạt động khác với mong đợi và sửa nó, đồng thời việc này tiêu tốn rất nhiều thời gian của hầu hết các kỹ sư. Việc sửa lỗi hiệu quả không dựa trên trò chơi đoán mò mà dựa trên việc thu hẹp một cách có hệ thống: làm rõ triệu chứng, đưa ra giả thuyết, kiểm tra giả thuyết, tìm ra nguyên nhân gốc rễ. AI là đối tác rất mạnh mẽ trong chu kỳ này; Nhưng chỉ khi bạn cung cấp cho anh ta thông tin chính xác. Việc nói “mã không hoạt động, hãy sửa nó” buộc AI phải đoán và đưa ra các đề xuất chung chung. Cung cấp cho nó thông báo lỗi đầy đủ, dấu vết ngăn xếp và mẫu sao chép nhỏ nhất và bạn sẽ cùng nhau tìm ra nguyên nhân gốc rễ.

Trong phần này, chúng ta sẽ xem cách mô tả lỗi một cách hiệu quả đối với AI, từng bước thu hẹp các giả thuyết và xác minh thông qua kiểm tra hồi quy rằng cách khắc phục được đề xuất thực sự giải quyết được vấn đề. Hãy nhớ rằng: "sửa" một lỗi và "ngăn chặn triệu chứng của lỗi" là hai việc khác nhau; Việc sửa lỗi được thực hiện mà không tìm ra nguyên nhân gốc rễ sẽ chuyển lỗi sang nơi khác.

Các khái niệm: Dấu vết ngăn xếp: Một kết xuất hiển thị các hàm nào được gọi theo thứ tự nào tại thời điểm xảy ra lỗi. Lỗi tối thiểu: Mã/đầu vào đơn giản nhất, ngắn nhất gây ra lỗi. Nguyên nhân gốc rễ: Nguyên nhân thực sự của vấn đề chứ không phải triệu chứng. Kiểm tra hồi quy: Kiểm tra để đảm bảo rằng cùng một lỗi không lặp lại.

Mô tả lỗi cho AI

Khả năng AI tìm ra nguyên nhân gốc rễ tỷ lệ thuận với chất lượng thông tin bạn cung cấp. Một mô tả lỗi tốt bao gồm: những gì bạn đã cố gắng thực hiện, những gì bạn mong đợi, điều gì đã xảy ra, văn bản lỗi chính xác và dấu vết ngăn xếp, mã liên quan, môi trường (ngôn ngữ/phiên bản/HĐH) và mẫu nhỏ nhất tạo ra lỗi.

  1. Làm rõ triệu chứng. Ở định dạng "Dự kiến ​​​​X, Y hiện thực hóa".
  2. Dán toàn bộ văn bản lỗi và theo dõi ngăn xếp. Đừng rút ngắn nó, kiểm duyệt nó, nhưng đừng phá vỡ cấu trúc.
  3. Cho sự tái tạo nhỏ nhất. Đầu vào và mã tối thiểu gây ra lỗi.
  4. Chỉ định môi trường. Phiên bản ngôn ngữ, phiên bản thư viện, môi trường thời gian chạy.

Lời nhắc mô tả lỗi hiệu quả: "Tôi đang gỡ lỗi. Thông tin:- Điều tôi đang cố gắng thực hiện: [X]- Hành vi dự kiến: [Y]- Hành vi thực tế: [Z]- Thông báo lỗi đầy đủ và dấu vết ngăn xếp: [dán]- Môi trường: [ngôn ngữ/phiên bản, thư viện/phiên bản]- Mã tối thiểu liên quan: [mã] Đừng đưa ra cách khắc phục trực tiếp cho tôi. Trước tiên, hãy liệt kê 3 nguyên nhân gốc có thể xảy ra nhất theo thứ tự xác suất và cho tôi biết cần kiểm tra những gì để xác minh cho từng nguyên nhân."

Thu hẹp dòng chảy bằng giả thuyết

Gỡ lỗi có hệ thống là nghệ thuật loại bỏ từng khả năng một. Sử dụng AI để tạo ra các giả thuyết và thiết kế thí nghiệm để kiểm tra từng giả thuyết; Sau đó chạy thử nghiệm và trả về kết quả. Chu kỳ này nhanh hơn nhiều so với thói quen thực hiện các thay đổi ngẫu nhiên và dừng lại, được gọi là "gỡ lỗi súng ngắn".

Lời nhắc của người trợ giúp tìm kiếm nhị phân (chia đôi): "Lỗi này không có hôm qua nhưng vẫn có hôm nay. Tôi muốn tìm ra thay đổi nào trong số 20 thay đổi gần đây nhất gây ra lỗi chia đôi. Hãy cho tôi kế hoạch từng bước: tôi nên kiểm tra điểm nào, tôi nên chuyển đến nửa nào tùy thuộc vào kết quả. Ngoài ra, hãy cho tôi biết chính xác những gì cần kiểm tra ở mỗi bước."

Lời nhắc chiến lược chèn nhật ký: "Tôi không thể tìm thấy lỗi vì tôi không thể nhìn thấy các giá trị trung gian trong hàm này. Hãy cho tôi biết tại điểm nào tôi cần thêm dòng nhật ký in biến nào. Thêm giải thích 'tôi sẽ học được gì từ nhật ký này' cho mỗi nhật ký. Đồng thời chỉ định các cảnh báo sẽ ngăn tôi ghi lại dữ liệu bí mật."

Mẹo: Nếu bạn không thể giải quyết lỗi thì phần lớn sự cố nằm ở đâu đó mà bạn cho rằng không chính xác. Hỏi AI “giả định nào của tôi có thể sai?” Việc hỏi sẽ phá vỡ sự mù quáng của bạn. Những sai lầm nghiêm trọng nhất ẩn giấu ở chỗ bạn nói "Tôi chắc chắn rằng nó hoạt động tốt".

Nhắc yếu / Nhắc mạnh

YẾU:"Mã của tôi có lỗi, hãy sửa nó: [200 dòng mã]"(Kết quả: AI không biết đó là lỗi gì, dự kiến là gì; nó đưa ra các đề xuất chung dựa trên phỏng đoán, hầu hết chúng đều vô dụng.) MẠNH:"Tôi gặp Ngoại lệ NullPointer. Dự kiến: danh sách người dùng sẽ được trả về. Thực tế: Phát nổ khi gọi tới getUsers(). Dấu vết ngăn xếp: [dán]. Môi trường: Java 17. Sự lặp lại tối thiểu: Điều này xảy ra khi danh sách người dùng trống, nhưng không phải khi nó đầy. 15 dòng liên quan: [code]. Giải thích nguyên nhân gốc rễ và lý do danh sách trống được kích hoạt, sau đó đề xuất cách khắc phục."

Lời nhắc mạnh mẽ sẽ đưa ra lỗi trong ngữ cảnh: trong trường hợp đó lỗi xảy ra (danh sách trống), trong trường hợp đó lỗi không xảy ra (danh sách đầy đủ). Manh mối duy nhất này ("xảy ra khi trống") gần như trực tiếp chỉ ra nguyên nhân gốc rễ. Vì thông tin này không có sẵn trong dấu nhắc yếu nên AI sẽ đoán mò.

Xác minh bản sửa lỗi

Một bản sửa lỗi chỉ là một bản sửa lỗi thực sự nếu nó thực hiện được ba điều:

kiểm soát

Câu hỏi

Cách xác minh

Lỗi đã biến mất chưa?

Hiện tại mục tương tự có hoạt động không?

Chạy lại repro tối thiểu

Không có lỗi mới?

Có bị hỏng gì nữa không?

Chạy toàn bộ bộ thử nghiệm

Nó sẽ không lặp lại chứ?

Liệu lỗi tương tự có xảy ra lần nữa không?

Thêm kiểm tra hồi quy cho kịch bản này

Việc sửa chữa được thực hiện mà không tìm ra nguyên nhân gốc rễ thường ngăn chặn triệu chứng. Ví dụ: việc che đậy lỗi null bằng "bỏ qua nếu null" sẽ tạo ra lý do thực sự là "tại sao dữ liệu lại là null?" vô hình và lỗi lại xảy ra ở nơi khác.

Hộp đựng nhỏ

Trường hợp 1 - Bẫy ức chế triệu chứng. Một nhóm thỉnh thoảng tắt tiếng một lỗi null bằng một lần thử bắt; Lỗi biến mất nhưng sau 2 tuần dữ liệu dường như bị thiếu. Lý do thực sự là dịch vụ trả về giá trị rỗng khi hết thời gian chờ. Khi bạn hỏi AI "tại sao nó lại không có giá trị?", thì nguyên nhân gốc rễ sẽ xuất hiện; Việc sửa chữa thực sự mất 1 giờ nhưng là vĩnh viễn.

Trường hợp 2 - Công suất tái tạo tối thiểu. Nhà phát triển không thể sửa lỗi có nội dung "thỉnh thoảng nó lại gặp sự cố". Nó giảm lỗi xuống mức đầu vào nhỏ nhất với gợi ý của AI: sự cố chỉ xảy ra với tên file chứa ký tự tiếng Thổ Nhĩ Kỳ (lỗi mã hóa). Khi 300 dòng không chắc chắn giảm xuống còn 5 dòng repro dứt khoát, giải pháp trở nên rõ ràng.

Trường hợp 3 - Thử nghiệm chống hồi quy. AI sửa lỗi tính ngày. Người kỹ sư không hài lòng với điều này; thêm kiểm tra hồi quy cho kịch bản sai sót (cuối tháng, 31/1 + 1 tháng). Khi một thay đổi khác tác động đến khu vực tương tự 4 tháng sau, quá trình kiểm thử sẽ chuyển sang màu đỏ và lỗi sẽ được phát hiện trước khi nó được đưa vào sản xuất.

Những lỗi thường gặp

  • Nó có nghĩa là "nó không hoạt động, hãy sửa nó". Không có văn bản lỗi, kỳ vọng và khiển trách, AI sẽ đoán.
  • Không đưa ra dấu vết ngăn xếp. Dấu vết ngăn xếp thường trực tiếp chỉ ra nguyên nhân gốc rễ.
  • Tiếp tục thực hiện những thay đổi ngẫu nhiên. Thử nghiệm mà không thiết lập giả thuyết sẽ lãng phí thời gian.
  • Ức chế triệu chứng và bỏ sót nguyên nhân gốc rễ. Lỗi được tái sinh ở nơi khác.
  • Không đảm bảo sửa lỗi bằng thử nghiệm hồi quy. Lỗi tương tự sẽ âm thầm quay trở lại trong tương lai.

Tóm lại

Gỡ lỗi hiệu quả là thu hẹp một cách có hệ thống, không phải đoán mò. Cung cấp cho AI toàn bộ văn bản lỗi, dấu vết ngăn xếp, sao chép tối thiểu và thông tin về môi trường sẽ làm tăng cơ hội tìm ra nguyên nhân gốc rễ theo cấp số nhân. Sử dụng AI để tạo ra các giả thuyết và thiết kế thí nghiệm để kiểm tra từng giả thuyết; Bạn chạy thử nghiệm. Chỉ xem xét việc sửa lỗi "hoàn thành" khi bạn thấy rằng lỗi đã biến mất, không có lỗi mới nào được đưa ra và nó được bảo vệ bằng thử nghiệm hồi quy.

Nhiệm vụ ứng dụng

Hãy xem xét một lỗi thực sự hoặc nhân tạo. Trước tiên, hãy giảm sai số xuống mức tái tạo nhỏ nhất (ở đầu vào nào xảy ra, đầu vào nào không xảy ra). Sử dụng lời nhắc về công thức lỗi hiệu quả, hãy hỏi AI về 3 giả thuyết nguyên nhân gốc rễ và bước xác minh cho mỗi giả thuyết. Tìm nguyên nhân cốt lõi bằng cách kiểm tra từng giả thuyết một, sửa nó, sau đó viết và chạy kiểm tra hồi quy cho tình huống này để cho thấy rằng lỗi đã biến mất và kiểm tra cung cấp sự bảo vệ.

danh sách kiểm tra

  • [ ] Tôi đã làm rõ triệu chứng là "dự kiến và nhận ra".
  • [ ] Tôi đã cung cấp toàn bộ văn bản lỗi và dấu vết ngăn xếp cho AI.
  • [ ] Tôi đã giảm lỗi xuống mức tái tạo nhỏ nhất.
  • [ ] Bằng cách kiểm tra từng giả thuyết một, tôi đã tìm ra nguyên nhân gốc rễ.
  • [ ] Thay vì kìm nén triệu chứng, tôi đã khắc phục nguyên nhân gốc rễ.
  • [ ] Tôi đã thêm và chạy thử nghiệm hồi quy cho cùng một lỗi.