Trách nhiệm tái tạo lỗi


25

Tôi đang phát triển một chương trình sử dụng một thư viện được tạo bởi một lập trình viên khác (anh ta làm việc trong cùng một công ty). Gần đây tôi phát hiện ra một rò rỉ trong thư viện, xảy ra trong một số điều kiện mạng sau một vài giờ chạy. Tôi đã gửi một lỗi với mô tả các điều kiện để làm cho rò rỉ này xảy ra. Nhà phát triển đó đã trả lời rằng "điều này là không đủ", "đó không phải là trách nhiệm của anh ta trong việc tái tạo lỗi" và tôi phải tạo ra thử nghiệm đơn vị để tái tạo lỗi này, nếu không anh ta không làm gì cả.

  1. Anh ấy có đúng không?
  2. Tôi có thể làm gì trong tình huống này? Tạo thử nghiệm đơn vị là không thể, bởi vì nó phụ thuộc vào một số thời gian mạng ngẫu nhiên.

26
Nếu bạn định viết bài kiểm tra đơn vị, bạn cũng có thể sửa lỗi và ghi nhận toàn bộ.
JeffO

3
@JeffO, anh ấy đang quản lý thư viện đó và sẽ không chấp nhận lỗi. Bởi vì "anh ta không tin con bọ đã tồn tại"
user626528


Có thể là người bảo trì thư viện nằm trong một nhóm có chính sách là các lỗi không được chấp nhận nếu không có kiểm tra tự động? Tôi cũng đã nghe thuật ngữ kiểm tra đơn vị được băng bó về thời điểm những gì thực sự được mong đợi có thể là bất kỳ hình thức kiểm tra tự động nào, đặc biệt là cho kiểm tra tích hợp.
Joshua Drake

Câu trả lời:


30

Anh ấy có đúng không có lẽ là một câu hỏi không thể trả lời mà không biết công ty của bạn. Tuy nhiên, anh ta chắc chắn không hữu ích lắm.

Tôi sẽ gây ra lỗi với anh ta (mà bạn đã làm), nếu nó gây ra sự cố với dự án của bạn thì tôi sẽ nêu ra nó như là một trình chặn với người quản lý dự án của bạn và nói rõ rằng bạn đã đưa ra lỗi phù hợp người nhưng nó sẽ ảnh hưởng đến dự án của bạn nếu nó không được sửa chữa kịp thời.

Tôi cũng sẽ đến và nói chuyện với nhà phát triển và giải thích lý do tại sao không thể tạo ra các bài kiểm tra đơn vị nhưng bạn sẽ vui lòng cho anh ấy xem nó trên máy của bạn (giả sử điều đó là khả thi?).


48

Anh ta có quyền 100% rằng bạn phải cung cấp đủ thông tin để làm cho lỗi có thể tái tạo - nếu không thì không có cơ hội để tìm hiểu xem bất kỳ sửa chữa nào anh ta cung cấp sẽ thực sự hoạt động.

Nhưng - anh ấy đã sai 100% rằng điều này phải ở dạng thử nghiệm đơn vị. Nếu bạn có thể mô tả một kịch bản thử nghiệm theo cách để anh ta có thể tái tạo thất bại (ít nhất là với xác suất cao trong một khoảng thời gian hợp lý hoặc bằng thử nghiệm thủ công), bạn có một bằng chứng cho thấy vấn đề tồn tại - điều này sẽ đặt ra cho đồng nghiệp của bạn trong trách nhiệm sửa chữa nó. Tất nhiên, nếu bạn có thể tạo một kịch bản tái tạo lỗi nhanh hơn, điều đó sẽ hữu ích cho anh ta. Lý tưởng nhất, người ta sẽ thực hiện một bài kiểm tra tự động từ đó, và nó phụ thuộc vào tổ chức của bạn, người chịu trách nhiệm cho việc này.


11
Vì vậy, nếu một ứng dụng gặp sự cố "mọi lúc mọi nơi", mà không có mô hình rõ ràng cho người dùng, thì nhà phát triển không phải sửa nó vì người dùng không thể sao chép nó theo lệnh? Tôi hoàn toàn không đồng ý ở đây ...
Heinzi

