소프트웨어 개발 방법론에 대해서

kws4679의 이미지

지금도 실력이 한참 미천한 학부생입니다.... 하지만 그런 주제에

소프트웨어 개발 방법론에 대해 약간 소홀히 하였던것 같습니다

코딩을 시작할때 계획하지 않고 무작정 컴퓨터에 앉아서 코딩하다가

고치고 수정하고 아예 설계 아키텍쳐 마저도 손대고 하다보면

어느새 스파게티 소스가 되어 있어서 지우고 다시 하는게 나을 정도로

였습니다. 그런데 작은 규모 프로젝트에서는 뭐 그래도 상관 없는데

어느정도 적당한 규모(사실 학부생이 규모가 큰걸 한다는게 전무하지만

그래도 제 수준으로 어느정도 규모가 큰...) 에서나 숙제 같이

시간내에 맞추어서 코딩해야 하는 프로젝트에서는 이러한 소프트웨어 개발

방법론이 정말 필요하다고 느꼈습니다.

이런 점에 있어서 선배님들은 어떤 프로젝트를 맡으실때 어떻게 계획하고

그리고 실제 계획한것이랑 코딩한것이랑 달라지는 경향이 많던데 이런 경우에는

어떻게 대처하시며 시간이 촉박한 상황에서는 어떻게 개발하시는지 조언을

듣고싶습니다!!!

shint의 이미지

그냥 만든 코드가 가장 오래간다.는 말이 있다죠?

1. 그냥 만든다. (그냥'이라고는 하지만. 노력한 결과물이겠죠.)
2. 구조를 알게 된다.
3. 더 잘만든 구조를 다른 프로젝트에 써먹는다. 1번 반복.

프로젝트를 새로 시작한다면. 3번.을 사용하게 될겁니다.
프로젝트 중반에 투입된다면 1번.을 하게 될겁니다.

만약. 3번을 프로젝트 중반에 하게 된다면.
기존 프로젝트가 정말 문제가 있거나.
프로젝트를 갈아엎어서 보다 업그레이드를 추진할 계획이 정해진 경우인거 같습니다.
아니면. 시간과 인력이 남아돌아서 구조를 개선하기 위해서 일 때도 있습니다.

구조를 알고 그냥 만드는것을 생각할 수 도 있습니다.
그건. 3번이 가능한 경우이거나 리드해줄 사람이 있는경우로 생각됩니다. 그래서 1번으로 가는겁니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

feanor의 이미지

버전관리 하시나요?
자동 테스트 하시나요?
리팩터링(요즘 남용되는 경향이 있어 이 단어 별로 좋아하지 않습니다만) 하시나요?

셋 중에 하나라도 아니라면 당장 "실용주의 프로그래머" 구해서 보세요.

소프트웨어 개발의 심오한 방법론들이 있는 것은 사실입니다만 기본 없이 그런 것을 해봐야 소용도 없고 기본을 잘 갖추는 것보다 더 큰 향상을 가져오지도 않습니다.

qustus의 이미지

동감합니다.
책이 다루는 내용이나 형식이나 전부 실용적이라 매우 좋더군요..
개념 자체는 어려운 게 아니라서 학부 때부터 익숙해지면 도움이 많이 될 것 같습니다.

JuEUS-U의 이미지

방법론(software development methodology) 보다는
소프트웨어 설계와 개발 계획에 대한 지식이 더 필요하다고 봅니다.

방법론이 중요하긴 하지만 중대형에서나 그렇고
머릿수가 셋 이하에다가 방법론에 익숙치도 않다면 적용해봤자 시간만 날립니다.

그리고 방법론이라는게 어차피 [기획-설계-디자인-이식]의 4단계 무한반복입니다.
차이가 있다면 주요 이벤트(demonstration, regression testing 등)의 배치라던지
구성원간의 커뮤니케이션, 피드백과 요구조건의 수용/처리 방법 등등의
자원(시간,인력,문서 등) 관리 방법 정도가 되겠네요.
그러니까 대학생이 아무리 으쌰으쌰 붙잡아도 어지간해선 의미가 없습니다.
필드에서 한번 뛰는게 가장 좋은 학습 방법이죠 - _-)

