Top

소프트웨어 엔지니어링 생산성 돌아보기

  • 원서명Rethinking Productivity in Software Engineering (ISBN 9781484242209)
  • 지은이케이틀린 샤도우스키(Caitlin Sadowski), 토마스 짐머만(Thomas Zimmermann)
  • 옮긴이김무항
  • ISBN : 9791161757278
  • 33,000원
  • 2023년 02월 28일 펴냄
  • 페이퍼백 | 368쪽 | 188*235mm
  • 시리즈 : 소프트웨어 아키텍처

책 소개

요약

다양한 분야와 산업에 종사하는 독자들이 이 책으로부터 많은 점을 배울 수 있을 것이다. 개인 생산성을 향상시키고자 하는 개발자들은 업무 진척을 방해하는 일반적인 문제들을 극복하기 위한 효과적인 전략을 배울 수 있다. 또한 프로그래머와 팀의 생산성 측정을 위한 내부 프로그램을 만들고자 고민 중인 조직은 생산성 측정에 있어 업계와 연구원들로부터 모범 사례를 살펴볼 수 있다. 또한 연구원들은 이 책의 개념적인 프레임워크와 풍부한 문헌들을 활용해 새로운 연구 방향을 효과적으로 추구할 수 있다.

이 책의 구성

이 책은 다섯 가지 주제로 구성된다. 우선, 생산성을 측정할 때 어려운 점을 이야기하면서 시작할 것이다. 다음으로 생산성을 각 구성 요소로 세분화하는 데 초점을 맞춰 이야기를 진행하고, 생산성 요소를 규명하고 생산성에 대한 다른 관점을 부여할 수 있도록 내용을 이어갈 것이다. 생산성은 보통 측정하기 어렵다. 하지만 생산성의 일부 측면을 측정하는 데 집중한 특정 사례 연구도 포함했다. 마지막으로 생산성을 증대하는 데 효과가 있는 지침에 관한 이야기로 책을 끝낼 것이다.

저자/역자 소개

지은이의 말

독일의 다그스튤(Dagstuhl)에서 있었던 일주일간의 워크숍에서 이 책은 시작됐다. 세미나는 두 가지 이유에서 개최됐다. 하나는 1980년대와 1990년대 이후로 많은 것이 변했다는 점이고, 또 다른 하나는 현대 소프트웨어 엔지니어의 생산성을 높이려면 무엇이 필요한지 재조명해 봐야 하는 시기였기 때문이다.
그럼 1980년대와 1990년대 이후로 무엇이 변했을까? 오늘날의 소프트웨어 팀과 엔지니어는 전세계적으로 활동한다. 또한 소프트웨어 엔지니어는 국경을 넘고 시간대를 넘어서 협력하며 신속하게 변화하는 소프트웨어 개발 업무를 한다. 종종 엔지니어는 스택 오버플로(Stack Overflow)와 깃허브(GitHub) 같은 소셜 코딩 도구를 사용하기도 하고 노트북이나 개인용 전자기기에서 작업을 하기도 한다. 오늘날의 소프트웨어 엔지니어는 전례 없는 복잡한 작업을 하고 클라우드 안에서 큰 시스템을 구축하기도 한다. 또한 단일 저장소에 수백만 줄(가끔 몇십억 개)의 코드를 저장할 수 있고, 하루에도 몇십 번씩 소프트웨어를 배포할 수 있다. 이들은 웹 검색이나 블로그, 질의 사이트나 소셜 네트워킹 사이트 등과 같은 대화 채널을 평균 11.7개가량 사용한다. 1984년에는 소프트웨어 엔지니어는 직접 만나거나 전화 통화를 통해 대화해야 했다. 사람과 컴퓨터의 상호작용(HCI, Human-Computer Interaction), 컴퓨터 보조 공동 작업(CSCW, Computer-Supported Cooperative Work) 커뮤니티가 지식 노동자의 생산성을 높이는 데 엄청난 기여를 했고 이는 소프트웨어 엔지니어에게도 적용할 수 있었다. 더욱이 소프트웨어 개발에 관한 폭넓은 데이터를 사용할 수 있게 돼 소프트웨어 생산성의 정교한 분석도 가능해졌다.
시작이 된 세미나의 목표는 소프트웨어 개발에 있어서 생산성 이슈를 재고하고 토론해 소프트웨어 개발자의 생산성을 측정하는 방법과 생산성을 증진하기 위한 방법을 알아내는 것이었다. 세미나에서 이뤄진 토론은 다음 질문에 중점을 뒀다.

