Рубрика «Полезное чтиво». Выпуск 29
23 Апрель

Очередной понедельник, а значит очередной выпуск рубрики «Полезного чтива» ждет вас. Вот, что я прочитал за прошедшую неделю и вам рекомендую:
- The Role of the Product Owner in Moving a Backlog Item to Done (or, It’s Not Over Until the Fat Lady Sings) – Product Owner играет ключевую роль в Scrum, потому что он выбирает фичи и потом их принимает, замыкая круг
- Удобные отчёты Selenium – отличный отчет о докладе с Selenium Camp про отчетность в Selenium
- Migrating From JMS to AMQP: RabbitMQ, Spring, Apache Camel, and Apache Qpid – простой пример перехода с JMS на AMQP с помощью Spring и RabbitMQ
- How Do Most People Find New Dependencies… Google. – Sonatype готовит репозиторий зависимостей с полной информацией для поиска
- Twitter Storm – обзор отличного нового фреймворка для распределенных вычислений Storm на русском
- Technical Debt – How much is it Really Costing you? – как перевести технический долг в реальные деньги
- How Should REST Services be Documented? – все таки REST во всем лучше SOAP
- I Ain’t Afraid of No Downtime! Scaling Continuous Deployment – несколько деплоев в день практически без простоев – это реально, надо лишь хотеть и уметь это делать
- Архитектура Instagram – про архитектуру Instagram на русском
- Are Static Imports Becoming Increasingly Accepted in Java? – а я лично люблю статические импорты в Java, без крайностей конечно
- In a New Team, Observe First – в новой команде все сразу норовят критиковать текущие решения, вместо этого стоит побольше слушать
- Advanced Database Constraints: Don’t Look for a Second – проверку ограничений многие откладывают на фазу коммита, вот тут ролбек в тестах ничего и не тестирует
- What not to Bring to an IT Conference – очень правильные советы для участников конференции
- Sonar 3.0 in screenshots – вышел Sonar 3.0
- How Twitter Does MySQL – Get Their Fork/a> – ребята из Twitter даже MySQL под себя заточили
- ScrumMaster Tales – New People on the Team – новый человек не всегда хорошо вписывается в команду
- JMS Message Groups in Apache Camel – как можно использовать группы сообщений в JMS
- Lucene / Solr 3.6 released – что нового в Lucene 3.6
- Искусство публичных выступлений – советы на тему публичных технических выступлений
- SeleniumConf presentations – презентации с конференции SeleniumConf
И порция полезного видео для просмотра:
- Automating (almost) Everything Using Git, Gerrit, Hudson and Mylyn – как автоматизировать интеграцию изменений в распределенный продукт быстро и бесплатно
- How We (Mostly) Moved from Java to Scala – рассказ о том, как в Guardian перешли с Java на Scala
Читайте и набирайтесь новых знаний!
Отчет о 15-ой встрече «Клуба анонимных разработчиков»
23 Апрель
В прошлый четверг, 19 апреля, состоялась 15-ая встреча нашего «Клуба анонимных разработчиков». В этот раз уютный и полюбившийся многим офис компании DataArt принимал гостей из мира разработчиков бизнес-правил. Встреча была посвящена инструментам для разработки сложных бизнес-правил, в частности JBoss Drools.
У нас был один докладчик – Виктор Полищук, но этого оказалось предостаточно. Витя с удовольствием делился своими знаниями и опытом в использовании JBoss Drools, отвечал на многочисленные вопросы по поводу его применимости и отличиях от простой реализации бизнес-правил на языке программирования. Было очень интересно и разошлись как обычно уже после 23:00. Вот презентация этого выступления:
По просьбе участников Витя выложил проект, на примере которого он демонстрировал возможности инструмента, на github. Таким образом, участники смогут быстро попробовать его на практике и избежать проблем при начальном изучении инструмента. Также Витя поделился ссылкой на интересный проект Акинатор, который реализован на базе экспертной системы и никого не оставит равнодушным. Играйтесь на здоровье!
Дополнительную информацию вы можете найти в Twitter по хештегу #uadevclub. Можно почитать о ходе встречи, найти интересные цитаты, советы и факты о рассматриваемых технологиях. Присоединяйтесь и обсуждайте вместе с нами!
Мы снимали видео выступления и постараемся в ближайшее время выложить его в открытый доступ.
Следующая встреча запланирована на 17 мая и будет посвящена современной разработке с использованием JavaScript. Следите за анонсами и не пропустите начало регистрации!
Рубрика «Полезное чтиво». Выпуск 28
17 Апрель

