대학교 컴과를 나왔다면 소프트웨어 공학은 필수과목으로 지정되어 있다.
프로그램 개발에 있어서 어떠한 형식으로 어떤 절차를 거쳐서 산출물이 나오는지 공부하는 과목이다.
그 과목시간에 대표적으로 아니 시험문제에 무조건 나오는 모델이 두가지가 있는데
1. 폭포수 모델.
2. 나선형 모델.

[그림-1] 폭포수 모델의 예

[그림-2] 나선형 모델의 예

최초의 모델 설계를 기반으로 계획, 소비자의 요구분석, 그에 따른 설계, 구현과 테스트를 거쳐서 유지보수 단으로 가는 방식은 약간식 다르지만 두 모델의 흐름은 비슷하다.
이론을 들어보면 정말 맞는 이야기 같다. 저렇게 하는게 맞는거 아닌가요?! 아니 정확히는 맞다. 하지만 프로그래머들에게 없는게 딱 두가지가 있다고 생각한다. 시간과 예산.
언제나 프로젝트의 시간은 늘어나기는 커녕 줄어들고 예산은 말도 않되는 가격으로 하라는 경우가 허다하다.
그러한 상황에서 위의 모델들을 썼다가는 다음날 책상이 사라지는걸 경험하게 될것이다.
변칙적이고 계속 변하는 소비자의 요구와  마감일은 언제나 그대로라는것. 
그리고 산출물은 프로그램만이 아닌 각종 문서가 난무 한다는 사실이다.(이부분은 다음에 글을 쓸 예정이다.)


그렇다면 효과적인 모델이 무엇이냐고? 간단하다. 분석,코딩,적용,테스트 까지 모두 한번에 하는것이다. 


분석과 설계가 탄탄하면 더할 나위 없는 프로젝트의 시작이다. 하지만 어느 부분에선 분석 단계가 생략될수도 있으며, 설계또한 이미 나와있는 모델을 그대로 사용하여 지나갈수 있는 상황도 있다. 
간단한 예외처리 하나 하는것조차 분석/설계/코딩/테스트를 거치진 않는다.

또한 프로젝트가 완료후 유지보수 기간중에는 거의 대부분 위와 같은 상황으로 갈 수 밖에 없다. 한시가 바쁜 1분 1초를 다투는 기업의 이익이 달린 문제에서 어느누가 문제점 파악을위해 분석단계부터 기다리고 있겠는가?


기존의 모델이 잘못되었다는것이 아니다. 단지 우리에겐 예산과 시간이 너무나 한정적이라는것이 문제일뿐이다. 소비자를 설득시키지 못하고, 관리자를 설득시키지 못한 시점에서 프로그래머가 할 수 있는 일은 품질과 성능을 포기하는게 아닌 모델을 바꾸는게 최선을 선택이라 생각된다.

- 어떠한 프로젝트도 PIX 한 모델을 제시 할수 없을것이다.
- 프로젝트의 기간과 예산이 한정적일때를 예로 들었다.  
- 참고 : 어느 SW엔지니어의 변  지은이 : 이종국 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret

대학교 컴과를 나왔다면 소프트웨어 공학은 필수과목으로 지정되어 있다.
프로그램 개발에 있어서 어떠한 형식으로 어떤 절차를 거쳐서 산출물이 나오는지 공부하는 과목이다.
그 과목시간에 대표적으로 아니 시험문제에 무조건 나오는 모델이 두가지가 있는데
1. 폭포수 모델.
2. 나선형 모델.

[그림-1] 폭포수 모델의 예

[그림-2] 나선형 모델의 예

최초의 모델 설계를 기반으로 계획, 소비자의 요구분석, 그에 따른 설계, 구현과 테스트를 거쳐서 유지보수 단으로 가는 방식은 약간식 다르지만 두 모델의 흐름은 비슷하다.
이론을 들어보면 정말 맞는 이야기 같다. 저렇게 하는게 맞는거 아닌가요?! 아니 정확히는 맞다. 하지만 프로그래머들에게 없는게 딱 두가지가 있다고 생각한다. 시간과 예산.
언제나 프로젝트의 시간은 늘어나기는 커녕 줄어들고 예산은 말도 않되는 가격으로 하라는 경우가 허다하다.
그러한 상황에서 위의 모델들을 썼다가는 다음날 책상이 사라지는걸 경험하게 될것이다.
변칙적이고 계속 변하는 소비자의 요구와  마감일은 언제나 그대로라는것. 
그리고 산출물은 프로그램만이 아닌 각종 문서가 난무 한다는 사실이다.(이부분은 다음에 글을 쓸 예정이다.)


그렇다면 효과적인 모델이 무엇이냐고? 간단하다. 분석,코딩,적용,테스트 까지 모두 한번에 하는것이다. 


분석과 설계가 탄탄하면 더할 나위 없는 프로젝트의 시작이다. 하지만 어느 부분에선 분석 단계가 생략될수도 있으며, 설계또한 이미 나와있는 모델을 그대로 사용하여 지나갈수 있는 상황도 있다. 
간단한 예외처리 하나 하는것조차 분석/설계/코딩/테스트를 거치진 않는다.