20
@Heinzi: nếu tôi nhận được báo cáo lỗi "ứng dụng gặp sự cố mọi lúc", tôi cũng sẽ ưu tiên vấn đề đó ở mức độ ưu tiên rất thấp. Điều tối thiểu tôi mong đợi người dùng là ghi lại mức độ thường xuyên là "bây giờ và sau đó", những gì anh ta đã làm chính xác với ứng dụng tại thời điểm ứng dụng bị sập lần trước và thông báo lỗi chính xác.
Doc Brown

3
@ user626528: IMHO chủ sở hữu thư viện nên thử thực hiện các bước bạn bảo anh ta tái tạo lỗi - anh ta không nên thử 500 tình huống hơi khác nhau khi mô tả của bạn không hiển thị bất kỳ lỗi nào.
Doc Brown

6
Các phóng viên không cần phải cung cấp các bước sinh sản; khá thường xuyên, chúng tôi chỉ đơn giản là đính kèm một bãi chứa từ quá trình bị hỏng, đặc biệt là nếu nó xảy ra trong quá trình chạy tự động. Trách nhiệm của người được chuyển nhượng là tìm các bước sao chép để sửa lỗi có thể được xác minh.
avakar

2
(Điều đó không có nghĩa là phóng viên không nên cố gắng giúp đỡ và cung cấp các bước nếu họ biết. Tuy nhiên, đối với các sự cố lẻ tẻ, phóng viên không có nghĩa vụ phải đốt thời gian nghiên cứu một cái gì đó mà chủ sở hữu thành phần có thể sẽ tìm ra nhanh hơn. )
avakar

9

Cả hai bên nên nỗ lực.

Nhà phát triển thư viện nên đặt một số nỗ lực bổ sung ngay cả khi không có bài kiểm tra đơn vị, vì một số vấn đề không thể được sao chép bằng bài kiểm tra đơn vị. Đôi khi, đó là phần cứng, đôi khi đó là một số hành động chính xác cụ thể từ phần còn lại của chương trình khiến thư viện tạo ra kết quả xấu.

Bạn nên đặt thêm một số nỗ lực, bởi vì sau tất cả, đây không phải là lỗi trong thư viện, nhưng kết quả của các hành động không chính xác từ phần còn lại của chương trình (ví dụ, heap bị hỏng có thể khiến bất kỳ thư viện nào hoạt động kỳ lạ). Vì vậy, sẽ tốt hơn nếu giảm càng nhiều mã thư viện không liên quan đến việc sao chép lỗi. Và bạn có thể sẽ làm điều này nhanh hơn và sạch hơn một người không quen thuộc với mã ứng dụng của bạn.


5

Nếu tác giả của thư viện không thể sao chép lỗi dựa trên báo cáo của bạn, thì thật vô lý khi hy vọng anh ta dành nhiều thời gian cho nó, chứ đừng nói đến việc sửa nó.

Nhưng bạn cũng có một khoảng thời gian giới hạn dành cho việc làm một sản phẩm ngoại vi theo sở thích của bạn. Thật không may, điều này có thể có nghĩa là lỗi vẫn tiếp tục tồn tại và không có công việc nào được thực hiện để giải quyết nó.

May mắn thay, đây không hẳn là một thảm họa - trong khi trong một thế giới lý tưởng, tất cả các phần mềm sẽ không có lỗi, đó không phải là vấn đề, và vì vậy chúng tôi phải ưu tiên dựa trên các vấn đề mà nó gây ra cho Hoa Kỳ.

Điều này có nghĩa là bạn thực sự có trách nhiệm phát triển một trường hợp thử nghiệm có thể lặp lại NẾU BẠN MUỐN NÓ CỐ ĐỊNH. Bạn có thể không quan tâm liệu nó có được sửa hay không, và trong trường hợp đó, bạn đã làm mọi thứ có thể và nên được mong đợi ở bạn. Bạn có thể muốn nó cố định, nhưng không đủ để dành thời gian để làm cho nó có thể tái tạo tại thời điểm này. Điều đó là hoàn toàn chấp nhận được.

