본문내용
1. 시스템 분석 및 설계 개요
1.1. 소프트웨어 공학의 이해
1.1.1. '소프트웨어 위기'의 개념
'소프트웨어 위기'는 시스템의 대규모화에 따라 소프트웨어의 신뢰성 저하, 개발비의 증대, 계획의 지연 등의 현상이 현저해져서 개발 계획의 수행이 매우 곤란해진 상황을 의미한다. 이 용어는 1968년 NATO의 후원에 의한 가르미시(Garmisch) 회의, 이듬해의 로마 회의 이후 「소프트웨어 공학」과 함께 유명해진 말이다.
소프트웨어의 위기란 하드웨어 비용 대비 소프트웨어 개발 및 유지보수 비용이 급격히 증가하고, 낮은 품질과 높은 비용으로 사용자로부터 외면당하는 현상을 말한다. 이는 소프트웨어 시스템이 점점 대규모화, 복잡화되면서 발생하게 되었다.
과거에는 하드웨어 성능 향상 및 생산 비용 감소에 따라 소프트웨어 개발과 유지보수 비용이 상대적으로 낮았다. 그러나 점차 소프트웨어 시스템이 대규모화, 복잡화되면서 소프트웨어 개발 및 유지보수에 투입되는 비용이 급격히 증가하게 되었다. 또한 이러한 대규모 소프트웨어 시스템의 낮은 신뢰성으로 인해 사용자들의 불만이 증가하게 되었다.
이러한 '소프트웨어 위기'는 소프트웨어 공학이 발전하게 된 배경이 되었다. 소프트웨어 공학은 소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문으로, 소프트웨어 위기 문제를 해결하기 위해 등장하게 되었다.
1.1.2. 소프트웨어 공학의 발전사
소프트웨어 공학의 발전사는 소프트웨어 개발 기술의 진화 과정을 보여준다. 1941년 "프로그램 내장 방식"인 폰 노이만 구조가 개발되면서 최초의 하드웨어와 소프트웨어의 구분이 주어졌고, 이를 계기로 추상화가 동반되었다. 1950년대에는 프로그래밍 언어인 포트란, 알골, 코볼 등이 배포되어 과학, 알고리즘, 경영상의 문제를 각각 해결할 수 있게 되었다. 이후 1960년대에 들어서면서 데이크스트라가 "Go to 문은 해로운 것으로 생각된다"는 논문을 발표하였고, 파르나스가 모듈성과 정보 은폐 개념을 소개하여 프로그래머들이 점점 더 복잡해지는 소프트웨어 시스템을 다룰 수 있게 되었다. 또한 운영 체제인 유닉스가 등장하면서 하드웨어를 관리하는 소프트웨어 시스템이 소개되었다. 한편 1967년에는 시뮬라 언어가 객체 지향 프로그래밍 패러다임을 소개하였다. 이처럼 소프트웨어 공학은 하드웨어 기술의 발전과 프로그래밍 언어, 운영 체제, 객체 지향 패러다임 등의 등장을 통해 지속적으로 발전해 왔다고 볼 수 있다.소프트웨어 공학의 발전 과정을 좀 더 자세히 살펴보면 다음과 같다. 1960년대 후반부터 1970년대 초반까지는 소프트웨어 위기(software crisis)가 대두되면서 소프트웨어 공학에 대한 관심이 높아졌다. 소프트웨어 위기란 시스템의 대규모화에 따라 소프트웨어의 신뢰성 저하, 개발비의 증대, 계획의 지연 등의 현상이 현저해져서 개발 계획의 수행이 매우 곤란해진 상황을 말한다. 이를 해결하기 위해 1968년 NATO의 후원으로 가르미시(Garmisch) 회의와 1969년 로마 회의가 개최되었고, 이를 계기로 "소프트웨어 공학(software engineering)"이라는 용어가 등장하게 되었다.
1970년대에는 구조적 분석/설계 방법론이 개발되었다. 대표적인 방법론으로는 요던(Yourdon)의 구조적 분석 방법론과 데이터 흐름도(DFD), 자료사전(DD), 소단위 명세서(Mini-spec) 등의 모델링 도구가 제시되었다. 이를 통해 소프트웨어 개발 과정을 체계적으로 관리하고 복잡한 시스템을 모델링할 수 있게 되었다.
1980년대에는 객체 지향 패러다임이 등장하면서 객체 지향 분석/설계 방법론이 대두되었다. 부치(Booch), 럼버프(Rumbaugh), 야콥슨(Jacobson) 등이 개발한 방법론이 대표적이며, 이들의 방법론이 통합되어 통일 모델링 언어(UML)가 탄생하게 되었다. UML은 복잡한 시스템을 모델링하는 데 탁월한 성능을 발휘하며, 현재 소프트웨어 공학 분야에서 가장 광범위하게 사용되고 있다.
1990년대 이후에는 컴포넌트 기반 개발(CBD) 방법론이 등장하였다. CBD 방법론은 재사용 가능한 소프트웨어 컴포넌트를 활용하여 신속하고 효율적인 시스템 개발을 가능하게 한다. 대표적인 CBD 방법론으로는 RUP(Rational Unified Process), Catalysis, Select Perspective, 마르미-III 등이 있다. 이러한 CBD 방법론은 객체 지향 패러다임을 기반으로 하면서도 컴포넌트 단위의 개발과 재사용을 강조한다는 점에서 기존의 객체 지향 방법론과 차별화된다.
최근에는 애자일 개발 방법론, 클라우드 컴퓨팅, 빅데이터 분석 등 새로운 기술과 패러다임이 등장하면서 소프트웨어 공학 분야에 다양한 변화가 일어나고 있다. 이러한 변화에 발맞추어 소프트웨어 공학 기술들도 지속적으로 발전하고 있다고 볼 수 있다.
1.1.3. 소프트웨어 공학 관련 사이트
'1.1.3. 소프트웨어 공학 관련 사이트'에서는 소프트웨어 공학 분야에 대한 다양한 학습 및 정보 제공 사이트를 소개하고 있다.
우선 소프트웨어 = 코딩이라는 인식하에, 코딩 학습 사이트들이 소개되어 있다. 코딩 학습을 위한 대표적인 사이트로는 'Codecademy', 'FreeCodeCamp', 'Coursera', 'edX' 등이 있다. 이들 사이트에서는 프로그래밍 언어 학습부터 실습 및 프로젝트 수행까지 다양한 코딩 관련 교육 콘텐츠를 제공하고 있다.
한편 소프트웨어 공학의 이론적 개념과 방법론을 제공하는 사이트도 있다. 대표적으로 'IEEE Computer Society'는 소프트웨어 공학 분야의 저명한 학술지와 컨퍼런스를 운영하며, 관련 교육 자료와 표준을 제공하고 있다. 'ACM(Association for Computing Machinery)'도 유사한 역할을 하는 대표적인 비영리 학술단체이다.
또한 소프트웨어 프로젝트 관리와 프로세스 개선을 위한 조언을 제공하는 사이트도 있다. 'SEI(Software Engineering Institute)'는 CMMI(Capability Maturity Model Integration)를 개발하여 보급하고 있으며, 'PMI(Project Management Institute)'는 PMBOK(Project Management Body of Knowledge)를 통해 프로젝트 관리 표준을 제시하고 있다.
더불어 최신 소프트웨어 공학 동향과 사례를 소개하는 온라인 매거진이나 뉴스 사이트도 있다. 대표적인 예로 'IEEE Software', 'ACM Queue', 'InfoQ' 등이 있다.
이처럼 소프트웨어 공학 분야에는 다양한 학습 자료와 정보를 제공하는 온라인 사이트가 운영되고 있다. 이러한 사이트들을 통해 소프트웨어 공학에 대한 이해를 높이고 최신 동향을 파악할 수 있다.
1.2. 소프트웨어 개발 프로세스 모형
1.2.1. SDLC모형
SDLC(Software Development Life Cycle) 모형은 소프트웨어 개발의 전 과정을 체계적으로 수행하기 위해 정의된 표준화된 프로세스 모형이다. SDLC 모형에는 계획, 요구분석, 설계, 구현, 테스팅, 유지보수의 총 6단계로 구성되어 있다.
계획 단계에서는 프로젝트 팀을 구성하고 프로젝트 범위와 일정을 정의한다. 요구분석 단계에서는 사용자 요구사항을 명확히 파악하고 분석한다. 설계 단계에서는 시스템 구조와 상세 설계를 진행한다. 구현 단계에서는 실제로 소프트웨어를 개발하고 코딩한다. 테스팅 단계에서는 오류를 발견하고 수정하는 과정을 거친다. 마지막으로 유지보수 단계에서는 운영 중 발생하는 문제를 해결하고 기능을 보완한다.
SDLC 모형의 장점은 각 단계별로 명확한 ...