Я работаю в компании по разработке программного обеспечения. У нас есть крупные корпоративные клиенты, которые внедряют наш продукт, и мы оказываем им поддержку. Например, если есть дефект, мы предоставляем исправления и т. Д. Другими словами, это довольно типичная установка.
Недавно был выдан и назначен мне билет на исключение, найденное клиентом в файле журнала, которое связано с одновременным доступом к базе данных в кластерной реализации нашего продукта. Таким образом, конкретная конфигурация этого клиента вполне может иметь решающее значение в возникновении этой ошибки. Все, что мы получили от клиента, это его лог-файл.
Подход, который я предложил своей команде, состоял в том, чтобы попытаться воспроизвести ошибку в конфигурации конфигурации, подобной настройке клиента, и получить сопоставимый журнал. Тем не менее, они не согласны с моим подходом, заявив, что мне не нужно воспроизводить ошибку, так как она занимает слишком много времени и потребует моделирования кластера серверов на виртуальных машинах. Моя команда предлагает мне просто «следовать коду», чтобы увидеть, где находится код, небезопасный для потоков и / или транзакций, и внести изменения в простую локальную разработку, которая не является кластерной реализацией, подобной среде, из которой возникновение из ошибки происходит.
Мне кажется, что разработка абстрактного проекта (кода программы), а не ощутимого, видимого проявления (воспроизведение во время выполнения) кажется трудной, поэтому я хотел задать общий вопрос:
Разумно ли настаивать на воспроизведении каждого дефекта и отладке перед диагностикой и исправлением?
Или же:
Если я являюсь старшим разработчиком, могу ли я читать многопоточный код и создавать мысленную картину того, что он делает во всех сценариях использования, а не требовать запуска приложения, тестировать различные сценарии использования и выполнять пошаговые инструкции код построчно? Или я плохой разработчик для того, чтобы требовать такую рабочую среду?
Отладка для бабы?
На мой взгляд, любое исправление, представленное в ответ на тикет об инциденте, должно быть протестировано в среде, имитирующей как можно более близкую к исходной среде. Как еще вы можете знать, что это действительно решит проблему? Это похоже на выпуск новой модели транспортного средства без краш-тестов на манекене, чтобы продемонстрировать, что подушки безопасности действительно работают.
И последнее, но не менее важное, если вы согласны со мной:
Как мне поговорить с моей командой, чтобы убедить их, что мой подход разумный, консервативный и более пуленепробиваемый?
new
. И эти ошибки не гарантируются надежно воспроизводимыми в соответствии со спецификацией Java Memory Model