Báo cáo một lỗi với khả năng tốt nhất của bạn trong thời gian bạn phải đối phó với nó đơn giản là quyền công dân tốt, bạn không cần phải vượt qua điều đó trừ khi điều đó là cần thiết cho chương trình của bạn. Và bạn có thể không muốn làm như vậy ngay cả khi đó, có thể có một thư viện khác mà bạn có thể sử dụng, hoặc có thể tự cuộn trong một khoảng thời gian hợp lý. Về cơ bản, tùy thuộc vào bạn để quyết định những gì và loại nỗ lực nào xứng đáng với bạn.


1
Bạn trả lời có vẻ rất lạ đối với tôi. Tôi đang tự sửa các lỗi của mình và đừng đợi ai đó làm việc bẩn thay vì tôi. Tôi muốn nói rằng trách nhiệm chính của tác giả mã là cố gắng hết sức để sửa mã của mình.
dùng626528

1
Vì BẠN là người muốn sửa nó ngay bây giờ, nên bạn có trách nhiệm thuyết phục anh ấy rằng đáng để NGÀI sửa chữa ngay bây giờ, thay vì trong 10 hoặc 12 năm khi anh ấy không có gì khác quan trọng hơn để sửa. theregister.co.uk/2013/01/21/kde_orms_quashing . Đưa ra một lỗi không thể sửa chữa, có ý nghĩa X và một lỗi có thể lặp lại có cùng tầm quan trọng, tôi sẽ làm việc với lỗi có thể lặp lại mỗi lần.
jmoreno

quá nhiều bản ngã. Anh ta được trả tiền để làm việc trên thư viện kỳ ​​dị đó.
dùng626528

1
@ user626528: Không phải về bản ngã, đó là về các ưu tiên - không có khả năng tái tạo lỗi thấp hơn là ưu tiên của nó. Đưa ra hai lỗi EOI (Thực thi ngay lập tức), một lỗi có thể sao chép và một lỗi không, tôi sẽ làm việc với lỗi có thể được sao chép trước và tôi sẽ nói với bất kỳ nhà phát triển nào khác làm điều tương tự. Và nếu thư viện không được sử dụng nhiều, tôi có thể hoàn toàn làm việc cho một dự án khác - ngay cả khi các lỗi trong đó không đáng kể. Nếu anh ta / chỉ / được trả tiền để làm việc trên thư viện này VÀ không có yêu cầu tính năng nổi bật hoặc lỗi nào khác ngoài cái này, thì ừ anh ta chỉ nên làm điều đó.
jmoreno

2

Tôi có khuynh hướng để cho những con chó đang ngủ nói dối bây giờ - bạn đã nêu ra vấn đề và nó được giao cho anh ta. Có lẽ có các quy trình tại chỗ để theo dõi các lỗi nổi bật và đuổi theo chúng?

Nếu bạn muốn chủ động tiến triển vấn đề này hơn nữa, tôi khuyên bạn nên nói chuyện với người quản lý của mình để xem liệu có bất kỳ công cụ kiểm tra nào có thể tái tạo vấn đề một cách đáng tin cậy không.

Từ phía nhà phát triển - sẽ rất nghiêm túc khi họ không làm gì khi bạn cung cấp thông tin cần thiết. Tuy nhiên, có thể họ có khối lượng công việc lớn nên không thể dành thời gian cần thiết để theo dõi vấn đề.


2

Bạn đã tìm thấy một lỗi, bạn đã báo cáo và anh ta là một kẻ ngốc về nó.

Nếu hai bạn là bạn thân, anh ấy sẽ làm gì đó để giúp đỡ, nhưng anh ấy chỉ muốn đẩy vấn đề trở lại.

Bạn có thể làm nhiều hơn, bằng cách báo cáo thêm chi tiết và cố gắng hỗ trợ cho khiếu nại của mình rằng nó bị rò rỉ bộ nhớ. Tuy nhiên, bạn có trách nhiệm của riêng mình và cần hoàn thành công việc của riêng bạn.