semmal의 이미지

shint님 말대로 일단 만들어보면, 더 잘보입니다.

보이는데로 다시 만들면, 더욱 더 잘보입니다.

그렇게 계속 만들면 됩니다.

그래도 부족함을 느낀다면 다시 수학책과 컴파일러를 공부해보세요.

소프트웨어를 버텀업으로 어떻게 만들어야 하는지 감이 옵니다.

------------------------------
How many legs does a dog have?

silveracy의 이미지

전 얼마전에 소프트웨어 공학과 객체지향 설계라는 과목을 들어서 대충 답변을 드릴 수 있을 것 같습니다.

1. 실제 계획한 것과 코딩한 것이 달라지는 경향
바로 코딩을 짜는 경우에만 이런 문제가 생깁니다.
아마 개발 방법론의 모든 베이스가 되는 것이 폭포수 모델인데요
계획서->정의서->분석서->설계서->구현->테스팅->유지보수
순으로 되는 것이 보통입니다.
요구서항 정의서에서 어떤식으로 정의를 해놓았는가? 에따른 부분이 문제가 될것 같은데요.
첫번째로 문제가 되는 것은 정확하게 기억이 나진 않지만, Actor부터 잡고, Actor가 어떤식으로 행동을 해야되는가? 부터 정의를 내리면, 요구사항이 달라지지 않는 이상 절대로 소스를 고칠일이 없습니다.
예를 들자면, queue의 push를 예로 들겠습니다.

요구사항정의서
1. Push
사용자 : 1.1 사용자 입력기능 : 사용자는 시스템에게 값을 입력한다.
시스템 : 1.2 판별기능 : 시스템은 사용자의 값이 숫자인지 판별해야 한다.
1.3 판별확인기능 : 시스템은 1.2의 기능에 대해 숫자가 아니면 숫자가 아니라는 에러메세지를 출력한다.
1.4 시스템 입력기능 :시스템은 현재가지고 있는 큐의 끝에 입력된 값을 추가한다.

정말 간단하게 적은건데요, 이 내용 말고도, 메모리 관련이나, 이런것들의 세세한 내용들을 적어 주어야 나중에 코딩할때 한번에 하고, 쉽게 할 수 있습니다. 지금은 매우 세부적으로 작성하였지만, 회사나 연구소 같은 경우에 세부내용에 대해서는 이미 지침이 있기 때문에 이렇게 까지 세부적으로는 안들어간다고 알고 있습니다.
제가 잘못아는 것이면, 지적질좀 부탁드립니다 선배님들~~~

-시간이 더 걸리는 경우
요구사항 정의하면서 High로 우선순위 정한걸 먼저 해야겠죠...
근데 이렇게 해도 시간이 모자란다는 것은 능력부족이라고 밖에는 할말이... 결론적으로 따지면 그렇다는 겁니다.
시간이 촉박한 상황에서 프로그래밍을 한다면, 일단 되는 부분까지만이라도 구현을 하는것이 옳다고 생각합니다.
과제용이라면, 못한것 보다는 낳을 것이고, 교수님에 따라서 첫번째 레포트 받고 추가보완분에 대해서 안받으시는 분은 거의 없기 때문이니까요..
단, 점수는 어느정도 감점되겠죠... 누군가는 완벽하게 해서 과제를 냈을 테니까요...
결론적으로 시간이 안된다 싶으면, 핵심코어만 짜시는게 어떨까요??

주제 넘게 떠들어 봤습니다.
죄송합니다.

litdream의 이미지