● 생산성이 개인과 팀, 조직에 어떤 의미일까?
● 생산성의 규모와 요소는 무엇인가?
● 생산성을 측정하는 목적과 의미는 무엇인가?
● 생산성을 연구하는 데 있어 가장 큰 도전 과제는 무엇인가?

이 책은 현대 소프트웨어 개발에서 생산성이 의미하는 바가 무엇인지 탐구할 것이다. 각 장은 다그스튤 세미나에 참여했던 사람과 그 외 수많은 전문가가 집필했다. 우리의 목적은 소프트웨어 생산성에 대한 전문가의 이해, 경험, 지혜를 요약하고 이를 알리는 것이다.

편저자 소개

케이틀린 샤도우스키(Caitlin Sadowski)

캘리포니아 마운틴 뷰(California Mountain View)의 구글(Google)에 근무하는 소프트웨어 엔지니어다. 구글에서 개발자들의 작업 흐름을 판단하고 개선하는 일을 한다. 또한 크롬 메트릭스(Chrome Metrics) 팀의 관리자로서 크롬 개발자들이 데이터를 기반으로 한 결정을 할 수 있도록 돕는다. 이전에는 구글에서 정적 분석을 의미 있게 만들고자 트라이코더(Tricorder) 프로그램 분석 플랫폼을 만들었다. 그와 더불어 공학 생산성 연구 팀(Engineering Productivity Research team)을 꾸려서 개발자들이 어떻게 그들의 시간을 소비하고 어떻게 하면 프로그래머가 효율적일 수 있을지에 대한 실질적인 조언을 했다. 저명한 소프트웨어 엔지니어링 위원회와 프로그래밍 언어 협회(ICSE, ESEC/FSE, OOPSLA, PLDI)의 위원이다. 산타 크루즈(Santa Cruz)에 있는 캘리포니아 대학교(University of California)에서 박사 학위를 받았는데, 그곳에서 프로그래밍 언어와 소프트 엔지니어링, 인간과 컴퓨터의 상호작용에 관한 폭넓은 주제를 연구했다.

토마스 짐머만(Thomas Zimmermann)

마이크로소프트 리서치(Microsoft Research)의 수석 연구원이다. 마이크로소프트 연구소에서 데이터를 분석하는 일을 한다. 최근에 마이크로소프트에서 소프트웨어 개발자와 데이터 과학자의 생산성에 관해 연구한다. 이전에 디지털 게임이나 브랜치 구조와 버그 리포트 데이터를 분석했다. 임피리컬 소프트웨어 엔지니어링(Empirical Software Engineering) 저널의 공동 편집자이며 여러 저널(Software Engineering, IEEE Software, Journal of Systems and Software, Journal of Software: Evolution and Process)의 IEEE 트랜잭션(IEEE Transaction)의 편집국 일을 돕는다. 저명한 소프트웨어 엔지니어링 위원회의 회원이며 ACM SIGSOFT의 의장이다. 또한 『Recommendation Systems in Software Engineering』(Springer, 2014)과 『Perspectives on Data Science for Software Engineering』(Morgan Kaufmann, 2016)을 편집했다. 자를란트 대학교(Saarland University)에서 박사학위를 받았고 마이닝 소프트웨어 저장소에 관한 연구를 했다.

옮긴이의 말

소프트웨어 엔지니어링 생산성에 관한 이런저런 멋진 말 대신, 역자로서 구매했거나 구매를 망설이고 있는 여러분께 이 책의 특성과 차별점을 간단히 소개하고 싶다.

