6. Agile manifesto Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan
7. Testability Не пытаться тестировать то, что есть Подбираем технологии по критерию testability Выгоды Продуктивность Инновации Человеческий фактор
8. Test-Driven Development Runnable requirements over dead documentation Реализация, направляемая тестами Пишем требование, код подгоняем под требование Сложная задача заменяется на две более простых Обобщение граничных/вырожденных случаев
9. Test-Driven Development, пример Задача: факторизовать натуральное число 1 => [1] return [1] 2 => [2] return [n] 4 => [2, 2] if n == 4 return [2, 2] return [n] 6 => [2, 3] if n > 2 && n % 2 == 0 return [2, n / 2] return [n] 8 => [2, 2, 2] result = [] while n > 2 && n % 2 == 0 result.append(2) n /= 2 result.append(n) return result 9 => [3, 3] result = [] foreachi in [2..sqrt(n)] while n > i && n % i == 0 result.append(i) n /= i result.append(n) return result
13. Человеческий фактор Максимизируем удовлетворенность сотрудников Долгосрочный выигрыш Жизнеспособность? Раздаем все деньги Плохие сотрудники Нельзя уволить Нет негатива Реальные компании?
14. Обучение Agile Не начинать карьеру сотрудника с изучения Agile Негативный прошлый опыт Создавать его
15. Заключение «Почему» важнее, чем «что» Ловите aha-моменты Ищите скрытые мотивы Не надейтесь на «куриные мозги», ищите «холодные яйца» Проявляйте смелость