Làm gì với những lỗi không được repro?


22

Tôi có một người kiểm tra rằng trong khi kiểm tra sẽ có lỗi xảy ra (ok cho đến nay), nhưng sau đó anh ta thường xuyên báo cáo ngay. Sau đó, chúng tôi (các nhà phát triển) sau đó thấy rằng người kiểm tra đã không cố gắng tái tạo vấn đề và (khi được hỏi) không thể tìm ra cách để làm cho nó xảy ra lần nữa.

Bây giờ đây vẫn là những lỗi, tôi không muốn bỏ qua chúng. Nhưng không có bước repro tôi là loại bị mắc kẹt. Đôi khi có một dấu vết ngăn xếp (mặc dù thường xuyên nó không hữu ích vì đây là khung nhỏ gọn và không có số dòng). Nhưng khi có một cái tôi có thể lấy dấu vết ngăn xếp và mở mã và bắt đầu đoán, nhưng điều đó không dẫn đến "sửa lỗi" có thể kiểm tra được.

Bạn làm gì trong những tình huống như thế này?


"khung nhỏ gọn và không có số dòng" Huh? Ngôn ngữ này là gì?
TheLQ

1
@TheLQ - C # (Visual Studio 2008) Đáng buồn là khung nhỏ gọn không có số dòng trên bất kỳ dấu vết ngăn xếp nào của nó. (Xem câu hỏi này để biết thêm thông tin stackoverflow.com/questions/3507545/ từ
Vaccano

7
điều đầu tiên cần dành thời gian là làm cho chương trình tạo ra các dấu vết ngăn xếp hữu ích.

2
Bức ảnh, hoặc nó đã không xảy ra. : P
Cameron MacFarland

4
Bạn biết đấy, một cái gì đó giống như những gì bạn mô tả hầu như luôn được kích hoạt do đầu vào của người dùng không được xác thực. Tôi sẽ thử nhìn vào đó trước. Có lẽ họ đang gõ một hình vuông vào một lỗ tròn.
Tim Post

Câu trả lời:


51

Một lỗi không có ngữ cảnh không phải là một lỗi, đó là một lỗi. Vấn đề có thể là mã của bạn, nó có thể là thư viện của bên thứ ba, có thể là phần cứng hoặc có thể là bức xạ mặt trời khiến một bit tự bật lên. Nếu bạn không thể tái tạo nó với ít nhất một số tính đều đặn (ngay cả khi chỉ "nó xảy ra cứ sau 10 hoặc 20 lần tôi làm X"), thì nó không tốt hơn nhiều so với người thử nghiệm của bạn nói với bạn "Có gì đó không ổn ở đâu đó - hãy sửa nó đi" .

Bạn có thể phải giải thích với người kiểm tra của mình rằng công việc của anh ta không chỉ là tạo đầu vào cho đến khi một cái gì đó bị phá vỡ. Nếu có, bạn có thể thay thế anh ta bằng một trình tạo số ngẫu nhiên. Một phần công việc của anh ta là xác định các lỗi, đòi hỏi phải xác định cách sản xuất chúng.


19

Cuối cùng, nếu cả nhà phát triển và người kiểm tra không thể tái tạo lỗi thì nó sẽ bị đóng nhưng được đánh dấu như vậy.

Tuy nhiên, mất bao lâu để bạn đi đến điểm đó là điều gây tranh cãi.

Một số người sẽ lập luận rằng nếu nó không thể tái sản xuất ngay lập tức thì nó sẽ bị đóng lại ngay lập tức.

Tôi thường cố gắng để có thêm thông tin từ người khởi tạo vấn đề. Có thể có một cái gì đó họ quên trong báo cáo ban đầu. Có một cuộc trò chuyện về các bước cần thiết thường có thể tiết lộ thông tin còn thiếu.

Một suy nghĩ cuối cùng - đóng cửa là "không repro" không có nghĩa là cố định. Nếu có một vấn đề thực sự, nó sẽ tự tiết lộ sớm hay muộn và có tất cả thông tin bạn có thể giúp đỡ khi cuối cùng bạn có thể tái tạo vấn đề.


16

Một vài gợi ý nữa:

  1. Thêm ghi nhật ký (và không chỉ là keylogger:}) vào mã sản phẩm của bạn. Lỗi "không repro" có thể là sán, nhưng chúng có thể là bộ nhớ hoặc tham nhũng trạng thái chỉ xảy ra trên một hệ thống bẩn được sử dụng theo cách không lường trước được (ví dụ như máy tính của khách hàng). Ghi nhật ký hoặc theo dõi thông tin có thể giúp bạn tìm ra những gì có thể đã sai khi người kiểm tra tìm thấy sán.

  2. Quét phần còn lại của các lỗi "không repro" trong cơ sở dữ liệu (hoặc bất cứ điều gì bạn sử dụng để theo dõi lỗi). Thông thường, sán tụ lại với nhau trong một khu vực của sản phẩm. Nếu có vẻ như một thành phần bị lỗi, mã xem lại thành phần đó có thể bị lỗi, thêm ghi nhật ký bổ sung vào thành phần đó - hoặc cả hai.

  3. Mất nửa giờ hoặc lâu hơn và xem thử nghiệm thử nghiệm của bạn. Cách tiếp cận của họ có thể cho bạn ý tưởng về những gì đã sai (ví dụ: "thú vị - tôi không biết bạn có thể đi đến hộp thoại đó theo cách đó"). Bạn cũng có thể thấy rằng họ bỏ qua một hộp thoại hoặc bước cấu hình không chủ ý. Đó là giá trị đầu tư thời gian để có được trong đầu của họ một chút.


