Programming Summary

방법론) 페어 프로그래밍이란? 본문

프로 디지털 아카데미 4기

방법론) 페어 프로그래밍이란?

쿠키롱킹덤 2024. 7. 3. 15:30

들어가기 전에

오늘은 KPT 회고를 활용하여 작성해보려 한다.

KPT 회고란?

KPT 회고

  • KPT 회고는 다양한 회고 방법론 중 하나이다. Keep, Problem, Try의 약자로 회고 내용을 세 가지 관점으로 분류하여 회고를 진행하는 방식이다. 이를 통해 3가지 관점에서 회고를 진행하여, 꼼꼼하고 효율적인 회고가 이루어질 수 있게 된다.

Pair Programming이란?

페어 프로그래밍은 애자일 소프트웨어 개발 방법론 중 하나로, 하나의 컴퓨터에서 두 사람의 프로그래머가 작업하는 방법이다.

위키 백과에는 이렇게 적혀있다. 페어 프로그래밍은 코드를 작성하는 사람이 진행자(driver)가 되고 다른 한 사람이 관찰자(observer, navigator)가 되어 코드 검토(code review)를 하며 프로그래밍을 작성한다. 두 프로그래머는 수시로 역할을 바꾼다. 일반적으로 5~10분 간격으로 전환을 한다.

이를 통해 다음과 같은 이점을 얻을 수 있다.

1. 집중력 향상
2. 버그 감소
3. 성장

다 너무 좋긴 하지만.. 너무 정신 없을 것 매일 하기는 힘들 것 같다..

아무튼 페어 프로그래밍의 역사를 간단히 살펴보면 페어 프로그래밍은 1998년 "Chrysler goes to Extremes"에서 Extreme Programming의 핵심 실천 방법 중 하나로 소개되었고, 나중에 XP의 원래 "12 가지 실천 방법"으로 공식화되었다. 그리고 나와 짝꿍은 이 페어 프로그래밍을 활용하여 (반강제적으로) Bubble Sort에 관한 코드를 작성하였다.

페어 프로그래밍 코드

Main.java


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {


    public static int[] input() throws Exception{

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bufferedReader.readLine());
        int[] arr = new int[n];
        StringTokenizer st = new StringTokenizer(bufferedReader.readLine());
        for(int i=0; i<n; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        return arr;
    }

    public static void output(int[] arr) throws Exception {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        bw.write("************\n");
        for(int num : arr) {
            bw.write(num + " ");
        }
        bw.write("\n************");
        bw.flush();
        bw.close();
    }

    public static void main(String[] args) throws Exception {
        BubbleSort bubbleSort = new BubbleSort(input());
        bubbleSort.sort();
        int[] arr = bubbleSort.getArr();
        output(arr);
    }
}

BubbleSort.java

public class BubbleSort {
    private final int[] arr;

    public BubbleSort(int[] arr){
        this.arr = arr;
    }

    public void sort() {
        for(int i = 0; i < arr.length; i++) {
            for(int j = i; j < arr.length; j++) {
                if(arr[j] < arr[i]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }

    }

    public int[] getArr() {
        return arr;
    }
}

음! 급조해서 짠 거 치고는 생각보다 마음에 드는 코드가 만들어진 것 같다. 이를 KPT 회고를 통해 회고 해보도록 하자.

KPT 회고

Keep

  • 팀원이 굉장히 잘 짰다.
  • 책임에 맞게 메서드 분리를 잘했다.

Problem

  • 변수명, 메서드 명이 애매하다.
  • BufferedReader는 bufferedReader, BufferedWriter는 bw로 되어있다.
  • output, input은 명사형이라 메서드 이름이 되기에 애매한 것 같다.

Try

  • 리팩토링 하기
  • VIew 클래스를 만들어 입/출력을 담당하게 하기

느낀점

페어 프로그래밍과 KPT 회고에 대해 배울 수 있었다. KPT 회고는 적용해볼만 하지만 페어 프로그래밍은 서로의 생각과 코드 스타일을 알거나, 아이스 브레이킹..? 하는데는 매우 좋을 것 같으나 매일 지속하기에는 생산성과 스트레스 측면에서 좋을 것 같지 않다. 코드 리뷰가 나와 더 적합할 것 같다는 생각을 하게 되었다.

참고

KPT 회고란?
애자일 연합 홈페이지 - 페어 프로그래밍
페어 프로그래밍 위키백과