패스 어라운드(Pass Around)
패스 어라운드(Pass Around) 패스 어라운드는 마치 책을 여러 사람이 돌려가며 읽는 것처럼, 코드를 여러 개발자들이 순차적으로 검토하는 방식이다. 각 리뷰어는 자신의 전문 분야나 관점에서 코드를 검토하고 피드백을 제공한다. 예를 들어, 한 개발자는 성능 관점에서, 다른 개발자는 보안 관점에서 같은 코드를 검토할 수 있다. 실제 패스 어라운드 프로세스의 예시: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 // 첫 번째 리뷰어 (성능 전문가)의 검토 public class DataProcessor { public List<Result> processData(List<Data> dataList) { // 성능 관련 코멘트: // "대용량 데이터 처리 시 메모리 문제가 발생할 수 있습니다. // 스트림을 사용하여 처리하는 것이 좋겠습니다." return dataList.stream() .filter(Data::isValid) .map(this::transform) .collect(Collectors.toList()); } } // 두 번째 리뷰어 (보안 전문가)의 검토 후 수정된 버전 public class DataProcessor { public List<Result> processData(List<Data> dataList) { // 보안 관련 코멘트: // "입력 데이터의 유효성 검증이 필요합니다. // 또한 처리 과정에서의 로깅이 필요합니다." if (dataList == null) { throw new IllegalArgumentException("Data list cannot be null"); } logger.info("Starting data processing for {} items", dataList.size()); return dataList.stream() .filter(this::validateData) .map(this::transform) .collect(Collectors.toList()); } } // 세 번째 리뷰어 (테스트 전문가)의 검토 후 추가된 테스트 코드 @Test public class DataProcessorTest { // 테스트 관련 코멘트: // "경계 조건과 예외 상황에 대한 테스트가 필요합니다." @Test void testProcessDataWithNullInput() { assertThrows(IllegalArgumentException.class, () -> processor.processData(null)); } @Test void testProcessDataWithEmptyList() { assertTrue(processor.processData(Collections.emptyList()).isEmpty()); } } 프로세스 코드 작성자가 리뷰 대상 코드를 공유 참여자들이 개별적으로 코드 검토 각자의 의견을 메일이나 시스템에 기록 코드 작성자가 피드백을 수집하고 필요한 수정 진행 패스 어라운드의 장점과 효과 다양한 관점에서의 검토 여러 전문가의 시각으로 코드를 검토할 수 있다: ...