Ответственность за воспроизведение ошибок

25

Я разрабатываю программу, используя библиотеку, созданную другим программистом (он работает в той же компании). Недавно я обнаружил утечку в библиотеке, которая происходит при определенных условиях сети после нескольких часов работы. Я подал ошибку с описанием условий, чтобы эта утечка произошла. Этот разработчик ответил, что «этого недостаточно», «он не несет ответственности за воспроизведение ошибок», и я должен создать модульный тест для воспроизведения этой ошибки, в противном случае он ничего не делает.

  1. Он прав?
  2. Что я могу сделать в этой ситуации? Создание модульного теста невозможно, поскольку оно зависит от некоторых случайных временных интервалов сети.
user626528
источник
26
Если вы собираетесь написать модульный тест, вы можете также исправить ошибку и взять кредит на все это.
Джеффо
3
@JeffO, он управляет этой библиотекой и не примет исправления. Потому что «он не уверен, что ошибка когда-либо существовала»
user626528
Возможно ли, что сопровождающий библиотеки находится в команде, политика которой заключается в том, что ошибки не принимаются без автоматических тестов? Я также слышал термин «модульный тест», когда речь может идти о любой форме автоматизированного теста, особенно для интеграционного теста.
Джошуа Дрейк

Ответы:

30

Прав ли он - это, вероятно, вопрос, на который невозможно ответить, не зная вашей компании. Тем не менее, он, конечно, не очень помогает.

Я бы поднял ошибку с ним (что вы и сделали), если это вызывает проблему в вашем проекте, тогда я бы поднял ее как блокировщик с вашим менеджером проекта и пояснил бы, что вы подняли ошибку с соответствующими человек, но это повлияет на ваш проект, если он не будет быстро исправлен.

Я также хотел бы поговорить с разработчиком и объяснить, почему создание модульных тестов невозможно, но вы были бы рады показать ему это на своей машине (если это возможно?).

Майкл
источник
48

Он на 100% прав, что вы должны предоставить достаточно информации, чтобы сделать ошибку воспроизводимой, иначе нет никакой возможности узнать, сработает ли какое-либо исправление, которое он предоставляет.

Но - он ИМХО на 100% неправ, что это должно быть в форме юнит-теста. Если вы можете описать тестовый сценарий таким образом, чтобы он мог воспроизвести сбой (по крайней мере, с большой вероятностью в разумный промежуток времени или путем ручного тестирования), у вас есть доказательство того, что проблема существует - что должно установить ваш коллега в ответственности, чтобы исправить это. Конечно, если вам удастся создать сценарий, который будет воспроизводить ошибку быстрее, это будет полезно для него. В идеале можно было бы сделать из этого автоматический тест, и это зависит от вашей организации, которая несет ответственность за это.

Док Браун
источник
11
Таким образом, если приложение аварийно завершает работу «время от времени», без какого-либо сложного шаблона для пользователя, то разработчику не нужно его исправлять, потому что пользователь не может воспроизвести его по команде? Я категорически не согласен здесь ...
Хайнци
20
@Heinzi: если я получу отчет об ошибке «приложение время от времени будет зависать», я бы тоже дал этому вопросу очень низкий приоритет для работы. Минимальная вещь, которую я ожидаю от пользователя, - это записать, как часто это происходит «время от времени», что он делал именно с тем, что происходило с приложением в момент последнего сбоя приложения, и точное сообщение об ошибке.
Док Браун
3
@ user626528: ИМХО владельцу библиотеки следует попытаться выполнить шаги, которые вы говорите ему, чтобы воспроизвести ошибку - ему не следует пробовать 500 слегка отличающихся сценариев, когда в вашем описании нет ошибок.
Док Браун
6
Репортер не должен предоставлять шаги воспроизведения; довольно часто мы просто прикрепляем дамп из аварийного процесса, особенно если он происходит во время автоматического запуска. Ответственность за поиск шагов воспроизведения лежит на праве цессионария.
avakar
2
(Это не означает, что репортер не должен пытаться быть полезным и предоставлять шаги, если они их знают. Однако в случае спорадических сбоев репортер не обязан тратить время на исследование того, что владелец компонента, вероятно, выяснит быстрее. )
avakar
9

Обе стороны должны приложить некоторые усилия.

Разработчик библиотеки должен приложить некоторые дополнительные усилия даже без юнит-тестов, потому что некоторые проблемы не могут быть воспроизведены с юнит-тестами. Иногда это аппаратное обеспечение, иногда это определенная последовательность правильных действий от остальной части программы, которая приводит к тому, что библиотека дает плохие результаты.

Вы должны приложить дополнительные усилия, потому что после всего этого я могу быть не ошибкой в ​​библиотеке, а результатом неправильных действий остальной программы (например, поврежденная куча может привести к тому, что любая библиотека будет вести себя странно). Поэтому имеет смысл максимально сократить небиблиотечный код, задействованный в воспроизведении ошибок. И вы, вероятно, будете делать это быстрее и чище, чем человек, незнакомый с кодом вашего приложения.

maxim1000
источник
5

