Sửa lỗi, hay chờ khách hàng tìm thấy chúng?


35

Có phải những người khác sửa lỗi khi họ nhìn thấy chúng, hoặc họ đợi cho đến khi có sự cố / mất dữ liệu / người chết trước khi sửa nó?

ví dụ 1

 Customer customer = null;
 ...
 customer.Save();

Mã rõ ràng là sai và không có cách nào khác - nó đang gọi một phương thức trên tham chiếu null. Nó không xảy ra sự cố vì Savekhông truy cập bất kỳ dữ liệu cá thể nào; vì vậy nó giống như gọi một hàm tĩnh. Nhưng bất kỳ thay đổi nhỏ ở bất cứ đâu cũng có thể đột nhiên gây ra mã bị hỏng không bị sập: bắt đầu bị sập.

Nhưng , cũng không thể tưởng tượng rằng việc sửa mã:

Customer customer = null;
...
customer = new Customer();
try
   ...
   customer.Save();
   ...
finally
   customer.Free();
end;

có thể giới thiệu một vụ tai nạn; một không được phát hiện thông qua các bài kiểm tra đơn vị với phạm vi bảo hiểm đầy đủ và kiểm tra người dùng thủ công.

Ví dụ 2

float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2);

Những người biết về vật lý sẽ nhận ra rằng nó được coi là R 2 trong mẫu số.

Mã là sai, nó hoàn toàn sai. Và việc đánh giá quá cao tốc độ sẽ khiến các tên lửa retro bắn quá sớm, giết chết tất cả những người chiếm giữ tàu vũ trụ.

Nhưng có lẽ cũng có thể ước tính quá mức tốc độ đang che giấu một vấn đề khác: túi khí không thể triển khai trong khi tàu con thoi di chuyển quá nhanh. Nếu chúng tôi đột nhiên sửa mã:

float speed = 0.5 * ((G * mass1 * mass2) / Pow(R, 2)) * Pow(time, 2);

Bây giờ tốc độ là chính xác, và đột nhiên túi khí được triển khai khi họ không nên.

Ví dụ 3

Đây là một ví dụ mà tôi đã có gần đây, kiểm tra xem một chuỗi có chứa các ký tự không hợp lệ không:

if (StrPos(Address, "PO BOX") >= 0)
{
   //Do something
}

Điều gì nếu nó quay ra có một lỗi trong các Do somethingchi nhánh? Sửa mã rõ ràng không chính xác:

if (StrPos("PO BOX", Address) >= 0)
{
   //Do something
}

Sửa mã, nhưng giới thiệu một lỗi.


Cách tôi nhìn thấy nó có hai khả năng:

  • sửa mã và bị đổ lỗi vì phá vỡ mã
  • chờ mã bị sập và bị đổ lỗi vì có lỗi

Làm gì bạn làm chính trị?


Ví dụ 4 - Lỗi thế giới thực ngày nay

Tôi đang xây dựng một đối tượng, nhưng gọi hàm tạo sai:

Customer customer = new Customer();

Hóa ra hàm tạo "không tham số" thực sự là hàm tạo được tham số hóa từ phía sau trong chuỗi thừa kế:

public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null)
public Customer(InjectedDependancy depends)

Gọi nó là một sai lầm, vì nó bỏ qua tất cả các nhà xây dựng tiếp theo.

Tôi có thể thay đổi dòng dõi của đối tượng để không lộ ra một hàm tạo nguy hiểm như vậy, nhưng bây giờ tôi phải thay đổi mã thành:

Customer customer = new Customer(depends);

Nhưng tôi không thể đảm bảo rằng sự thay đổi này sẽ không phá vỡ bất cứ điều gì. Giống như ví dụ 1 của tôi ở trên, có lẽ ai đó, ở đâu đó, bằng cách nào đó, trong một số điều kiện bí truyền, phụ thuộc vào cấu trúc Customerkhông hợp lệ và đầy rác.

Có lẽ Customerđối tượng, bây giờ nó được xây dựng đúng sẽ cho phép một số mã chạy mà trước đây chưa từng làm, và bây giờ tôi có thể gặp sự cố.

Tôi không thể đặt cược cuộc sống của vợ bạn vào đó.

Và tôi có thể kiểm tra nó từ đây đến thứ ba, tôi không thể thề với cuộc sống của con gái bạn rằng tôi không đưa ra hồi quy.