4

Tôi làm QA trên một mã thương mại lớn, kịch bản khó chịu này xảy ra quá thường xuyên. Thông thường, đó là dấu hiệu của việc không có các thủ tục bằng sắt để xây dựng nhị phân trên tất cả các nền tảng mà chúng tôi hỗ trợ. Vì vậy, nếu nhà phát triển xây dựng mã riêng của mình (mà anh ta phải làm để gỡ lỗi và sửa lỗi) và không tuân theo quy trình xây dựng tương tự với thư, có khả năng các lỗi phụ thuộc hệ thống sẽ xuất hiện một cách kỳ diệu (hoặc xuất hiện) . Tất nhiên những thứ này thường được đóng lại với "hoạt động cho tôi" trong cơ sở dữ liệu lỗi và nếu chúng thất bại vào lần tiếp theo khi sự cố được chạy, lỗi có thể được mở lại. Bất cứ khi nào tôi nghi ngờ một lỗi có thể phụ thuộc vào hệ thống, tôi cố gắng kiểm tra nó trên nhiều nền tảng khác nhau và báo cáo theo điều kiện nào nó xảy ra. Thông thường, một vấn đề tham nhũng bộ nhớ onlt xuất hiện nếu dữ liệu bị hỏng có cường độ đủ lớn để gây ra sự cố. Một số nền tảng (kết hợp CTNH và HĐH) có thể sụp đổ gần hơn với nguồn tham nhũng thực sự và điều này có thể rất có giá trị đối với người nghèo phải gỡ lỗi.

Người kiểm tra cần thực hiện một số giá trị gia tăng, ngoài việc báo cáo rằng hệ thống của anh ta cho thấy lỗi. Tôi dành nhiều thời gian để sàng lọc các kết quả dương tính giả - có thể nền tảng đang được đề cập đã quá tải hoặc mạng bị trục trặc. Và vâng, đôi khi bạn có thể nhận được thứ gì đó thực sự bị ảnh hưởng bởi các sự kiện thời gian ngẫu nhiên, lỗi phần cứng thường có thể giống như ví dụ proto: Nếu hai yêu cầu dữ liệu quay lại cùng một khoảng thời gian chính xác và logic phần cứng để xử lý xung đột tiềm ẩn bị lỗi, sau đó lỗi sẽ chỉ xuất hiện không liên tục. Tương tự như vậy với xử lý song song, trừ khi bằng thiết kế cẩn thận, bạn đã hạn chế giải pháp độc lập với bộ xử lý nào xảy ra nhanh hơn, bạn có thể gặp các lỗi chỉ xảy ra một lần trong một mặt trăng xanh và khả năng thống kê của chúng khiến việc gỡ lỗi trở thành một cơn ác mộng.

Ngoài ra mã của chúng tôi đang được cập nhật, thường là nhiều lần mỗi ngày, theo dõi một số sửa đổi mã nguồn chính xác khi nó đi về phía nam có thể là thông tin rất hữu ích cho nỗ lực gỡ lỗi. Người thử nghiệm không nên có mối quan hệ bất lợi với các trình gỡ lỗi và nhà phát triển, anh ta ở đó trong một nhóm để cải thiện chất lượng sản phẩm.


3

Có hai loại lỗi không thể tái tạo:

1) Những người mà người kiểm tra (hoặc người dùng) đã nhìn thấy một lần nhưng không thể hoặc không thể sao chép.

Trong những tình huống này, bạn nên:

  • Rất nhanh chóng kiểm tra quá trình hành động cơ bản cho thấy khiếm khuyết để đảm bảo rằng nó không thể lặp lại.

  • Nói chuyện với người kiểm tra / người dùng để xem nếu có bất kỳ thông tin nào khác có thể giúp đỡ.

  • Tham chiếu chéo chúng với bất kỳ khiếm khuyết nào khác có thể liên quan để xem bạn có đủ thông tin để xem xét chúng dựa trên nhiều trường hợp không. Bạn có thể thấy rằng một vấn đề này không cung cấp cho bạn đủ thông tin để tiếp tục, tuy nhiên khi kết hợp với một số vấn đề khác, nó có thể gợi ý cho bạn một cái gì đó không đúng mà đáng để điều tra.

  • Nếu bạn vẫn không có đủ để tiếp tục thì bạn cần phải giải thích với người dùng / người kiểm tra rằng bạn không có đủ thông tin. Phác thảo cho họ một cách lịch sự những thông tin đủ sẽ trông như thế nào và tại sao nó cần thiết.