Đăng nhập càng nhiều thông tin vào trình theo dõi lỗi càng tốt và tiếp tục.

Nếu bạn gặp lại người này trong tương lai. Hãy thân thiện, cố gắng nói về những lợi ích chung và hiểu rằng các mối quan hệ tốt là cách hiệu quả hơn nhiều để khiến mọi thứ được cố định, sau đó bất kỳ số lượng sự kiện nào bạn có thể cung cấp để hỗ trợ cho yêu cầu bồi thường.


Tôi có một số thiện cảm với nhà phát triển thư viện. Có lẽ quan điểm của họ là nhà phát triển ứng dụng đang cố gắng sử dụng thư viện và đã khiến nó bị sập với mã của họ. Nó không được báo cáo trong tự nhiên hoặc bởi bất kỳ nhà phát triển nào khác vì vậy với họ đó là một lỗi ưu tiên tương đối thấp (hoặc giả).
Robbie Dee

@RobbieDee đúng, đây không phải là một trong những câu trả lời hay nhất của tôi. Tôi chỉ nghĩ thật lạ khi hai người không thể làm việc cùng nhau vì họ làm việc cho cùng một công ty. Ý tôi là, nếu chủ doanh nghiệp nghe thấy một nhân viên phải đến đây để được hỗ trợ. Tôi tự hỏi anh ấy sẽ nghĩ gì về điều đó. Đó không phải là cách tôi muốn mọi thứ chạy ở vị trí của mình.
Phản ứng

0

Thông thường, những gì tôi gặp phải trong các tình huống tương tự là một giả định rằng tất cả các lỗi nên được sửa chữa và trong khi đáng ngưỡng mộ, đó chắc chắn là một mục tiêu tuyệt vời (hãy đối mặt với điều đó chúng tôi không bao giờ đặt ra để viết lỗi!) Cuối cùng là không thực tế bất kỳ dự án nào có kích thước phù hợp để sửa lỗi chỉ vì đó là một lỗi (nếu bạn có thể tìm thấy nó!) Đó là lý do tại sao chúng tôi có phương pháp quản lý dự án và mã hóa, mô hình & thực tiễn, v.v.

Vì vậy, một điều tôi muốn nói trong việc bảo vệ chủ sở hữu thư viện (và đã xảy ra khi tôi làm việc cho một số dự án lớn) là thời gian dành cho nhà phát triển tốn kém tiền bạc và là một nguồn tài nguyên hữu hạn nên quyết định về cách báo cáo được xử lý , người điều tra, những thử nghiệm nào được tạo ra / cần thiết và cuối cùng là nếu (và nếu vậy, khi nào) một bản sửa lỗi được đưa ra hoàn toàn dựa trên tác động kinh doanh. Tác động của việc khởi động lại quá trình chạy dài của bạn thỉnh thoảng là gì nếu nó không thành công và bạn có thể dễ dàng tự động hóa điều đó thay vào đó (và có lẽ bạn không nên là một biện pháp lập trình phòng thủ?) Chỉ là thời gian hay còn nhiều hơn thế ?

Cũng xem xét từ quan điểm của họ, một báo cáo lỗi từ một người dùng về một vấn đề không thể đoán trước trong một đoạn mã rất hiếm khi xảy ra, chỉ kết hợp với mã của họ, có thể chỉ trên một máy và chỉ trong một bộ thời gian bất thường điều kiện sẽ không có lý do chính đáng cho một khối lượng lớn thời gian để tìm và sửa chữa - nếu nó thậm chí có thể. Nhưng nếu đó là một trường hợp kinh doanh đủ mạnh để người dùng đó muốn / cần dành thời gian để điều tra kỹ lưỡng hơn và cung cấp một trường hợp / ứng dụng thử nghiệm đáng tin cậy hoặc mô tả vấn đề chi tiết hơn so với trường hợp ban đầu thì đó có thể là một trò chơi bóng khác .

