[잡담]갈수록 코드가 개판이 되어갈때...어떻게 하십니까?

ed.netdiver의 이미지

냐하하하, 안녕하세요.

지금 열심히 스파게티를 만들고 있습니당.
하나의 문제를 해결하기 위한 꽁수가 시간이 지나서 다른 문제를 내고..
어흑, 빈곤의 악순환이랄까요?

돌아가기엔 너무 먼 길을 와버렸고,
대책없이 꼬여버린 코드앞에서 좌절...ㅠ.ㅠ;

아 언제쯤이면 시간이 지날수록 이뻐지고 먹음직스런 코드를 만들수 있을지 암담합니당...

여러분들은 혹시 이런 경험 없으신가요?
우문에, 그때그때 다른게 정답이겠지만, 이럴땐 어떻게 하는게 현명한 결정일까요?

역시, 냄비째 쓰레기통행?ㅎㅎ

그럼 좋은 하루하루 되세요~~~

maja의 이미지

그럴때는 코드를 보지 말고 고 명상을 해보세요.
그리고 이제 기존코드를 보지 말고 다시 짭니다.

몇백줄의 코드가 단 몇십줄로 줄어들겁니다.

신승한의 이미지

XP 라고 우깁니다. :lol:

ed.netdiver의 이미지

maja wrote:
그럴때는 코드를 보지 말고 고 명상을 해보세요.
그리고 이제 기존코드를 보지 말고 다시 짭니다.

몇백줄의 코드가 단 몇십줄로 줄어들겁니다.

어흑, 해봤는데 안돼요.ㅠ.ㅠ; 자꾸 머리속에서 가인이 예슬이가 아른거려요...ㅠ.ㅠ;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

whitekid의 이미지

refactoring 할 시간이군요..
먼저 testcase를...

What do you want to eat?

cppig1995의 이미지

int main()
{
  label1: goto label2
  //오류를 발생시키는 소스 코드
  label2: goto label3
  //오류를 발생시키는 소스 코드
  label3: return 1;
}

모든 유효한 코드는 오류를 발생시킵니다. :D

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

나는오리의 이미지

qed wrote:
maja wrote:
그럴때는 코드를 보지 말고 고 명상을 해보세요.
그리고 이제 기존코드를 보지 말고 다시 짭니다.

몇백줄의 코드가 단 몇십줄로 줄어들겁니다.

어흑, 해봤는데 안돼요.ㅠ.ㅠ; 자꾸 머리속에서 가인이 예슬이가 아른거려요...ㅠ.ㅠ;

나영양이 아니라서 그렇습니다.
creativeidler의 이미지

호옷, 정답이 있는 문제군요. ^^ whitekid님이 말씀하셨듯 리팩토링이 답인 듯 합니다. 코드에서 냄새 나는 부분을 찾아 리팩토링하세요.

http://c2.com/cgi/wiki?CodeSmell
http://c2.com/cgi/wiki?RefactorMercilessly

shji의 이미지

1. 보기싫은 코드를 가릴 수 있게 그것을 호출하는 예쁜 이름의 함수를 만들어 보이지 않도록 하십시오..

2. 문제를 일으키는 입력은 그 함수의 입력단에서 비교하여 에러처리를 해 주시구요..

3. 완성된 함수는 기능과 입출력, 에러코드를 문서화합니다..

4. 포장이 다 되었으면, 사용하실 분에게 넘겨주세요..

5. 원래 소스를 폐기 처분하시고 그냥 잊어버리세요
함수를 사용하시던 분이 불편하면 새로 작성해 쓰실겁니다 :-)

ed.netdiver의 이미지

shji wrote:
1. 보기싫은 코드를 가릴 수 있게 그것을 호출하는 예쁜 이름의 함수를 만들어 보이지 않도록 하십시오..

2. 문제를 일으키는 입력은 그 함수의 입력단에서 비교하여 에러처리를 해 주시구요..

3. 완성된 함수는 기능과 입출력, 에러코드를 문서화합니다..

4. 포장이 다 되었으면, 사용하실 분에게 넘겨주세요..

5. 원래 소스를 폐기 처분하시고 그냥 잊어버리세요
함수를 사용하시던 분이 불편하면 새로 작성해 쓰실겁니다 :-)

아 정말이지 오늘의 베스트 댓글로 포인트 10점 드리...고 싶습니다.^^;
특히 5번이 맘에 쏙 듭니다.ㅋㅋ

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

ㅡ,.ㅡ;;의 이미지

대부분그런것은 애초 구조설계자체가 잘못되어 있는경우입니다.
재대로 잡을래야 잡을수 없는 구조로 설계되어 있지요..
이런일들은 어떠한 정책수정이나 협의를 다시하지 않으면
완전히 깨끗해지지않습니다.
바꿀수 있는최대한 다뒤집어 보세요..


----------------------------------------------------------------------------

lifthrasiir의 이미지

개판 코드를 목표로 하고 개발해 보세요.

- 토끼군

ed.netdiver의 이미지

tokigun wrote:
개판 코드를 목표로 하고 개발해 보세요.

- 토끼군

오옷! 그런 방법이!!!+.,+;;
하지만, 그건 토끼군님 레벨이나 되야 가능하죠.
전 아마 컴파일도 못해보구 좌절하지 않을지...ㅋㅋ

역시 리팩토링이겠죠? 하지만 겁나...ㅠ.ㅠ;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

tasy의 이미지

리펙토링의 두려움을 극복하기 위해서는 UnitTest가 최선인 것 같습니다. 전 TestCase없는 코드는 리펙토링 하기가 너무 무섭네요.
ㅜㅜ

---------
Byeongweon Moon
http://tasy.jaram.org/blog
사랑하면 알게 되고 알면 보이나니 그때에 보이는 것은 전과 같지 않으리라.