Праздники закончились и вас ожидает новый выпуск рубрики «Полезного чтива». Вот что накопилось за прошедшую неделю:
- Запись выполнения тестов – как проще отловить проблемы при падающем тесте
- Вышла версия Selenium 2.21 – что нового в новой версии Selenium
- WebDriver Playback is coming to Selenium IDE – интеграция Selenium IDE с WebDriver может дать проекту новую жизнь
- Размышления о переходе с одного проекта на другой – интересные размышления от лица «IT-рабов»
- Постоянное соединение между браузером и сервером – варианты организации постоянного соединения между браузером и сервером
- Our Simple Jenkins Configuration and Deployment – как сконфигурировать и установить Jenkins из консоли
- Testing like the TSA – спорная и неоднозначная статья про тестирование и TDD
- Кластерные и «обычные» индексы MySQL (InnoDB) – О типах индексов в MySQL (InnoDB)
- DAILY SCRUM: NOT JUST FOR SCRUMMASTERS – один маленький совет на тему Scrum митинга перерос в глобальный его разбор
- Case Study: Poorly written Cucumber tests. – как нельзя писать тесты на Cucumber
- Что значат для вас юнит-тесты? – чем помогают модульные тесты? хотите большего? используйте TDD!
- The Instagram Architecture Facebook Bought For A Cool Billion Dollars – еще раз за что facebook заплатил миллиард долларов
- Клиентская часть интерактивного сайта – на чем писать клиентскую часть современных интерактивных веб приложений
- Архитектура интерактивных сайтов – введение в архитектуру современных интерактивных сайтов
И порция полезного видео для просмотра:
- Effective Use of FindBugs in Large Software Development Efforts – от каких проблем вас может спасти FindBugs и как использовать его эффективно
- Architecture Choices for Scalable Cloud Apps – рефакторинг монолитного приложения на более гибкую архитектуру с помощью Spring
- Video Presentation: Architecting in the Cloud with AWS – крутое выступление на тему облачной архитектуры с AWS
- Chloe and the Real Time Web – Chloe – очень прикольный веб-сервер на Erlang для непрерывной связи с браузером в интерактивных приложениях
- Software Quality – You Know It When You See It – выступление Erik Dörnenburg об анализе качества кода
- Reliability Engineering Matters, Except When It Doesn’t – интересная презентация о надежности инженерных систем, интересна всем кроме «разработчика-оптимиста»
Читайте и набирайтесь новых знаний!
Старт проекта. «Продажа» Управления Рисками?
11 Апрель
Продолжаю серию статей «Старт проекта». Первая статья здесь – Старт проекта. Как это делать?, а вторая здесь Старт проекта. Что такое Управление Конфигурациями?
В этой, третьей статье, приведу некоторые мысли о том, как при старте проекта снизить его рискованность, и при этом не напугать заказчика или менеджмент.
Управление рисками – это та дисциплина, которая должна обязательно применяться при старте проекта, т.к. общеизвестный факт, что решение проблем на ранних стадиях всегда дешевле, и собственно есть гораздо больше возможностей эти решения применить.
Из-за чего возникают проектные риски?
- Заказчик не может обеспечить ожидаемый уровень коммуникаций, взаимодействия
- Сложная предметная или технологическая область
- Нехватка персонала или его квалификации
- Несоответствие типов контрактов, методологий и условий проекта
- Заказчик, а зачастую и менеджмент слабо (или не) знакомы как работает управление проектами
Управление рисками зачастую предполагает некоторые инвестиции в реакции на риски, то ли в виде некоторых дополнительных работ, например – прототип, то ли в виде некоторого резерва времени или средств. Естественно, что у заказчика возникает вопрос – «зачем платить за лишнее», или –«я плачу за работу, а не за риски». После того, как упомянуто слово риск, заказчик может перестать воспринимать вас всерьез, а то и просто «съехать».
Вот здесь ключевая идея – объяснить, а точнее замаскировать реакции на риски с помощью понятного для заказчика языка. Даже может быть категорически противопоказано употреблять термины и жаргон из мира разработки ПО.
Скажу по себе, хотя и был много лет назад разработчиком, но когда сейчас мне нужно узнать на концептуальном уровне о каком-то техническом решении, и я слышу в ответ слова: ADO, MVC, Hibernate, XML и т.п. у меня отключаются чувства восприятия
. Т.е. объясняющий совершенно профессионально объясняет техническое решение, но в силу разрыва понимания технологии получается недопонимание. Такие же разрывы случаются между парами тестировщик – разработчик, разработчик – менеджер проекта и т.д. И это между людьми, работающими в одном бизнесе! А что же говорить о заказчике, который хочет, чтобы мы поняли его бизнес потребности, а мы тут к нему с рисками?
Давайте посмотрим на неудачный и приемлемый варианты общения с заказчиком на этапе инициирования проекта. Беру условие практического задания «Маскировка» из тренинга «Управление рисками: классика, agile, бизнес, заказчик».
Условие:
Новый проект, примерно на год на команду 10 человек. Срок сдачи фиксирован. Требования слабо определены. Сложная предметная область. Заказчик примерно понимает приоритеты функционала, находится в США. Нужно как можно раньше четко осознать что успеется за год, т.к. нужно делать анонс продукта, продвигать и т.п. Не хватает 4 разработчика в команде, срок найма 1-2 месяца. Архитектура неясна, ориентировочно 2 подхода с разными ожиданиями по производительности, расширяемости и срокам разработки. Заказчик хочет 1-2 раза в месяц демо и прогнозы успеваемости по срокам. Прямо сейчас заказчик выбирает между 3-я поставщиками, понятно хочется выиграть заказ. Заказчик не очень техничен и от слова «риск» может «съехать».
Неудачные фразы:
- «Мы будем работать по СКРАМу и наши разработчики вам на демо все будут рассказывать» – вы можете представить каким языком разработчики расскажут? Да и хочет ли не техничный заказчик так общаться?
- «Мы по ходу разработки будем брать задачи из бэклога и по берндауну будем понимать наше велосити, а если не будем что-то успевать, то низкоприоритетные функции делать не будем» – несмотря на развитие гибких подходов у заказчика может случиться «вынос мозга» от такого заявления. К тому же от хочет «как можно раньше четко осознать что успеется за год».
- «У нас есть риск недобора команды, поэтому мы нагоним потом либо овертаймами, либо сокращением бэклога» – во-первых, состав команды это не есть проблема заказчика, ему по существу все равно как вы будете делать проект. Во-вторых, от такого «подхода» сразу же веет непрофессионализмом.
- «У нас есть риск неправильного выбора технического решения, поэтому мы заложим 20% времени на рефакторинг или имплементацию другого решения» – в понимании заказчика вы не знаете как правильно спроектировать его продукт, да еще и будете переделывать за его же деньги. И что это за мифический резерв в 20% времени?
Приемлемые варианты:
- «Для того, чтобы лучше понять вашу предметную область мы пошлем в командировку наших ведущих специалистов, которые обсудят с вами те задачи вашего бизнеса, которые вы хотите решить с помощью этого продукта, а также в подробностях самые первоочередные из них»
- «Так как вам нужно как можно раньше знать что войдет в продукт, то мы рекомендуем, чтобы вы выделили ваше время и-или время ваших специалистов для обсуждения требований»
- «Так как важно выбрать оптимальное техническое решение, а также оценить наши возможности как компании-исполнителя, мы предлагаем по-фазный подход. На первой фазе мы сделаем прототип, в котором постараемся отразить на концептуальном уровне первоочередные функции вашего продукта. Помимо этого вы также сможете оценить наши возможности»
Как-то так, на самом деле ваши действия скорее всего не будут зависеть от варианта формулировки вашего подхода. Но применяя нечто похожее на «Приемлемые варианты» и вы добьетесь того, что хотели, т.е. сможете включить реакции на риски в план проекта, и заказчик будет чувствовать себя более уверенным.
Серия статей «Старт проекта» выходит в поддержку тренинга «Успешный старт проекта», в котором темы статей рассматриваются подробнее и с практическими заданиями.
Рубрика «Полезное чтиво». Выпуск 27
10 Апрель

