CRC 카드를 사용하여 어떻게 정교한 디자인을 할 수 있나요?

StackOverflow https://stackoverflow.com/questions/98878

  •  01-07-2019
  •  | 
  •  

문제

저는 사람들이 CRC(Class Responsiblity Collaboration) 카드를 어떻게 사용하는지 항상 궁금했습니다.나는 책에서 그것에 대해 읽었고 인터넷에서 모호한 정보를 찾았지만 실제로 이해하지는 못했습니다.나는 누군가가 CRC 카드를 사용하는 세션을 보여주는 YouTube 비디오를 만들어야 한다고 생각합니다. 내 책 중 하나에서 CRC 카드를 텍스트로 공식화하기가 매우 어렵고 "이미 마스터한 사람이 가르쳐야 한다"고 설명했기 때문입니다.안타깝게도 저는 주변에 CRC 카드를 사용하는 사람을 아는 사람이 없어서 더 배우고 싶습니다.

업데이트

사람들이 이 기술을 자세히 설명하는 동영상 링크를 알려주시면 감사하겠습니다.

도움이 되었습니까?

해결책

나는 대답을하려고 노력할 것입니다.따라서 CRC 카드는 일반적으로 개발해야 하는 시스템을 더 잘 이해하기 위해 객체 지향 환경에서 모델링하는 데 사용됩니다(그러나 이미 알고 계실 것입니다).CRC 카드는 실제 구현 직전에 도착할 때 맨 마지막에 옵니다.해당 수준에 도달하기 위한 다양한 단계는 다음과 같습니다.

  1. 출발점은 요구사항 도출을 수행하는 것입니다.여기서는 고객을 조기에 지속적으로 참여시키는 것이 좋습니다(Agile 접근 방식을 살펴보세요.익스트림 프로그래밍)
  2. 그런 다음 UML(사용 사례 다이어그램) 또는 사용자 스토리(민첩한 익스트림 프로그래밍 접근 방식)를 사용하여 요구 사항을 모델링할 수 있습니다.여기서 중요한 문제는 올바른 관련 개체를 찾는 것입니다.물론 이는 귀하가 속한 도메인에 따라 크게 달라집니다."어려운" 방법을 사용하면 "명사 추출"과 같은 기술을 적용할 수 있습니다.따라서 사양 문서를 구문 분석하고 모든 명사(합성 이름 및 형용사가 있는 명사 포함)를 추출합니다.그것들을 모두 분석하고 관련 없는 것을 폐기하십시오.
  3. 올바른 명사 -> 객체가 있으면 CRC 카드 생성을 시작할 수 있습니다.그렇다면 CRC 세션에서는 어떤 작업이 수행되나요?주요 임무는 (이전에) 발견한 객체의 책임을 찾아 할당하고 작은 색인 카드(CRC 카드)에 기록하는 것입니다."책임"은 주로 특정 개체의 핵심 기능이고 "협업" 부분은 특정 기능을 수행하는 데 필요한 다른 개체입니다(이것은 모델의 다양한 개체 간의 종속성입니다).책임 할당에서 중요한 점은 책임이 일종의 균형 잡힌 방식으로 전체 시스템에 잘 분배된다는 것입니다.또 다른 매우 중요한 점은 객체 간의 책임 중복을 피하는 것입니다(CRC 카드가 도움이 되는 부분입니다).
    CRC 세션은 브레인스토밍 회의로 시작하여 개발자들 간의 활발한 토론을 거쳐 실제 인덱스 카드에서 직접 수행되어야 합니다.

제가 어떻게든 당신을 도울 수 있었으면 좋겠습니다.

문안 인사,
주리

다른 팁

SO 답변으로 요약하기는 어렵지만 시도해 보겠습니다.사물을 디자인할 때 어려운 점 중 하나는 전체적인 관점의 사고와 개별 사물의 관점에서의 사고의 균형을 맞추는 것입니다.계산을 완료하려면 전체적인 관점이 필요하지만, 논리와 데이터를 효과적으로 세분화하려면 개별 개체 관점이 필요합니다.

이 균형을 유지하는 것이 CRC 카드가 필요한 곳입니다.그들이 테이블에 앉아 있으면 계산 전체를 볼 수 있습니다.하지만 카드 한 장을 집으면 신체적으로, 운동 감각적으로 그 하나의 관점을 취하도록 권장됩니다. 제한된 자원과 관련된 이 계산의 작은 부분이 있는데 어떻게 달성할 수 있을까요?

