Theo kinh nghiệm của tôi, mô hình là thế này:
- Hệ thống hoạt động, thường trong nhiều năm
- Một lỗi được báo cáo
- Nhà phát triển điều tra lỗi và tìm thấy một chút mã dường như hoàn toàn thiếu sót và tuyên bố rằng nó "không bao giờ có thể hoạt động được"
- Lỗi được sửa và truyền thuyết về mã không bao giờ có thể hoạt động (nhưng đã tồn tại trong nhiều năm)
Hãy logic ở đây. Mã không bao giờ có thể làm việc ... không bao giờ có thể làm việc . Nếu nó đã làm việc thì tuyên bố là sai.
Vì vậy, tôi sẽ nói rằng một lỗi chính xác như được mô tả (đó là việc quan sát mã bị lỗi khiến nó ngừng hoạt động) là vô nghĩa.
Trong thực tế những gì đã xảy ra là một trong hai điều:
1) Nhà phát triển chưa hiểu đầy đủ về mã . Trong trường hợp này, mã thường là một mớ hỗn độn và ở đâu đó trong đó có độ nhạy lớn nhưng không rõ ràng đối với một số điều kiện bên ngoài (giả sử một phiên bản hoặc cấu hình hệ điều hành cụ thể chi phối cách thức một số chức năng hoạt động theo một cách nhỏ nhưng quan trọng). Điều kiện bên ngoài này bị thay đổi (giả sử nâng cấp hoặc thay đổi máy chủ được cho là không liên quan) và làm như vậy khiến mã bị hỏng.
Sau đó, nhà phát triển xem xét mã và, không hiểu bối cảnh lịch sử hoặc có thời gian để theo dõi mọi tình huống phụ thuộc và kịch bản có thể, tuyên bố rằng nó không bao giờ có thể hoạt động và viết lại nó.
Trong tình huống này, điều cần hiểu ở đây là ý tưởng rằng "nó không bao giờ có thể hoạt động được" là sai lầm (vì nó đã làm).
Điều đó không có nghĩa là viết lại nó là một điều xấu - thường thì không, trong khi thật tuyệt khi biết chính xác những gì sai thường làm mất thời gian và viết lại phần mã thường nhanh hơn và cho phép bạn chắc chắn rằng bạn đã sửa chữa mọi thứ.
2) Trên thực tế nó không bao giờ làm việc, chỉ là không ai đã nhận thấy . Điều này là đáng ngạc nhiên phổ biến, đặc biệt là trong các hệ thống lớn. Trong trường hợp này, một người nào đó mới bắt đầu và bắt đầu nhìn mọi thứ theo cách mà không ai từng làm trước đây, hoặc một quy trình kinh doanh thay đổi đưa một số trường hợp nhỏ trước đây vào quy trình chính, và một cái gì đó không bao giờ thực sự hoạt động (hoặc làm việc một số nhưng không phải tất cả thời gian) được tìm thấy và báo cáo.
Nhà phát triển nhìn vào nó và tuyên bố "nó không bao giờ có thể hoạt động được" nhưng người dùng nói "vô nghĩa, chúng tôi đã sử dụng nó trong nhiều năm" và họ có quyền nhưng điều gì đó họ cho là không liên quan (và thường không đề cập đến cho đến khi nhà phát triển tìm thấy điều kiện chính xác tại điểm mà họ đi "ồ vâng, chúng tôi làm điều đó ngay bây giờ và không trước đó") đã thay đổi.
Ở đây, nhà phát triển đã đúng - nó không bao giờ có thể hoạt động và không bao giờ hoạt động.
Nhưng trong cả hai trường hợp, một trong hai điều là đúng:
- Tuyên bố "nó không bao giờ có thể làm việc" là đúng và nó chưa bao giờ có hiệu quả - mọi người chỉ nghĩ rằng nó đã làm
- Nó đã làm việc và tuyên bố "nó không bao giờ có thể làm việc" là sai và dẫn đến sự thiếu hiểu biết (thường là hợp lý) về mã và các phụ thuộc của nó