Дополнительный инструментарий

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

В первую очередь идет системы отслеживания ошибок и управления проектом

Обычно это Redmine, минимальные причины для использования:

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

Front-end к VCS, обычно использую Git и GitLab

  • создание репозиториев, добавление пользователей, управление правами;
  • просмотр содержимого, переключение между ветками, слияние веток;
  • запросы на слияние и комментирования строк, позволяет проводить code review.

Система непрерывной интеграции (CI)

Обычно это Jenkins

  • не могу без тестов, нравится чувство спокойствия;
  • автоматизирует процесс сборки пакета, и выкладывания в репозиторий.

 

Подход к решению математических задач Д. Полья.

Читая «Совершенный код» Стива Макконнелла нашел заметку о подходе к решению математических задач Д. Полья. Данный подох можно использовать при проектировании ПО.

1. Понимание постановки задачи.

Нужно ясно понять задачу. Что неизвестно? Что дано? В чем состоит условие? Возможно ли удовлетворить условию? Достаточно ли условие для определения неизвестного?

Сделайте чертеж. Введите подходяще обозначения. Разделите условие на части. Постарайтесь записать их.

2. Составление плана решения.

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

Не встречалась ли вам раньше эта задача? Хотя бы несколько в иной форме? Известна ли вам какая-нибудь родственная задача? Не знаете ли  теоремы, которая могла бы оказаться полезной?

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

Нельзя ли иначе сформулировать задачу? Еще иначе? Вернитесь к определениям.

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

Все ли данные вами использованы? Все ли условия? Приняты ли вами во внимание все существующие понятия, содержащиеся в задаче?

3. Осуществление плана.

Нужно осуществить план решения. Осуществляя план решения, контролируйте каждый свой шаг. Ясно ли вам, что предпринятый вами шаг правилен? Сумеете ли доказать, что он правилен?

4. Взгляд назад.

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