소프트웨어(Software)와 위기(Crisis)



    1. 소프트웨어란?

    컴퓨터 프로그램 뿐만 아니라 프로그램을 설치, 사용, 개발하고 유지보수 하는데 필요한 모든 문서를 포함

    컴퓨터 프로그램 + 매뉴얼 + 산출물 등 포함




    2. 소프트웨어의 특성

    실체가 없는 논리적 시스템 요소로서 부품을 이용하여 조립되는 것이 아니라 사용자의 요구에 의해서 새롭게 생산된다. SW는 소모되지 않으며, 단지 시간의 흐름에 따른 기능상 저하를 가져올 수 있다. SW는 예비 부품은 존재하지 않고, 유지보수는 하드웨어 유지보수보다 일반적으로 더 복잡하다.


    정보공학의 노벨상인 튜링상을 수상한 프레더릭 브룩스(1931~)


    이러한 소프트웨어의 특성을 프레더릭 브룩스가 정의해주었는데 그 내용은 아래와 같다.

    • 비가시성(Invisibility) - 구조가 외부에 노출되지 않고 코드에 내재되어 있음 (무형)
    • 복잡성(Complexity) - 정형적 구조가 없어 개발과정이 복잡하고, 비규칙적, 비정규적
    • 변경성(Changeability) - 필요에 따라 항상 수정이 가능한 진화성(evolution)
    • 순응성(Conformity) - 요구 및 환경의 변화에 적응하는 유연성
    • 무형성(Intangible) - 사실 형체가 없는 무형성 때문에 FP(Function Point)등으로 유형화 하고자 함
    • 비마모성(Longevity) - 소프트웨어는 외부의 환경에 의해서 마모되는 것이 아니라, 품질이 나빠지는 것
    • 복제성(Duplicability) - 소프트웨어는 간단하고 쉬운 방법으로 목제 가능


    이러한 소프트웨어를 위한 공학이 등장한 이유는 바로 소프트웨어 위기 때문이다.


    3. 소프트웨어 위기(Software Crisis)

    최초의 컴퓨터가 등장하고 소프트웨어는 군사 분야, 과학 분야와 같은 곳에서 특수하게 사용되었다.(영화 이미테이션 게임 참고...)

    그 후, 시간이 지나면서 비즈니스 분야로 확대 되게 되었고, 최초로 비즈니스 분야에 적용했던 회사가 IBM이었다. 비즈니스 분야에 적용되면서, COBOL 등의 프로그램 언어가 등장하고 사용자와 개발자가 분리되어 프로그램을 이해하기 위해 설계서와 같은 문서들이 필요해진다.


    문제는 시간이 지나면서 점차 복잡해지고, 다양해짐에 따라서 개발의 한계가 발생하였고 1960년대 말에 소프트웨어 위기라는 용어가 나타나기 시작되어 진다.


    소프트웨어 위기의 주요 원인은 컴퓨터 성능이 너무 강력해졌기 때문이다. 컴퓨터가 없었을 때는 프로그래밍에는 전혀 문제가 없었다. 느린 컴퓨터 몇 개 뿐이었을 때는 프로그래밍이 조금 문제가 되었을 뿐... 이제는 컴퓨터의 성능이 거대해지면서, 그에 따라 프로그래밍이 복잡하게 되어 SW 분야에 거대한 문제로 직면하게 되었다.


    — 에츠허르 데이크스트라겸손한 프로그래머 (EWD340)Communications of the ACM


    이러한 위기를 맞게 되면서, 소프트웨어는 공학(Engineering)을 접목 시키는 시도를 한다.

    그리고, 현대에 이르러서도 소프트웨어 공학은 끊임없이 발전을 하고 있다.


    4. 소프트웨어 위기에 대한 개인적인 생각

    소프트웨어의 위기는 현대에 이르러서도 나오는 말이다. 왜냐하면 공학을 접목시켜서 급히 좋아진다 하더라도, 워낙 프로젝트의 종류, 신기술의 등장등 IT업계의 변화의 속도가 워낙 빠르기 때문이다. 


    우리가 흔히 개발자는 끊임없이 공부하지 않으면 도태된다고 하는데.. 

    이는 타직종과 다르게 IT의 슬픔이 담겨져 있다.

    어떠한 일을 꾸준히 하다보면 실력이 늘어 나는 것이 아닌 별도의 공부를 충분히 하지 않으면 도태되는 것이 IT의 세계이다.


    즉, 이러한 신기술의 등장속도도 위기일 수 있고, 그러한 신기술의 등장에 대한 대응도 위기일 수 있기 때문에...

    아직도 위기를 극복하기 위한 시도는 끊임없이 이루어지고 있으며,


    최근의 소프트웨어 위기를 극복하기 위한 방법을 생각나는 대로 적어보자면

    • 애자일 프로젝트 개발방법론 등장
    • 전자정부프레임워크의 등장
    • node.js (javascript로 개발하는 서버사이드 언어)
    • MDD (Model-Driven Development)
    • GoF의 디자인패턴

    워낙 방대하고 많지만, 일단 생각나는 대로 적어보았다.
    사실 소프트웨어 공학에서 발전되는 거의 모든 것들이 사실 위기를 극복하기 위한 노력들일 것이다.


    댓글

    Designed by JB FACTORY