Если автор библиотеки не может воспроизвести ошибку, основываясь на вашем отчете, то не стоит ожидать, что он потратит на нее много времени, не говоря уже об исправлении.

Но у вас также есть ограниченное количество времени, потраченного на работу над продуктом, который имеет второстепенное значение. К сожалению, это может означать, что ошибка продолжает существовать, и не предпринимается никаких действий по ее устранению.

К счастью, это не обязательно катастрофа - хотя в идеальном мире все программное обеспечение не содержит ошибок, это не так, и поэтому мы должны расставлять приоритеты исходя из проблем, которые это вызывает у нас.

Это означает, что вы действительно несете ответственность за разработку воспроизводимого контрольного примера, ЕСЛИ ВЫ ХОТИТЕ ИСПРАВЛЕНО. Вам может быть все равно, будет ли это исправлено, и в этом случае вы сделали все, что можно и нужно от вас ожидать. Возможно, вы захотите исправить это, но этого недостаточно для того, чтобы посвятить время воспроизведению. Это вполне приемлемо.

Сообщать об ошибке в меру своих возможностей в то время, когда вам приходится иметь дело с ней, - это просто хорошее гражданство, вам не нужно выходить за ее пределы, если это не необходимо для вашей программы. И вы, возможно, не захотите этого делать даже тогда, возможно, есть другая библиотека, которую вы могли бы использовать, или может быть возможность развернуть вашу собственную библиотеку за разумный период времени. По сути, вам решать, что и какие усилия вам стоит.

jmoreno
источник
1
Ваш ответ выглядит очень странно для меня. Я исправляю ошибки самостоятельно и не жду, пока кто-нибудь сделает грязную работу вместо меня. Я бы сказал, что основная ответственность автора кода - сделать все возможное, чтобы исправить свой код.
user626528
1
Поскольку именно вы хотите исправить это сейчас, вы должны убедить его в том, что стоит исправить его сейчас, а не через 10 или 12 лет, когда у него нет ничего более важного для исправления. theregister.co.uk/2013/01/21/kde_bug_quashed . Учитывая невоспроизводимую ошибку значимости X и воспроизводимую ошибку того же значения, я буду работать над воспроизводимой ошибкой каждый раз.
Jmoreno
слишком много эго Ему платят за работу в этой чертовой библиотеке.
user626528 12.06.13
1
@ user626528: Дело не в эго, а в приоритетах - невозможность воспроизвести ошибку ниже, это приоритет. Учитывая две ошибки EOI (Execute Operator Immediately), одну воспроизводимую, а другую нет, я бы поработал над той, которая может быть воспроизведена первой, и я бы сказал любому другому разработчику сделать то же самое. И если библиотека не используется так часто, я мог бы работать над другим проектом полностью - даже если ошибки в нем не столь значительны. Если ему / только / платят за работу над этой библиотекой, и нет ни одного невыполненного запроса на функцию или ошибок, кроме этого, тогда да, он должен просто сделать это.
Jmoreno
2

Я был бы склонен позволить спящим собакам пока лгать - вы подняли вопрос, и он назначен ему. Предположительно, существуют процессы для отслеживания выдающихся ошибок и их устранения?

Если вы хотите активно продвигаться дальше, я бы посоветовался поговорить с вашим менеджером, чтобы узнать, есть ли какие-либо инструменты тестирования, способные надежно воспроизвести проблему.

Со стороны разработчика - было бы серьезно бездействовать с их стороны, если бы вы предоставили необходимую информацию. Возможно, однако, что они имеют большую рабочую нагрузку, поэтому не могут выделить время, необходимое для отслеживания проблемы.

Робби Ди
источник
2

Вы нашли ошибку, вы сообщили об этом, и он был придурком по этому поводу.

Если бы вы двое были близкими друзьями, он сделал бы что-то, чтобы помочь, но он бы предпочел просто отодвинуть вопрос назад.

Вы можете сделать больше, сообщая больше деталей и пытаясь поддержать ваши заявления о том, что это утечка памяти. Тем не менее, у вас есть свои обязанности и вам нужно закончить свою работу.

Зарегистрируйте как можно больше информации в трекере ошибок и продолжайте.

Если вы увидите этого человека снова в будущем. Будьте дружелюбны, старайтесь говорить об общих интересах и понимать, что хорошие отношения - гораздо более эффективный способ исправить ситуацию, чем любое количество фактов, которые вы можете предоставить в обоснование претензии.

Reactgular
источник
У меня есть некоторые симпатии с разработчиком библиотеки. Возможно, их точка зрения заключается в том, что разработчик приложения пытается использовать библиотеку и вызвал ее сбой из-за кода. Об этом не сообщается ни в дикой природе, ни от других разработчиков, поэтому для них это ошибка с относительно низким приоритетом (или ложная ошибка).
Робби Ди,
@RobbieDee да, правда, это был не один из моих лучших ответов. Я просто подумал, что странно, что они не могут работать вместе, учитывая, что они работают в одной компании. Я имею в виду, если владелец бизнеса слышал, что сотрудник должен был прийти сюда, чтобы получить поддержку. Интересно, что он подумает об этом? Это не то, как я хотел бы, чтобы вещь бежала вместо меня.
Reactgular
0

