1. 소프트웨어
(1) 소프트웨어의 개념 및 특징
① 소프트웨어 개념
- 컴퓨터를 동작시키고 어떤 일의 처리 순서와 방법을 지시하는 명령어의 집합인 프로그램과 프로그램의 수행에 필요한 절차, 규칙, 관련 문서 등을총칭한다.
- 프로그램(Program): 컴퓨터를 통해 일련의 작업을 처리하기 위한 명령어와 관련된 데이터의 집합을 의미한다.
- 자료 구조(Data Structure): 컴퓨터 기억 장치 내에 자료의 표현, 처리, 저장 방법 등을 총칭하는 것으로 데이터 간의 논리적 관계나 처리 알고리즘을 의미한다.
- 문서(Document): 소프트웨어를 개발하면서 작성하는 사용자 설명서, 소프트웨어 요구 분석서, 평가서, 명세서, 프로젝터 계획서, 검사 계획서 등을 의미한다.
② 소프트웨어의 특징
- 상품성: 소프트웨어를 개발하면 상품이 되어 판매할 수 있다.
- 복잡성: 개발하는 과정이 복잡하고 관리가 어렵다.
- 변경 가능성: 프로그램을 일부 수정하여 업그레이드 및 오류 수정 등을 할 수 있다.
- 복제성: 복제가 쉬워 쉽게 복사, 유통이 가능하다.
- 순응성: 기술의 발전, 사용자 요구, 사회적 흐름의 변화에 맞춰 적절히 변형된다.
- 비가시성: 소프트웨어 구조는 외관으로 나타나 있찌 않고 코드로 내재되어 있다.
(2) 소프트웨어의 분류
① 시스템 소프트웨어(System Software)
시스템 소프트웨어는 운영체제, 컴파일러, 로더, 디버거 등과 같이 하드웨어를 관리학 컴퓨터 자원을 활용하는 소프트웨어를 의미한다.
② 응용 소프트웨어(Application Software)
응용 소프트웨어는 엑셀, 파워포인트, 워드프로세서, 그래픽 디자인 프로그램 등과 같이 사용자가 원하는 목적에 맞게 만들어진 소프트웨어를 의미한다.
③ 미들웨어 소프트웨어(Middleware)
미들웨어 소프트웨어는 데이터베이스 관리 시스템, 웹 서버, 애플리케이션 서버, 트랜잭션 처리 모니터 등과 같이 시스템 소프트웨어와 응용 소프트웨어를 연결해 주는 중간 단계의 소프트웨어를 의미한다.
(3) 시스템(System)의 개념과 기본 요소
① 시스템의 개념
- 컴퓨터로 처리 가능한 자료를 입력하고 저장, 처리, 가공해 출력할 수 있도록 설계/구현된 정보 체계를 의미한다.
- 하나의 목적을 위해 다양한 요소가 유기적으로 결합된 것을 의미한다.
② 시스템의 기본 요소
입력, 처리, 출력, 제어, 피드백으로 구성된다.
(4) 소프트웨어 위기(Software Crisis)
① 소프트웨어 위기(Software Crisis)의 개념
컴퓨터의 발달 과정에서 소프트웨어의 개발 속도가 하드웨어의 개발 속도를 따라가지 못해 사용자들의 요구사항을 감당할 수 없는 문제가 발생함을 의미한다.
② 소프트웨어 위기의 원인
- 하드웨어 비용을 초과하는 개발 비용의 증가
- 개발 기간의 지연
- 개발 인력 부족 및 인건비 상승
- 성능 및 신뢰성 부족
- 유지보수의 어려움에 따른 엄청난 비용
2. 소프트웨어 공학(Software Engineering)
(1) 소프트웨어 공학
① 소프트웨어 공학(Software Engineering)의 개념
- 경제적으로 신뢰도 높은 소프트웨어를 만들기 위한 방법, 도구와 절차들의 체계를 말한다.
- IEEE(전기전자공학자협회)는 소프트웨어의 개발, 운용, 유지보수 및 파기에 대한 체계적인 접근 방법이라 정의하였다.
② 소프트웨어 공학의 등장 배경
- 소프트웨어 개발에 필요한 시간과 비용 예측력이 부족
- 개발된 소프트웨어의 품질 수준이 부족
- 하드웨어에 대한 소프트웨어의 상대적 비용 증대
- 유지보수 역할의 증대
- 하드웨어 및 소프트웨어 기슬의 급속한 발전
- 크고 복잡한 소프트웨어에 대한 수요 증가
- 특정 개인에 의존한 시스템 개발
③ 소프트웨어 공학의 분류
- 소프트웨어 공학은 크게 소프트웨어 개발 생명주기 모형, 소프트웨어 프로세스 모형, 소프트웨어 품질 관리, 소프트웨어 유지보수 등으로 분류한다.
- 소프트웨어 개발 생명주기 모형: 소프트웨어를 개발하는 과정을 단계별로 분류한 모형으로, 폭포수 모형, 프로토타입 모형, 나선형 모형, 애자일 개발 방법론 등이 있다.
- 소프트웨어 프로세스 모형: 소프트웨어 개발을 위한 절차와 방법을 제공하는 모형으로, ISO/IEC 12207, CMMI 등이 있다.
- 소프트웨어 품질 관리: 소프트웨어 개발 과정에서 품질을 유지하고 향상시키기 위한 관리 기법을 연구하는 것으로, 테스트, 코드 리뷰, 정적 분석 등이 있다.
- 소프트웨어 유지보수: 개발된 소프트웨어를 사용하고 보수하는 과정을 연구하는 것으로, 버그 수정, 기능 추가, 기술 업그레이드 등이 있다.
④ 소프트웨어 공학의 기본 원칙
- 현대적인 프로그래밍 기술을 적용해야 한다.
- 신뢰성이 높아야 한다.
- 사용의 편리성과 유지보수성이 높아야한다.
- 지속적인 검증 시행을 해야 한다.
- 사용자가 원하는 대로 동작해야 한다.
- 시스템의 안정성과 보안에 최선을 다해야 한다.
- 최신 프로그램 언어, 최신 알고리즘 사용 현황을 확인해야 한다.
- 소프트웨어 개발 비용을 최소화하도록 노력해야 한다.
- 개발 단계와 소스 코드 등의 문서화를 통해 명확성을 유지해야 한다.
⑤ 공학적으로 좋은 소프트웨어의 조건
- 신뢰성이 높고 효율적이어야 하며, 사용자의 의도대로 동작해야 한다.
- 편리성 제공 및 잠재적 에러를 최소화해야 한다.
- 유지보수성이 쉬워야 한다.
⑥ 소프트웨어 공학 계층 구조
- 도구: 프로세스와 방법을 처리하는 기능을 제공하는 것이다.
- 방법론: 소프트웨어를 설계하는 데 기술적인 방법을 제공하는 것이다.
- 프로세스: 소프트웨어의 가장 기초가 되며, 개발에 사용되는 방법론과 도구가 적용되는 순서를 의미한다.
⑦ 소프트웨어 공학의 목표
- 최소의 비용으로 단기간에 시스템에 적합한 소프트웨어를 개발하는 것이다.
- 소프트웨어 제품의 품질을 향상시키고 소프트웨어 생산성과 작업 만족도를 증대시키는 것이다.
- 신뢰성 있는 소프트웨어를 경제적인 비용으로 획득하기 위해 공학적 원리를 정립하고 이를 이용하는 것이다.
⑧ 소프트웨어 품질
- 사용자의 요구대로 만들어져야 한다.
- 유지보수가 쉬워야 한다.
- 에러를 최소화해야 한다.
- 초반에 정한 비용에 맞춰 개발해야 한다.
- 정확한 결과가 도출되어야 한다.
- 원하는 시간에 원하는 기능을 수행할 수 있어야 한다.