1. Мне подумалось: Не миф ли CMM Level.
Ведь кадры-то решают всё.Потому что, как говорит один мой товарищ, если дать обезьяне автомат Калашникова, самое умное, что она сможет с ним делать — это колоть им орехи.
Каким бы хорошим не был процесс, работники должны понимать его цели и принципы, и подгонять процесс под нужды проекта.
А если даже не дать таким людям формальный процесс, то они всё равно составят документацию, которую требует проект.
С другой стороны, у Сергея был такой опыт: людям неудобно было вводить требования в систему [много-денег-RT], они попросили чего-то другого. Им разрешили вводить их в виде Word-овских документов, и тут-то всё и встало: они не знали, в какой форме, по какому шаблону вводить требования.
Вывод из этой истории сделали такой, что даже самым грамотным работникам нужно давать процедуру. И грамотные аналитики (те, которые ставят требования), не растут на деревьях, их нужно учить.
А начинать обучение хорошо именно с процедуры.
В технологии SSADM — той, которую я знаю лучше всего, — для каждой методики есть список документов, которые она создаёт, и для каждого документа подробно описаны:
- а) формат и содержание;
- б) критерии и методы проверки качества, как-то:
- чеклисты с проверочными вопросами;
- методы формальной проверки полноты и непротиворечивости. Например, специальная матрица проверяет, для каждого ли объекта БД есть задача, которая делает ему C,R,U,D.
2. "Domain-driven design" by Eric Evans
Я немного покритиковал Эванса, как оказалдось - потому что недочитал до второй половины.Показалось, что много воды, что одна и та же мысль повторяется на разные лады. Не, мысль очень правильная:
- выделяйте модель предметной области (domain model);
- ведите общий словарь в терминах домена;
- говорите на языке этого словаря друг с другом и заказчиками, пишите код на нём; (два замечания: для заказчика эти слова всё равно будут значить не то, что для вас. Для него пациент - это человек, у которого взяли анализ, плюс личная карточка. А для нас - запись в БД и кусок памяти, определённым образом заполненный байтами).
- создавайте business layer в виде модели домена, и изолируйте его от прочих слоёв.
Но мне объяснили, что дальше идёт несколько очень интересных глав.
Сергей получил от этой книги индульгенцию на классы с именем "*Service". До тех пор он подозревал, что это слово не означает ничего, примерно как "Common", "General", "Object", "Data" или вот более дискуссоинный пример - "Manager". ("Manager" - это м.б. паттерн "utility class"). Ну а теперь мы знаем, что "сервис" бывает не только внутрисистемный, тот, что в словосочетании "Service layer", но и как понятие слоя бизнес-логики ("utility class").
Диме Бочоришвили книга ответила на некие ещё несформулированные вопросы и этим очень понравилась.
Далее о модели предметной области и паттернах, характерных только для модели домена, но не для реализации.
Эванс выделяет такие полезые паттерны для моделей анализа:
- Entity (объект, имеющий identity)
- Value object;
- Composite. Это не GoF-овский Aggregate, он "жёстче". На его элементы нельзя ссылаться извне, их нельзя "вынимать" и без корневого объекта они не бывают. Связь с чёрным даймондом у него внутри навигабельна в обе стороны;
- 1-directional association;
- и что-то ещё;
Меня эта идея натолкнула на мысль, что бывают паттерны модели предметной области ("модели-задачи"), а бывают паттерны модели-решения. Например, такой вот "strong composite" (термин мой) - это паттерн анализа, а Observer - паттерн реализации.
Эту мысль надо развить.
Пообещал себе прочесть фаулеровские "Analysis patterns".
Об отличиях постановки задачи от модели-"постановки задачи" от модели-решения и от собственно решения.
Как вы сами понимаете, даже если мы говорим с заказчиком на одном языке, слово "пациент" значит для нас разные вещи.
Так вот, задача заказчика не эквивалентна модели этой задачи.
Модель-постановка задачи не эквивалентна модели решения; а та не эквивалентна самому решению — программе на языке, скажем, Java.
Потому что:
1) Ассоциация между классами на диаграмме UML, даже именованная, несет не такую семантическую нагрузку, как связь между накладной и товаром, или ссылка между классами в коде на Java. По ней не видно:
- навигабельна ли она в обе стороны или в одну;
- реализована ли она как ссылочное поле или как реестр;
- какие классы могут делать по ней навигацию - только владелец, все, или какоей-то подмножество;
- и ещё много чего по ней не видно, как из области задачи (бизнес-процесса), так и из решения (java-кода).
3) Ну и в SSADM выделяются "модель существующей системы" и "модель проектируемой системы". В терминах этой статьи, они равны понятиям "модель задачи" и "модель решения" соотв.
4) И чтобы модель точно соответствовала предметной области, вместо конструкторов и оператора new для пациента пришлось бы заводить объект-папу и объект-маму. Что есть нонсенс.
Из приколов:
(речь об отображении требований на языки со статической и динамической типизацией): "Сегодня я пассажир, а завтра пациент".
Tags:
(no subject)
23/9/06 11:01 (UTC)В ситуации, когда большая часть разработчиков "заменяет индусов в написании веб-магазинов", никакой CMM не нужен.
А в сложных проектах все равно присутствует значительная часть "заменителей индусов", которых Source Control сложно научить правильно пользоваться, не говоря о чем-то высоком.
З.Ы. Это мое личное видение положения дел в харьковской провинции
(no subject)
23/9/06 15:16 (UTC)вопрос, скорее, не в тупости разработчиков. может мне везло, но людей, которые не могут научиться пользоваться source control я не встречал :)
(no subject)
23/9/06 15:23 (UTC)В моем случае от нас требовали ведения и актуализации тех документов, которые никакого отношения к процессу конкретного данного проекта не имели.
(no subject)
23/9/06 19:49 (UTC)Да, о какого размера (в людях) конторах или конторе идет речь?
(no subject)
19/10/06 06:33 (UTC)50-100, в бОльших работать не довелось
(no subject)
23/9/06 19:47 (UTC)Technical advisor - это кто? Возможно мои проблемы связаны с незнанием что такие бывают?
Настройки от QA у меня хватало только на то, чтобы разработчики начали более тщательно подходить к разработке кода и не чекинили откровенной хуйни. В результате приходилось делать code review и бить людей по голове, что к существенным улучшениям впрочем не приводило.
(no subject)
19/10/06 06:43 (UTC)роль technical advisor - настройка процесса с точки зрения программирования, учит "писать красиво", делает код ревью, помогает команде справиться с технически сложными задачами (имеем в виду что опыта у команды недостаточно)
(no subject)
19/10/06 17:27 (UTC)У меня к сожалению масштабы не те, и везде "QA" это были "просто тестировщики".