일반적 정의 : 소프트웨어 제품을 생산하기 위해 소프트웨어의 개발과 운영, 유지 보수 활동에 프로세스(Process),방법(Method), 도구(Tool)들을 적용하고 연구 개발하는 활동
Fritz Bauer : 컴퓨터 하드웨어에서 신뢰성 있게 운영되는 소프트웨어를 경제성 있게 개발하기 위해 공학적 원리를 응용하고 확립 시킨 이론
Berry Boehm : 컴퓨터 프로그램을 설계, 개발, 운영, 유지보수에 관련된 문서를 작성하는 데 필요한 과학적인 지식의 실용화
ANSI/IEEE : 소프트웨어의 개발, 운영 유지보수 및 폐기 과정에 적용되는 체계적인 접근 방식과 일련의 기술 및 접근 방법들에 대한 학문
Richard R. Fairley : 전산학, 경제학, 경영 과학 및 의사소통 기술과 문제 해결을 위한 공학적인 접근 방법을 토대로 소프트웨어 개발에 임하는 기술 체계
소프트웨어 공학의 구성 요소
원리(Principles) : 생존 법칙에 해당하는 것으로, 수많은 경험자와 전문가의 지혜를 수집한 것(소프트웨어 공학 원리:추상화, 분할과 정복 등)
기법(Techniques) : 소프트웨어 개발자들이 소프트웨어 공학 프로세스의 일부분을 수행하는 것을 돕는 순차적인 절차(구조적 분석 설계 기법, 자료 흐름 중심 설계 기법 등)
언어(Languages) : 그래픽한 기호나 단어의 집합으로써 더 복잡한 개체(문장, 다이어 그램, 모델 등)를 구성하도록 하는 규칙으로 구성되고, 이를 이용한 개체의 조합이 의미를 가지며, 중간 또는 최종 단계에서의 소프트웨어 제품을 표현하는 수단(DFD, ERD 등)
도구(Tools) : 소프트웨어 개발 절차의 일부를 수행하는 것을 도와주기 위한 소프트웨어 프로그램(CASE 도구)
소프트웨어 공학 계층
프로세스(Process)
소프트웨어 공학 기술이 효과적으로 적용되도록 하기 위해 확립되어야 하는 주요 프로세스 영역(Key Process Area ; KPA)에 대한 전체 틀을 정의
KPA : 프로젝트의 관리/제어 기준 생성, 기술적 방법들의 적용 제품(모델, 문서, 데이터 보고서, 폼) 생성, 이정표 확립, 품질 보증 변경 관리 포함
방법(Method)
소프트웨어를 구축하기 위한 기술적인 방법(How to)들을 제공
요구사항 분석, 설계, 구축, 테스트, 유지보수 등의 업무를 수행하는 방법을 제공
도구(Tool)
프로세스들과 방법들을 자동 혹은 반자동으로 지원하는 기능 제공
CASE(Computer-Aided Software Engineering)
도구들이 통합되어 한 도구에 의해 생성된 정보가 다른 도구에 의해 사용될 수 있는 소프트웨어 개발 지원을 위한 시스템
소프트웨어 공학 환경을 만들기 위해 소프트웨어 하드웨어, 소프트웨어 공학 데이터베이스(분석, 설계, 코딩, 테스트에 관한 중요한 정보를 포함하는 저장소)들을 결합 시킴
일반적인 소프트웨어 공학 프로세스 - 정의 - 개발 - 유지보수
정의 단계
무엇(What)에 초점
개발 단계
어떻게How)에 초점
유지보수 단계
변화(Change)에 초점
기존의 소프트웨어를 이용하여 정의와 개발 단계를 다시 적용시킴
수정(Correction) : 소프트웨어 결함을 수정하기 위한 변경 활동
적응(Adaptation) : CPU, O/S. 주변 장치 등 외부 환경 변화 수용을 위한 변경 작업
기능 향상(Enhancement) : 완전 유지보수를 통해 본래 기능을 향상시키는 확정 변경 활동
예방(Prevention) : 소프트웨어 변경이 유지보수를 더 비효율적으로 만들기 때문에 쉬운 수정과 기능 향상을 위한 변경 활동 -> 소프트웨어 재공학
소프트웨어 공학의 발전과정
1968년 서독에서 개최된 NATO 회의에서 '소프트웨어 공학' 용어 처음 사용
1970년대 : 구조적 프로그래밍, 구조적 분석 및 설계, 소프트웨어 생명주기 및 개발 도구의 제안
1980년대 : 구조적 방법, 잭슨 방법, Warnier-Orr 방법 등 분석 설계 방법 제시, 소프트웨어 생산과 품질 향상을 위한 다수의 프로젝트 추진 객체 지향 분석 설계 대두
1990년대 이후 : 정보 공학 및 객체 지향의 본격적 활용, 컴포넌트/CBD 대두 및 활성화