동의합니다.
어쨌건, 인터페이스가 명확하면, 구현부분에서 덜 헤깔립니다.
다만 차이가 있다면, 디자인할때 너무 세부적인것 까지 신경쓰려고 하면, 큰그림을 놓치는 수가 생깁니다. 대략, 얘는 이런거 저런거 서비스 하고, 쟤는 이런 저런서비스를 받아서, 이런 저런 서비스 하고, 등등.. dependency 도 너무 명확히 안해도, 대략만 잡아도 됩니다.

다른 툴들도 많겠지만, 전 Emacs org 모드를 씁니다.
해야할 일들을 top most level 로 놓고, 세부적인것들을 그 밑에 붙여가는 방식으로 합니다.

삽질의 대마왕...

semmal의 이미지

인터페이스가 명확하면, 구현부분에서 덜 헤깔립니다.

설계는 하나부터 열까지 모두 인터페이스를 정하는 작업입니다.
문제는 아무도 어느 인터페이스가 좋은건지 모르기 때문에 명확하지 않다는겁니다.
그래서 생각해내고, 개선하고, 바꾸면서, 만들고 또 만들어야 인터페이스가 나아질 수 있습니다.

누구나 좋은 인터페이스가 무엇인지 바로 쉽게 알 수 있다면, 에디슨이 아이폰을 만들었을겁니다.

------------------------------
How many legs does a dog have?

neocoin의 이미지

지적질 까지는 아니고,

"아마 개발 방법론의 모든 베이스가 되는 것이 폭포수 모델인데요"

이 관련된 글 내용이 너무 짧아서, 댓글 달기를 망설였습니다. 그래도 일단 저 문장
자체가 내포하는 의미가 너무 커서 글을 답니다.

이 말은 맞는 말이면서 틀린말이기도 합니다. 저는 틀린 말이라고 생각합니다.
저렇게 배우셨다면, 제가 배울때를 상기 해볼때 해당 수업은 현실 반영이 너무 안된게 아닌가 생각합니다.
제가 배울 당시에도 저렇게 배웠거든요. 배우는 내내 수업에 불만이 가득했습니다. :)
사례 조사해보면, 수업이 완전히 바뀌어야 하는데, 이건 뭐 10년전 인듯한 내용을 가르치고 있으니..
(아마 제가 대형 국책 프로젝트 쪽에 취업할 생각이 없기 때문에 당시에 저렇게 생각한 것 같습니다. )

각설하고, Waterfall model 의 SW 실패율이 너무 높아서, 지난 10년이 넘는 기간 동안
Spiral 에 해당하는 다양한 방법들이 나왔고 시도되었습니다. 그래서 모든 개발 방법론의
베이스라고 하는건 어렵지 않을까 싶네요.

글이 길어져서, 프로젝트 실패율 사례는 Chaos Report 를 참고하시면 될것 같습니다.

----

여담으로, Waterfall의 대안으로 Spiral 을 책으로 다루었는데, 제가 배울 당시에는
Spiral 을 너무 두리 뭉실하고, 크게 잡고 있어서 어이가 없었습니다.
그냥 대놓고 한학기에 다루기에는 내용이 너무 많다, 그래서 이렇게 한다 라는것도
아니었습니다. 교수님의 자신의 말이 법이라는 느낌으로 가르치셨죠.

즐겁게 프로제트 하세요.

silveracy의 이미지

다만, 망각했습니다.
죄송합니다. 저부분은 수정되야 하는게 맞겠네요;;;
교수님께서 저렇게 가르쳐 주신것은 아닙니다... 절대로...
이미 스파이럴이나 Agile방법론 까지도 이슈가 되고 있고, 많은 연구가 이루어 지고 있다면서 가르쳐 주셨습니다만....
사람은 역시 망각의 동물인가 봅니다. 머리속에서 알아서 조합후 내멋대로 결론...
이거참 위험한건데요 ㅠㅠ
정정하고 싶지만. 편집이 안되는군요 ㅠㅠ

지적 정말 감사합니다~~~