소프트웨어공학(Software Engineering)

    소프트웨어와 소프트웨어 위기에 관련된 포스팅을 썼으니, 

    당연히 이제는 소프트웨어 공학을 쓸 차례이다.

    소프트웨어 공학은 전에 포스팅한 내용처럼, 등장 배경이 아래와 같다.




    1. 소프트웨어 공학의 등장배경


    1. 소프트웨어가 등장(초기에는 그냥 임베디드형태) 
    2. 비즈니스 용도로 확대
    3. 비즈니스 용도로 쓸려고 하자니, 소프트웨어를 좀 복잡하게 변형해야 됨
    4. 변형하는데 너무 힘이 듬, 개발 기간이 매우 오래 걸리고, 개발을 할줄 아는 사람이 매우 극소수
    5. 위기론 등장
    6. 공학을 접목하는 시도 등장

    이렇게 빠르고 간단히 위기와 공학이 등장한 배경을 짚어보았다.

    그럼, 이제 등장배경은 알았으니 이놈이 무엇인지만 알면 되는 것이다.



    2. 소프트웨어 공학의 정의

    위키에는 이렇게 정의되어 있다.

    소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문이다; 즉, 공학을 소프트웨어에 적용하는 것이다


    그리고 네이버에는 이렇게 적혀 있다.

    소프트웨어의 설계, 개발 및 사용에 관한 공학의 분야. 소프트웨어 공학은 허용된 시간, 타당한 비용 범위 내에서 올바르고 효과적인 융통성 있는 보수가 쉬운 프로그램을 작성하기 위한 지침이 되는 학문의 한 분야이다.


    한마디로, 소프트웨어 공학은 정해진 비용과 시간을 줄이기 위한 공학, 과학 및 수학적 원리와 방법을 활용하는 소프트웨어 개발 학문이다.

    즉, 관리적인 측면(프로젝트 매니지먼트)이 될 수도 있고, 디자인 패턴같은 설계적인 측면이 될수도 있고,

    순수한 개발 언어가 될 수도 있다(node.js)

    이러한 시도는 지금 이순간에도 저어~~~쪽, 대한민국과 반대편인 미국에서 계속 시도중이다.(물론 우리나라에서도 나 역시, 그리고 개발자 모두 시도할 것이다.)


    3. 소프트웨어 공학의 구성 요소(Alan M. Davis. 1995)


    Alan M. Davis는 Software Requirements 라는 책으로도 유명하다.


    원리(Principles)

    - 생존법칙에 해당하는 것으로 수많은 경험자와 전문가의 지혜를 수집한 내용


    기법(Techniques)

    - 소프트웨어 개발자의 소프트웨어 공학 프로세스의 일부분을 수행하는 것을 돕는 순차적인 절차


    언어(Language)

    - 그래픽한 기호나 단어의 집합, 더 복잡한 개체를 구성하도록 하는 규칙으로 구성되고 이를 이용한 개체의 조합이 의미를 가짐

    - 소프트웨어 제품을 표현하는 수단


    도구(Tools)

    - 소프트웨어 개발 절차의 일부를 수행하는 것을 도와주기 위한 소프트웨어 프로그램


    이해가 안되는 사람을 위해 요리로 간단히 적어보자면,

    1. 원리는 한식을 만들 것인지, 중식을 만들것인지 어떠한 요리를 만들것인지 정하는 것이다.

    2. 기법은 요리를 어떠한 순서로 만들 것인지 머리속에 정하는 것이다. (물을 끓이고, 면을 삶는다 같은 순서가 기법이라 하겠다.)

    3. 언어는 요리를 어떻게 표현할 것인지, 접시에 담을 것인지 잘라서 줄 것인지 통째로 줄 것인지 등을 고민하는 것이다.(물론 한 예일 뿐)

    4. 도구는 요리를 만들기 위한 도구이다. (칼이나 도마)



    댓글

    Designed by JB FACTORY