2) Những nơi mà chúng không thể được sao chép một cách đáng tin cậy, tuy nhiên có đủ bằng chứng (về sự xuất hiện lặp đi lặp lại) để đề xuất rằng lỗi tồn tại, sau đó tôi có xu hướng thấy rằng đây là những vấn đề của nhà phát triển và nhà phát triển - được người thử nghiệm hỗ trợ / người dùng - cần điều tra.

Điều này có thể chậm và đau đớn, bạn có thể sẽ phải đi bộ mã, thêm ghi nhật ký, xem dữ liệu và nói chuyện sâu sắc với người kiểm tra / người dùng nhưng nếu có đủ bằng chứng cho thấy có khả năng đó là có là một vấn đề bạn cần phải sở hữu nó và làm bất cứ điều gì cần làm để khắc phục nó.


2

Nghe có vẻ như điều này xảy ra tương đối thường xuyên - điều này khiến tôi tự hỏi, có phải vì hầu hết các lỗi thực sự rất khó để chế lại, hoặc vì một lý do nào khác mà anh ta không thử? Bạn có biết tại sao anh ta không cố gắng tái tạo vấn đề? Có phải vì anh ấy không nhận ra nó quan trọng với bạn như thế nào? Hoặc có lẽ là anh ta có áp lực khác - một người quản lý kiểm tra, người chỉ muốn anh ta vượt qua các bài kiểm tra được phân bổ một cách nhanh chóng và ném các lỗi vào tường, chẳng hạn? Hoặc có lẽ anh ta không chắc chắn làm thế nào để đi về nó?

Tôi đồng ý với những người khác rằng làm việc đăng nhập tốt hơn là ưu tiên hàng đầu. Trong khi đó, nếu bạn nghi ngờ rằng việc thiếu kỹ năng / sự tự tin của người kiểm tra có thể là một vấn đề, thì tôi thực sự thích bài viết này của Daniel Faught về cách ly lỗi - bạn có thể chỉ cho anh ta điều đó để bắt đầu.

Nếu vấn đề xảy ra là do áp lực quản lý - bạn có cảm tình, vì đó là một vấn đề khó giải quyết, đặc biệt là nếu người kiểm tra & lập trình viên báo cáo cho các nhà quản lý khác nhau và các nhà quản lý không có xu hướng "giúp đỡ" một nhóm khác.


1

Thông thường tôi lưu ý rằng nó không thể lặp lại, nhưng để nó mở cho đến khi đợt thử nghiệm hoặc lặp lại đó hoàn tất.

Nếu nó chưa được sao chép vào thời điểm đó thì nó đã bị đóng, nhưng có thể mở lại nếu gặp lại.


1

dính một keylogger trên máy trạm của người thử nghiệm này!


2
Nếu bạn thực sự may mắn, bộ ghi bàn phím có thể tạo ra một số hiệu ứng phụ khiến lỗi không thể tái tạo trên máy đó. Bạn đã bao giờ gặp phải tình huống đưa thêm printfmã vào khiến lỗi biến mất chưa? :)
Scott Whitlock

3
Một sự hiện diện của một máy quay video cũng gây ra lỗi?
Công việc

1
Máy quay video - không, nhưng JING hoặc HyperCam2 - chắc chắn là CÓ;)
quetzalcoatl

1

Vâng, nhiệm vụ đầu tiên là phải có một hệ thống kiểm tra tái sản xuất. Người kiểm tra của bạn phải có một quy trình được xác định rõ - tự động nếu có thể.

Có ba điều kiện sau:

  • Cùng nhị phân
  • Các bước tương tự
  • Cùng một máy

Nếu lỗi xuất hiện lẻ tẻ với 3 điều kiện trên, hãy bắt đầu cách ly hơn nữa. Xem xét từng cấp độ của ngăn xếp hệ thống và cấu hình của nó.

Một cách để phát hiện lỗi quản lý bộ nhớ là chạy chương trình trên nhiều HĐH với nhiều trình biên dịch. Valgrind cũng có thể giúp đỡ.

Tuy nhiên, thông thường các hệ thống song song có thể gây ra lỗi không repro. Những thứ như kích thước bộ đệm và tốc độ xử lý, asynch io, khóa cơ sở dữ liệu, xen kẽ ghi bộ nhớ; tất cả những thứ đó có thể tạo ra vấn đề Và vv và vv.


0

Trước hết, bạn nên có một quy trình kiểm tra nghiêm ngặt (nhưng tôi hiểu bạn, trong công ty của tôi những gì bạn đã mô tả xảy ra thường xuyên).

Tùy thuộc vào mức độ nghiêm trọng của lỗi, bạn có thể đầu tư một chút thời gian cho nó hoặc (tốt hơn) bỏ qua nó cho đến khi các bước repro được cung cấp.

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.