В процессе выздоровления сбился рабочий ритм и я совсем забыл опубликовать очередной выпуск рубрики «Полезного чтива». Рад представить его вашему вниманию:
- Dealing with the “Too many dependencies” problem – как бороться с большим числом зависимостей в коде
- Advanced Database Constraints: There Can Be Only One – каким трудом часто дается проверка ограничений в БД, оно того стоит?
- Unit Testing is a Means to an End – unit-тесты нужны только разработчикам и никто за них не платит, а без TDD их польза уменьшается в разы
- ScrumMaster Tales–The Team Learn How to Learn – рефакторинг должен выполняться маленькими шагами – делите его на части, а Coding Dojo – отличный способ обучения
- Ускоряем процесс сборки с maven – в Maven 3 многие вещи пошустрей работают, особенно радует параллельная закачка зависимостей
- SYSTEM FAILURE IS INEVITABLE SO DESIGN FOR A FAST RECOVERY – в любой серьезной системе вы должны не стараться избежать падений, а быть к ним полностью готовым
- What Metrics to Use? – как можно испугаться большого объема полезной информации и вернуться к азам
- How To Enjoy A Testing Conference – как посещать конференции с максимальной для себя пользой
- The Value of a Business-Oriented Team – в идеале, в работу с требованиями должна быть вовлечена вся команда, но это случается совсем нечасто
- The End of Pagination – в современном мире давно пора отказываться от классического постраничного показа результатов
- Scala or Java? Exploring myths and facts – отличнейшая статья про Scala и Java с кучей полезных ссылок и фактов
- Удобные отчёты Selenium – отчет о докладе Димы Якубовского с конференции SeleniumCamp 2012
- Изменения в политике поддержки старых версий браузеров – старые браузеры не будут поддерживаться в новых версиях WebDriver
- A Generic and Concurrent Object Pool – подробная инструкция для тех, кто собрался писать с нуля пул объектов и не знает про commons-pool
- Measuring Code Complexity – как измеряется сложность кода
- Another Take on Java Scheduling – вот человек не нашел в Java библиотеку для расписаний и сделал свою
- Why (or Why Not) to Migrate to the Cloud – стоит ли мигрировать в облака?
- Using a Relational DBMS as a Multi Server Concurrency Control – синхронизация доступа через БД для тех, кто ленится поставить Zookeeper
И порция полезного видео для просмотра:
- Who Ever Said Programs Were Supposed to be Pretty? – интересная презентация о красоте и качестве кода с яркими примерами из жизни
- Вебинар: С чего начинается автоматизация? – запись вебинара по автоматизации тестирования
- Combining Scrum, Kanban, and Scalable Agile Webinar – запись неплохого вебинара о применении Scrum и Kanban в больших проектах с большими командами
- #SFSE Video: Stripping Down RemoteWebdriver – отличное видео о внутреннем устройстве Remote WebDriver
- Defining Done: Why is it so hard and how to make it easier -живое выступление про критерии готовности от менеджера Microsoft
- How Eventual is Eventual Consistency? – что скрывается за eventual consistency и как измерять, настраивать NoSQL решения для лучшей производительности
Читайте и набирайтесь новых знаний!
15-ая встреча «Клуба анонимных разработчиков» 19 апреля
5 Апрель
Прошлая встреча клуба, которая проходила 29 марта, получилась просто отличной – очень много полезнейшей информации, интересные доклады и классная атмосфера. Участники остались очень довольны. Следующую встречу мы решили назначить на 19 апреля.
Темой встречи мы выбрали BPM. Бизнес-процессы включает в себя ряд активностей, целенаправленно исполняемых соответствующими участниками для достижения общей цели бизнеса. Эти процессы имеют важное значение для любой организации, поскольку они могут (!!) приносить доход и часто составляют значительную часть затрат. Для программиста, практически все с чем он работает – является бизнес-моделью, а соответственно он является активным участником бизнес-процесса. Более того, код, который он пишет – это результат процесса, так как «он» решает или призван решить бизнес-проблему.
Инженерный ум всегда старается найти общее решение частных проблем с целью оптимизации или упрощения, сейчас или в будущем. Давайте рассмотрим, как можно работать меньше (снижать затраты), а производить больше (увеличивать доход). Добро пожаловать в мир BPM!
Главным докладчиком выступит Виктор Полищук, который расскажет о JBoss Drools и о практическом его применении. Drools является реализацией движка правил на основе Рете (Rete) алгоритма Чарльза Форджи. Адаптация Rete к объектно-ориентированному подходу обеспечивает более естественное выражение бизнес-правил и связи с бизнес-объектами. Drools написан на Java, но может работать на Java и .NET.
В докладе Виктор хотел бы рассмотреть Drools на примере одного Java проекта. Он разберет требования и получившиеся правила, оценит скорость работы и требования к памяти, простоту поддержки и сложность рефакторинга. Надеемся, никто не уйдет обиженным.
Мы приглашаем выступить и поделиться опытом других докладчиков. Вы сможете в неформальной обстановке рассказать о своих достижениях и провалах, обсудить их с участниками, выслушать вопросы, советы и критику. Это отличная возможность попробовать себя в роли докладчика.
Итак, встреча пройдет в четверг 19 апреля. Место проведения мы объявим ближе к дате мероприятия. Это связано с тем, кто число членов клуба постоянно растет и мы рискуем не влезть в уютный Киевский офис компании DataArt. Этот офис полюбился членам клуба своей уютной обстановкой и наличием всего необходимого для продуктивного общения. Но, по итогам прошлых встреч, есть риск, что все желающие не поместятся.
Официальное начало встречи по-прежнему в 19:00, завершение в 23:00. Стоимость участия 80 гривен при оплате заранее, 120 гривен при оплате на месте. Пива, пиццы и кофе с печеньками хватит на всех. Регистрация обязательна. Все детали по оплате будут высланы вам после успешного прохождения регистрации. Количество мест ограничено 60 участниками.
Ошибки проектирования – о подмене постановки задачи решением
4 Апрель
Мне в почту радикально скромный камрад, не захотевший комментить пост в блоге, прислал неожиданный вопрос о том, как практически выглядит управление риском потери фокуса на цели или подмены постановки задачи решением и зачем оно нужно, упомянутым в Ошибки проектирования.
Ну я как бы и не спорю, что описание дано весьма скудное и упоминание о Auftragstaktik и цели как единице планирования, плюс рекомендация постоянно задавать себе вопрос «зачем мы это делаем» – просто не может быть практикой и руководством к действию – только порогом, от которого разум в поиске оттолкнется. Признаю, каюсь и готов детально описать практики. Итак…
Нужно управлять этим риском хотя бы потому, что задавая вопросы «что вы хотите получить?», «что вам нужно сделать?» вы просто срезаете у своего бизнеса возможность заработать на бизнес-анализе и консалтинге. Потому что вы получаете весьма субъективное мнение владельца идеи или свое собственное. Потом приходит Его Величество Конечный Пользователь на реальном, а не воображаемом рынке и все ставит с ног на голову. Поэтому, гигиена идеи проекта должна заключаться в том, что вопрос «что делать?» должен быть уничтожен во взаимоотношениях заказчик исполнитель – как вне команды, так и внутри её.
Как это выглядит практически:
1. С заказчиком определите главные цели проекта. Выясните, чего он хочет добиться этим проектом и определите критерии достижения цели.
2. Определите (с заказчиком) в общих чертах путь достижения каждой из главных целей.
3. Проанализируйте путь достижения главной цели – из него появляются дочерние цели.
4. Определите (с заказчиком или уже без него) в общих чертах путь достижения каждой дочерней цели.
5. Проанализируйте …
Повторяйте самостоятельно выделение целей и анализ путей их достижения до тех пор, пока цель перестает отвечать на вопрос «чего мы хотим добиться» и начинает отвечать на вопрос «как добиться». Иными словами – вы приходите к финальным сценариям поведения/кейсам/стори – называйте как хотите. Главное, чтобы ваш сценарий позволил ответить на вопросы «кто?», «когда?», «где?», «как?», «для чего?», «что получает?». Если сценарий отвечает на эти вопросы, то он готов к переводу в предметную область разработки – на язык фреймоворка и тестового окружения.
Сразу возникает вопрос – как выделять дочерние цели? С главными-то все понятно – заказчик вам поможет, это его бизнес. Как быть с дочерними целями? Привлекать заказчика – перекладывать на него свою работу. Предлагаю обратиться к мудрости покойного ныне Элияху Голдратта, который много писал о вытягивающих принципах в системном и бизнес-анализе. В приложении к нашей задаче, вытягивающие принципы можно сформулировать так: ответьте себе на вопрос, что мешает вам добиться этой цели прямо сейчас, что мешает вот сейчас прямо взять – и отдать конечному пользователю? Такие подходы полезны не только в управлении требованиями и проектировании, но и в планировании, разработке, внедрении.
Итак, у вас в итоге образовалась некое дерево целей, которых вам нужно добиться. Причем, листьями этого дерева могут быть не только конечные сценарии, пригодные для проектирования и дальнейшей разработки, но и большие жирные знаки вопроса – исследования вариантов решения.
Какие вы получаете выгоды от такого подхода управления требованиями и дальнейшего проектирования:
1. Резкое сокращение объема работы для заказчика и увеличение объема творческой и высокооплачиваемой работы для себя.
2. Переходя от вопросов «чего надо сделать?» к «чего вы хотите добиться?» вы резко сокращаете влияние субъективного мнения о решении проблемы как вашего, так и заказчика – тот самый риск подмены постановки задачи решением.
3. Вы получаете приоритизированный список фич (сценариев). Если, вместо фич у вас жирные вопросы – тогда выделяете их в отдельный этап, приоритизируете их с помощью квадрата «риск-приоритет» и либо получаете конечные фичи, либо получаете дальнейшее разбиение на цели, которое рано или поздно приведет к фичам.
4. Вы не оставите места такой вредной штуке, как «спящие кейсы» – нет бизнес-целей, нет и фичи.
5. Язык бизнес-целей – это родной язык заказчика, до определенного уровня глубины ни формулировка целей, ни критерии их достижения (путь) не вызовут проблем во взаимопонимании. Верификация перестает быть болью.
6. Изменения требований становятся в большинстве случаев безболезненными. Как правило, меняются не цели – меняются пути их достижения. Если заказчик меняет цели – это уже другой проект. И вам это будет легче доказать на языке бизнес-целей и ассоциируя с его стилем бизнеса. Владение целями, кроме всего прочего, позволяет лучше понимать причину изменения требований и позволяет снизить психологический эффект «синдрома ребенка».
7. Если команда владеет целями, связанными с реальной бизнес-моделью и приоритетами этих целей – проще бороться с прокрастинацией и смещением фокуса с целей на заклепочничество в команде.
8. У вас есть черновик функциональной карты проекта, связанный с бизнес-целями как пруф вашего понимания бизнес-модели и способности решать бизнес-задачи. Хороший продажник вам так на этой теме денег накосит – мама не горюй
Такое и инвестору не стыдно показать, и архитектор потом спасибо скажет.
Такие вот практики продуктовой разработки по управлению риском подмены постановки задачи решением
Сразу отвечаю на не заданный вопрос: как это относится к продуктовой разработке, если применяются термины «лишаете свой бизнес возможности заработать», «отношения заказчик-исполнитель» и т.д. Хорошо относится. Потому что отношения заказчик – исполнитель вполне себе постоянно возникают внутри любой команды между её участниками и внутри любой компании между командами. Ну а ваша работа в любой компании – это разве не бизнес-модель получения материальной и моральной компенсации за возможности самостоятельно решать проблемы разной степени сложности в различных предметных областях? В это отношении заказная разработка и продуктовая разработка ничем не отличаются – я постоянно это говорю
Поэтому, вышеприведенные практики смело рекомендую как для продуктовых, так и для команд заказной разработки – проверено и там, там
Ошибки проектирования – об абстрактных моделях
3 Апрель
В первой части мы рассмотрели риски подмены цели решением, культа процессов и смещения фокуса ролей. Сразу отвечаю на вопрос: «а причем тут проектирование?». А при том, что проектирование в большинстве случаев охватывает весь процесс превращения чьей-то идеи в работающий код. Проектирование как процесс ответа на вопросы «зачем мы это делаем?», «для кого мы это делаем?», «как мы это делаем?» и «как мы проверяем, что мы сделали правильно?» сам по себе непрерывен, хоть и может быть неявным.
И одна из ключевых ошибок проектирования, настолько ключевых, что я решил сделать отдельный пост – потеря фокуса на взаимопонимании, причем не на осознании и восприятии самой ценности взаимопонимания, а на системности подходов поддержания взаимопонимания.
Одним из обязательных атрибутов системного процесса поддержания взаимопонимания является описание предметной области проекта, иногда называемое также аналитической моделью или абстрактной моделью.
Что такое описание предметной области? В умных книжках дается много определений, но мне больше нравится следующее:
предметная область проекта – это совокупность всех ролей, объектов и их состояний, возможных действий, возможностей и ограничений, связанных сценариями использования
Про методы описания предметных областей мы все много учили в ВУЗе или жизнь заставила, про методы превращения описания предметной области в код – тоже немало написано и известно, а в рамки статьи даже скупой обзор практик анализа и получения моделей предметной области не поместить. Поэтому, я хочу пока остановиться на использовании этих моделей в управлении рисками проектирования – тема, которая часто звучит или рефреном, или размазана по умным книгам в неявном виде. Почему я уделяю столько внимания именно абстрактному моделированию софта? А потому что в пароксизме увлечения легковесными методологиями все чуть забыли, что кроме генерирования качества есть такое понятие как воспроизводство качества. А вот тут без сбалансированной многоуровневой документации, которая не отвечает на вопрос «как сделано», а отвечает на вопрос «почему так сделано», «какие критерии» и «какие рамки и ограничения» – совсем никуда. А вот именно на эту документацию и не хватает времени в большом количестве «динамичных и быстрорастущих» проектов
Итак, какими основными рисками позволяет управлять описание предметной области:
0. Риск потери понимания бизнес-модели
Штука, которая страшна для любого проекта, независимо от его величины и сложности. Как только разработчик теряет понимание/ощущение/осязание первоисточника решения, т.е. бизнес-модели использования программного продукта и в проектировании оперирует не терминами предметной области проекта (бизнес-терминами, иными словами), а только классами, методами и интерфейсами – все, приехали. Начинается »клейка танчиков» и «заклепочничество» в чистом виде. Лучше иметь ответы на вопросы «зачем мы это делаем» в максимально простой, компактной и понятной форме. Кто-то может сказать, что он замечательно и без всяких моделей предметной области переводит user-story/use cases/scenarios в программный код. Отлично, а вы спросите его о том, как ответить на вопрос о том, как определить сложность тестирования или определить степень влияния фич друг на друга?
1. Риск потери ценности системы знаний
В любой системе знаний, кроме накопления, систематизации, транзитивности и пр. – есть ещё такая вещь, как обмен знаниями. Чем меньше объем и чем на более высоком абстрактном уровне находится вводная для проекта – тем проще вводить новичка, да и старикам навигацию это упрощает. Такая модель, представленная, как правило, в виде «кружочки + стрелочки + поясняющие надписи» – это очень полезная для команды вещь. Намного полезнее, чем диаграмма классов во всю стену, которая висит в большей степени «для понтов» и «меряний»
2. Риск определения момента, когда заказчика можно отпустить
Извечный вопрос: «когда отпускать заказчика?» в управлении требованиями и сценариями поведения. Сторонники гибких методологий скажут «никогда», но реалисты будут искать ответ на этот вопрос
Имхо, совокупность требований и сценариев поведения/приемки (в каждой методологии они называются по-своему, но их сути это не меняет) для мало-мальски сложного проекта не позволит ни заказчику убедиться в том, что понимание требуемого результата поселилось в голове у исполнителя, ни исполнителю не позволит страховать риски срыва ожиданий заказчика. Нужен промежуточный слой, который бы позволил уже наглядно представить результаты проекта, но ещё не оперировал терминами технических решений – просто заказчик не поймет. Даже технически грамотному заказчику проще общаться в терминах предметной области бизнеса, а не решения.
3. Риск потери управления техническим долгом
Очень часто бизнес требует сразу писать legacy код
Все часто сталкивались в своей практике со случаями, когда бизнесмен принимает решение quick win vs. long way в пользу быстрой поставки решения, которое с точки зрения разработчиков не более чем технический долг чуть более, чем полностью. Даже если этот технический долг измерим, осязаем и вполне себе в будущем начинает возвращаться, то без абстрактной модели будет очень трудно. В этом часто и состоит конфликт между бизнес-стороной проекта и его разработчиками: бизнесмен ожидает, что уж после не самого дешевого «продакшен-прототипа» с наработанным опытом и пониманием реализованной бизнес-модели возврат технического долга произойдет быстро. А получается, что уже через полгода требуется функциональный реверс-анализ проекта
4. Риск качества перевода с языка бизнеса на язык кода
Имеется ввиду перевод требований и сценариев в рабочий код. Модель предметной области в данном случае – отличная точка входа для управления рисками перевода идеи в реализацию. Хотите – используйте её как трамплин для погружения в DSL и DDD, хотите – просто как артефакт, задающий на высоком абстрактном уровне структуру, иерархию, потоки данных и действий, разделяющий зоны воздействия ролей для удешевления верификации, разработки, планирования и т.д.
5. Риск определения достаточности регрессии функциональных тестов
Вот кто от абстрактных моделей всегда в восторге – это тестировщики. Как ручные, так и автоматизаторы. Вопрос достаточности регрессии при внесении изменений всегда актуален. И определять его можно или путем глубокого анализа сценариев поведения/тестирования, или путем взаимодействия с разработчиком, или самостоятельно. Третий вариант при наличии модели самый экономный по времени и самый безопасный по влиянию решения на тесты. Если вы спросите тестировщика, что ему нужно для входа в проект – в большинстве случаев он ответит «сам проект и что-то вроде карты». Ну и не стоит забывать о мечте любого тестировщика (если вы его ещё не вовлекли в процесс анализа и проектирования) – обратная связь на функциональность проекта. Тут модель приложения в терминах бизнеса – самое то, чтобы начать предлагать изменения.
6. Риск смены решения
Разговоры про эволюцию кода и гибкие архитектуры – вещь классная. Но в бизнесе, как на войне – пушистый зверь может подкрасться незаметно. Например – сменятся аппаратные требования. В разгар кризиса и при развитии Atom платформы они менялись в сторону уменьшения
Вот и представьте, что вы отрезали от вашей связки «требования – сценарии – реализация» слой реализации. Что при этом произойдет? Правильно – кроме проектирования решения, опять реверс-анализ ввиду непрозрачности связей в сценариях.
7. Риск удорожания внесения изменений
С помощью абстрактной модели изменения в проекте легче продавать, анализировать, реализовывать, оценивать тестирования, вводить на задачу новых людей, страховаться от «замыливания» восприятия и многого другого. Очевидные, казалось бы вещи, но если бы все системно работали над снижением себестоимости реализации процесса – вряд ли было бы столько проектов, у которых деньги кончились или из-за невоспроизводимости качества или просто «вдруг», не так ли? Все-таки один из ключевых рисков разработки – потерю понимания потребностей заказчика никто не отменял.
8. Риск удорожания стратегического планирования
Выражается как в стоимости процесса манипулирования списками фич, так и цены ошибки при невозможности взглянуть «с птичьего полета» на проект. Также, абстрактная модель отлично работает как инструмент прямой и обратной связи между бизнес-аналитиком и командой.
Вот основные, на мой взгляд, достоинства абстрактных моделей с точки зрения управления рисками проектирования. Как видите, все они так или иначе связаны с системностью во взаимопонимании между различными участниками. И абстрактные модели – очень хороший этому помощник. Поверьте, не так много времени они требуют на свою актуализацию – ведь именно это останавливает, в основном
С другой стороны, затраты, понесенные на абстрактное моделирование – с лихвой окупаются удешевлением манипулирования проектом.
Самое трудное в абстрактном моделировании, как с любой документацией – его продажа процесса и артефакта заказчику и/или руководству компании. Рекомендую эту продажу делать от перечисленных выше рисков – очень помогает
Более детально о рисках проектирования и о управлении ими, мы поговорим с вами на мастер-классе «Практики эффективного, но экономного проектирования».
Продолжение следует.
Рубрика «Полезное чтиво». Выпуск 26
2 Апрель