Tôi có

  • Sửa mã và bị đổ lỗi cho việc phá vỡ nó? hoặc là
  • Để lại lỗi, và bị đổ lỗi khi khách hàng tìm thấy nó?

33
Nếu bạn không muốn thay đổi bất cứ điều gì vì nó có thể phá vỡ một cái gì đó và bạn cho rằng mình không đủ điều kiện để xem xét những gì có thể xảy ra trong các phần khác của mã, bạn đang làm gì ở đây? Bạn có bị tê liệt ở bàn phím vì dòng mã bạn sắp viết có thể sai không?
David Thornley

3
chắc chắn là một câu hỏi được nghiên cứu kỹ lưỡng
Muhammad Alkarouri

2
"Làm điều gì đó" thường là một cuộc gọi đến các chức năng khác mà bạn đã viết hoặc các chức năng từ các thư viện, trong cả hai trường hợp mã phải được kiểm tra đơn vị. Bản thân quy trình cũng là đơn vị được thử nghiệm để lại cơ hội cho các lỗi mới được giới thiệu khi bạn sửa một lỗi rất thấp ... Nếu tôi xây dựng một cây cầu, tôi sẽ thử nghiệm nó ở quy mô nhỏ hơn thay vì để những người đi qua cầu chết . Nếu bạn không thực hiện kiểm tra đơn vị khi lo lắng về lỗi, bạn đã làm sai. Trong bất kỳ trường hợp nào bạn sửa nó, bạn đều bị đổ lỗi, vì vậy thay vì sửa nó, bạn có thể ngăn chặn và không bị đổ lỗi gì cả.
Tamara Wijsman

2
'Làm [bạn] đợi cho đến khi mọi người chết trước khi sửa nó'! Chúa
Chris Knight

3
Như một nhận xét cụ thể về một điều bạn đã nói: bạn không biết nếu ở đâu đó trong mã, họ dựa vào hành vi bí truyền: vậy? Nếu ai đó đang lạm dụng quy tắc phạm vi rõ ràng không chính xác là hack trong mã của họ, thì mã của họ là SAI. OOP tốt sẽ ngăn chặn lỗi đó, nhưng bạn không sửa vì họ đã sử dụng một thực tiễn xấu đang gây ra vấn đề, khiến nó bị lạm dụng và khiến hệ thống không ổn định hơn. Sửa lỗi, hy vọng kiểm tra bắt được bất kỳ vấn đề nào, sửa nhiều lỗi hơn nếu không. Sự ổn định lâu dài của sản phẩm là một số liệu quan trọng.
CodexArcanum

Câu trả lời:


34

Điều này phụ thuộc rất nhiều vào tình hình, lỗi, khách hàng và công ty. Luôn luôn có một sự đánh đổi để xem xét giữa việc sửa lỗi triển khai và có khả năng đưa ra các lỗi mới.

