사진을 하는 사람들에게 인기가 많은 툴이다. 맥킨토시에서 너무 이뻐서 설치해봤는데, 인터페이스가 윈도우에서도 똑같다!! 이쁘다~!!
위 경로에서 다운로드를 받을 수 있지만, 본래 유료다! 다행히 트라이얼버전으로 설치할 수도 있다. 물론 등록번호가 있다면... 등록버전으로...^^
"Adobe Photoshop Lightroom은 전문 사진가들의 디지털 포토그래피 작업을 위한 필수 소프트웨어 입니다. RAW 파일의 편집과 관리 및 변환을 기존의 여러 소프트웨어를 거쳐 수동으로 관리했던 번거로운 직업에서 벗어나 RAW 캡쳐에서부터 최종 출력물에 이르기까지 통합적인 워크플로우를 지원합니다. 이제는 하나의 프로그램으로 보다 쉽고 효율적인 방법으로 사진을 관리하고 보정하여 출력할 수 있습니다"
테스팅의 여러가지 측면을 지원하는 많은 수의 도구가 있다. 이 요약서에서는 도구들이 지원하는 테스팅 액티비티에 따라서 도구들을 분류한다.
어떤 도구들은 하나의 액티비티를 지원한다. 다른 도구들은 하나 이상의 액티비티를 지원할 수 있다. 그러나 이런 도구들은 가장 관련있는 액티비티 아래로 분류된다. 일부의 상업적인 도구들은 오직 한가지 타입의 액티비티만을 지원한다. 다른 상업용 도구 벤더는 이러한 액티비티 모두 또는 많은 부분을 지원하는 도구 셋이나 슈트(suite)를 제공한다.
테스팅 도구는 반복적인 작업을 자동화함으로써 테스팅 액티비티의 효율성을 높일 수 있다. 예를 들어 테스팅 도구는 많은 수의 데이터 비교를 자동화 하거나 동작을 시뮬레이션함으로써 테스팅의 유연성 또한 높일수 있다.
일부의 테스팅 도구는 도구 그 자체가 테스트의 실제 결과에 영향을 미쳐서 테스트에 방해가 될 수 있다. 예를 들어, 여러가지 성능 도구를 가지고 어떻게 측정하느냐에 따라 실제 타이밍이 다르게 될 수 있거나, 어떤 커버리지 도구를 사용하는가에 따라 코드 커버리지의 다른 측정치를 얻을 수 있다. 이러한 방해되는 도구의 결과를 탐침 효과(probe effect)라 부른다.
일부 도구들은 개발자들에게 좀더 적절한 지원을 제공한다. (e.g 컴포넌트와 컴포넌트 통합 테스팅 동안에), 이러한 도구들은 아래의 분류에서 "D"로 표시될 것이다.
6.1.2 테스팅과 테스트의 관리를 위한 도구 지원 (K1)
모든 관리도구는 소프트웨어 개발 전 주기동안의 모든 테스트 액티비티들에 적용된다.
테스트 관리도구 (Test management tools)
테스트 관리 도구의 특성은 다음을 포함한다.
• 테스트의 관리와 수행된 액티비티에 대한 지원 • 테스트 실행 도구, 결함 추적 그리고 요구사항 관리도구와의 인터페이스한다. • 독립적인 버전 컨트롤, 또는 외부 구성 관리 도구와의 인터페이스 • 테스트, 테스트 결과 그리고 요구사항 명세와 같은 소스 문서에 대한 부가사항에 대한 추적성 지원 • 테스트 결과의 로깅과 진행상황 보고 생성 • 테스트 객체에 대한 정보를 주기 위하여, 그리고 테스트 프로세스를 통제하고 향상시키기 위하여 테스트(e.g 실행된 테스트와 패스(pass)된 테스트)와 테스트 객체(e.g 발생한 부가사항)에 관련된 수량적인 분석(매트릭)
요구사항 관리도구(Requirements management tools)
요구사항 관리도구는 요구사항 문장들을 저장하고, 일관성과 정의되지 않은(빠진) 요구사항을 체크하며, 요구사항을 우선순위화하고, 요구사항, 기능과/또는 특성에 대하여 개별적인 테스트들이 추적성을 갖는 것을 가능하게 한다. 추적성은 테스트 관리 프로세스 보고서에서 보고될 수 있다. 요구사항, 기능(functions)과/또는 특성(features)에 대한 테스트 셋의 커버리지 역시 보고되어야 한다.
부가사항 관리 도구 (Incident managment tools)
부가사항 관리도구는, 예를 들어 결함(defect), 실패(feature) 또는 인지된 문제들과 변칙사항과 같은, 부가사항 보고들을 저장하고 관리한다. 그리고 부가사항 보고관리를 지원하는 방법은 다음을 포함한다.
• 우선순위 정하는 것을 쉽게한다. • 사람들에게 작업을 할당 (e.g 수정(fix) 또는 확정 테스트(confirmation test)) • 상태의 귀속성(attribution) (e.g 거부된 테스트, 준비된 테스트, 또는 다음 릴리즈에 언급된 테스트)
이러한 도구는 모든 시간에 걸쳐 모니터 되야하는 부가사항의 진행을 가능하게 하며, 때때로 통계적인 분석에 대한 지원을 제공하기도 한다. 그리고 부가사항에 대한 보고를 제공한다. 이것은 결함 추적 도구(defect tracking tools)로도 알려져 있다.
구성관리 도구 (Configuration management tools)
구성관리(CM) 도구는 엄격히 말하서 테스팅 도구가 아니다. 하지만 일반적으로 여러가지 버전들과 소프트웨어와 테스트의 구조를 추적하는데 필요하다.
구성관리 도구는
• 소프트웨어와 테스트웨어의 구성과 버전에 대한 정보를 저장한다. • 테스트웨어(testware)와 소프트웨어 작업 산출물(software work product)과 산출 변형물(product variants) 사이에 추적성을 가능하게 한다. • 하나 이상의 하드웨어/소프트웨어 환경에서 개발할 때 매우 유용하다. (e.g 여러가지 운영 체제 버전, 여러가지 라이브러리와 컴파일러, 여러가지 브라우저와 여러가지 컴퓨터에 대하여)
6.1.3 정적 테스팅 지원 도구 (Tool support for static testing) (K1)
리뷰 프로세스 지원 도구(Review process support tools)
리뷰 프로세스 지원 도구는 리뷰 프로세스에 대한 정보의 저장, 리뷰 코멘트의 저장과 전달, 결함과 효과에 대한 보고, 리뷰하기 위한 규칙과/또는 체크리스트에 대한 참고사항 관리, 그리고 문서와 소스 코드 사이의 추적성의 자취를 보존한다. 리뷰 프로세스 지원도구는 지리학적으로 떨어져 있는 팀이 있다면 유용한 온라인 리뷰에 대한 지원 역시 제공할 수 있다.
정적 분석 도구(Static analysis tools)(D)
정적 분석 도구는 개발자, 테스터, 그리고 품질 보증 관련자가 동적 테스팅 전에 결함을 발견하는 것을 돕느다. 정적 분석 도구의 목적은 다음을 포함한다.
• 코딩 표준의 강제 • 구조와 의존성의 분석(e.g 링크된 웹 페이지) • 코드 이해의 지원
정적 분석 도구는 코드로부터,예를 들어 계획이나 위험 분석에 대한 중요한 정보를 줄 수 있는, 특성(e.g complexity)을 계산할 수 있다.
모델링 도구(Modeling tools) (D)
모델링 도구는 소프트웨어의 모델을 검증하는 것을 가능하게 한다. 예를 들어, 데이터베이스 모델 확인기(checker)는 데이터베이스 모델내의 불일치성과 결함을 발견할 수 있다. 다른 모델링 도구는 정적 모델이나 객체 모델내의 결함을 발견할 수 있다. 이러한 도구는 때때로 모델에 기반한 일부의 테스트케이스를 생성하는 것을 지원한다. (아래의 테스트 디자인 도구를 보라)
정적 분석 도구와 모델링 도구의 주된 혜택은 개발 프로세스내에서 초기에 더 많은 결함을 발견하는 비용 효과이다. 그 결과로 개발 프로세스는 더 적은 재작업(rework)으로 인하여 가속화되고 향상될 수 있다.
6.1.4 테스트 명세 지원 도구 (Tool support for test specification) (K1)
테스트 디자인 도구 (Test design tools)
테스트 디자인 도구는 요구사항, 그래픽 사용자 인터페이스(GUI), 그리고 디자인 모델(상태, 데이터, 또는 객체), 또는 코드로 부터 실제 테스트나 테스트 입력을 생성한다. 이러한 타입의 도구는 예상되는 결과 역시 생성할 수 있다. (i.e 테스트 예상치를 이용할 수도 있다.) 상태나 객체 모델로부터 생성된 테스트들은 소프트웨어내의 모델의 구현을 검증하는데 유용하다. 이러한 것들은 도구가 생성하는 테스트들의 완전함 때문에 귀중한 시간을 절약할 수 있고 테스팅의 증가되는 완전함을 제공한다.
이러한 분류의 다른도구들은 때때로 테스트 스텁(stub)이나 테스트를 생성하는 테스트 프레임이라 불리우는, 구조화된 템플릿을 제공함으로써 테스트들의 생성을 지원하는 것을 도울수 있다. 따라서 테스트 디자인 프로세스의 속도를 높일 수 있다.
테스트 데이터 준비도구 (Test data preparation tools) (D)
테스트 데이터 준비도구는 테스트 실행동안에 사용되어야 하는 테스트 데이터를 설정하기 위하여 데이터베이스, 파일 혹은 데이터 전송을 조작한다. 이러한 도구의 혜택은 데이터 보호를 위하여 생생한 데이터를 익명으로 만들어진 테스트 환경에 전송되는 것을 보증한다는 것이다.
6.1.5 테스트 실행과 로깅 지원 도구 (Tool support for test execution and logging) (K1)
테스트 실행도구(Test execution tools)
테스트 실행 도구는 스크립팅 언어를 사용함으로써 지정된 입력과 예상되는 결과를 이용하여 자동이나 반자동으로 실행되어야 하는 테스트를 가능하게 한다. 예를 들어, 스크립트 언어는 제한된 노력을 가지고 비슷한 단계의 시스템의 여러 부분에 대한 다양한 데이터를 가지고 반복되는 테스트들을 조작하는 것을 가능하게 만든다. 일반적으로 이러한 도구들은 동적인 비교 특성과 각각의 실행된 테스트에 대한 테스트 로그를 제공하는 것을 포함한다.
테스트 실행도구는 반복 기록 도구(capture playback tools)로 참조될 때, 기록된 테스트들을 이용할 수 있다. 예를 들어, 탐색 테스팅(Exploratory testing) 동안에 입력을 추출하는 것과 스크립되지 않는 테스팅은 오류(failure)가 발생했을 때, 테스트를 재생성하고/하거나, 테스트를 문서화하기 위하여 유용해질 수 있다.
테스트 장비/단위 테스트 프레임워크 도구 (Test harness/unit test framework)(D)
테스트 장비는 테스팅 객체가 운영되어야 하는 환경을 시뮬레이션함으로써 컴포넌트 혹은 시스템의 일부분의 테스팅을 용이하게 할 수 있다. 이것은 실제 환경의 컴포넌트들이 아직 이용가능하지 않거나, 스텁과/이나 드라이버, 또는 단순히 예상가능하고 통제가능한 테스트하의 객체에 대하여 모든 결함이 있을 수 있는 환경을 제공하는 경우 모두에서 행하여 질 수 있다.
프레임워크는 테스트 되어야 하는 객체를 호출하고/하거나 그 객체에 대하여 피드백을 주는 것으로 코드, 객체, 메소드 또는 함수, 유닛 또는 실행 될 수 있는 컴포넌트의 일부에 대하여 생성될 수 있다. 이것은 실제의 결과 목표 대신에 객체로부터 결과를 얻기 위하여 스텁을 제공하고/하거나 테스트 객체에 대하여 입력을 제공하는 인위적인 수단을 제공하는 것으로 할 수 있다.
테스트 장비는 반드시 함께 테스트 되어야 하는 언어, 운영 시스템 또는 하드웨어와 같은 미들웨어의 실행 프레임워크를 제공하는데 사용 될 수 있다.
이것은 컴포넌트 테스트 레벨에 특별한 초점을 가지고 있는 경우, 단위 테스트 프레임웍크 도구라 불릴수 잇다. 이러한 도구의 타입은 만들어진 코드를 가지고 동시에 컴포넌트 테스트의 실행을 지원한다.
테스트 비교기 (Test comparators)
테스트 비교기는 파일, 데이터베이스 또는 테스트 결과들 사이의 차이점을 결정한다. 테스트 실행도구는 일반적으로 동적인 비교기를 포함한다. 그러나 실행 후의 비교는 분리된 비교도구에 의하여 행하여진다. 테스트 비교 도구는 테스트 오라클을 이용할 수도 있다. 특히 자동화 되었다면 말이다.
커버리지 측정도구(Coverage measurement tools) (D)
커버리지 측정 도구는 사용되는 측정 기법, 무엇이 측정되었는가와 코딩 언어에 의존하여 방해가 될 수도, 되지 않을 수도 있다. 코드 커버리지 도구는 실행된 코드 구조의 특정 타입의 퍼센티지를 측정한다. (e.g 문장, 브랜치, 또는 분기 그리고 모듈 또는 함수 호출). 이러한 도구는 테스트의 셋에 의하여 실행된 구조의 측정된 타입이 얼마나 완벽한지 보여준다.
보안도구(Security tools)
보안도구는 컴퓨터 바이러스와 서비스 공격의 거부에 대한 확인을 한다. 예를 들어, 방화벽은 엄격히 말해 테스팅 도구는 아니지만, 보안 테스팅을 위하여 사용할 수 있다. 다른 보안 도구는 시스템의 특정한 취약점을 찾음으로써 시스템에 부하를 준다.
6.1.6 성능과 모니터링 지원 도구 (K1)
동적 분석도구 (Dynamic analysis tools) (D)
동적 분석도구는 시간 종속성이나 메모리 부족과 같은 소프트웨어가 실행할 때만 발생하는 결함들을 발견한다. 이들은 일반적으로 컴포넌트 테스팅과 컴포넌트 통합 테스팅, 그리고 미들웨어를 테스팅 할 때 사용된다.
성능 테스팅/부하 테스팅/ 스트레스 테스팅 도구(Performance test/load testing
/stress testing tools)
성능 테스팅 도구는 다양하게 시뮬레이션 된 사용 조건 아래서 어떻게 시스템이 동작하는가를 모니터하고 보고한다. 이들은 응용 프로그램, 데이터베이스 또는 네트웍이나 서버와 같은 시스템 환경에 대한 부하를 시뮬레이션한다. 이러한 도구들은 부하나 압박과 같이 이것이 측정하는 성능 측면에 따라 명명되므로, 부하 테스팅 도구나 스트레스 테스팅 도구로도 알려져 있다. 이것들은 종종 파라미터에 의하여 통제되는 테스트의 반복적인 실행을 자동화하는 것에 기초한다.
모니터링 도구(Monitoring tools)
모니터링 도구는 엄격하게 말하면 테스팅 도구가 아니지만, 다른 수단에 의하여 이용가능하지 않은, 테스팅 목적을 위하여 사용될 수 있는 정보를 제공한다.
모니터링 도구는 계속적으로 특정 시스템 자원의 사용에 대하여 분석, 검증하고 보고한다. 그리고 가능한 서비스 문제에 대한 경고를 한다. 이들은 소프트웨어와 테스트웨어의 버전과 구축에 대한 정보를 저장하고, 추적성을 가능하게 한다.
6.1.7 특정 응용 프로그램 영역의 도구 지원 (Tool support for specific application areas)(K1)
위에서 구분된 도구 타입의 개별적인 예들은 특별한 종류의 어플리케이션 사용에 대한 특화가 될 수 있다. 예를 들어, 성능 테스팅 도구는 웹 기반의 응용 프로그램에 특화될 수 있다. 정적 분석 도구는 특정한 개발 플랫폼에 특화될 수 있다. 그리고 동적 분석도구는 테스팅 보안 측면에 대하여 특화된다.
상업적인 도구 슈트(suite)는 특정한 응용 프로그램 영역(e.g 임베디드 시스템)을 목표로 삼을 수 있다.
6.1.8 다른 도구를 사용한 도구 지원 (Tool support using other tools) (K1)
여기에서 리스트 된 테스팅 도구는 테스터들에 의하여 사용되는 유일한 도구 종류는 아니다. - 예를 들어, 테스터들도 스프레드 쉬트, SQL, 리소스 혹은 디버깅 도구(D)를 사용할 수도 있다.
▪ 광의의 SW 테스팅 도구 - 상용 성능 테스트 자동화 도구 (일반적으로 고가) - 테스트 관리 자동화 도구 (Defect Tracking 시스템 등) - 테스트 지원 자동화 도구 (Analyzer, Windiff, Equalizer, Ghost) - 테스트 방법론 및 문서 (체크 리스트, TC 작성 방법론 등)
▪ 협의의 SW 테스팅 도구 - 상용 성능 테스트 자동화 도구 - 테스트 관리 자동화 도구 (Defect Tracking 시스템 등)
◆ SW 테스트 자동화 도구 관련 이슈
자동화 도구 사용의 장점 ▪ 테스트 노력 절감 및 실수 감소 -> 반복되는 부분을 자동화시켜 리소스를 보다 위험도가 높은 부분의 테스팅에 집중하는 것을 가능하게 함 ▪ 비용 효율적 유지보수 가능 -> 고객의 요구에 빠르게 응답 ▪ 품질 향상 -> 고객 만족도 향상
자동화 도구 사용의 단점 ▪ 고가이면서 유지 비용 (가상사용자, 업그레이드, 기술지원 등)도 높음 ▪ 초기 환경 및 테스트 설정에 많은 시간과 노력 소요 ▪ 테스트 스크립트 유지보수가 어려움
◆ SW 테스트 자동화 고려 사항
▪ 적절한 자동화 대상 프로젝트 선정 ▪ 자동화를 테스트 전략과 계획에 포함 ▪ 자동화 도구 선정에 신중 - 적합한 것을 찾기 어려움, 지원과 교육 고려 ▪ 제품과 테스트 스팩을 Formal하게 변경하는 것에 대한 준비 ▪ 자동화 테스트 지원 시설(도구) 개발 계획 - 자동화 도구의 적용범위의 한계로 직접 개발하는 부분 존재 ▪ 테스팅을 다른 방식으로 진행하는 것 고려 (개발 계획 또는 도구 방식에 맞게) - 자동화 테스트는 상세한 테스트 지침 필요 ▪ 자동화 도구 및 자동하 테스팅 교육에 투자
◆ 모델 기반 테스팅
▪ 요구사항(개발 관련 문서) -> 테스트 모델링(UML 등 이용) -> Animate -> 테스트 케이스 자동 생성 (스크립트 패턴, 맵핑) -> 테스트 스크립트 생성 -> 테스트 수행
◆ 모델이란?
▪ 작은 오브젝트 : 다른 커다른 오브젝트를 대포함, 스케일링 가능 ▪ 모델은 "간결" - 작고 간결하여 테스팅 관점에서 수동으로 테스트 설계하는 것보다 저럼하며, 일부(한가지 측면)만 테스팅 하기 이해 "부분적 모델" 이 가능하다. ▪ 모델은 "정확" - 기대 "행위"를 기술해야 하며, UML의 여러 다이어그램을 복합적으로 이용
6.2 Effective use of tools:potential benefits and risks (K2)
6.2.1 테스팅에 대한 도구 지원의 잠재적인 혜택과 위험 (모든 도구에 대하여)
단순히 도구를 구입하거나 임대하는 것은 도구를 사용한 성공을 보증하지 않는다. 도구의 각 종류는 실질적이고 최종적인 혜택을 이루기 위한 추가적인 노력을 요구할 수 있다. 테스팅에 도구를 사용하는 것은 잠잭적인 혜택의 기회들 뿐 아니라. 위험 역시 가지고 있다.
도구를 사용하는 잠재적인 혜택은 다음을 포함한다.
• 반복적인 작업이 줄어든다. (e.g 회귀 테스티의 실행, 같은 테스트 데이터의 재입력, 그리고 코딩 표준에 대한 검사) • 더 많은 일관성과 반복 가능성 (e.g 도구에 의하여 실행된 테스트, 요구사항으로부터 유도된 테스트들) • 객관적인 평가(e.g 정적인 측정값, 커버리지와 시스템 행위) • 테스트와 테스팅의 정보에 대한 쉬운 접근 (e.g 테스트 진행사항, 부대사건 비율과 성능에 대한 통계와 그래프)
도구를 사용하는 위험은 다음을 포함한다.
• 도구에 대한 비현실적인 예상들 (쉬운 사용과 기능을 포함해서) • 도구의 초기 소개에 대한 시간, 비용 그리고 노력에 대한 과소평가 • 도구로부터 의미있고 연속적인 혜택을 얻기 위해 필요한 노력과 시간의 과소평가(테스팅 프로세스에 대한 변경 요청과 사용되는 도구의 계속되는 향상 방법을 포함해서) • 도구에 의하여 생성된 테스트 자산의 유지에 필요한 노력의 과소평가 • 도구에 대한 과도한 신뢰(테스트 디자인의 교체 혹은 수동 테스팅이 더 좋은 경우)
6.2.2 일부 도구 종류에 대한 특별한 고려사항들 (K1)
테스트 실행 도구 (Test execution tools)
테스트 실행 도구는 전기적으로 저장된 테스트를 구현하기 위하여 디자인된 스크립트를 재연한다. 이것은 때때로 중요한 혜택을 얻기 위해 많은 노력을 요구하는 도구의 종류이다.
수작업 테스터의 행위들을 기록함으로써 테스트를 추출하는 것은 매력적으로 보일수 있지만, 이러한 접근 방법은 많은 수의 테스트에게까지 규모가 확장되지 않는다. 추출된 스크립트는 각각 스크립트의 부분으로 특정 테이터와 액션을 선형적으로 표현한다. 이러한 종류의 스크립트는 예상되지 못한 이벤트가 일어날 때 불안정하게 될 수도 있다.
데이터 유도 방식(data-driven approach)은 테스트 입력(데이터)를 일반적으로 스프레드 쉬트로 분리한다. 그리고 테스트 데이터를 읽을 수 있는 더욱 일반적인 스크립트를 사용하고 여러가지 데이터를 가지고 동일한 테스트를 수행한다. 스크립트 언어에 익숙하지 않은 테스터들은 미리 정의된 스크립트에 대한 테스트 테이터를 입력 할 수 있다. 핵심어 유도 방식(keyworkd-driven approach)에서는 스프레드 쉬트는 처리해야 하는 액션을 설명하는 핵심어(실행어라 불린다.)와 테스트 데이터를 포함한다. 테스터들은(심지어 스크립트 언어에 친숙하지 않다고 하더라도) 핵심어를 이용하여 테스트를 정의할 수 있으며, 테스트 되어야 하는 응용 프로그램에 대하여 맞출 수 있다.
스크립팅 언어에 대한 기술적인 전문 지식은 (테스터나 전문가에 의한 테스트 자동화에 있어서 모두) 모든 접근 방법에 대하여 필요하다.
어떠한 스크립팅 기법이 사용되었던간에, 각각의 테스트에 대한 예상 결과는 나중의 비교를 위하여 저장되는 것이 필요하다.
성능 테스팅 도구
성능 테스팅 도구는 테스트를 디자인하고 결과를 해석하는 것을 돕기 위해 성능 테스팅에 전문적 기술을 가진 사람이 필요하다.
정적 분석 도구
소스 코드에 적용된 정적 분석 도구는 코딩 표준을 강제할 수 있지만, 기존 코드에 적용하게 된다면 많은 수의 메시지를 생성 할 수도 있다. 경고 메세지는 코드로 부터 실행 가능한 프로그램을 생성하는 것을 중단시키지 않지만, 이상적으로 처리된다면, 코드의 유지보수는 미래에도 더욱 쉬워질 것이다. 일부 메시지를 제외한 초기 필터를 가지고 하는 점차적인 구현은 효과적인 접근 방법이 될 수 있다.
테스트 관리 도구
테스트 관리 도구는 조직의 현재 필요한 가장 최적의 형식으로 정보를 생성하기 위하여 스프레드 쉬트나 다른 도구와 인터페이스하는 것이 필요하다. 보고서는 혜택을 제공하기 이하여 설계되고 모니터되는 것이 필요하다.
6.3 Introducing a tool into an organization
조직에 도구를 소개하는 것에 대한 주요한 원칙들은 다음을 포함한다.
• 도구에 의하여 향상된 테스트 프로세스에 대한 기회들에 대한 확인과 조직의 성숙도, 강점과 약점에 대한 평가 • 명확한 요구사항과 객관적인 특성에 대한 평가 • 요구 기능을 테스트하고 개발된 제품이 개발 목적을 만족시키는지를 결정하기 위한 개념의 증명
• 벤더의 평가 (트레이닝, 지원, 그리고 상업적인 측면을 포함한) • 툴의 사용에 있어서 코칭(coaching)과 멘토링(mentoring)을 위한 내부적인 요구사항의 정의
중요한 문제가 발견되고 파일럿 프로그램이 성공적이지 않다면, 이것의 영향(impacts)을 최소화 시키기 위해서 작은 규모의 파일럿 프로젝트를 수행함으로서 개념의 증명(proof-of-concept)가 행해질 수 있다.
파일롯 프로젝트는 다음의 목적을 가진다.
• 도구에 대하여 자세하게 배운다. • 어떻게 도구가 기존의 프로세스와 습관에 맞추어질 수 있는지를 살펴보고, 어떻게 변경될 수 있는지를 알아본다. • 도구를 사용, 관리, 저장, 그리고 유지하는 기준 방법을 결정하고, 테스트 한 것을 평가한다.
(e.g 파일이나 테스트들에 대한 명명 규칙을 정하고, 라이브러리 생성과 테스트 슈트의 모듈성(modularity)를 정의) • 적당한 비용으로 혜택을 얻을 수 있는지 평가한다.
조직안에서 도구의 개발에 대한 성공 요소는 다음을 포함한다.
• 조직의 나머지 부분에 대하여 점차적으로 도구를 공개 • 도구의 사용에 적합하기 위한 프로세스의 적용과 향상 • 훈련의 제공과 새로운 사용자에 대한 코칭/멘토링 • 사용 가이드라인의 정의 • 도구의 사용으로부터 배운 교훈의 적응 방법 • 도구 사용과 혜택에 대한 메토링
1. 속도 - 자동화된 테스트는 수동으로 테스트를 실행하는 것보다 빠르다. 2. 효율성 - 테스트에 걸리는 시간을 줄여주고, 테스트 계획을 세우고 새로운 테스트를 생각한 시간을 더 많이 가질 수 있다. 3. 정확성과 정밀도 - 테스트 도구를 사용하면 같은 테스트를 여러번 수행하고 매번 완벽하게 결과를 확인할 수 있다. 4. 지속성 - 테스트 도구와 자동화는 지치거나 포기하지 않고 지시한 작업을 원하는 만큼 반복시킬 수 있다.
최고의 인재를 뽑아서 최고의 팀을 만들자 ! 최고 수준에 있는 소프트웨어 개발 엔지니어들의 생산성과 품질은 일반 수준의 프로그래머들에 비해서 무려 10배 이상 높으며, 여러 명의 평범한 프로그래머들이 아무리 오래 작업해도 탁월한 프로그래머가 만들어낼 수 있는 그런 수준의 제품을 결코 만들어낼 수 없다고 한다. 정말 그런가? 그렇다면 탁월한 개발자를 찾지 않을 회사가 어디에 있겠는가? 당연한 얘기다.
조엘 스폴스키는 마이크로소프트에서 근무했던 다년간의 경험과 포그 크릭 소프트웨어 사를 공동 창업했던 체험을 토대로 최고 수준의 개발 엔지니어들을 채용하는 핵심 비법과 함께 채용한 최고의 인재들로 최고의 팀을 만들기 위한 여러 가지 실천 방안을 제시하고 있다.
최고의 인재 뽑기
• 인턴십을 이용한 고급 인력 미리 확보하기
• 최고급 인재들이 일하고 싶어하는 직장 만들기
• 좋은 이력서 골라내는 방법, 인터뷰 요령, 언제 취업 제의를 할지 결정하기 최고의 팀 만들기
• 최고의 환경에서 최상의 성과가 나온다.
• 인센티브를 자제하라
• 이미지 관리 방법 - 회사의 목표에 대해서 공감대를 느끼게 하라.
저자 : 조엘 스폴스키
소프트웨어 개발 프로세스 분야에 있어서 세계적으로 인정받는 전문가이다. 그가 만든 웹사이트 www.joelonsoftware.com은 세계 전역의 소프트웨어 개발 엔지니어나 회사들에게 널리 알려져 있을 뿐 아니라, 그가 이곳에 올린 수많은 글들을 모아서 출간한 ‘조엘 온 소프트웨어’는 그간 30개 이상의 언어로 번역됨으로써 그의 높은 명성을 실감나게 해주고 있다.
역자 : 이석중
바른번역 소속으로 전자공학사와 경영학 석사를 전공하고 20년간 제조업체의 실무 경험과 해외 경험을 통해 얻은 지식을 바탕으로 경영과 기술 분야에서 다양한 번역 경력을 보유하고 있다.
목차
옮긴이 소개.
지은이 소개.
머리말
1 장 고음(高音)에 능한 성악가
2 장 최고 수준의 소프트웨어 개발 인재 발굴
3 장 프로그램 개발자들에 관한 현장 지침
4 장 이력서¬ 분류 방법
5 장 전화¬ 인터뷰
6 장 게릴라식 인터뷰 방식
7 장 최적의 팀 구성
부록 조엘 테스트 (Joel Test)
찾아 보기
# 2007.11.12 ~
사실 내가 인사팀 업무를 할 것도 아니고, 앞으로도 이런 기회는 없을테지만, 그럼에도 불구하고 이 책을 집어서 읽고 있는 이유는... 지금 하고 있는 일이 유사해서... 그리고 지금 새로운 사람들을 선발하고 있기에 그렇다.
조금 성격은 틀리지만, 개발을 하고 있는 학생들을 선발해서 길러야 하는 입장에서 똑똑한 예비개발자들을 선발하기 위해서 어떻게 해야할지 책을 읽으며 고민 좀 해봐야겠다.
"조엘온소프트웨어"를 너무 너무 재미있게 읽었고, 또 감명을 받았기에 사실 이 책은 별로 읽고 싶지 않았지만 "조엘"이라는 이름 하나만으로도 읽게 되었다.
# 2007.11.13
- 브룩스의 법칙(Brooks' Law) : 진도가 느린 소프트웨어 프로젝트에 작업 인력을 보충하면 오히려 속도가 더 느려진다.
- 평범한 프로그래머들이 아무리 오래 작업해도 탁월한 프로그래머가 만들 수 있는 수준의 제품은 결코 만들 수 없다.
『행복한 프로그래밍 : 컴퓨터 프로그래밍 미학 오디세이』의 다음 책으로 『행복한 프로그래밍』에서는 전문적이고 기술적인 내용보다는 일반적인 독자들까지 고려한 가벼운 내용을 주로 다루었다. 이번 책 『누워서 읽는 알고리즘』은 기술적인 깊이가 (저자의 표현에 의하면) '반걸음' 정도 다가간 시도로 실전 프로그래밍을 업으로 하는 사람들과 하는 편안하고 즐거운 알고리즘에 관한 '수다'를 담고 있다. 이 책에 등장하는 알고리즘은 일반적인 알고리즘 교과서에서 흔히 볼 수 있는 정렬(sort), 검색(search), 이진트리(binary tree), 리스트(list), 퇴각 검색(backtracking), 해시(hash), 유클리드(Euclid) 알고리즘, 동적 프로그래밍 (dynamic programming) 등과 같이 익숙한 것과 팰린드롬(palindrome), 둠스데이(doomsday), 사운덱스(soundex), 메르센느 소수(mersenne prime) 처럼 많이 알려지지 않은 것으로 이루어져 있다. 1장과 2장은 이러한 알고리즘으로 가볍게 수다를 떨고, 3장과 4장은 다른프로그래머가 작성한코드를 함께 감상해 볼 수 있도록 구성되어 있다.
이 책은 딱딱한 알고리즘 이론서가 아니다. 오히려 맛있는 읽을 거리를 만들기 위해서 알고리즘과 같은 기술적인 내용을 ‘동원한’ 책이다. 실전 프로그래밍을 업으로 삼고 있는 독자와 함께 가볍게 ‘수다’를 떨면서 우리가 매일 수행하는 ‘일’이 얼마나 재미있는지, 얼마나 아름다운지 그리고 얼마나 창조적인지, 또 문제를 해결해야 하는 상황에 처했을 때 해결 능력을 길러주기 위한 지침서이다.
현실세계와 유사한 재미있는 퀴즈 문제로 독자의 흥미를 유도하기도 하고 때로는 딱딱한 수학 문제로 긴장감을 고조시킨다. 지저분한 펄 코드가 등장하기도 하며 깔끔하고 읽기 쉬운 C 코드 또한 자주 등장한다. 정렬이나 탐색 리스트 등의 정통 알고리즘도 책의 곳곳에 녹여 부었다. 책을 읽는 도중 삽화나 특이한 그림을 보는 재미 또한 쏠쏠하다는 점도 이 책의 부수적인 장점이다.
저자 : 임백준
현재 미국 루슨트 테크놀로지스의 네트워크 운용 소프트웨어 그룹에서 소프트웨어 설계자로 일하고 있다. 한빛미디어와 함께 다수의 컴퓨터 서적을 번역했고, 2003년 5월에는 『행복한 프로그래밍: 컴퓨터 프로그래밍 미학 오디세이』(한빛미디어, 2003)를 출간했다. 인터넷 신문 「프레시안」 외 여러 매체에 칼럼을 기고하고 있다.
목차
머리말
1장. 재즈로 여는 아침의 향기
01. 누워서 읽는 알고리즘
02. 퍼즐로 풀어 보는 알고리즘의 세계
03. 데이터 구조 정의하기
04. P를 출력하는 프로그램 P
05. 숨어 있는 버그를 찾아라
06. 톡톡 튀는 알고리즘 만들기
07. 팰린드롬의 세계
08. 콘웨이의 둠스데이 알고리즘
2장. 록과 함께 하는 정오의 활기
01. 정렬 알고리즘
02. 검색 알고리즘과 최적화 문제
03. 동적 프로그래밍
04. 해시 알고리즘
05. 사운덱스 검색 알고리즘
06. 수도사 메르센느
07. 프로그래머가 느끼는 성취감의 본질
08. 문학적 프로그래밍
3장. 하드코어로 달아오르는 뜨거운 오후
01. 유클리드 알고리즘
02. 재귀의 마술
03. 리베스트, 샤미르, 에이들맨의 수학 게임
04. RSA 알고리즘
05. 잠깐 쉬어 가기
06. RSA 알고리즘 - 계속
07. 세 줄짜리 펄 프로그램
08. 해커들이 작성한 시(詩) 이해하기
09. 두 줄짜리 RSA 알고리즘
4장. 클래식으로 마무리하는 차분한 저녁
01. N개의 여왕 문제
02. 눈으로 풀어 보는 N개의 여왕 문제
03. 문제 속에 숨어 있는 단편적인 알고리즘
04. 재귀와 스택
05. 제프 소머즈의 알고리즘
06. 비트 연산자 복습하기
07. 2의 보수
08. 제프 소머즈 알고리즘 분석
참고 문헌 및 웹사이트
이 책에서 소개한 알고리즘
# 2007.06 ~ 2007.07
정말 재미있게 읽은 책이다. 딱, 내가 원하는 그런 내용들이었고, 딱 내가 원하는 수준의 내용이어서 너무나 마음에 든 책이다. 이 책을 읽고선 나머지 '임백준'씨의 책들을 전부 사서 읽었다. 이 책을 읽고는 감동은 아니어도 공부에 대한 자극은 충분히 받았다.
최근에 '뉴욕의 프로그래머'라는 책이 나왔던데... 그 책을 사서 보려다보니 다시 이 책이 떠올라서 이렇게 브로그에 흔적을 남긴다.
음, 얼마 후면 이 책의 내용을 다시 한 번 써먹을 일이 생길 것 같아서 역시나 이 책을 다시 한 번 봐야할 것 같다.