본문 바로가기

리뷰 (어플, 게임, 책)

조엘 온 소프트웨어

조엘 온 소프트웨어에서 말하는 테스트에 관한 점검 사항 12개
1. 소스 코드 관리 시스템 사용 유무
2. 한방에 빌드를 만들어낼 수 있는지
3. 일일 빌드를 하고 있는지
4. 버그 추적시스템을 운영
5. 코드 새로 작성하기 전에 버그를 수정하는지
6. 일정을 업데이트하는지
7. 명세서를 작성하는지
8. 조용한 작업 환경에서 일하는지
9. 경제적인 범위 내에서 최고 성능의 도구를 사용하는지
10. 테스터를 별도로 두고 있는지
11. 프로그래머 채용 인터뷰 때 코딩 테스트를 하는지
12. 무작위 사용편의성 테스트를 수행하는지

버그 트래킹 시스템
- 버그 재현하기 위한 완벽한 단계
- 예상 수행 결과
- 관찰한 (버그로 간주되는) 실제 수행 결과
- 수정을 맡은 개발 책임자
- 수정했는지 여부
버그는 발견 즉시 수정한다. 미루면 돈이다.

UTF8개념 소개 0-127까지는 그대로 저장, 넘어가는 부분부터 코드 포인터만 2,3바이트에서 시작해서 최대 6바이트로 확장
UTF7 -> UTF8의 첫 비트를 0으로 하여 7bit시스템과 호환성
UCS-2 모든 문자열 처리 유니코드 -> L"Hello"

개발자는 영어/글쓰기를 싫어함. 사람들과 의사결정하는 것도 약함.
글쓰기는 근육과 같다. 일기/블로그/창조적 쓰기

기능 명세란? 완전히 사용자 관점에서 제품이 어떻게 동작하는지를 기술
기능에 대해서 이야기, 화면, 메뉴, 대화상자 인터페이스 명세
기능 명세 항목
개괄, 시나리오, 화면단위명세, 시작화면, 오류시 시나리오, 미해결 문제, 회피목표

기술 명세란? 프로그램 내부 구현 기술, 자료 구조, 관계형 데이터베이스 모델과 프로
그래밍 언어, 도구, 알고리즘 선택

프로그램 명세 작성시
재밌게 작성하라. 단순하게 작성하라(긴 문장은 짧게 끊어서 작성). 머리로 돌아가도록 작성하라. 여러차례 읽고 검토하라. 표준 양식은 해롭다.

프로젝트 관리자
명쾌한 언어 구사능력, 시장을 고려한 외교적 수완, 사용자 공감, 훌륭한 사용자 인터페이스 설계 -> 카리스마가 필요함. 카리스마는 실력에서 나온다.

과업 큰 덩어리 -> 세부 단위
세부 일정 (초기 예상 스케쥴, 진행 현재 예상 스케쥴, 괴리 기간)

수정할 버그가 있는 상태에서 새로운 코드를 작성해서는 안된다.

코드 작성 시간 n -> 실제 모든 작업 3*n
일일 빌드
버그 수정 수정 비용 < 수정한 버그 가치 => 의미

테스터를 고용하지 않는 이유
1. 버그는 프로그래머가 게을러서 생기니깐
2. 우리는 소프트웨어를 웹에 올려 놓아서, 버그는 금방 고칠 수 있으니깐
3. 고객이 소프트웨어를 테스트해줄 테니깐
4. 우수한 테스터는 테스터로 일하려고 하지 않거든요.
 -> 대안, 기술지원 직보다 한 단계 높은 직급
 -> 프로그래밍 수강 등의 자기 개발에 도움. (프로그래밍 도구/ 스크립트 언어 개발)
 -> 고용을 지속해라.
 -> '구태의연하지 않은' 테스터를 찾는다. (알바, 대학생등)
 -> 임시직 고용
5. 테스터를 고용할 돈이 없으니깐요.

CPU가 Context Switching 환경 값들이 변경되는 데 시간이 꽤 필요하며
이것이 실제 Task시간보다 많아지면 Thrashing 현상이 일어나듯이 사람도 마찬가지이다.

1)개발자에게는 인터럽트를 최소화한다.
2)소스를 처음부터 짜는 것이 아니고 Refactoring한다.

고객은 자신이 원하는 것을 모른다. (전제하도록)

인터페이스 작업을 전부로 생각함 (디자인) - 하지만 실제 프로그램은 90%이상 작업이 남아 있음

멧칼프에 법칙 - '네트워크 가치는 가입자 수의 제곱과 같다' Metcalfe's Law

광고라는 것은 거짓을 숨기기 위한 거짓행위를 반복하는 것
비행기 -> 좁고 불편 -> 편하고 안락함을 선전
제지회사 -> 산의 나무 벌목 하는 회사 -> 산림
호르디우스의 매듭 -> 악순환의 고리, 죽음의 소용돌이
패러다임의 발전 -> 전환(진입장벽의 제거 - 리스트업) -> 전화점

전환 대표적 사례
123-> 엑셀
워드스타 -> 워드퍼펙트 -> MS word
모자이크(Netscape) -> Explorer
ICQ, Yahoo -> MSN
Yahoo -> Naver

기존 경쟁 업체가 차지하고 있다면
-> 경재업체를 생각할 것이 아니고 고객의 소리에 귀를 기울이라.

진입장벽이 어려운가의 Point
 -> 서점에 쇼파 -> 발상의 전환 -> 손님이 바글 거리게 만들 수 있다.
 -> 서점의 판매량은 매출에 비례 함. -> 지역성, 문화 고려

 -> 얼마나 되돌아가기 쉬운가 ( 기존 고객이 이탈 < 잠재 고객의 진입을 쉽게 함 )
 -> ISP의 메일 유지 / Forwarding서비스

결국 진입 장벽의 의미
1) 외부 경쟁업체의 포지션을 뚫고 들어가는 의미
2) 우리, 자사 제품을 선택함에 있어서의 진입장벽을 의미

회사에 관련된 중요한 사항들

개발 회사 제품의 품질 유지 - 코드 수준 유지 (코드 리뷰) - 최고 선임급에서
전화는 가능한 짧게, 테스트와의 인터페이스의 결합도를 낮게
=> Core Time 유지

Layer별 스터디 = Core CBD, Developer, 코더, 설계 등

이와 같은 프로세스 개선/정립

인재가 남을 수 있는 회사는 두가지 타입이 존재함
- 일하기 좋은 회사
 -> 모토, 가치추구형 - 소프트웨어 개발사 (코드 품질 유지 철저/휴가/안락/환경)
 -> 관리자가 개발자를 다그치면 안됨
 -> 업무상 동료가 친구가 되어야 함
- 벼락 부자와 같은 비젼이 있은 회사(스탁 옵션, 상장)
 -> 급성장형 (업계 연봉 수준 이상) - 아마존 - 스톡 옵션