Đây có lẽ là một vấn đề truyền thông mà chủ sở hữu thư viện đã không cân nhắc khi đưa nó theo cách đó và nếu bạn gặp trường hợp kinh doanh mạnh (chẳng hạn như mã của bạn gây tốn kém cho doanh nghiệp, có yêu cầu tuân thủ pháp lý, lỗ hổng bảo mật hoặc có một số hiệu ứng kích nổ lớn khác) sau đó đã đến lúc đưa nó lên quản lý và để họ chiến đấu với nó.


1
Tôi có cảm tình rằng ai đó đang xem xét câu trả lời của bạn (đó là khả năng thực tế) không tốt và bỏ phiếu. Điều tương tự đã xảy ra với câu trả lời của tôi.
phải là

-3

Bạn đã đề cập rằng 'Tôi đã gửi một lỗi với mô tả các điều kiện để làm cho rò rỉ này xảy ra.'

Nếu bạn chắc chắn rằng mô tả đó thực sự đủ để tái tạo lỗi thì bạn đã biết điều kiện chính xác. Bây giờ, nếu bạn không thể viết kiểm thử đơn vị sau khi biết điều kiện, thì điều đó có nghĩa rõ ràng là bạn không thể chế nhạo một số thành phần liên quan hoặc một số phần của mã được ghép quá chặt để cho phép tạo thử nghiệm đơn vị thực tế.

Bạn nên yêu cầu chủ sở hữu thư viện mã cấu trúc lại để cho phép bạn tạo bài kiểm tra đơn vị. Bạn sẽ phải giải thích rõ ràng những gì trong thư viện đang ngăn bạn tạo bài kiểm tra đơn vị. Anh ta sẽ phải cấu trúc lại mã nếu không thừa nhận rằng kiểm tra đơn vị là không thể với mã hiện tại. Cả hai cách, bạn đều thắng.

Nếu điều này không hoạt động, sau đây là các tùy chọn bạn có:

  • Bạn có thể tái tạo lỗi với nhiều bằng chứng hơn.
  • Hãy thử liên quan đến thẩm quyền cao hơn và yêu cầu anh ấy / cô ấy đánh giá bằng chứng của bạn.
  • Hãy thử sử dụng thư viện trong ứng dụng nguyên mẫu với môi trường giả để chỉ được mã hóa để tái tạo lỗi. Bằng cách đó, bạn sẽ có thể chứng minh ít nhất lỗi đó tồn tại.

3
Trách nhiệm của OP không phải là tạo ra bài kiểm tra đơn vị cho người bảo trì thư viện.
Andy

6
Nếu nhà phát triển khác đang bỏ qua các báo cáo lỗi từ ai đó thì hầu như không có cơ hội anh ta phản ứng thuận lợi với yêu cầu tái cấu trúc chính. Ngoài ra, không phải tất cả các loại vấn đề là dễ dàng tái sản xuất thông qua kiểm tra đơn vị: programmers.stackexchange.com/questions/196105/...
Dan Neely

1
@DanNeely: Anh ấy không bỏ qua, anh ấy cho rằng phóng viên phải làm gì đó nhiều hơn - điều không thể làm cho phóng viên. Và phóng viên phải liên lạc lại! Tôi cũng đã đề nghị liên quan đến chính quyền, vì điều này có thể đi xuống đó.
phải là

1
@Andy Ở một số vị trí, chính sách của công ty là các lỗi không được chấp nhận nếu không có kiểm tra tự động.
Joshua Drake

5
Bạn có vẻ bối rối về việc sử dụng bỏ phiếu đúng cách, và việc nói về nó không có khả năng giúp ích cho trường hợp của bạn. Downvote là cách được chấp nhận để nói "Tôi nghĩ rằng đây là một câu trả lời tồi". Ngôn ngữ gây khó chịu nên được xử lý không (chỉ) thông qua bỏ phiếu, mà bằng cách chỉnh sửa nó hoặc gắn cờ tùy thuộc vào việc phần còn lại của câu trả lời có hữu ích hay không. Một câu trả lời ngoài ngữ cảnh có thể được xử lý theo bất kỳ cách nào tùy thuộc vào mức độ nghiêm trọng của nó.
Dan Neely
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.