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