하드웨어는 빠른 속도로 기술개발이 이뤄지고 있지만 소프트웨어의 발전속도가 이를 따라가지 못하고 있다. 또 소프트웨어의 규모가 커짐에 따라 이를 개발하는 과정에서의 분업체계, 사후 유지보수가 커다란 문제점으로 떠올랐다.
80년대부터 소프트웨어의 규모와 그 개발비용이 매우 커지고 있으며 특히 유지보수 비용은 대단하다. 이러한 현상은 다음과 같은 몇가지 이유로 설명할 수 있다.
첫째 하드웨어의 대량 보급과 컴퓨터 이용 분야의 확산으로 수요가 급증하고 있으나 소프트웨어를 개발할 전문 인력은 매우 부족한 상태다. 1982년에 발표된 미국방부 자료에 의하면 소프트웨어의 개발 요구는 해마다 12% 늘어나는데 반해 전문인력은 연 4% 정도밖에 증가하지 않으므로 소프트웨어 수급 불균형은 시간이 갈수록 커지며 이로 인해 그 개발 비용이 비싸지고 있다.
둘째 컴퓨터의 응용 분야가 확대됨에 따라 개발할 소프트웨어의 규모와 수준이 이전보다 훨씬 복잡하고 어려운 내용의 것이 많아서 응용분야를 이해 한 후 복잡한 소프트웨어를 개발하는데 더 많은 시간과 인력이 요구된다.
셋째 소프트웨어 개발을 부드럽게 이끌어 주는 툴(tool)과 방법론이 부족하다.
넷째 소프트웨어 유지 보수량이 늘어나서 이에 대해 많은 인력과 시간이 소요되고 있다.
이상과 같은 소프트웨어의 특성 때문에 소프트웨어의 비용중에서 개발비용이 30%인 반면에 유지보수 비용은 70%까지 증가하고 있다. (표1)은 소프트웨어의 유지 보수를 원인별로 조사한 자료다. 유지보수를 하는 비중 41.0%를 사용자 요구 사항에 따라 다시 세분해보면 (표2)와 같다. 새로운 리포트의 추가가 40.8%이므로 이것을 유지보수 비율로 환산하면 16.7%이고 소프트웨어 비용 전체에서 보면 11.7%가 된다. 만일 재사용 기술에 의해 사용자의 요구를 처리해 줄 수 있다면 전체 소프트웨어 비용중에서 11.7% 만큼 생산성을 향상시킬 수 있을 것이다.
객체모델링 통한 재이용기술
100% 신뢰성있는 시스템을 만든다는 것이 현실적으로 불가능한 까닭에 유지보수가 용이하도록 소프트웨어를 개발해야 한다는 점, 즉 생산성 향상과 함께 품질을 관리하는 측면에서 바람직한 방향으로 유지보수 비율을 줄일 수 있는 방향이 모색되고 있다.
이와같은 유지보수의 문제가 해결된다면, 현재의 소프트웨어 위기는 어느 정도 극복될 것이다. 소프트웨어의 생산성을 향상시키고 품질을 보증할 수 있는 방법으로는 소프트웨어 관리기술의 연구개발, 구조화기술의 이용, 자동화된 도구의 이용, 4세대 언어 및 프로그램 생성기의 사용, 소프트웨어의 재이용기술, 객체지향 모델링의 기술등이 제시되고 있다.
80년대까지 구조화기술, 자동화 도구사용, 4세대 언어 사용등이 부분적인 효과를 거두어 왔으나 그 향상 비율이 20~30% 선으로서 수십배씩 확대되고 있는 소프트웨어의 요구를 만족하기에는 미흡하다. 그러므로 소프트웨어의 종합적인 관리기술과 재이용 기술의 연구가 많은 관심이 되어오다가 객체지향방법에 의한 재이용기술의 개발이 선풍을 일으키고 있다.
소프트웨어의 위기를 타개하기 위한 방안은 관리적인 측면과 기술적인 측면에서 제기되고 있다. 먼저 관리 기술이란 소프트웨어의 개발기술에 대한 관리와 소프트웨어를 개발하는 인력관리를 말한다.
개발기술의 관리로는 먼저 소프트웨어의 표준화를 들 수 있다. 소프트웨어란 인간의 문화적 요소에 영향을 가장 많이 받는 산물이다. 이러한 다양한 문화적 요소를 기술적인 요소로 바꾸어서 표현하기 위해서는 표현방법의 표준화가 매우 중요하다.
또 대형 소프트웨어를 여러 사람이 나누어서 개발할 경우 인터페이스 소프트웨어 개발이 또한 중요한 과제가 된다. 인터페이스의 표준화는 뒤에 설명할 객체지향 방법으로 개발할 수 있다. 두번째는 인력 관리(man month)다. 사람이 한달동안 일하는 성과를 양적으로 표현하고 이것을 관리할 수 있는 기술을 말한다.
기술적 측면으로 객체 모델링을 위해서는 먼저 공통된 속성(attribute)과 행동(behavior)을 가진 모듈을 객체(object)로 모델링하고, 객체들을 그룹핑하여 클래스(class)로 만든 다음에, 클래스를 대상으로 속성과 행동에 관한 값을 대입함으로써 프로그램을 만들어 사용한다. 이러한 클래스는 속성과 행동의 값을 변경해 주면 새로운 프로그램이 되어 재이용할 수 있다.
예를 들면 '자동차'라는 클래스의 속성은 크기 높이 색 배기량 등이고, 행동은 출발 정지 등이다. '소나타 1.8'이라는 객체는 '자동차'라는 클래스의 속성과 행동에 해당된 값을 대입시킴으로써 생성된다.
그러면 객체를 모델링하는 방법은 어떠한가.
소프트웨어를 개발하기 위한 요구는 자연언어로 표현된다. 즉 요구를 '주어+동사+목적어나 보어'로서 표현하면 주어 목적어 보어가 객체가 되고, 그들의 수식어가 속성이 되며, 동사는 행동이 된다. 이렇게 객체를 모델링하고 그룹핑하여 클래스를 만들고, 클래스 라이브러리(library)를 구축, 라이브러리를 검색할 수 있는 시스템을 개발하면 재이용시스템이 될 수 있다. 더욱이 사용자 인터페이스기술의 발전으로 말미암아 객체모델링 기술은 많은 기업체들의 관심을 모으고 있다.