시간이 지나면서 두 가지 관점을 동시에 유지하는 능력이 뇌에 스며드는 것 같습니다.카드에 기록되는 내용이 점점 줄어들고 있습니다.그러면 카드가 비어 있습니다.잠시 후 사람들은 카드 더미에서 빈 카드를 꺼내려고 하면 카드가 어디에 있는지 가리킵니다.결국 사람들은 카드가 전혀 필요 없는 사고 방식의 이점을 누리게 됩니다.하지만 균형을 익히지 못한 사람과 대화할 때 실제 카드를 꺼내는 것은 유용한 의사소통 보조 수단이 될 수 있습니다.

제가 카드에서 발견한 가장 큰 약점은 피드백이 부족하다는 것입니다.코드가 어떻게 나올지 스스로 속일 수 있습니다.흥미로운 질문이 나올 때까지만 카드를 사용하고 확인을 위해 테스트/코드를 살펴본 다음 디자인을 재개하는 것이 좋습니다.

Ward와 저는 15년 전쯤에 디자인 세션에 대한 비디오를 만들었지만 온라인 어디에서도 찾을 수 없고 복사본도 없습니다.어쨌든 그것이 교육 도구로서 유용할지는 잘 모르겠습니다.다른 비디오에 대해서는 모르지만 특히 여러 디자이너의 스타일을 비교해야 한다면 흥미로울 수 있습니다.

이동 출처 - 켄트 벡(Kent Beck), 워드 커닝햄(Ward Cunningham), 들어본 적 있나요?

내 생각엔 당신의 진술이 "이 주변에는 CRC 카드를 사용하는 사람이 아무도 없습니다." 개발 중인 CRC 카드의 상태를 거의 요약합니다.제 생각에는 CRC 카드는 전통적인 계획 중심 개발에서 민첩한 개발로 나아가는 단계였습니다.세상은 발전했습니다.CRC 카드를 사용하는 방법에 초점을 맞추는 대신 다음과 같은 기술을 조사하겠습니다. TDD, UML 및 CRC 카드와 같은 기술을 중간 아티팩트로 사용할 수 있지만 코드, 특히 테스트에 집중합니다.이것이 CRC 카드 발명가들이 취한 방향이며 나는 여러분도 그렇게 하도록 권하고 싶습니다.

제 생각에는 혼란에 빠지지 않고 사용하는 가장 쉬운 방법은 다음과 같이 파일 헤더에 작은 CRC 카드를 적어 두는 것입니다.

///////////////////////
//* CRC CARD
//*  Class: UISliderEvent
//*  Responsability: Event that holds the value and id of a Slider's movement
//*  Collaborators: UISlider, UIEvent
//////////////////////

그런 다음 기능을 추가해야 할 때마다 카드를 확인하고 카드에 명시된 계약을 위반하지 않았는지 확인하십시오.예를 들어 갑자기 UIMouseEvent에 의존하는 경우에는 카드 어디에도 없으므로 포함할 수 없습니다.

그들의 책에는 객체 디자인:역할, 책임 및 협업 2003년에 출판됨 레베카 워프스-브록 & Alan McKean이 CRC 카드에 대해 좀 더 자세히 논의합니다.그들은 이것이 매우 촉각적인 경험이어야 하고 디자인/요구 사항을 구체화하려고 할 때 물리적인 물체를 전달하려는 사람들의 생각을 느슨하게 한다는 것이 전체 절차에 미치는 차이를 정말로 강조합니다.

해당 장의 부제목은 카드 사용이 '탐색적 설계' 단계의 일부이므로 아마도 많은 코딩을 수행하기 전에 이루어질 것이라고 암시하지만, 각 반복에서 카드를 계속 사용하지 않을 이유는 없습니다. Agile 프로젝트를 진행하고 어디로 갈 것이라고 생각했는지 스스로 상기시키고 필요하다면 (물론 그룹으로) 검토합니다.

나는 그들이 공을 가진 사람만이 말할 수 있도록 방 주위에 공을 전달할 것을 제안했다는 것을 기억하는 것 같습니다. 따라서 아마도 CRC 카드라기보다는 방에 있는 모든 사람이 역할과 책임에 대해 이야기하도록 하는 것입니다. 중요한 물건?

실제 CRC 카드에 대한 사례 연구를 읽고 싶다면(물론 Kent와 Ward의 원본 논문 외에도) 다음을 살펴보십시오. CRC 카드북.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top