Về cơ bản, không nhưng bạn vẫn nên cố gắng hết sức. Tôi sẽ giải thích lý do tại sao (hoặc chỉ bỏ qua kết luận nếu bạn không đủ kiên nhẫn)
Xem xét một vấn đề tầm thường như việc thực hiện tìm kiếm nhị phân. Một triển khai rất phổ biến có một lỗi không bị phát hiện trong khoảng hai thập kỷ. Nếu hai mươi dòng mất hai mươi năm để không có lỗi được sử dụng rộng rãi và thậm chí được chứng minh là đúng, chúng ta có thể thực sự mong đợi một chương trình khổng lồ không có lỗi không?
Có bao nhiêu lỗi chúng ta có thể mong đợi một chương trình khổng lồ sẽ có? Một số tôi tìm thấy là "10 lỗi trên 1000 dòng" (Code Complete phiên bản 2, trang 517 - chỉ sử dụng một ví dụ, không trích dẫn bất kỳ dữ liệu nào) Điều đó mang lại cho chúng tôi khoảng 200 000 đến 300 000 lỗi trong phần mềm của bạn. May mắn thay, chúng tôi có cách để cải thiện chất lượng của chương trình. Kiểm thử đơn vị, đánh giá mã và kiểm tra thủ công thông thường được biết là làm giảm số lượng lỗi. Tuy nhiên, số lượng vẫn sẽ cao.
Nếu chúng ta có thể giải quyết 95% tất cả các lỗi sẽ là không thể tin được. Tuy nhiên, chúng tôi vẫn có 10 000 đến 15 000 lỗi trong phần mềm.
May mắn thay, vì phần mềm được sử dụng rộng rãi (và, do đó, các lỗi đã được thử nghiệm rộng rãi) sẽ được tìm thấy. Vì vậy, chúng ta sẽ dần dần nhận được ít lỗi hơn. Tuy nhiên, ít lỗi hơn cũng có nghĩa là những cái còn lại khó tìm hơn - vì vậy đừng mong đợi một đường cong tuyến tính trong sửa lỗi. Một vài lỗi cuối cùng sẽ được thực sự khó khăn để tìm thấy và có thể tránh bị phát hiện trong nhiều năm (giả sử họ đang bao giờ tìm thấy).
Bạn dường như cũng đang lầm tưởng rằng nếu phần mềm không thay đổi, sẽ không có lỗi mới nào xuất hiện. Nếu phần mềm phụ thuộc vào thư viện của bên thứ ba, các phiên bản mới có thể phá vỡ một số tính năng - giới thiệu các lỗi mới mặc dù mã của ứng dụng vẫn giống nhau. Các hệ điều hành mới cũng có thể phá vỡ một ứng dụng trước đây hoạt động hoàn hảo (xem Windows Vista để biết ví dụ phổ biến). Cũng xem xét các lỗi biên dịch, v.v.
Không rõ liệu các công cụ bằng chứng mã có thể thực sự giải quyết vấn đề của phần mềm lỗi hay không. Chắc chắn không thể giải quyết vấn đề tạm dừng cho bất kỳ chương trình nào, nhưng có thể chứng minh rằng một chương trình hoạt động như được chỉ định ... Nhưng sau đó thì sao? Có lẽ chương trình bằng chứng có một lỗi. Có lẽ bản thân đặc tả có lỗi.
Vì vậy, rõ ràng, chúng ta có thể giảm đáng kể số lượng lỗi, nhưng thực sự không chắc chúng ta sẽ trở về không.
Bởi vì có một số ý kiến cho rằng mọi sửa chữa bạn thực hiện đều tạo ra nhiều lỗi hơn, nhưng tôi không nghĩ đó là sự thật.
(nhấn mạnh thêm)
Bạn nói đúng. Phát biểu này là sai. Đây là một ví dụ:
int main() {
int x[10];
x[10] = 8; //Buffer overflow here
return 0;
}
Bây giờ, hãy sửa lỗi này:
int main() {
int x[11];
x[10] = 8; //No buffer overflow here
return 0;
}
Xem? Chúng tôi đã sửa một lỗi và giới thiệu không có lỗi mới.
Tuy nhiên, điều chắc chắn là mỗi khi bạn sửa một lỗi bạn có nguy cơ tạo ra một lỗi mới, mặc dù rủi ro này có thể được giảm thiểu (ví dụ như với thử nghiệm đơn vị).
Hãy nói rằng cứ 100 lỗi mà tôi sửa, tôi vô tình giới thiệu một lỗi mới. Vì vậy, nếu tôi sửa 10 000 lỗi, tôi giới thiệu 100 lỗi mới. Và nếu tôi sửa những lỗi mới đó, tôi sẽ giới thiệu một lỗi. Nhưng cái gì cơ? Chương trình hiện có ít hơn 9 999 lỗi, vì vậy có lẽ nó tốt hơn so với trước đây (giả sử lỗi mới không tệ hơn 10 000 lần so với các lỗi trước đó).
Ngoài ra, sửa một lỗi có thể làm lộ ra những cái mới. Nhưng những lỗi đó cũng có thể được sửa. Nếu bạn làm đúng, cuối cùng phần mềm sẽ ở trạng thái tốt hơn so với khởi động.
Tôi đã già bởi một vài lập trình viên hàng đầu rằng tốt hơn hết là đừng sửa nhiều lỗi vì khái niệm tôi đã đề cập trong OP.
Hành vi này là bất cẩn. Nếu có một lỗi và bạn có thể sửa nó. Làm đi. Tất nhiên bạn nên cố gắng hết sức để ngăn chặn việc thêm những cái mới nhưng nếu tôi giới thiệu một lỗi nhỏ cho mỗi 10 lỗi nghiêm trọng tôi sửa, đó không phải là lý do hợp lệ để ngừng sửa lỗi. Trong thực tế, đó là một lý do tốt để tiếp tục sửa lỗi .
Vì vậy, ít lỗi bạn sửa, ít lỗi sẽ quay trở lại với bạn trong tương lai
Càng sửa ít lỗi, càng nhiều lỗi sẽ tồn tại trong phần mềm của bạn, gây khó chịu cho người dùng của bạn. Thật vậy, họ sẽ không "quay lại với bạn trong tương lai". Họ sẽ không quay lại vì họ không bao giờ rời đi ngay từ đầu. Khái niệm "quay trở lại" có liên quan đến hồi quy. Một lần nữa, có thể giảm nguy cơ hồi quy.
Một số lỗi không thể sửa được vì chúng được sử dụng rộng rãi đến mức mọi người bắt đầu phụ thuộc vào chúng và sửa lỗi sẽ phá vỡ chương trình cho những người dùng đó. Nó xảy ra. Tuy nhiên, họ thực sự có thể được coi là lỗi trong trường hợp đó?
Tâm lý "sửa lỗi, tạo lỗi" có thể liên quan đến Quái vật khủng khiếp đó - mã không thể đọc được và không thể nhận ra rằng chỉ cần chạm vào nó sẽ tạo ra lỗi. Nếu bạn có một quái vật trong cơ sở mã của mình, trước tiên bạn có thể cần hủy bỏ quái vật đó trước khi hoàn thành mọi việc.
Cuối cùng, nếu bạn là một lập trình viên tồi tệ, có nguy cơ bất cứ điều gì bạn chạm vào đều tạo ra các lỗi mới. Điều này rõ ràng sẽ làm cho các lập trình viên cao cấp lo lắng. Tuy nhiên, nói "Đừng làm gì cả. Đừng chạm vào bất cứ thứ gì. Thậm chí đừng thở." có lẽ không phải là cách đúng đắn để tạo ra một môi trường làm việc lành mạnh. Giáo dục là tốt hơn.
Phần kết luận:
- Phần mềm tiếp tục nhận được vô số tính năng mới nhưng không có sửa lỗi chắc chắn sẽ bị hút.
- Phần mềm có số lượng tính năng mới vừa phải nhưng đã sửa lỗi có cơ hội sử dụng tốt hơn.
- Những người cố gắng có ít lỗi có (trung bình) ít lỗi hơn những người không quan tâm.
- Thật không hợp lý khi mong đợi một chương trình cuối cùng sẽ không có lỗi.
- Lập trình viên cao cấp không nhất thiết phải có năng lực.
- Sửa lỗi của bạn.
- Áp dụng các phương pháp cải thiện chất lượng phần mềm của bạn.