이 책의 내용은 딱딱하지 않다!
처음에 이 책의 번역을 맡았을 때, 책의 구성을 보고 세미나에서 발표한 연구들의 모음집일 것이라 생각했고, 다소 지루한 내용이 가득할 것이라 생각했다. 하지만 번역을 하면 할수록 이러한 생각은 180도 바뀌었다. 몇 가지 예를 들자면, 1장 ‘생산성이 10배 이상이라고 알려진 전설의 프로그래머’는 이해를 돕기 위해 대화 형식으로 구성돼 있으며, 대화 속의 주인공들은 반론에 반론을 거치며 소프트웨어 생산성이란 무엇인지에 관해 깊은 성찰을 할 수 있도록 돕는다. 2장에서는 생산성 측정에 관한 내용을 다루며, 구글에서의 사례를 통해 글로벌 선두업체에서 실제 생산성 측정을 어떤 식으로 진행했는지 소개한다. 세미나에서 소개된 연구 모음집이긴 하지만, 실제 각 연구의 내용은 이해를 돕기 위한 참신한 구성과 실전 사례를 통해 독자들의 흥미를 자극한다.

다양한 관점에서 살펴볼 수 있다!
한 명의 저자가 소프트웨어 엔지니어링의 역사와 정의부터 사례, 전략을 저술한 것이 아니라, 여러 다양한 기관의 다양한 전문가의 연구를 살펴볼 수 있기 때문에 소프트웨어 엔지니어링의 생산성을 다양한 시각에서 볼 수 있다.

내용이 쉽다!
소프트웨어 엔지니어링에 대한 전문 지식이 없는 독자들도 쉽게 접할 수 있도록 구성됐다. 소프트웨어 엔지니어링 전문가가 아니더라도 소프트웨어 개발과 연관이 있는 사람이라면 누구나 쉽게 이해할 수 있다. 일반적인 소프트웨어 엔지니어링 혹은 소프트웨어 아키텍처 책은 소프트웨어 개발 방법론을 심도 있게 소개하거나 소프트웨어 아키텍처의 품질 속성을 자세하게 다루지만, 이 책은 소프트웨어 개발과 직간접적으로 연관된 사람이라면 에세이 읽듯이 쉽게 살펴볼 수 있다.

소프트웨어 생산성이 무엇인지 스스로 돌아보게 된다!
이 점이 가장 중요한 부분이다. 이 책은 생산성 측정에 관한 오해를 풀어주는 것을 시작으로 소프트웨어 생산성이 무엇인지, 어떤 요인들이 생산성에 영향을 주는지, 실전에서의 생산성 측정 사례를 소개하고, 마지막에 생산성 모범 사례로 마무리한다. 이러한 잘 짜인 체계적인 구성과 각 구성에서 소개하는 연구들을 따라가다 보면 이 책을 다 읽을 무렵 스스로 소프트웨어 생산성이 무엇인지 돌아보게 될 수 있다.

여러분들도 이 책을 통해 소프트웨어 엔지니어링의 생산성이 무엇인지에 관한 큰 통찰력을 얻을 수 있길 바란다.

옮긴이 소개

김무항

위치 기반 서비스, 증강 현실, 보안 등 다양한 분야에서 연구와 개발을 했다. 기술 번역에 관심이 많다. 에이콘출판사에서 펴낸 『드루팔 사용하기』(2013)와 『프로그래머처럼 생각하기』(2014), 『PHP와 MariaDB를 활용한 웹 애플리케이션 개발』(2016), 『파이썬으로 처음 시작하는 코딩』(2018), 『소프트웨어 아키텍처 이론과 실제 4/e』(2022) 등을 번역했다.

목차

