티스토리 뷰
목차
소프트웨어 공학의 발전과 현재
소프트웨어 공학은 소프트웨어의 개발, 운용, 유지보수 등 생명 주기 전반을 체계적이고 정량적으로 다루는 학문입니다. 이 분야는 공학의 원칙을 소프트웨어에 접목시켜 품질, 비용, 유지보수성, 그리고 건설 속도의 개선에 초점을 맞추고 있습니다. 1968년 NATO 소프트웨어 공학 학회에서 처음으로 등장한 '소프트웨어 공학'이라는 용어는 소프트웨어 위기의 해결을 촉구하는 데 초점을 두었습니다. 소프트웨어 공학의 발전은 기술 혁신과 밀접한 연관성이 있습니다. 1941년, 현대 디지털 컴퓨터가 등장하면서 소프트웨어와 하드웨어의 구분이 뚜렷해졌습니다. 이 시기에는 프로그램이 배선으로 주어졌으나, 유연성이 부족하다는 문제가 제기되었고, 이는 폰 노이만 구조의 개발로 이어졌습니다. 폰 노이만 구조는 프로그램을 메모리에 저장하고 이를 처리하는 방식으로, 소프트웨어와 하드웨어를 명확히 구분하는 기초가 되었습니다.
소프트웨어 공학의 역사
소프트웨어 공학은 상대적으로 젊은 분야로, 컴퓨터 공학의 하위 분야로서 발전해 왔습니다. 이 분야는 소프트웨어를 단순한 프로그래밍을 넘어서서 체계적이고 유기적으로 발전시키려는 노력에서 기인한 것입니다. 최근에는 관점 지향(Aspect-Oriented), 애자일(Agile), 모델 주도(Model-Driven) 등 다양한 최신 접근 방식이 적용되고 있습니다. 1950년대에는 프로그래밍 언어의 등장으로 소프트웨어 개발의 추상화가 한 단계 발전했습니다. 포트란, 알골, 코볼과 같은 주요 언어들이 각각 과학적, 알고리즘적, 경영적 문제를 해결하기 위해 개발되었습니다. 이와 같은 언어들은 프로그래밍을 더 쉽고 효율적으로 만들어 주었으며, 소프트웨어 개발의 기초를 다졌습니다. 1968년 에츠허르 데이 키스 트라는 'Go to 문은 해로운 것으로 생각된다'는 논문을 발표하였고, 이는 소프트웨어 개발에 큰 영향을 미쳤습니다. 1972년 데이비드 파르나스는 모듈성과 정보 은폐 개념을 소개하였고, 이는 소프트웨어 시스템의 복잡성을 관리하는 데 큰 도움을 주었습니다. 또한, 1969년에 등장한 유닉스 운영 체제와 1970년대 후반의 시뮬레이션이라 언어는 소프트웨어 공학의 중요한 이정표가 되었습니다. 시뮬레이션하는 객체 지향 프로그래밍 패러다임을 소개하였으며, 이는 소프트웨어 설계에 큰 영향을 미쳤습니다. 1980년대 중반에는 중앙 집중화된 소프트웨어 개발 프로세스가 자리 잡았으며, C++, 잡담, 중의 젤 티브이-C와 같은 객체 지향 프로그래밍 언어들이 개발되었습니다. 이러한 언어들은 소프트웨어 개발의 새로운 패러다임을 제시하였고, 소프트웨어 공학의 발전에 기여했습니다. 1990년대 초반에는 오픈 소스 소프트웨어가 등장하였고, 리눅스와 같은 분산형 소프트웨어 개발이 확산하였습니다. 이와 함께 인터넷과 월드 와이드 웹의 출현은 소프트웨어 공학에 큰 변화를 가져왔습니다. 자바 프로그래밍 언어의 등장과 가상 머신의 도입은 소프트웨어의 추상화 수준을 한층 높였습니다. 탄력적(Agile) 방법론은 개발 프로세스를 더 빠르고 유연하게 만들기 위해, 참여한 프로그래머들의 협업을 통해 소프트웨어 개발의 효율성을 높였습니다. 현재 소프트웨어 공학의 정의와 적용 범위는 여전히 논의되고 있으며, 이는 소프트웨어의 빠른 발전과 변화에 대응하기 위해 지속해서 발전하고 있습니다. 소프트웨어 공학자는 단순한 프로그래밍 지식 외에도 컴퓨터 과학, 소프트웨어 설계, 요구 사항 분석, 유지보수 등 다양한 분야의 지식을 갖추어야 합니다. 최근에는 소프트웨어 공학 학위가 도입되었으며, 국제적인 교육 기준이 설정되었습니다. 2004년 IEEE 컴퓨터 학회는 소프트웨어 공학의 지식 범위를 표준화한 SWEBOK을 발표하였고, 이는 ISO/IEC 24773으로 채택되었습니다. 이 표준은 소프트웨어 공학 분야의 체계적이고 포괄적인 지식을 제공하며, 실무에서의 유용성을 높이고 있습니다.
소프트웨어공학의 주요 분야
소프트웨어 공학은 다음과 같은 10개 주요 분야로 나눌 수 있습니다:
1. 소프트웨어 요구사항: 요구 사항의 추출, 분석, 명세, 검증.
2. 소프트웨어 설계: CASE 도구와 UML을 활용한 설계.
3. 소프트웨어 개발: 프로그래밍 언어를 이용하여 소프트웨어를 구축.
4. 소프트웨어 시험: 소프트웨어의 품질과 기능 검증.
5. 소프트웨어 유지 보수: 소프트웨어 시스템의 지속적인 향상 및 문제 해결.
6. 소프트웨어 형상 관리: 소프트웨어의 버전 관리 및 소스 제어.
7. 소프트웨어 공학 관리: 소프트웨어 프로젝트의 관리와 관련된 특수한 요소.
8. 소프트웨어 개발 프로세스: 애자일, 폭포수 등 다양한 개발 과정.
9. 소프트웨어 공학 도구 및 CASE 참조: 개발을 지원하는 도구와 기법.
10. 소프트웨어 품질: 소프트웨어 품질 관리와 개선.
결론
소프트웨어 공학은 컴퓨터 과학과 공학의 이론과 실용적인 적용 사이에서 중요한 역할을 하며, 컴퓨터 하드웨어와 소프트웨어의 복잡한 상호작용을 관리하고 최적화하는 데 중점을 둡니다. 이 분야는 앞으로도 지속적인 기술 발전과 변화에 대응하며, 새로운 기술과 방법론을 적용해 나갈 것입니다.
'컴퓨터 공학' 카테고리의 다른 글
컴퓨터 하드웨어는 컴퓨터 시스템의 물리적인 구성요소 (0) | 2024.08.16 |
---|---|
사이버 보안 (2) (0) | 2024.08.14 |
사이버 보안 (1) (0) | 2024.08.14 |
프로그래밍 언어에 대해 알아보기 (0) | 2024.08.13 |
컴퓨터 과학의 정의와 이해 (0) | 2024.08.11 |