Nếu tôi đưa ra một hướng dẫn chung để xác định những việc cần làm, tôi nghĩ rằng nó sẽ diễn ra như thế này:

  1. Đăng nhập các khiếm khuyết trong hệ thống theo dõi của sự lựa chọn. Thảo luận với quản lý / đồng nghiệp nếu cần.
  2. Nếu đó là một khiếm khuyết với những hậu quả nghiêm trọng tiềm ẩn (ví dụ như ví dụ # 2 của bạn), hãy chạy, la hét, nhảy lên và xuống cho đến khi ai đó có thông báo chính quyền và xác định một hành động thích hợp sẽ giảm thiểu rủi ro liên quan đến sửa lỗi. Điều này có thể đẩy ngày phát hành của bạn trở lại, cứu mạng, rửa cửa sổ của bạn, v.v.
  3. Nếu đó là một khuyết điểm không phá vỡ hoặc một cách giải quyết tồn tại, hãy đánh giá xem nguy cơ sửa chữa nó có cao hơn lợi ích của việc sửa chữa hay không. Trong một số trường hợp, tốt hơn là đợi khách hàng đưa nó lên, kể từ đó bạn biết rằng bạn không dành thời gian để sửa chữa / kiểm tra lại mọi thứ khi không yêu cầu 100%.

Nhắc bạn, điều này chỉ áp dụng khi bạn gần với một bản phát hành. Nếu bạn đang ở chế độ phát triển đầy đủ, tôi chỉ cần ghi lại lỗi để có thể theo dõi, sửa lỗi và gọi nó là xong. Nếu đó là một cái gì đó mất hơn nửa giờ để khắc phục và xác minh, tôi sẽ đến gặp người quản lý / nhóm trưởng và xem liệu lỗi có nên phù hợp với chu kỳ phát hành hiện tại hay được lên kế hoạch cho lần sau không.


Rất đúng. Đó là lý do tại sao (một số) công ty có người quản lý kỹ thuật, thu thập thông tin lỗi, v.v .: ưu tiên mọi thứ. Tôi không nói rằng đừng chủ động - hoàn toàn không - nhưng bạn phải sử dụng phán đoán tốt. Sử dụng sai sáng kiến ​​không đúng lúc được gọi là "trở thành một khẩu súng thần công" và có thể giết chết một công ty. Ngoài ra, tầm quan trọng của một lỗi cụ thể khác nhau tùy theo công ty. Đối với một số chương trình, lỗi đánh máy trong hộp thoại là lỗi mỹ phẩm có mức độ ưu tiên thấp sẽ được khắc phục trong phiên bản tương lai và trong các chương trình khác, đó là trường hợp khẩn cấp.
Bob Murphy

6
+1 để ghi lại lỗi. Các khiếm khuyết khác có thể được ưu tiên ...
SHug

35

Khách hàng sẽ LUÔN tìm thấy lỗi . Không có lỗi ẩn từ khách hàng, bao giờ. Cuối cùng, lỗi bạn giới thiệu sẽ luôn quay lại với bạn. Không sửa chúng chỉ đơn giản là một thực hành chuyên nghiệp xấu. Chuyên gia không làm điều này.

Khi khách hàng tìm thấy lỗi, công ty trông tệ, không phải là một nhà phát triển cá nhân. Điều này là tồi tệ hơn nhiều cho công ty, vì vậy có trường hợp của bạn để thực hiện thay đổi. Nếu bạn thực sự không chắc chắn về việc thực hiện thay đổi này vì sợ giới thiệu các lỗi khác, hãy nói chuyện với một nhà phát triển cao cấp hơn, lãnh đạo kỹ thuật dự án hoặc bất kỳ ai khác có thể đưa ra quyết định về thay đổi đó và sau đó xử lý hậu quả.


2
Đó là một sự thật đáng buồn. Chúng tôi đã phải giao một dự án mà chúng tôi đã thử nghiệm như điên, và khách hàng vẫn xoay sở trong vòng 3 phút.
Oliver Weiler

4
Phương pháp @Helper: Có thể nếu bạn đã thử nghiệm nó như những người lành mạnh thì sẽ tốt hơn.
Vinko Vrsalovic

Phương pháp @Helper: Mặc dù, nghiêm trọng hơn, nếu thực sự là ba phút thì có vẻ như những người thử nghiệm đã không biết đâu là trường hợp sử dụng thực sự mà khách hàng mong đợi.
Vinko Vrsalovic

8
Phương pháp @Helper: thu hút khách hàng tham gia thử nghiệm (giả sử khách hàng == khách hàng). Các nhà phát triển viết và kiểm tra mã là rắc rối các nhà phát triển không sử dụng phần mềm theo cùng một cách. Các nhà phát triển là nhẹ nhàng. Đó là công việc của họ - nghệ thuật của họ: Khách hàng đập vào nó như một con vượn trên panio. Khi có thể, chia sẻ nỗ lực thử nghiệm chia sẻ trách nhiệm. Điều này không phù hợp với mọi môi trường, nhưng làm việc với khách hàng như một nhóm, không phải cố vấn có thể mang lại phần mềm tốt hơn.
brian chandley

Er, xấu đi? (phụ)
Hello71

24

Sửa lỗi

Chúng tôi là những chuyên gia ở đây. Nếu bạn tìm thấy một đường dẫn không thành công trong mã sẽ gây ra sự cố hoặc hành vi không chính xác, bạn cần sửa nó. Tùy thuộc vào quy trình của nhóm bạn, bạn có thể cần phải nộp lỗi, có thể viết bài kiểm tra hồi quy và kiểm tra sửa chữa vào đúng thời điểm của chu kỳ tàu. Nếu đó là một lỗi ưu tiên thấp, thì việc kiểm tra sửa lỗi gần đầu cột mốc luôn là thời điểm tốt vì nếu bạn gây ra hồi quy, bạn sẽ không ảnh hưởng đến chu kỳ phát hành của cột mốc.

Đừng nhầm lẫn điều này với tái cấu trúc hoặc thực hiện các cải tiến hiệu suất không liên quan đến lỗi hiệu suất.

Một hệ thống kiểm soát nguồn phân tán, nơi bạn có thể giữ một kho lưu trữ riêng biệt 'sửa lỗi nhỏ' và sau đó dễ dàng hợp nhất khi bắt đầu một cột mốc là một sự trợ giúp tuyệt vời ở đây.


4
+1. Sửa nó. Nếu bản sửa lỗi phá vỡ một cái gì đó khác, thì cái gì đó khác đã bị hỏng - dù sao cũng sửa nó. Nếu thử nghiệm của bạn không bắt được các ngắt này, thì thử nghiệm của bạn bị hỏng - cũng khắc phục điều đó. Bạn không thể để bản thân sợ hãi khi thay đổi mã bởi nỗi sợ phá vỡ thứ gì đó - con đường đó chỉ dẫn đến sự hủy hoại.
Tom Anderson

21

Khách hàng sẽ nói gì?

Đây là cách tôi tưởng tượng điều này diễn ra:

Khách hàng: Nó gặp sự cố khi tôi làm x.

Lập trình viên: Ồ vâng! Tôi nhớ tôi đã thấy điều đó một thời gian trở lại. Tôi nghĩ rằng nó chưa phải là một vấn đề lớn, vì vậy tôi đã để nó ở đó.

Khách hàng: [tiếp cận đối tượng cùn]

Vâng. Sửa lỗi. Bạn sẽ cứu khách hàng khỏi một trải nghiệm nghiêm trọng hơn và bạn có thể sửa nó trước khi nó trở thành một trường hợp khẩn cấp.

Và nếu bạn nghĩ rằng bản sửa lỗi của bạn thực sự có thể gây ra sự cố, thì bạn chưa thực sự tìm thấy bản sửa lỗi nào.


8

Tất cả các ví dụ bạn đưa ra dường như có một chủ đề chung. Bạn dường như muốn sửa một lỗi mà bạn không hiểu đầy đủ. Tôi nói vậy bởi vì bạn lưu ý khả năng xảy ra hậu quả ngoài ý muốn đối với mỗi người.

Tôi có thể nói đó có thể là một sai lầm lớn và vì Ben Laurie viết không sửa một lỗi mà bạn không hiểu . Trong ví dụ nổi tiếng này, nhóm Debian đã phá vỡ mã hóa cho OpenSSL cho Debian và các công cụ phái sinh như Ubuntu khi họ theo dõi kết quả của một công cụ phân tích.

Nếu bạn tin rằng có một khiếm khuyết bằng cách nhìn vào mã, hãy chắc chắn rằng bạn có thể tái tạo lỗi đó theo cách mà khách hàng có thể nhìn thấy. Nếu bạn không thể tại sao không dành tài nguyên của bạn để sửa chữa một cái gì đó khác.


7

Bắt đầu sứt mẻ với khoản nợ kỹ thuật của bạn ngay khi bạn có thể .

Các ví dụ của bạn chắc chắn trông giống như mã kế thừa , có nhiều nợ kỹ thuật và tôi cảm thấy sợ sự thay đổi (BTW, đây không phải là một lời chỉ trích hay phán xét). Toàn bộ nhóm của bạn phải thừa nhận rằng bạn có khoản nợ kỹ thuật này (vì vậy một mình bạn không đổ lỗi cho nó) và sau đó bạn có thể quyết định cách bạn sẽ xử lý nó.

Trong ví dụ 1, nếu Save()không truy cập bất kỳ dữ liệu cá thể nào, dữ liệu khách hàng nào sẽ lưu chính xác? Bắt đầu sửa chữa và kiểm tra điều đó.

Trong ví dụ 2, thật dễ dàng để bao quát máy tính tốc độ bằng các thử nghiệm và đảm bảo rằng nó tính toán kết quả chính xác trong tất cả các ví dụ chính.

Trong ví dụ 3, có nguy cơ đưa mã chết trở lại với cuộc sống. Mã đó có nên được loại bỏ hoàn toàn không? Mục đích của điều kiện boolean theo đó là gì nếu? Có phải để đảm bảo chuỗi không chứa ký tự không hợp lệ? Hoặc để đảm bảo nó có "HỘP PO" trong đó? Bạn càng sớm bắt đầu giải quyết các câu hỏi như vậy, thì tốt hơn.

Sau khi bạn đã khắc phục một số vấn đề như vậy, hãy có một loại hồi cứu / hậu xử với nhóm của bạn. Điều quan trọng là học hỏi kinh nghiệm để bạn có thể giảm tỷ lệ tiêm khiếm khuyết trong tương lai.


5

Bạn đã có câu trả lời tốt rồi. Tôi sẽ chỉ thêm một cái gì đó về vấn đề sợ rằng một cái gì đó sụp đổ.

Đầu tiên, trong tình huống lý tưởng, phần mềm là mô-đun, được kiến ​​trúc chính xác và có sự phân tách tốt các mối quan tâm. Trong trường hợp này, những thay đổi bạn thực hiện rất khó có thể phá vỡ bất cứ điều gì vì bạn sẽ kiểm soát tất cả các mã liên quan và không có bất ngờ ẩn.

Thật không may, tình huống lý tưởng là hư cấu. Bất kể mức độ lỏng lẻo của khớp nối, sẽ có khớp nối và do đó khả năng phá vỡ một cái gì đó khác.

Giải pháp cho vấn đề này là hai lần:

  1. Làm cho mã càng có cấu trúc càng tốt.
  2. Khi mã được cách ly đủ để bạn biết rằng sẽ không có gì khác bị hỏng, hãy sửa nó.

Làm cho mã có cấu trúc tốt không được thực hiện bằng cách viết lại toàn bộ mã thành một thiết kế kiến ​​trúc mới. Thay vào đó, tái cấu trúc được hướng dẫn bởi các bài kiểm tra là bạn của bạn ở đây. Trong bước này, bạn không thay đổi chức năng.

Bước thứ hai là bạn sửa lỗi.

Một vài điểm có liên quan:

  1. Kiểm soát phiên bản là hoàn toàn cần thiết cho quá trình này.
  2. Bước tái cấu trúc và bước sửa lỗi được cam kết tốt hơn đối với kiểm soát phiên bản dưới dạng các cam kết riêng biệt, do đó mỗi lần có một chức năng lịch sử được xác định rõ.
  3. Đừng khắc phục khả năng tạo ra một lỗi khác, bạn sẽ không làm được gì cả. Thay vào đó, hãy nghĩ đến việc làm cho mã của bạn tốt hơn. Nói cách khác, trừ khi bạn biết rằng bạn đang gia tăng các lỗi thay vì giảm chúng thì bạn nên làm điều đó.
  4. Liên quan đến điểm cuối cùng: đừng cố gắng dự đoán tương lai. Con người thiên vị khi nghĩ rằng họ rất giỏi dự đoán. Trong thực tế, khả năng dự đoán của chúng tôi là ngắn hạn. Vì vậy, đừng lo lắng về một lỗi tương lai mơ hồ không xác định. Đây cũng là nguyên tắc đằng sau YAGNI .
  5. Công cụ tương ứng để kiểm soát phiên bản trong thế giới lỗi là trình theo dõi lỗi . Bạn sẽ cần điều đó là tốt.
  6. Bạn cần sửa lỗi vì hai lý do: để làm hài lòng khách hàng; và để có thể tiến bộ trong sự phát triển của bạn. Để sử dụng ví dụ 3 (phần vật lý): nếu chương trình thỏa mãn khách hàng với phương trình bị hỏng như vậy, thì có nhiều phần khác của phần mềm được phát triển sai để giảm thiểu lỗi này (ví dụ như triển khai túi khí). Nếu một phiên bản 2 (hoặc 1.1) được yêu cầu cho phần mềm này, thì bạn sẽ thấy việc phát triển mã chính xác dựa trên lỗi này ngày càng khó khăn hơn. Sau đó, bạn đang hướng tới việc viết lại lớn, hoặc cho sự thất bại lớn. Cả hai điều bạn nên tránh.

Đây đã là nhiều hơn một vài điểm, vì vậy tôi đoán tôi sẽ dừng ở đây.


3

Trước tiên bạn cần xem xét định nghĩa của một lỗi:

  1. Mã khi đọc không khớp với những gì bạn cho là đúng
  2. Phần mềm không thực hiện đúng nhiệm vụ của nó

Bạn dường như đang tập trung vào # 1, trong đó # 2 là nơi tốt nhất để ngồi. Chắc chắn, chúng tôi lập trình viên muốn mã của chúng tôi là đúng (# 1), nhưng mọi người trả tiền cho chúng tôi để nó hoạt động (# 2).

Những gì bạn có thể hoặc không thể làm với cơ sở mã có thể vô tình đưa ra các lỗi mới là không liên quan đến quan điểm của # 2 về phần mềm hiện tại. Tuy nhiên, # 1 vấn đề cho chính bạn hoặc lập trình viên bảo trì theo sau. Đôi khi rất khó để quyết định, nhưng khi xung đột # 2 và # 1, bạn phải biết rằng # 2 rõ ràng quan trọng hơn.


2

Cũng không. Có một cách thứ ba: tìm cách chứng minh rằng "mã có vấn đề" thực sự gây ra vấn đề từ quan điểm kinh doanh. Xác nhận những gì bạn tìm thấy với BA / QA hoặc ít nhất là người quản lý của bạn. Sau đó lên kế hoạch sửa chữa khi mọi người nhận thức được vấn đề.

Có nhiều tình huống có thể xảy ra ngoài lỗi hợp lệ trong các trường hợp bạn đã đề cập:

  1. Mã bạn đang xem là một số mã chết. Có thể bởi vì như ysolik đã nói: khách hàng luôn tìm thấy lỗi. Nếu họ không, có lẽ mã không bao giờ được thực thi.
  2. Có một tình huống WTF trong đó lỗi rõ ràng đã có mục đích của nó. (Chúng ta đang nói về mã sản xuất, bất cứ điều gì cũng có thể xảy ra, phải không?)
  3. Doanh nghiệp / khách hàng đã biết về vấn đề này nhưng không cảm thấy cần thiết phải khắc phục.
  4. Có lẽ nhiều hơn ...

Trong mọi trường hợp ở trên, nếu tôi là người quản lý, tôi không muốn nhà phát triển sử dụng phán đoán của mình và khắc phục "lỗi" tại chỗ. Sửa lỗi tại chỗ có thể giúp ích trong hầu hết thời gian, nhưng khi nó xảy ra lỗi, nó có thể gây ra nhiều rắc rối hơn so với ý định tốt của nó.


1
Nếu bạn chỉ muốn thuê các nhà phát triển không sử dụng phán đoán của riêng họ, thì có rất nhiều người thực sự tầm thường ngoài kia cho bạn. Bạn sẽ gặp khó khăn khi tuyển dụng những người giỏi thực sự, những người có niềm tin vào khả năng của họ.
David Thornley

1
@David: đừng mở rộng ý kiến ​​của tôi đến một mức độ không phù hợp. Các nhà phát triển chắc chắn cần phán đoán của họ, nhưng cần có một ranh giới. Trong trường hợp này, các nhà phát triển sử dụng phán đoán của họ để phát hiện một lỗi tiềm ẩn và thực hiện các bước tiếp theo để giải quyết nó.
Codism

2

Tôi có

  • sửa mã và bị đổ lỗi cho việc phá vỡ nó? hoặc là
  • để lại lỗi, và bị đổ lỗi khi khách hàng tìm thấy nó?

Bạn sửa lỗi, bắt đầu kiểm tra đơn vị và khi chúng thành công, bạn kiểm tra sửa lỗi của mình.

(Hoặc, nếu các bài kiểm tra đơn vị của bạn mất nhiều thời gian, bạn hãy kiểm tra bản sửa lỗi của mình trước, sau đó chờ xem liệu công cụ CI của bạn có gửi thư cho bạn không vì cam kết của bạn đã phá vỡ thứ gì đó.)


1
Hoặc nếu bạn sử dụng đăng ký có kiểm soát, hãy thiết lập nó để bạn không thực sự đăng ký mã bị hỏng.
Adam Lear

3
Mất một thời gian dài là không có lý do để cam kết mã kém chất lượng.
Toby

@Toby: Ai đã nói về lời bào chữa? Tôi hiện đang làm việc trong một nhóm nhỏ, thậm chí không có nửa tá nhà phát triển. Các bài kiểm tra đơn vị cho dự án mất 1 giờ. Chính sách của chúng tôi là chạy các bài kiểm tra có vẻ liên quan đến bất cứ điều gì bạn làm, sau đó kiểm tra và để CI tìm hiểu xem bạn có phá vỡ thứ gì đó dường như không liên quan hay không. Điều này sẽ không làm việc trong một nhóm lớn, nhưng trong một nhóm nhỏ, nó tiết kiệm rất nhiều thời gian.
sbi

1

Khắc phục nếu chúng bị lỗi / mất dữ liệu. Vận chuyển một chương trình có lỗi mất dữ liệu đã biết là hết sức độc hại và không thể sử dụng được.

Nếu lỗi là thẩm mỹ hoặc không quan trọng (có thể tránh được) thì nó phải được ghi lại và cần phải có cách giải quyết. Tốt nhất là nên sửa nó, nhưng đôi khi nó quá tốn kém để sửa nó cho bản phát hành hiện tại.

Lưu ý rằng mọi dự án phần mềm lớn hơn đều có phần 'Các vấn đề đã biết' trong ReadMe, thường liệt kê chính xác: Lỗi đã biết.

Biết lỗi và KHÔNG giao tiếp với chúng là IMHO chỉ được chấp nhận đối với các lỗi thực sự nhỏ / thẩm mỹ.


1

Sửa chữa nó, và đã thử nghiệm nó. Nếu bạn quyết định giữ các lỗi đã biết chỉ vì bạn sợ tìm thấy nhiều lỗi hơn, chương trình của bạn sẽ trở thành một quả bom nổ nhanh đến mức nó sẽ trở nên không thể sửa chữa sớm hơn bạn nghĩ.

Vì bạn là chủ và mã là cấp dưới, bạn có thể không ngại thay đổi nó khi bạn thấy nó sai. Sợ mã ("nó có thể trả đũa bằng cách phá vỡ một nơi khác") đơn giản là không thể chấp nhận được.


0

Nếu rõ ràng có một crasher, hoặc một cái gì đó sai , thì bạn nên sửa nó. Nếu có một sự mơ hồ trong thông số kỹ thuật, tức là nếu bạn thấy mình đang nghĩ "khách hàng có thể mong đợi điều này, nhưng có vẻ như nó có thể là một lỗi" hoặc một vấn đề trong thông số kỹ thuật, như "chúng tôi đã được yêu cầu làm điều này nhưng nó thật tệ "sau đó bạn cần tìm hiểu phải làm gì. Ném mã lên tường và chờ phản hồi của khách hàng là điều tồi tệ - bạn có thể hỏi người quản lý sản phẩm nếu bạn có, hoặc hỏi khách hàng trước khi bạn triển khai sản phẩm.

Hãy nhớ rằng, "chúng tôi biết về vấn đề đó và sẽ khắc phục nó trong phiên bản tương lai" đồng nghĩa với "chúng tôi biết về vấn đề đó nhưng không quan tâm đến bạn đủ để tránh bạn phải giải quyết".


0

Hành động đúng đắn là không bỏ qua lỗi, cũng không "sửa" ngay tại chỗ; vì những lý do mà bạn xác định trong câu hỏi của bạn.

Tôi nghĩ rằng, bạn nên cố gắng hiểu mã đầu tiên. Nếu mã bạn đang thấy có một số tuổi và không ai nhận thấy "lỗi", có khả năng là có lý do cho điều đó. Hãy cố gắng tìm lý do này. Đây là những gì tôi muốn xem xét trước khi đưa ra quyết định:

  • Lịch sử : Sử dụng phần mềm kiểm soát phiên bản của bạn để trả lời các câu hỏi: Ai đã chạm vào mã? Họ đã thay đổi điều gì? Và với những thông điệp cam kết nào họ đã kiểm tra nó? Bạn có thể suy luận một lý do tại sao mã trông giống như nó không?

  • Sử dụng : Mã nào sử dụng mã bị lỗi? Và làm thế nào? Là mã chết? Có mã nào khác dựa trên hành vi bị lỗi không?

  • Tác giả : Nếu bạn không thể nhanh chóng đưa ra kết luận bằng cách sử dụng thông tin ở trên, hãy hỏi tác giả của mã (ít nhất là nếu có thể) tại sao mã lại trông giống như vậy. Thông thường, bạn sẽ nhận được "Oups, cần được sửa!" hoặc "Không! Đừng thay đổi nó !!! Nó cần theo cách đó!" ngay lập tức.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.