본문 바로가기

분류 전체보기

(271)
애자일 개발의 기술 2/e - 오너십 오너십 작업을 하는 사람이 무엇을 해야 하는지 가장 잘 이해한다 태스크 플래닝 시각적 계획, 가치있는 증분을 나누는 행위는 태스크 플래닝을 통해 구현된다. 태스크 플래닝은 케이던스(cadence), 태스크 생성, 시각적 추적으로 구성된다. 케이던스 케이던스는 태스크 플래닝의 빈도다. 이는 두 가지 방식이 있다. 스크럼(이터레이션) : 정해진 주기로 스토리를 계획하여 진행한다. 칸반(지속적인 흐름) : 하나의 스토리가 끝나면 새로운 스토리를 선택해서 진행한다. 스크럼 스크럼은 시간을 엄격하게 관리한다. 시간이 되면 스프린트는 끝난다. 스프린트 시작할 때 capacity를 예측하고, 그에 맞는 스토리를 선택한다. 스프린트가 종료될 때 완료되지 않은 스토리가 있다면, 무언가 잘못된 것을 의미한다. 이 때, 문..
애자일 개발의 기술 2/e - 플래닝 플래닝 애자일은 예측하는 것이 아니라 적응하는 것이다. 스토리 스토리는 요구사항이 아니며, 사용 사례도 아니다. 스토리는 계획을 위한 것이다. '미래의 대화를 위한 약속 어음'이라고 할 수 있다. 스토리는 대화를 하도록 상기시키기 위한 것뿐이므로 자세한 설명은 필요 없다. 스토리 만들기 팀이 수행할 모든 작업에는 스토리가 필요하다. 그래야 일의 우선 순위를 정할 수 있다. eg. 창고 재고 보고서 로그인 화면의 커스터마이즈 가능한 브랜딩 "(역할)의 입장에서 나는 (결과)를 얻기 위해 (무엇)을 원한다"는 템플릿으로 작성될 수 있지만 필수는 아니다. 사용자에게 서비스를 제공하는 방법을 상기시키는데 도움을 주기 위한 실험용으로 만들어진 것이다. 스토리는 짧지만 여전히 두 가지 중요한 특징을 ..
Agile Development 2/e 3. 기민함에 투자하라 중요하고 촉박한 데드라인이 있다면 이를 만족시킨 후 애자일을 시도하라. 개인 간의 경쟁을 부추기는 모든 형태의 정책은 애자일을 더욱 어렵게 만든다. 작업을 개인이 아닌 팀에 할당하라 애자일에선 실수를 비난하기보다는 학습의 기회로 삼는다. 제품 및 포트폴리오 확장하기 수직적 확장: 병목 현상 없이 업무할 수 있는 팀을 늘리는 것 수평적 확장: 팀의 책임을 분리함으로써 병목 현상을 제거하는 것 수직으로 확장하기 제품 또는 포트폴리오 오너십을 공유하는 팀의 수를 늘리는 것 '오너십을 공유'한다는 것은 이들이 업무를 수행하는 정해진 영역이 없다는 것 이런 공유된 오너십은 장점이자 단점이 된다. 구성원들이 다양한 코드에 익숙해져야 하며, 가장 큰 문제는 오너십이 1/n로 나뉘..
애자일 개발의 기술 2/e - 애자일이란 무엇인가? 인상 깊은 내용을 추렸다. 대기업은 그들의 프로세스를 매우 세세하게 정의했다. 역할, 책임, 문서 템플릿, 모델링 언어 및 변경 통제 위원회까지 개발의 모든 측면을 엄격하게 정의하고 통제했다. 만약 프로젝트가 성공하지 못하면 더 많은 세부 사항, 문서 및 승인이 더해졌다. 사람들은 이를 더 단순하고, 더 가볍고, 덜 상세한 SW 개발 방법론을 만들었는데 이를 Adaptive Software Development, Feature-Driven Development, XP, Scrum 등으로 불렀다. 애자일의 정수 애자일 개발은 예측적이기보다는 적응적이며, 프로세스 지향보다는 사람 지향이다. Agile Cargo Cults 미군이 한 외딴 섬에 상륙했다. 섬의 원주민들은 근대 문명을 처음 봤고, 군인들과 그들..
Software 품질과 관련된 연구 Software 품질과 관련된 연구 결함이 적은 소프트웨어는 개발 일정도 가장 짧고 생산성이 가장 높았다. 166명의 전문 프로그래머들이 동일한 명세로 프로그램을 작성하였다. 작성된 프로그램의 평균 코드 길이는 200줄이고 작성 시간은 5시간에 못 미쳤다. 흥미로운 결과는 프로그램을 완성하기 위해서 평균 시간이 걸린 프로그래머들이 오류가 가장 많은 프로그램을 작성한 것이다. 평균보다 많거나 적게 걸린 프로그래머들은 눈에 띄게 오류가 적은 프로그램을 작성했다. 주요 품질 향상 기법을에 대한 결함 감지 비율은 다음과 같다. 코드에 대한 개인 탁장 검사: 40% 단위 테스트: 30% 통합 테스트: 35% 회귀 테스트: 35% 대량 베타 테스트(1,000 사이트): 75% 높은 결함 감지율을 얻기 위해선 다양한..
Code Complete 변수 변수에 대한 참조를 지역화하라. 변수에 대한 참조가 가능한 가까이 있는게 취약성을 줄이는 방법이다. a = 0; b = 0; c = 0; a = b+c; 위 코드에서 a에 대한 첫번째 참조와 두번째 참조의 폭(span)는 2이며, b는 1, c는 0이다. 추가로 이 폭을 줄이면 코드의 가독성도 높아진다. 변수의 수명을 가능한 짧게 유지하라. 변수의 수명은 첫 번째 참조와 마지막 참조 사이의 폭이다. 예를 들어 line no 1.에서 첫 참조되고 no.25에서 마지막 참조되었다면 수명은 25 명령문이다. 이 때, 그 외 참조가 하나도 없었다면 참조의 span은 23이며, 매 라인마다 참조가 있었다면 span은 0이다. 이 수명 또한 줄일수록 코드의 안정성과 가독성이 높아진다. 바인딩 시간 바인딩 시간은 변..
Software의 방어적인 프로그래밍 Assertion 크고 방대한 시스템에서 오류를 찾아내기 위해 적합하다. 사용 지침 절대로 발생해서는 안 되는 조건을 위해서 어설션을 사용하라. 선행 조건과 후행 조건을 문서화하고 검증하기 위하여 어설션을 사용하라. eg. Private Funtion Velocity { _ ByVal latitude AS Single, _ ByVal longitude AS Single, _ ' 선행조건 Debug.Assert( - 90
[iOS] Dispatch Queue 개요 iOS에서 제공하는 Dispatch Queue에 대해 소개합니다. 1. Main Queue 오직 한 개만 존재 Serial한 task 처리 메인 스레드에서 동작 2. Global Queue 병행성(Concurrency)를 제공하는 Queue QoS(Quality of Service)에 따라 다양한 종류로 다뉨 작업 순서가 보장되지 않음 2.1 QoS Dispatch Queue에서 작업의 중요도를 의미한다. 우선순위가 높은 작업 처리에 더 많은 스레드를 배치한다. userInteractive UI 업데이트, 애니메이션 등 사용자 행동에 대한 즉각적인 반응을 기대하지만 꽤 큰 작업일 때 사용 userInitiated 1과 비슷하게 즉각적인 결과가 필요하지만 약간 늦을 수 있음 default 일반적인 작..