목차
  • 1장. 생산성이 10배 이상이라고 알려진 전설의 프로그래머
    • 작업 시간 변동성 데이터
    • 동질성 유지하기
    • 작업 시간 표의 실제 의미 파악하기
    • 한 가지 프로그래밍 언어만 고집하지 않은 경우
    • 기준 집단에 대한 의문
    • 이것은 개발 노력에 관한 것만은 아니다
    • 속도가 느린 프로그래머들이 더 신중할까?
    • 부차적인 요소가 중요할 수 있다
    • 생산성의 정의에 관한 재논의
    • 실제 사람들은 어떻게 일을 할까?
    • 그래서 어떻게 해야 하나?
    • 핵심
    • 참고 문헌

  • 2장. 한 가지 지표로는 생산성을 측정할 수 없다
    • 각 프로그래머의 생산성을 측정하는 것은 과연 무엇이 잘못됐는가?
    • 왜 사람들은 개발자의 생산성을 측정하고 싶어할까?
    • 한 가지 생산성 지표만 사용하는 것이 왜 잘못될 수밖에 없을까?
      • 생산성은 넓은 범위의 개념이다
      • 한 가지 지표로 단순화하거나 한 가지 측면의 구성 요소들을 조합하는 것은 어렵다
      • 교란 변수들
    • 대신 구글에서 무엇을 했나?
    • 핵심
    • 참고 문헌

  • 3장. 생산성을 측정해서는 안 되는 이유
    • 의도치 않은 결과
    • 생산성에 관한 설명
    • 변화에 대응하기
    • 측정자 역할을 하는 관리자
    • 핵심

  • 4장. 소프트웨어 엔지니어링에서 생산성 정의하기
    • 소프트웨어 생산성의 짧은 역사
    • 일반 문헌 용어
      • 생산성
      • 수익성
      • 성과
      • 효율성과 효과성
      • 품질의 영향
    • 소프트웨어 생산성에 대한 통합된 정의
    • 요약
    • 핵심
    • 감사의 말
    • 참고 문헌

  • 5장. 소프트웨어 개발 생산성 프레임워크
    • 소프트웨어 개발의 생산성 측면
      • 속도
      • 품질
      • 만족도
    • 렌즈
    • 생산성 프레임워크 시작! 목표, 질문, 지표를 구체화하기
      • 첫 번째 예: 개입을 통한 생산성 개선
      • 두 번째 예: 미팅이 어떤 식으로 생산성에 영향을 미치는지 이해하기
    • 주의 사항
    • 핵심
    • 참고 문헌

  • 6장. 개인, 팀, 조직, 시장: 생산성의 네 가지 렌즈
    • 개인
    • 조직
    • 시장
    • 전 영역에 걸친 생산성
    • 핵심
    • 참고 문헌

  • 7장. 지식 노동의 관점에서 바라본 소프트웨어 생산성
    • 지식 노동의 간단한 역사
    • 생산성을 측정하기 위한 기법
      • 결과 중심 측정 기법
      • 프로세스 중심 측정 기법
      • 사람 중심 측정 기법
      • 다중 요소 기반 측정 기법
    • 생산성에 영향을 주는 요인
    • 소프트웨어 개발자 vs 지식 노동자: 비슷한가 또는 다른가?
    • 요약
    • 핵심
    • 참고 문헌

  • 8장. 생산성에 영향을 주는 요인: 체크리스트
    • 소개
    • 생산성 요인 연구의 간단한 역사
    • 기술적인 요인 목록
      • 제품 요인
      • 프로세스 요인
      • 개발 환경
    • 소프트 요인 목록
      • 회사 문화
      • 팀 문화
      • 개인의 기술과 경험
      • 업무 환경
      • 프로젝트
      • 요약
      • 핵심
      • 감사의 말
      • 부록: 문헌 조사 방식
      • 참고 문헌

  • 9장. 개입이 어떤 식으로 생산성에 영향을 미치는가?
    • 소개
    • 통제 실험
      • 실험의 목적은 무엇인가?
      • 전형적인 개입 실험
      • 개입으로 인해 지장이 초래되는 정도를 어떻게 측정할까?
      • 개입은 실수를 초래한다
      • 실제 환경에 적용해 보기
      • 요약 - 통제 실험
    • 인지 모델
      • 인지 모델은 무엇인가?
      • 인지 모델이 개입이 생산성에 미치는 영향에 관해 무엇을 예측할 수 있는가?
      • 요약: 인지 모델
    • 관찰 연구
      • 일터에서의 관측 연구
      • 개입의 장점과 단점
      • 스트레스, 개인 간 차이, 개입
      • 생산성
      • 개입을 처리하기 위한 전략
      • 요약: 관찰 연구
    • 주요 시사점
    • 핵심
    • 감사의 글
    • 참고 문헌

  • 10장. 소프트웨어 엔지니어의 행복과 생산성
    • 업계가 개발자들의 행복을 중시해야 하는 이유
    • 행복이란 무엇이며 어떻게 측정할 수 있을까?
    • 행복하고 생산적인 개발자들의 과학자 근거
      • 개발자들은 얼마나 행복한가?
      • 무엇이 개발자를 불행하게 만드는가?
      • 개발자가 행복하거나 불행할 때 무슨 일이 일어나는가?
      • 행복한 개발자가 더 생산성이 높은가?
    • 행복이 다른 결과물에 미치는 잠재적인 영향
    • 미래엔 어떻게 될까?
    • 추가 참고 목록
    • 핵심
    • 참고문헌

  • 11장. 애자일의 어두운 면: 사람을 인간이 아닌 자산으로 인식
    • 애자일 선언문 재논의
    • 글로벌 아웃소싱 환경에서의 애자일
    • 생산성을 높이기 위한 업무 추적
    • 생산성을 모니터링하기 위한 일일 스탠드업 미팅
    • 스트레스 가득한 업무 환경
    • 생산성 비용
    • 소프트웨어 엔지니어링의 생산성에 관한 미결 문제들
    • 핵심
    • 감사의 글
    • 참고문헌

  • 12장. 생산성에 관한 개발자의 인식 차이
    • 생산성 정량화 - 측정 vs 인식
    • 소프트웨어 개발자의 생산성 인식 연구
    • 작업 전환 비용
    • 개발자에게 생산적인 하루는 어떤 모습일까?
    • 개발자마다 생산성을 정량화하기 위한 다른 측정치를 기대한다
    • 생산성에 대한 인식을 기준으로 소프트웨어 개발자의 특성 구분하기
    • 개발자 생산성을 향상하기 위한 기회
    • 핵심
    • 참고 문헌

  • 13장. 인간 중심으로 생산성을 높이기 위한 방법
    • 핵심
    • 참고 문헌

  • 14장. 바이오메트릭 센서를 사용한 생산성 측정
    • 측정을 위한 생산성 정의
    • 눈으로부터 집중에 관해 알 수 있는 것
    • 뇌전도를 활용한 주의 관찰
    • 반추에 빠진 정도 측정하기
    • 시사점
    • 핵심
    • 참고 문헌

  • 15장. 팀 활동 전반에 대한 파악이 개발자 생산성에 관한 인식에 영향을 미치는 방식
    • 소개
    • 파악과 생산성
    • 협업 소프트웨어 개발을 위한 파악 기능
    • 파악 정보를 숫자로 종합하기
    • 파악 정보를 텍스트 형태로 종합하기
    • 생산성과 팀 활동에 대한 파악에 관한 재검토
    • 핵심
    • 참고 문헌

  • 16장. 소프트웨어 엔지니어링 대시보드: 유형, 위험, 미래
    • 소개
    • 소프트웨어 엔지니어링의 대시보드
      • 개발자 활동
      • 팀 성과
      • 프로젝트 모니터링과 성과
      • 커뮤니티 상태
      • 요약
    • 대시보드 사용의 위험성
    • 소프트웨어 엔지니어링 관점에서 본 대시보드
    • 핵심
    • 참고 문헌

  • 17장. 생산성의 업무-출력 구성 요소를 측정하기 위한 COSMIC 방법
    • 기능적 크기의 측정
    • COSMIC 방법
    • COSMIC 모델에 관한 논의
    • COSMIC 크기와 개발 노력 간의 상관관계
    • 자동화된 COSMIC 크기 측정
    • 결론
    • 핵심
    • 참고 문헌

  • 18장. 벤치마크: 사과와 사과 비교하기
    • 소개
    • 표준 사용
      • 기능적 크기 측정
    • 벤치마크 목적
    • 벤치마크 표준 방법
    • 정규화
    • 벤치마크 데이터 공급원
      • ISBSG 리포지터리
      • 내부 벤치마크 데이터 리포지터리
      • 벤치마크 활용 예
    • 잘못된 동기 부여
    • 요약
    • 핵심
    • 참고 문헌

  • 19장. 생산성을 높이기 위한 소프트웨어 개발 낭비 제거
    • 소개
    • 소프트웨어 개발 낭비 분류 체계
      • 잘못된 기능 또는 제품 만들기
      • 잘못된 백로그 관리
      • 재작업
      • 과도하게 복잡한 해결책
      • 불필요한 인지 부하
      • 심리적 괴로움
      • 지식 손실
      • 대기/멀티태스킹
      • 효과적이지 못한 의사소통
      • 애자일 등장 이전 개발 방법론을 사용한 프로젝트에서 발생하는 추가적인 낭비
    • 논의
      • 모든 문제가 낭비인 것은 아니다
      • 낭비 줄이기
    • 결론
    • 핵심
    • 참고 문헌

  • 20장. 조직 성숙도: 생산성에 영향을 주는 코끼리
    • 배경 지식
    • 프로세스 성숙도 프레임워크
    • 생산성과 품질에 대한 성숙도의 영향
    • 애자일 개발 및 운영 환경에 맞게 성숙도 실천법 수정하기
    • 요약
    • 핵심
    • 참고 문헌

  • 21장. 짝 프로그래밍이 효과적인가?
    • 소개 - 매우 생산적인 프로그래밍
    • 짝 프로그래밍 연구
    • 지식 업무로서 소프트웨어 개발
    • 산업 현장에서 짝 프로그래밍 시 실제 중요한 점들은 무엇일까?
      • 짝 유형 A: 시스템 지식 우위
      • 짝 유형 B: 집단 시스템 지식 격차
      • 쌍 유형 C: 상호 보완적인 지식
    • 다시 한번 짝 프로그래밍은 효과적인가?
    • 핵심
    • 참고문헌

  • 22장. 직장에서 자가 모니터링을 위한 개발자의 핏빗 사용
    • 우리의 삶을 정량화하기 위한 자가 모니터링
    • 소프트웨어 개발자 업무 자가 모니터링
    • 개인화를 통한 다양한 개별적인 요구 사항 지원하기
    • 효율성에 대한 개발자의 인식을 높이는 자가 보고
    • 개발자의 자기 인식을 높이는 업무에 대한 회고
    • 생산적인 행동 변화를 이끄는 조치 가능한 깨달음
    • 팀 인식을 높이고 개인정보 보호 문제를 해결하기
    • 직장에서의 지속 가능한 행동 유도
    • 핵심
    • 참고 문헌

  • 23장. FlowLight를 이용해 업무 개입 줄이기
    • 업무 개입으로 인한 손실 비용
    • 플로라이트: 언제 개입해도 될지 알려 주는 등
    • 플로라이트 평가 및 유용성
    • 플로라이트의 핵심 성공 요인
      • 사용자에 대한 관심
      • 단순성 중시
      • 개인정보 보호에 대한 관심
      • 정확도가 아닌 가치에 집중
      • 사용자들의 의도치 않은 활용 방식
    • 요약
      • 플로라이트 설치
    • 핵심
    • 참고 문헌

  • 24장. 정보 흐름을 개선을 통한 생산적인 소프트웨어 개발
    • 마이린: 개인 소프트웨어 개발자를 위한 정보 흐름 개선
    • 태스크톱 싱크: 개발 팀을 위한 정보 흐름 개선
    • 태스크톱 인티그레이션 허브: 소프트웨어 개발 조직을 위한 정보 흐름 개선
    • 깨달은 점
    • 핵심
    • 참고 문헌

  • 25장. 생산성을 위한 잠재적인 툴 역할을 하는 마음챙김
    • 마음챙김 정의
    • 생산성을 위한 마음챙김
    • 마음챙김의 인지적 장점
    • 마음챙김과 감정적 지능
    • 마음챙김의 함정
    • 마음챙김 휴식
    • 결론
    • 핵심
    • 참고 문헌

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안