QA는 오류를 찾지 못해야한다.
: 개발팀은 오류가 어떻게 발생했는지 자신에게 물어보고 또 발생하지 않도록 조치를 취해야한다.
QA의 역할은 사업부와 함께 자동화된 인수 테스트를 만드는 일이다.
인수테스트는 시스템에 대한 진정한 명세서이자 요구사항 문서이다.
보통 사업부는 '행복한 경로' 의 테스트를 만들고
QA는 '모퉁이조건, 경계조건, 불행한 경로'의 테스트를 만든다.
테스트 자동화 피라미드
단위 테스트 > 컴포넌트 테스트 > 통합 테스트 > 시스템 테스트 > 탐색 테스트
단위 테스트
: 프로그래머에 의해, 프로그래머를 위해 시스템 프로그래밍 언어로 만든 테스트
컴포넌트 테스트
: 인수 테스트의 일종, 대상은 시스템의 독립 컴포넌트
시스템의 컴포넌트는 업무 규칙을 감싸고 있기 때문에, 컴포넌트 대상으로 한 테스트는 해당 업무 규칙을 테스트하는 인수 테스트
통합 테스트
: 여러 컴포넌트로 이뤄진 큰 시스템에서만 의미가 있음
컴포넌트 묶음을 모아 묶음끼리 제대로 상호작용하는지 테스트한다.
시스템 구조 설계가 튼튼하다는 사실을 보장
성능 테스트나 처리량 테스트를 하기도 함
시스템 테스트
: 통합한 시스템 전체를 대상으로 하는 자동화 테스트 . 궁극적인 통합 테스트
수동 탐색 테스트
: 키보드에 손을 얹고 모니터를 직접보며 하는 테스트
시스템이 기대한 대로 동작하는지 확인하는 동시에 예상치 못한 오류를 찾아내는 것
가능한 많은 '특이사항'을 창의적으로 발경해내는 일이 목표
시스템이 무결점 상태를 계속 유지하는지 확인해야 한다.
회의
반복 계획 회의
: 애자일 개발의 규범중에서 가장 잘 해내기 어려운 일이다.
제품 백로그에서 다음 반복 주기 동안 처리할 항목을 고르는 일이다.
반복 회고와 시연
: 각 반복 주기가 끝날 때마다 시행
무엇이 잘 됐고 무엇이 잘못됐는지 토론
논쟁 / 의견 차이
: "어떤 논쟁이든 5분 안에 해결되지 않으면 논쟁으로는 해결할 수 없다."-켄트 벡
집중력 마나
수면
카페인
재충전
근육 집중
우선순위 뒤집기
소프트웨어 개발자는 부지런히 시간과 집중력을 관리한다.
관계를 어긋나게 만드는 불신감의 원인은 거의 다 추정
사업부는 추정을 약속으로 보고 개발자는 추정을 어림짐작으로 본다.
약속은 꼭 지켜야한다.
추정은 어림짐작이다. 약속에 포함되지 않는다.
추정은 숫자가 아니다. 분포다.
PERT
: 프로그램 평가와 검토 기술
미해군이 폴라리스 잠수함 프로젝트를 지원하기 위해 만들었음
업무를 추정할 때 세 가지 숫자를 제시. 이 숫자를 3방 분석이라한다.
추정에 사용하는 자우너 중 가장 중요한 자원은 주변사람들
광대역 델파이
: 의견일치. 사람을 모아 팀을 꾸리고, 토론하고, 추정하고, 합의에 도달할 때까지 토론과 추정을 반복한다.
$ 날아다니는 손가락
: 한번에 하나의 업무에 대해서만 토론
손가락으로 0에서 5까지 숫자를 얼마나 걸릴지 생각해서 표현한다.
모든 의견이 일치하면 다음 업무로 넘어간다.
만약 만장일치가 아니면 의견 일치를 볼 때까지 계속한다.
$ 계획포커
: 여러 다른 숫자가 적힌 카드를 낸다. 다른 부분은 날아다니는 손가락과 유사
$ 관계 추정
: 모든 업무를 카드에 적고 추정값을 적지 않는다.
업무 카드를 상대적으로 비교해서 긴 시간이 필요한 업무는 오른쪽 작은 업무는 왼쪽으로 옮긴다.
큰 수의 법칙
: 추정에는 오류가 가득하다.
큰 업무를 여러 개의 작은 업무로 쪼개 따로따로 추정하면, 하나의 큰 업무 추정 값보다 작은 업무들의 추정 값의 합이 정확하다.
개발자는 사업부가 계획을 짜는 데 쓰도록 실용적인 추정값을 전달해야한다.
지킬 수 없는 약속을 하지 않는다.
데드라인
달성할 확신이 없는 마감일 약속을 피하는 것이 중요하다.
프로는 사업부에서 멋대로 한 약속은 받아들이지 않아도 된다.
빠르고 지저분하게라는 말은 모순이다. 어떤 때라도 지저분함은 느리다는 의미이다.
언제나 깔끔한 상태를 유지하자
위기는 규율이다.
위기상황에서도 편하게 느껴지는 규율을 골라라 그리고 그 규율을 항상 따라라 위기상황을 피하는 최선의 방법이다.
주의 깊게 약속하고, 규율을 따르고, 깔끔히 유지하는 것 / 침착함을 유지하고, 의사소통하고, 규율을 따르고, 도움을 받는 것
소프트웨어는 팀원들이 프로답게 힘을 모을 때 가장 효율적이다.
프로그래머의 업무는 사업이 순조롭게 나아가도록 만드는 일이다.
사업을 이해하는 데 시간을 투자한다.
탑승한 배가 어떻게 항해하는지 관심을 기울인다.
코드소유 vs 공동소유
: 자신의 코드에 벽을 두르고 다른 프로그래머들이 건드리지 못하게 하는 행동보다는
코드 소유권의 벽을 무너뜨리고 팀 전체가 모든 코드의 소유권을 가지는 편이 낫다.
다른 사람의 코드 작업을 막지 않는다.
짝 프로그래밍
: 문제를 푸는 가장 효율적인 방법
서로 아는 것을 주고받는 최고의 방법
코드를 검토하는 최고의 방법
프로그래밍을 하며 일과 시간을 보내고 싶다면, 우리가 대화하고자 노력해야할 상대는 바로 사람
팀이 만들어지는 데는 시간이 걸린다.
한 덩어리가 된 팀에는 정말 마법같은 무엇이 있다.
팀에는 저마다의 속도가 있다.
속도는 통계적 측정값이다.
팀은 프로젝트보다 만들기 더 어렵다.
장인은 한 가지 이상의 중요 소프트웨어 프로젝트를 주도했던 프로그래머들
숙련공은 훈련을 받은, 능숙한, 그리고 열정적인 프로그래머들
견습생/ 인턴은 자주성이 없이 숙련된 프로그래머들의 밀착지도를 받는다.
장인정신
: 장인이란 서두르지 않으면서도 일을 빠르게 처리하며 합리적인 평가를 제공하고 임무를 처리하는 사람
장신 정신은 장인들이 지니고 있는 사고방식으로 가치, 규율, 기술, 자세 및 답변을 포함하는 밈이다.