대빵's Blog

택시운전기사의 자동차설계(SW 분석과 설계의 차이) 본문

개발관련

택시운전기사의 자동차설계(SW 분석과 설계의 차이)

bigzero 2018. 2. 3. 13:25

소프트웨어 관련 업종에 종사하다 보면 많은 사람들을 만나게 된다.

특히 일반적으로 소프트웨어와 관련 없는 사람들은 SW라고 하면 뭔가 코딩하고 영화에서 보는 검정색 화면에 하얀글자가 쉴새없이 지나가고(매트릭스 처럼) 커다란 전선과 장비 덩어리 기계 앞에서 뭔가 전선 몇개 곂쳐서 연결하면 통화내역이 해킹되는 그런 생각을 하겠지만 실제로 SW업계에는 거의 대부분 컴맹들이다......ㅡㅡ;

물론 어디나 넘사벽인 사람들이 존재한다....실제로 영화에서 보는 듯한....가끔 윈도우나 맥북을 마우스 없이 키보드 단축키만으로 사용해서 화면지나가는게 다른사람 눈에 보이지도 않는 사람들도 있다.....헐....

여하튼, SW업게 종사하다 어느정도 나이가 들면 30대중후반 부터 많은 사람들이 분석/설계 라는 업무를 하게 된다.

이전에 실제로 코드를 많들고 배포하던 코딩을 하던 사람들도 , 그리고 그 전에 코드를 만들어 보지않고 SW를 사용만 했던 사람들도 , 많은 사람들이 자기를 분석/설계자로 다른사람들에게 소개한다....

예를 들어보자...

당신은 TV만드는 회사에 다니고 있다...당신이 하는일은 만들어진 TV의 버튼이 어떻게 생겨야 되고 화면사이즈가 어느정도 크기여야 되고 리모콘을 어떻게 눌러야 되고 어느정도 각도로 돌아가야 된다....라고 하는 일종의 제품기획 업무를 10년동안 했었다.....

이 시점에서 당신은 TV설계를 할 수 있다고 할수 있을까? 많은 사람들이 이러한 일들을 오래동안 수행하면서 설계를 했다고 착각한다.

만일 설계를 할 수 있다고 얘기하려면 TV 도면을 그리고 전기전자분야에 대해서 안전한 수량과 수치를 계산하고 정역학,동역학,열역학 등 각종 역학적인 수치에 대한 반영과 검증이 TV도면에 반영되어 실제로 생산라인에서 생산되고 TV의 예상수명은 신뢰도 99%의 확률로 몇년동안 사용가능하다.....는 작업을 당신이 할 수 있어야 한다...

SW설계를 들여야 보자..

많은 시니어연차, 과거 개발자였던 사람들이 분석과 설계를 하고 문서를 만들어서 코딩하는 개발자들에게 전달한다.

이러한 문서들은 대부분 파워포인트로 그려진 화면구성도, 처리Flow가 그려진 Flow Diagram, 테이블이름과 컬럼정보들이 들어있는 엑셀시트들이다.

정말로 이런것들로 SW개발이 가능하다고 생각한다면 당신은 택시운전자 경력 20년이면 자동차설계를 할 수 있다는 사람이다.

당신이 개발자에게 준 이러한 문서들은 그냥 사용자의 요구사항 또는 기획자의 의도를 "분석" 한 것에 불과하다. 즉, 여기에는 "설계"는 없다.

그럼 설계는 무엇일까? 설계는 공학적인 이론과 해당 이론에 대한 검증이 반영된 것이다.

당신이 준 화면구성도에 인간공학 또는 인체공학적인 내용이 들어있는가?

우리가 타겟팅하는 고객들의 연령대가 얼마이고 해당 연령대의 시력이 평균얼마여서 아이콘과 버튼크기는 최소한 얼마크기 이상이어야 한다고 기술되어 있는가? ,

개발하는 언어는 Java 나 C#등 객체지향언어들인데 설계를 Flow Diagram 으로 그려주면 객체지향언어들로 해당 Flow 가 개발되었을때 제대로 기능이 작동할거 같은가?

엑셀로 RDB를 설계했다고 주면 1,2,3 정규화는 했는가? 그러면 왜 모든 테이블에 FK는 하나도 없고 모든 PK는 순번으로 해놨는가?


적어도 지금까지 내가 본 SW설계자의 90%는 설계를 할 줄 몰랐다. 정확히 말해서 분석과 설계의 차이를 몰랐다....

분석과 설계의 차이는 공학적인 이론이 반영되어 있는지 여부이다. 사용자가 그리드에 A,B,C 라는 정보를 표현해주세요 했을때 테이블을 A,B,C 컬럼으로 만드는건 그냥 분석이다. 설계를 했다고 말하려면 해당내용들이 1,2,3 정규화를 했을 경우 어떻게 ERD 가 구성되는지 설계문서에 표현되어야 한다. 그래서 사용자의 요구사항이 공학적으로 논리적으로 모순이 있는지 없는지 검증되어야 한다.

분석은 해당업계 오래된 경력만으로도 어느정도 가능하다....운송업계에서 오래 일했다면 운송시스템 분석이 가능하고 항공업계에서 오래동안 일했으면 항공시스템 분석이 가능하다....하지만 설계는 불가능하다. 설계하려면 각종 SW공학들의 이론과 실제, 그리고 코드들에 대해서 명확하게 알아야 하는데 단지 업계에서 오래 일했다는 경험만으로는 이러한 공학적인 설계가 불가능하다.

특히, 초급일때 개발만 하고 고민하지 않는 개발자들일 수록 나중에 분석/설계자를 할 때 이러한 경향은 심해진다.

객체지향언어를 사용하고 RDB를 사용하는 환경에서 SW설계자 라고 얘기하려면 최소한 OOP, RDB, CDP 등의 이론과 실제에 의해서 검증가능한 Documenting 을 할 수 있어야 SW설계자 할 수 있다.

더 이상 TV 10년보면 TV설계하고 운전 10년하면 자동차 설계 한다고 구라치지 말도록 하자.