소프트웨어 공학의 출현 배경
공학은 일반적으로 과학이나 수학을 기초로 구조나 기계, 생상 공정, 시스템 등을 생산에 합리적이고 체계적인 방법으로 적용시키는 학문을 의미한다. 이러한 원리 아래 대두된 소프트웨어 공학은 소프트웨어를 분석, 설계, 개발, 테스트, 유지보스 단계를 거쳐 개발하고 이와 관련된 전반적인 방법론 등을 연구하는 분야이다. 소프트웨어가 발전하지만 그에 따른 사용자의 요구는 더욱 급격히 증가되었고 결과적으로 소프트웨어의 위기를 불러왔다. 공학이 없던 당시 소프트웨어 개발은 개발 예산의 초과와 기간의 지연, 프로그래머 개인의 판단과 역량에 의한 소프트웨어 개발 추친, 소프트웨어 품질 문제 등이 있었고 결과적으로 체계적이고 기술적 검토를 거치지 않은 소프트웨어에 대한 신뢰는 무너졌다. 이러한 위기를 극복하기 위해 소프트웨어 제반 문제를 해결하고자 하는 움직임이 있었고 이에 따라 소프트웨어 공학이 출현하였다.
하드웨어 대비 소프트웨어의 생산성과 품질 보증이 미흡한 이유
하드웨어는 단순히 기계적인 방법에 의해 찍어내고 발생되는 문제도 일정한 규격안에 제한되어 있다. 그러나 소프트웨어는 다수의 사용자가 존재하고 그에 따른 다수의 요구사항이나 의견이 존재하기 때문에 일정 틀 안에서 반복적으로 생산하는 하드웨어와는 생산성에서 큰 차이가 있다. 마찬가지로 기계에 의해 반복적으로 다루어지는 하드웨어에 비해 소프트웨어는 사용자, 시스템, 조건 등 다양한 환경에서 작동하고 실제로 개발하는 과정에서 발견되는 오류는 1000줄당 5~60여개가 존재하며 개발 완료 후 발견되는 오류는 평균 4건 이하가 존재한다. 그만큼 완벽한 소프트웨어 개발은 쉽지 않으며 하드웨어와는 전혀 다른 환경에서 작동되기 때문에 소프트웨어와 관련된 품질 보증은 확신하기 어렵다.
소프트웨어가 사회나 기업을 크게 변화시킨 예
주변의 흔한 예로 아이폰이 그 예시라 생각한다. 아이폰은 물론 하드웨어적인 측면도 크지만 그 내부의 소프트웨어가 차지하는 비중도 결코 적지않다. 과거 단순한 휴대전화의 펌웨어에서 발전하여 이제는 세계 대부분이 사용하는 정보의 혁신을 불러왔고 IT의 엄청난 진보를 불러왔다 해도 과언이 아닐 것이다. 그 외 다른 예시는 ‘알파고’가 있다고 생각한다. 전 세계 이목을 끈 알파고 vs 이세돌의 대결을 통해 컴퓨터의 가치가 다시한번 증명되었고 우리나라를 포함한 전 세계적으로 A.I 개발에 대한 열띤 연구가 진행되고 있다.
고객의 요구사항이 끊임없이 변하는 경우 해결 방안
고객의 요구사항은 고정되어 있지 않고 완결된 요구사항이 나올 수 없는 것은 당연하다고 생각한다. 사용자가 일하는 주변 환경이나 업무의 변동에 따라 당연히 필요한 요구 사항은 변동될 수 있기 때문이다. 따라서 이러한 고객의 요구사항 변동을 자연스럽게 인지하고 당연하다고 생각하면 오히려 그에 따른 맞춤형 새로운 개발 방법이 필요하다고 생각한다. 기존의 워터풀 방식은 최초 고객의 요구사항과 시스템 환경 등을 고려하여 여러 복잡한 문서들을 제안하고 그에 따른 설계서를 작성하며 설계-테스트 과정을 통해 사용자에게 전달되는데 만약 이러한 과정 도중 사용자의 요구가 변경되면 최초로 다시 돌아가 일련의 과정들을 반복해야 되는 불편함이 있었다. 이러한 방식을 보완하기 위해 최근에는 DevOps의 개념이나 애자일 방법론 역시 대두되었다. 애자일 방법론같은 경우 주기적으로 고객과 미팅을 통해 소통하고 최초의 프로토타입 모델을 개발한 후 이를 점차 보완시켜 하나의 완성된 소프트웨어를 개발하는 방식이므로 보다 고객의 요구사항 변경에 효율적으로 대처할 수 있을 것이다.
'Undefined' 카테고리의 다른 글
프로젝트 관리 및 계획 (0) | 2018.12.28 |
---|---|
소프트웨어 개발을 위한 방법론 2 (0) | 2018.12.28 |
소프트웨어 개발을 위한 방법론 1 (0) | 2018.12.28 |
소프트웨어 개발의 공정 과정 (0) | 2018.12.28 |
서버(Server)의 종류 (0) | 2018.12.28 |