Даже top
(от procps
) синтаксические анализы /proc/meminfo
, см. здесь .
Попросите их написать модульные тесты для каждого случая.
Если они так чем-то обеспокоены не сработает в первый раз, тогда они должны переписать это что-то пока они не будут уверены, что это БУДЕТ работать.
Если есть разумный шанс, что что-то не сработает с первого раза круглый, и они ничего не могут сделать, чтобы повысить шансы на это работает, то правильное решение использовать попытку / поймать, а не просто позвонить это дважды.
Украсть половину ОЗУ в нерабочее время. Если между каждым налетом бессмысленного кода и сообщением об ошибке, которое они получают после его компиляции и запуска, проходит минута или около того, они не могут не думать о том, почему возникают проблемы.
Каждая строка кода - это возможность для ошибок. Написание строк кода, которые не влияют на поведение программы, увеличивает количество ошибок без какой-либо пользы.
Я бы ждал, пока не обнаружится ошибка, которая напрямую связана с таким кодом, а затем снова буду аргументировать свою позицию. Гораздо проще с доказательствами.
Некоторое время назад я немного писал о защитном программировании:
http://www.francisfish.com/what_defensive_programming_is_and_isnt_logging_the_right_t.htm
Я думаю, что приведенные выше предложения о принуждении людей к тестированию все пути кода вполне допустимы и будут работать, если они человеческие.
Это действительно досадная проблема, с которой я сталкивался несколько раз. Попытки убедить кого-то, представляя им различные принципы или аргументируя это, оказались разочаровывающими и бесплодными. В итоге я использовал два подхода:
Причины, по которым чрезмерная осторожность - это плохо, включают:
Прислушайтесь к своему руководителю / менеджеру группы и посмотрите, сможете ли вы убедить их ввести анализ кода и / или парное программирование.
y = Abs (x); если y> = 0, то
совершенно разумно. помните -> MIN_INT == abs (MIN_INT)
Программирование по совпадению http://www.pragprog.com/the-pragmatic-programmer/extracts/coincidence
Предположим, Фред получил задание по программированию. Фред набирает какой-то код, пробует, и кажется, что он работает. Фред набирает еще немного кода, пробует его, и, похоже, он все еще работает. После нескольких недель написания кода программа внезапно перестает работать, и после нескольких часов попыток исправить это он все еще не знает, почему. Фред вполне может потратить значительное количество времени на поиски этого фрагмента кода, но никогда не сможет его исправить. Независимо от того, что он делает, кажется, что это никогда не работает правильно.
Фред не знает, почему код не работает, потому что он не знал, почему это вообще сработало. Казалось, это сработало, учитывая ограниченное `` тестирование '', которое провел Фред, но это было просто совпадением. Опираясь на ложную уверенность, Фред бросился в забвение. Сейчас, самые умные люди могут знать кого-то вроде Фреда, но мы знаем лучше. Мы ведь не полагаемся на совпадения?
Первый приведенный пример является классическим случаем Программирования по совпадению , так что есть ваши боеприпасы против этого.
Варианты 2 и 3 просто глупы в большинстве контекстов, если только они не являются тестовыми примерами для какого-то бета-языка программирования или чего-то, в котором реализация ABS и логических значений может иметь неопределенное поведение.
Ваша точка зрения верна, но, как я заметил, такие вещи ТАКЖЕ вызваны отсутствием надлежащих технических знаний. Я имею в виду, что я наткнулся на код, который просто глуп. Как можно написать что-то подобное -
private bool IsValid(bool isValid)
{
if(isValid == true) return true;
else if(isValid == false) return false;
}
То же самое и в обоих приведенных вами примерах. Программист МОЖЕТ не знать, что делает каждый вызов функции (в первом случае) или каковы основные основы случая переключателя
(во втором). Не так ли?
Принудительное 100% покрытие ветвления для модульных тестов, иначе сборка завершится неудачно. Он не сможет заставить test1 создать исключение или оценить условие в test2 как false.
Да, это проблема. По крайней мере, такой тип программирования затрудняет понимание и поддержку кода. Если есть реальный случай, который необходимо проверить или отловить, то часто бывает трудно увидеть, действительно ли он проверен. Даже простая задача, такая как пошаговое выполнение кода с помощью отладчика, может стать утомительной.
Я долго боролся с младшим разработчиком, который писал такой код. Я не мог убедить его здравыми аргументами, что написание избыточных проверок или дополнительных шагов - это не то же самое, что защитное программирование. В конце концов, я нашел решение:
Я сказал разработчику, что производительность является приоритетом для его части кода. Оказалось, что самый простой способ быстро улучшить производительность - это удалить лишние проверки и повторные инициализации ;-). Этот трюк сработал как лакомство, и вскоре он избавился от своих привычек «защитного кодирования»!
Сыграйте в их собственную игру:
Repaint (); Перекрасить (); ProcessMessages (); Перекрасить ();
Это просто ужасное программирование. Здесь необходимо применить проверку кода и обучение.