Часто в подобных ситуациях я сталкиваюсь с предположением о том, что все ошибки должны быть исправлены, и хотя это достойно восхищения, определенно стоит иметь цель (давайте посмотрим правде в глаза, мы никогда не собирались писать ошибки!), Но в конечном итоге это нереально любой проект приличного размера, чтобы исправить ошибку только потому, что это ошибка (если вы можете ее найти!). Вот почему у нас есть методологии, шаблоны и методы управления проектами и кодирования, и т. д.

Итак, одна вещь, которую я бы сказал в защиту владельца библиотеки (и это был тот случай, когда я работал над некоторыми крупными проектами), это то, что время разработки стоит денег и является ограниченным ресурсом, поэтому решение о том, как обрабатывать отчет кто исследует, какие тесты производятся / нужны и, в конечном счете, если (и если да, то когда) будет установлено исправление, основанное исключительно на влиянии на бизнес. Каково влияние перезапуска вашего долго работающего процесса время от времени, если он терпит неудачу и вы можете легко автоматизировать это вместо этого (и, возможно, разве вы не должны быть уже в качестве защитной меры программирования?), Это просто время или есть что-то большее? ?

Также посмотрите на это с их точки зрения, отчет об ошибке от одного пользователя о непредсказуемой проблеме в небольшом количестве кода, которая встречается очень редко, только в сочетании с его кодом, возможно, только на одной машине и только при наборе необычного времени условия просто не будут иметь веских оснований для поиска и исправления большого количества времени разработчиков - если это вообще возможно. Но если это достаточно серьезное экономическое обоснование для того, чтобы пользователь захотел / должен потратить время на более тщательное расследование и предоставить надежный контрольный пример / приложение или радикально более подробное описание проблемы, чем его первоначальный вариант, тогда это может быть совершенно другая игра в мяч. ,

Возможно, это проблема коммуникации, которую владелец библиотеки не рассматривал таким образом, и если у вас серьезное экономическое обоснование (например, ваш код является дорогостоящим для бизнеса, имеет требование соблюдения правовых норм, дыру в безопасности или имеет некоторые другой существенный эффект) тогда пришло время довести это до руководства и позволить им бороться с этим.

Джеймс Снелл
источник
1
У меня есть сочувствие, что кто-то считает ваш ответ (который является практической возможностью) плохим и голосует против него. То же самое случилось с моим ответом.
не
-3

Вы упомянули, что «я подал ошибку с описанием условий, чтобы эта утечка произошла».

Если вы уверены, что описания действительно достаточно для воспроизведения ошибки, то вы уже знаете точные условия. Теперь, если вы не можете написать модульный тест после знания условий, это явно означает, что вы не можете смоделировать некоторые задействованные компоненты, или некоторые части кода слишком тесно связаны, чтобы создать практический модульный тест.

Вы должны попросить владельца библиотеки выполнить рефакторинг кода, чтобы позволить вам создать модульный тест. Вам нужно будет четко объяснить, что в библиотеке мешает вам создать модульный тест. Ему придется рефакторинг кода, в противном случае следует признать, что модульное тестирование невозможно с текущим кодом. В обоих случаях вы выигрываете.

Если это не работает, у вас есть следующие варианты:

  • Вы можете воспроизвести ошибку с большим количеством доказательств.
  • Попробуйте задействовать более высокий авторитет и попросите его / ее оценить ваши доказательства.
  • Попробуйте использовать библиотеку в приложении-прототипе с фиктивной средой, которая должна быть закодирована только для воспроизведения ошибки. Таким образом, вы сможете по крайней мере доказать, что ошибка существует.
isntn
источник
3
ОП не несет ответственности за создание модульного теста для сопровождающего библиотеки.
Энди
6
Если другой разработчик игнорирует сообщения об ошибках от кого-то, практически нет шансов, что он положительно отреагирует на запрос о серьезном рефакторинге. Кроме того, не все типы проблем легко воспроизводимы с помощью модульного тестирования: programmers.stackexchange.com/questions/196105/…
Дэн Нили,
1
@DanNeely: он не игнорирует, он утверждает, что репортер должен сделать что-то большее - что невозможно сделать для репортера. И репортер должен общаться обратно! Я также предложил привлечь авторитет, поскольку это может привести к этому.
не
1
@Andy В некоторых позициях корпоративная политика заключается в том, что ошибки не принимаются без автоматического тестирования.
Джошуа Дрейк
5
Вы, похоже, не уверены в правильности использования голосования, и вряд ли это поможет вашему делу. Пониженные голоса - это общепринятый способ сказать «я думаю, что это плохой ответ». С оскорбительным выражением следует бороться не (исключительно) путем понижающего голосования, а путем его редактирования или пометки в зависимости от того, полезен ли остальной ответ. Вне контекста ответ может быть обработан в любом случае в зависимости от того, насколько он вопиющий.
Дэн Нили,