또한 프로젝트가 완료후 유지보수 기간중에는 거의 대부분 위와 같은 상황으로 갈 수 밖에 없다. 한시가 바쁜 1분 1초를 다투는 기업의 이익이 달린 문제에서 어느누가 문제점 파악을위해 분석단계부터 기다리고 있겠는가?


기존의 모델이 잘못되었다는것이 아니다. 단지 우리에겐 예산과 시간이 너무나 한정적이라는것이 문제일뿐이다. 소비자를 설득시키지 못하고, 관리자를 설득시키지 못한 시점에서 프로그래머가 할 수 있는 일은 품질과 성능을 포기하는게 아닌 모델을 바꾸는게 최선을 선택이라 생각된다.

- 어떠한 프로젝트도 PIX 한 모델을 제시 할수 없을것이다.
- 프로젝트의 기간과 예산이 한정적일때를 예로 들었다.  
- 참고 : 어느 SW엔지니어의 변  지은이 : 이종국 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret
요즘에 프로젝트를 하다보니 설계단에 관심이 많아졌다. 정확히는 DB설계에.
뭐 어느 프로그램이든 설계단은 거의 비슷비슷해서 크게 달라지진 않는다.
중요한건 사용자,요구자의 의견이 어떻게 반영되었는가. 어떤 형식으로 풀고 어떻게 정의하였는가가 설계에서 가장 중요하다는걸 느꼈다.
그중에서도 가장 중요한것이 해당 프로그래밍에 사용될 단어들. 즉 객체의 속성들일 것이다.
데브피아에 간단한 요청이 들어와서 심심풀이로 풀어보았다.(물론 틀릴수 있다는 가정하에 글을 쓴다.)

문제는 이것.


imagine that you want to keep track of your library.
당신은 당신의 라이브러리 내용을 파악합니다. 

Each book is of a particular format (hardback, paperback, trade paperback. ect) and has a title and an author.
각 책의 (하드커버, 종이커버, 등)에는 자세한 형식 그리고 제목과 저자명이 있고

You also want to know how many books you have.
또한 당신은 당신의 책이 어느정도 양인지 파악합니다. 

Design, implement, and demonstrate a class book that meets the previous requirements.
이전 조건에 해당하는 클래스 책의 설계, 방법을 증명합니다.

Include a CRC card and a UML diagram that gives only the class names and the associations between them. 
오직 클래스 명과 클래스 명을 합쳐서 CRC card와 UML 다이어그램에 포함합니다.
 

글에 나온 키워드를 보면은 library, book, writer , bookname, bookform, bookcount 가 있다. 이제 CRC카드로 만들어 보자.

CRC카드란 Candidate, Responsiblity, Collaboration 의 약자로 클래스를 정의 하기위한 키워드 산출및 클래스간의 관계를 간단하게 표기하는 문서라고 생각하면 된다.

CRC카드의 형태는 다음과 같다.



 이제 위에서 뽑은 키워드 들로 간단한 CRC 카드를 만들어보면 다음과 같은 형태가 나온다.

 
각 클래스에 해당하는 책임 즉 클래스가 해야될 임무는  간단하게 말로 풀이 하였다.
그러면 위의 산출물을 근거로 클래스다이어그램을 그려보았다.
클래스 다이어그램은 CRC카드와 비슷하지만 코딩에 바로 쓰일수 있는 명칭들과 변수들, 매개변수들이 포함되었다고 생각하면 된다.






Library 클래스는 간단하다. Book을 생성해서 담을 벡터와(물론 배열,해쉬 등 다른걸 써도 되지만 개인적으로 벡터가 편해서 벡터로 했다.) 책의 갯수를 확인하기 위한 함수 getBookcount()가 있다. 책의 갯수를 세는것은 간단하게 vector의 .length 쓰면 return만 해주면 끝날거라 생각한다. getBookInfo()의 경우 안에 들어갈 함수는 Book클래스의 함수들을 호출하면 될거라 예상된다.

Book 클래스는 정보를 읽고 쓰는 클래스다. Book 본연의 임무인 형식,제목,저자명을 넣을수 있고 꺼내올수 있는 함수와 변수들로 구성된다.



간단하게 CRC카드와 클래스 다이어그램으로 표현해 보았다. 사실 간단해도 다른 사람은 다르게 그릴수 도 있고 내가 그린 설계가 틀릴수도 있으니 참고만 하셨으면 한다.

-CRC카드를 처음 봐서 쓴 내용들이다;; ㅎ












 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret
근데..맨날 보던거라..-_- 그리는건 쉬운데.. 모델링은..어렵다..
내년부터는 모델링도 같이 공부해야겠다.

저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret
-설계를 위한 논리 모델, 실제로 데이터베이스에 값으로 되어 있는 물리 모델로 나뉠수 있다.
  논리 모델의 경우 물리 모델에 대한 상징적 이름이라 할수 있다.

- 위와 같은 데이터의 나눔에 의해서 권한 및 속성들을 제어 할수 있게 된다. (먼 훗날 알게 될뜻.. 이해는 가는데 쿼리를 못짜겠다;;)

저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret