Буквально на днях наткнуся на вот таке предложение в Лондоне:
Судя по тому что написанно на сайте нужно отправить резюме, пройти собеседование по Skype и, если вам сделают предложение, то так же вы получите £1,000 даже если в итоге откажетесь от предложения о работе. Единственное ограничение что это только на позиции iOS разработчиков.
Цитата верна, кроме тех случаев когда изменение истории является меньшим из зол. Например когда вы сливаете вместе несколько веток прежде чем влить их в master и в случае обнаружения проблем в одной из веток гораздо удобнее с помощью git rebase один раз убрать ее и отдать в доработку нежели использовать git revert несколько раз.
При помощи --group или --fiter разделите существующий набор на части. --group потребует измений в файлах с тестами, --filter — подобрать правильные маски чтобы ничего не потерялось. Когда разделив запуск на несколько потоков вы добьетесь его выполнения (при определенном объеме тестов вы столкнетесь с проблемами не изолированности тестов друг от друга, зависимости от внешних ресурсов и т. п.) вы сможете ускорить процесс в десятки раз, все в конечном итоге упрется в коль-во процессов на которые хватит ресурсов (в основном памяти и процессора, но так же могут быть проблемы со скоростью записи на диск, это зависит от характера тестов) при параллельном запуске. Дальше запускаем сколько нам нужно потоков с помощью простого bash скрипта:
#!/bin/bash -x
# Получаем данные покрытия для первой половины тестов выполняя в фоне
phpunit --group A --coverage-php coverage/data/group_A.cov &
# Получаем данные покрытия для второй половины тестов выполняя в фоне
phpunit --group B --coverage-php coverage/data/group_B.cov &
# Ждем пока завершатся оба потока выполняясь параллельно
wait
# Объединяем даныне покрытия из двух потоков и генерируем HTML
phpcov --merge --html coverage/html coverage/data
Есть идея расширить возможности PHPUnit и реализовать возможность запуска набора тестов на указанном кол-ве потоков с автоматическим распределением тестов по «свободным» потокам, но это уже совсем другая история.
Более интеллектуальное покрытие можно реализовать на основе стандартных возможностей PHPUnit — Appendix B. Annotations — @covers. Позволяет указать что именно стоит учитывать как вызванные строки для каждого конкретного теста, весь остальной код в рамках теста будет считаться не исполненным.
У меня такой был, лет в 12. Чудом никто не пострадал. Мега эфектная экзотермическая реакция с бурлением пены получилась практически сразу. Другу брызнуло на руку — получил, пусть не большой по площади, но не слабый ожог, хорошо в глаза никому не попало.
Лично не получится приехать на мастер-класс, по-этому хочется предложить сделать трансляцию через www.ustream.tv или аналогичный сервис чтобы была возможность участвовать удаленно и возможно задать некоторые вопросы.
«Дания страдает от нового вида эмбарго — ветрогенераторы на границе страны не дают морским судам и авиалайнерам приблизиться к стране. В стране заканчивается провизия. Миллионы голодают.»
Судя по тому что написанно на сайте нужно отправить резюме, пройти собеседование по Skype и, если вам сделают предложение, то так же вы получите £1,000 даже если в итоге откажетесь от предложения о работе. Единственное ограничение что это только на позиции iOS разработчиков.
master
и в случае обнаружения проблем в одной из веток гораздо удобнее с помощьюgit rebase
один раз убрать ее и отдать в доработку нежели использоватьgit revert
несколько раз.PHPUnit
из коробки есть 4 возможности выборочного запуска тестов, подробнее в другом комментарии.При помощи --group или --fiter разделите существующий набор на части.
--group
потребует измений в файлах с тестами,--filter
— подобрать правильные маски чтобы ничего не потерялось. Когда разделив запуск на несколько потоков вы добьетесь его выполнения (при определенном объеме тестов вы столкнетесь с проблемами не изолированности тестов друг от друга, зависимости от внешних ресурсов и т. п.) вы сможете ускорить процесс в десятки раз, все в конечном итоге упрется в коль-во процессов на которые хватит ресурсов (в основном памяти и процессора, но так же могут быть проблемы со скоростью записи на диск, это зависит от характера тестов) при параллельном запуске. Дальше запускаем сколько нам нужно потоков с помощью простого bash скрипта:P. S.
Разбить потоки на почти равные части чтобы все они выполнялись примерно одинаковое время можно при помощи Chapter 7. Organizing Tests — Composing a Test Suite Using XML Configuration или же можно не заморачиваться и просто раскидать все по директориям — Chapter 7. Organizing Tests — Composing a Test Suite Using the Filesystem.
P. P. S.
Есть идея расширить возможности PHPUnit и реализовать возможность запуска набора тестов на указанном кол-ве потоков с автоматическим распределением тестов по «свободным» потокам, но это уже совсем другая история.
Чем отличаются такие круглые штуки, от аналогичных, но квадратных штук?
Бывают ли у круглых варианты папа-папа?
В настоящий момент больше можно узнать из предыдущей статьи — AIDA. Автоматизация работы с Git, JIRA и TeamCity.
3. TeamCity
5. Участвуют
Возможно в ближайшее время кто-то раскроет некоторые из деталей непрерывной интеграции здесь или на одной из конференций.
Goutte
Zombie
Sahi