Почему «Кеневин»
Cynefin с английского языка переводится как «среда обитания» или «место». Термин используется для объяснения эволюционной природы любых сложных систем. На основе модели «Кеневин» создаются тактики поведения в определенной, чаще всего проблемной среде, будь то производство, работа проектной команды, деятельность отдела взаимодействия с поставщиками или даже компании в целом.
Возьмем работу гипотетической организации, производящей стулья из титанового сплава. На разных этапах своего существования (например, в условиях монополии, олигополии, высококонкурентной среды) организация будет находиться в разных состояниях: от сложной упорядоченности до хаоса.
Общую логику перетекания из одного состояния в другое определить сложно – для разных систем свои закономерности
Важно то, что методы управления работают только тогда, когда система находится в подходящем для них состоянии.
Не нужно писать тесты, если
- Вы делаете простой сайт-визитку из 5 статических html-страниц и с одной формой отправки письма. На этом заказчик, скорее всего, успокоится, ничего большего ему не нужно. Здесь нет никакой особенной логики, быстрее просто все проверить «руками»
- Вы занимаетесь рекламным сайтом/простыми флеш-играми или баннерами – сложная верстка/анимация или большой объем статики. Никакой логики нет, только представление
- Вы делаете проект для выставки. Срок – от двух недель до месяца, ваша система – комбинация железа и софта, в начале проекта не до конца известно, что именно должно получиться в конце. Софт будет работать 1-2 дня на выставке
- Вы всегда пишете код без ошибок, обладаете идеальной памятью и даром предвидения. Ваш код настолько крут, что изменяет себя сам, вслед за требованиями клиента. Иногда код объясняет клиенту, что его требования —
говне нужно реализовывать
Почему есть проекты второго типа?
ScrumTrekДарт Автотестиусне только не помогает, но вредит проектуследующих основных правил
- Быть достоверными
- Не зависеть от окружения, на котором они выполняются
- Легко поддерживаться
- Легко читаться и быть простыми для понимания (даже новый разработчик должен понять что именно тестируется)
- Соблюдать единую конвенцию именования
- Запускаться регулярно в автоматическом режиме
Что тестировать, а что – нет?
- Простой код без зависимостей. Скорее всего здесь и так все ясно. Его можно не тестировать.
- Сложный код с большим количеством зависимостей. Хм, если у вас есть такой код, тут пахнет God Object’ом и сильной связностью. Скорее всего, неплохо будет провести рефакторинг. Мы не станем покрывать этот код юнит-тестами, потому что перепишем его, а значит, у нас изменятся сигнатуры методов и появятся новые классы. Так зачем писать тесты, которые придется выбросить? Хочу оговориться, что для проведения такого рода рефакторинга нам все же нужно тестирование, но лучше воспользоваться более высокоуровневыми приемочными тестами. Мы рассмотрим этот случай отдельно.
- Cложный код без зависимостей. Это некие алгоритмы или бизнес-логика. Отлично, это важные части системы, тестируем их.
- Не очень сложный код с зависимостями. Этот код связывает между собой разные компоненты. Тесты важны, чтобы уточнить, как именно должно происходить взаимодействие. Причина потери Mars Climate Orbiter 23 сентября 1999 года заключалась в программно-человеческой ошибке: одно подразделение проекта считало «в дюймах», а другое – «в метрах», и прояснили это уже после потери аппарата. Результат мог быть другим, если бы команды протестировали «швы» приложения.
Построение «фреймворка» по «Кеневину»
- упорядоченные – простые и сложные;
- неупорядоченные, или комплексные;
- хаотичные.
В центре схемы – зона неопределенности, которую нужно как можно быстрее покинуть.
Упорядоченные простые системы
Они понятны, для их решения у команды есть опыт. Уже на старте понятно, что получится в результате, за какие деньги и в какие сроки.Формула принятия решений: Определяем – Классифицируем – Реагируем.Пример: производство стульев – задача ясна и понятна.Метод:
Каскадная методология управления проектами и другие наилучшие практики.
Упорядоченные сложные системы
В этом случае заранее не понятно, как решать проблему. Задача не уникальна, однако опыта работы в этом направлении у команды нет. Формула принятия решения: Определяем – Анализируем – Реагируем.Пример: производство стульев в условиях невесомости – технология изготовления понятна, но влияние факторов среды не очевидно.Методы: подходы
PMI ,
Prince2 и
PMBoK .
Неупорядоченные сложные системы
Если проецировать систему на задачу, то речь идет о непонятной задаче, но при этом команда с подобной проблемой уже сталкивалась и имеет опыт ее решения. Формула принятия решения: Измеряем – Определяем – Реагируем. Пример: эксперимент, моделирующий на Земле ремонт космической станции в состоянии невесомости. Метод:
Agile , в частности
Scrum .
Хаотичные системы
Здесь хорошо работает экспериментальный подход. Хаотичные – абсолютно новые задачи, которые никто и никогда не решал раньше. Попытка разобраться с такой системой – путь к инновациям. Любой способ решения (стабилизации системы) будет новым. Порой нужно действовать вразрез с традиционными методами менеджмента. Формула принятия решения: Действуем – Определяем – Реагируем.Пример: любой стартап.Метод: новый.
Неопределенность
Это то состояние, в котором компании находятся большую часть жизненного цикла. Цели модели «Кеневин»:
- помочь выйти из этой зоны;
- определить, в какой области вы находитесь;
- выбрать верную тактику.
Любой долгосрочный проект без надлежащего покрытия тестами обречен рано или поздно быть переписанным с нуля
- Без покрытия тестами. Обычно такие системы сопровождаются спагетти-кодом и уволившимися ведущими разработчиками. Никто в компании не знает, как именно все это работает. Да и что оно в конечном итоге должно делать, сотрудники представляют весьма отдаленно.
- С тестами, которые никто не запускает и не поддерживает. Тесты в системе есть, но что они тестируют, и какой от них ожидается результат, неизвестно. Ситуация уже лучше. Присутствует какая-никакая архитектура, есть понимание, что такое слабая связанность. Можно отыскать некоторые документы. Скорее всего, в компании еще работает главный разработчик системы, который держит в голове особенности и хитросплетения кода.
- С серьезным покрытием. Все тесты проходят. Если тесты в проекте действительно запускаются, то их много. Гораздо больше, чем в системах из предыдущей группы. И теперь каждый из них – атомарный: один тест проверяет только одну вещь. Тест является спецификацией метода класса, контрактом: какие входные параметры ожидает этот метод, и что остальные компоненты системы ждут от него на выходе. Таких систем гораздо меньше. В них присутствует актуальная спецификация. Текста немного: обычно пара страниц, с описанием основных фич, схем серверов и getting started guide’ом. В этом случае проект не зависит от людей. Разработчики могут приходить и уходить. Система надежно протестирована и сама рассказывает о себе путем тестов.
На стыке систем
Граница между простой и хаотичной системами характеризуется максимальными рисками. Находясь в зоне стабильности, вы начинаете верить в то, что накопленные опыт и знания – залог успеха в любой системе, что неверно. В итоге система погружается в кризис. Вывод: по максимуму оставайтесь в комплексной или сложной областях, переводите в простую область только небольшое число рабочих процессов и задач.
Сегодня невозможно опираться только на интеллектуальные способности лидера. Необходимо объединять творческие и аналитические возможности сотрудников, проводить глубинный анализ состояния компании, оценивать знания и опыт членов команды. Только в этом случае можно выбрать верную стратегию и метод управления. Все эти задачи решает модель «Кеневин».
Новости компьютерного портала www.EasyCOM.com.ua.
|