Просветление - это близость ко всему. - Эхей Догэн (1200–1253)

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

В первый раз мне не хватало близости с кодовой базой в проекте, в котором меня попросили выполнить некоторую бэкэнд-работу. Инженеры сервера настроили мою среду PHP и, к моему огорчению, не использовали никаких отладчиков. Их процесс заключался в том, чтобы внести изменения локально, подтолкнуть их к разработке, а затем протестировать функцию с помощью curl. Если это не сработало, как ожидалось, они добавили бы некоторые операторы печати, ssh на сервер и завершили бы журналы. Ой! Мне казалось, что я соблюдаю код через соломинку.

При такой настройке трудно быть уверенным в том, что сервер делает в любой момент. Я мог только наблюдать те значения, которые заранее предусмотрительно напечатал. Многие сведения об отладке возникают случайно, когда наблюдаются значения в отладчике. Все свойства выглядят нормально, но «подождите, это свойство здесь выглядит нечетким», что ведет нас в новом направлении. Эти случайные наблюдения с меньшей вероятностью произойдут, если от нас потребуют априори добавить операторы печати. Ограниченная отладка в сочетании с утомительным циклом «редактировать -› загружать - ›тестировать -› отслеживать журналы »означает, что у нас гораздо меньше шансов найти основную причину проблемы и с большей вероятностью добавим исправления.

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

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

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

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

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

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

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

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

Программирование, Разработка программного обеспечения, тестирование

Первоначально опубликовано на www.sfsoftwareist.com 7 февраля 2018 г.