CRC Cards
Материал из AgileWiki
Содержание |
Определение
Статьи
Гради Буч. ООАиП
CRC обозначает Class-Responsibilities-Collaborators (Класс/Ответственности/Участники). Это простой и замечательно эффективный способ анализа сценариев. Карты CRC впервые предложили Бек и Каннингхэм для обучения объектно-ориентированному программированию, но такие карточки оказались отличным инструментом для мозговых атак и общения разработчиков между собой.
Собственно, это обычные библиографические карточки 3х5 дюйма (если позволяет бюджет вашего проекта, купите 5х7; очень хорошо, если карточки будут линованными, а разноцветные - просто мечта). На карточках вы пишите (обязательно карандашом) сверху - название класса, снизу в левой половине - за что он отвечает, а в правой половине - с кем он сотрудничает. Проходя по сценарию, заводите по карточке на каждый обнаруженный класс и дописывайте в нее новые пункты. При этом каждый раз обдумывайте, что из этого получается, и "выделяйте излишек ответственности" в новый класс или, что случается чаще всего, перенесите ответственности с одного большого класса на несколько более детальных классов, или, возможно, передайте часть обязанностей другому классу.
Карточки можно раскладывать так, чтобы представить формы сотрудничества объектов. С точки зрения динамики сценария, их расположение может показать поток сообщений между объектами, с точки зрения статики они представляют иерархии классов.
exprogramming.ru
CRC Сессия
Используйте Class, Responsibilities, Collaboration (CRC - Класс, Обязанности, Взаимодействие) карточки для дизайна системы командой. Использование карточек позволяет легче приучиться мыслить обьектами а не функциями и процедурами. Также карточки позволяют большему количеству людей участвовать в процессе дизайна (в идеале - всей команде), а чем больше людей делает дизайн, тем больше интересных идей будет привнесено.
Каждая CRC карточка представляет собой экземпляр обьекта. Класс обьекта может быть написан сверху, обязанности слева, взаимодействия справа. Мы говорим "могут быть написаны", поскольку когда CRC сессия в разгаре, участникам обычно нужно небольшое число карточек с именами классов и не обязательно они должны быть полностью заполнены.
CRC сессия происходит так: каждый из участников воспроизводит систему говоря какие сообщения он шлет каким обьектам. Проходит по всему процессу сообщение за сообщением. Слабые места и проблемы сразу выявляются. Альтернативы дизайна также хорошо видны при симуляции процесса.
Для наведения порядка часто используется ограничение числа одновременно взаимодействующих двумя.
Наш опыт.
CRC Сессии позволяют делать то что нужно, а не то что хочется сделать будучи Супер Архитектором в душе. Очень важно четко следовать правилам, поменьше базарить и не бросать сессию в середине говоря "ну, дальше там все ясно". Там-то как раз все проблемы и сидят.
Наши разрабочики пока склонны не делать CRC сессии, мотивируя это тривиальностью задачи. С другой стороны, очень часто в конце итерации они ошибаются в оценках мотивируя это нетривиальностью задачи. Так что следует помнить, что не все так просто как кажется на первый взгляд.
c2.com
Статья 3
В каждом из этих подходов CRC-карточки являются эффективным катализатором "мозгового штурма" и помогают теснее сплотить коллектив, подталкивая его членов к общению [Это ужасно банально, но некоторые проектировщики программ и в самом деле не очень общительны].
Некоторые классы и объекты будут определены в начале жизненного цикла проекта неправильно, но это не всегда плохо. Многие осязаемые вещи и роли, которые мы перечислим в жизненном цикле, пройдут через весь путь вплоть до реализации - настолько они фундаментальны для нашей концептуальной модели. Разбираясь в задаче, мы, вероятно, будем изменять границы некоторых абстракций, перераспределяя ответственности, объединяя подобные или (чаще всего), разбивая большие абстракции на группы взаимодействующих, формируя таким образом некоторые механизмы решения. ... Неформально мы можем использовать для раскадровки CRC-карточки. Для большей формальности команде разработчиков следует составить диаграммы объектов и взаимодействий. На стадии анализа раскадровка обычно выполняется командой, включающей, как минимум, аналитика, эксперта в предметной области, архитектора и контролера качества. На стадии проектирования и позже, при реализации, раскадровка выполняется архитектором и старшими разработчиками для доводки стратегических решений, и отдельными разработчиками - для доводки тактических решений. Привлечение дополнительных членов команды к участию в раскадровке - в высшей степени эффективный путь обучения начинающих разработчиков и передачи им сложившегося видения архитектуры.
Conceptual Overview
CRC cards were introduced at OOPSLA in 1989 by Kent Beck and Ward Cunningham as an approach for teaching object-oriented development. The CRC card technique was invented by Ward Cunningham at Tektronix.
Ward Cunningham wanted to help programmers move to the new paradigm-- Object-Oriented Design. So he created CRC cards. His intention for inventing the CRC card technique was to come up with the essential units of abstraction for the object-oriented approach.
What he came up were three essential dimensions of an object-oriented model--classes, responsibilities, and collaborators.
CRC cards have become more popular in recent years. Since object- oriented technology has grown, so has the need for a simple method or way to help professionals make the transition from procedural programming to object-oriented programming. Also CRC cards can support the whole entire project life cycle.
One question that is asked. Why CRC cards? The fact is that the cards and the exercise are informal which provides a good working and learning environment.The CDC card session gets the right people to participate in uncovering needs of the system. Also the physical nature of the cards emphasizes the division of responsibility across objects. The physical size of the cards provides markers or guidelines for the complexity of the classes. For example, if a developer needs more than one card, then maybe the class should be re-examined.
A CRC card is a 3"X5" or 4"X6" lined index card. The 4"X6" card allows the user to write larger and handle more information and detailed responsibilities.
The class name is written on top of the card. The next two lines are reserved for the listing of superclasses and subclasses. The body of the card is divided in half. The left column or half lists the responsibilities of the class and the right column or half lists the collaborators for each responsibility. See figure 1.1.
Objectives After completing this tutorial, you will be able to:
- describe the process of creating CRC cards
- have a better understanding of object-oriented development
- use Rational's CRC demo for creating CRC cards and hierarchy charts
Before starting this tutorial, you should:
- know something about Object-Oriented design and modeling
- have a PC with Windows 3.1 or later that can run the Rational CRC demo -- FreeWare
- be open-minded in learning a cool trick of the trade
Ссылки
- http://en.wikipedia.org/wiki/Class-Responsibility-Collaboration_card
- http://vmk.ugatu.ac.ru/book/buch/ch04.htm - Гради Буч Объектно-ориентированный анализ и проектирование с примерами приложений на С++
- http://c2.com/cgi/wiki?CrcCard
- http://c2.com/doc/crc/draw.html
- http://c2.com/cgi/wiki?CrcDescribesScenarios
- http://alistair.cockburn.us/index.php/Using_CRC_cards
- http://c2.com/doc/oopsla89/paper.html