Прошедшая неделя очень порадовала материалами для рубрики «Полезного чтива». Вот что насобиралось после прочтения:
- Bullets for legacy code – легаси код легаси кодом, а рефакторить надо
- Cassandra Indexing: The Good, the Bad and the Ugly – как работает индексация в Cassandra
- What is coming up for Sonar in 2012? – похоже единственное, что не сможет делать для нас Sonar в 2012 году – это писать код
- Tips to Developers Starting on Large Applications – отличные советы для разработчиков, начинающих работать в большом проекте
- Garbage Collection with Automatic Resource Management in Java 7 – AutoCloseable в Java 7 реально упрощает работу с ресурсами, причем можно и свои так же закрывать
- Тестируете на Selenium RC через HTTPS? Обновляйтесь до версии 2.19! – закончился HTTPS сертификат для WebDriver/Selenium
- Cache them if you can – обязательная для прочтения веб-разработчикам статья на тему кеширования
- Redundancy: An Open Enemy to Writing Good Code – дубликаты кода – зло, но не в случае найденного в интернете кода с его переосмыслением
- The frustrated architect – роль архитектора нужна и важна, даже в Agile проектах, но многие просто надеются, что обойдется
- What’s new in Intellij IDEA 11.1? – а вот и IDEA 11, но практически ничего мега вкусного
- Unitils IOModule – Unitils делает жизнь Java разработчика, пишущего тесты, еще легче
- Fiddler — помощник в отладке JavaScript – Fiddler — один из самых полезных инструментов для веб-разработчика
- When Disruptor is not a good fit – любой инструмент надо применять с умом, даже Disruptor!
- Why Legacy Code is the Way it is – откуда берется легаси код и что с ним делать
- All About Robust Thread Pools – внутренности Thread Pools
- Дорабатывать или переписывать – золотое правило опытного разработчика: работает – не трогай!
- Sonar 2.14 in screenshots – что нового в Sonar 2.14
- Как установить и настроить Robot Framework? – полезная инструкция по установке и настройке Robot Framework
И порция полезного видео для просмотра:
- Akka: Reloaded – что нового в Akka 2.0
- Does Pair Programming Have to Suck? – парное программирование рулит!
- Basic Application Development with Spring Roo and SQLFire – презентация SpringRoo и SQLFire
- Improve Your Java with Groovy – Groovy шикарно подходит для утилит, скриптов и особенно для тестов
- Zero Defects : Baking Quality into the Agile Process – тестирование и встраивание качества в Agile подходах
- Sufficient Design: Quality In Sync With Business Context – один из самых сложных вопросов в разработке – делать хорошо но медленно или грязно но быстро
- Spring 3.1 and MVC Testing Support – тестирование в Spring, и особенно Spring MVC, просто похоже на рай для разработчика
Читайте и набирайтесь новых знаний!
Старт проекта. Что такое Управление Конфигурациями?
30 Март
Продолжаю серию статей «Старт проекта». Первая статья здесь – Старт проекта. Как это делать?
А в этой статье поговорим о дисциплине управления конфигурациями как таковой и о ее важности.
Сразу начну с кейса из реальной жизни:
- Заказчик прислал проект на оценку в виде нескольких документов, пусть это будут спецификации: «Spec 1 v1_1» и «Spec 2 v1_2»
- Сделали оценку работ, причем в разделе «References» указали что оценки сделаны на основе этих спецификаций
- Заказчик согласился на оценку, подписали контракт, собрали команду, начали проект
- В середине проекта выяснилось, что обещанные сроки выдержать не получается
- Поначалу «подозрение» пало на некачественный оценку работ
- Но в конечном итоге выяснилось что: А) – заказчик в начале работ «подсунул» другие спецификации (названия те же, но версии и содержание отличаются); Б) – никто не сверился, отличаются ли изначальные и новые спецификации.
А теперь еще несколько типичных проблем:
- Устраненные дефекты появляются снова
- Отсутствуют зафиксированные версии спецификаций, продукта
- Заказчику отдали старую или неполную версию продукта или его частей
- Откуда-то появился новый функционал
- Не совпадают спецификации, продукт и тестовая документация
Отсюда возникает вопрос – как этого не допустить, и как это сделать осмысленно, и без чрезмерных усилий? Как ясно из названия, такие проблемы призвана решить дисциплина Управления Конфигурациями.
Немного истории. Дисциплина, как и многие другие здравые мысли пришла от военных. Кстати еще о военных, есть статья «История проектного инструментария, нач. ХХв.» – рекомендую. Так вот, как говорит Википедия, дисциплина формализовалась в 1950-х в американских воздушных силах для контроля над компонентами сложных систем. И сейчас применяется во многих отраслях, в том числе и космической. Если говорить о более близких к ИТ вещах, то она постепенно стала компонентом CMMI, ISO 9000, ISO 10007, ITIL, PRINCE2 и т.д.
Собственно определение – Управление конфигурацией (Configuration Management, CM) – это управление наборами рабочих продуктов, их версиями, статусами и взаимосвязями.
Ключевые задачи могут немного отличаться в разных источниках, но если выделить основное, то это:
- Определение элементов конфигурации
- Учет состояний и версий
- Отслеживание запросов на изменение
- Верификация конфигураций
Причем, о первых трех в списке нужно по возможности договориться на старте проекта, лучше до подписания контракта. Давайте рассмотрим первую задачу – «Определение элементов конфигурации». На протяжении проекта производится множество разных артефактов (Work Products) – спецификации, отчеты, код, результаты инспекции кода, документация пользователя, тест кейсы, скрипты, протоколы совещаний и т.д. Некоторые из них являются Элементами Конфигурации (Configuration Items), а некоторые нет. Если по простому, то Элементы Конфигурации – это наиболее важные артефакты, это могут быть: результаты поставки заказчику; артефакты, от которых зависят другие артефакты и т.п. Например, спецификация – однозначно Элемент Конфигурации, т.к. на ее основании разрабатывается продукт, тестовая документация, делается приемка продукта и т.п. А вот отчет – вряд ли.
Соответственно к Элементам Конфигурации должен применяться структурированный контроль – со второй по четвертую ключевые задачи в списке.
В силу ограниченности объема статей и емкости материала об Управлении Конфигурациями предлагаю читателям уже самим выбрать наиболее близкий источник для ознакомления, смотрите указанный выше список стандартов.
В следующей статье рассмотрим «заезженную», но плохо применяемую на практике дисциплину Управление Рисками, а точнее некоторые моменты «продажи» Управления Рисками заказчику, что безусловно повышает успешность проекта с самого начала.
Серия статей «Старт проекта» выходит в поддержку тренинга «Успешный старт проекта», в котором темы статей рассматриваются подробнее и с практическими заданиями.







