이 글은 충남대학교 김현수 교수님의 소프트웨어공학 수업을 듣고 작성한 글입니다.
소프트웨어공학 시험을 앞두고 암기를 어떻게 할까 고민하다가 블로그에 쓰기로 했다. 아마 그래서 다른 글보단 좀 자유로울걸...?
1. 소프트웨어란?
과목의 이름이 소프트웨어공학이다. 컴공 전공생이라면 자주 들어봤을 소프트웨어라는 단어의 의미는 무엇일까?
- 소프트웨어란 프로그램과 프로그램의 개발, 운용, 보수에 필요한 관련 정보 일체를 말한다.
- 엔지니어링(공학) 작업의 결과는 프로그램 이외의 정보도 중요하며 S/W가 복잡해지면서 설계가 중요해졌다.
# 소프트웨어의 특징
소프트웨어는 6가지 특징을 가진다.
1. 손에 잡히지 않는다.
- 소프트웨어의 구조를 파악하기 쉽지 않다.
2. 대량 생산하기 쉽다.
- 비용의 대부분이 개발 과정에 소요
3. 노동 집약적
4. 잘 훈련 받지 않으면 제작하기 어려움
- 다양한 기술이 필요
5. 쉽게 변경 가능
6. 닳아 없어지는 것이 아니다
- 설계 변경으로 인해 품질 저하 및 노후
# 소프트웨어의 종류
1. 주문형
- 특정 고객의 수요를 만족하기 위해 개발된 소프트웨어
2. 패키지 형
- 공개된 시장에서 판매
3. 임베디드 시스템
- 하드웨어에 탑재
- 변경이 어려움
4. 실시간(real-time) 소프트웨어
- 신속하게 반응해야함
- 안전성 확보가 중요함
5. 자료처리 소프트웨어
- 비즈니스 업무 처리에 사용
- 자료의 정확성과 보안이 관건
- 일괄처리
=> 두 가지 성격을 동시에 지니는 S/W도 있다!
2. 소프트웨어 공학이란?
고객의 문제를 해결해주기 위하여 대규모의 품질 좋은 소프트웨어 시스템을 정해진 시간과 비용으로 개발하거나 발전시키는 체계적인 프로세스
1. 고객의 문제를 해결
- 소프트웨어 공학의 궁극적인 목표
- 개발하지 않고, 솔루션을 구매할 수도 있음
- 문제를 파악하고 이해하기 위해여 효과적으로 커뮤니케이션 해야 함
2. 체계적인 개발과 발전
- 잘 이해하고 있는 기술의 조직화되고 훈련된 방법으로 적용하는 공학적 프로세스
- 표준의 적용 : ISO, IEEE
3. 대규모 고품질 S/W 시스템
- 팀워크와 협동이 필요
- 최종 제품은 충분히 좋은 품질을 가져야 함
4. 비용, 시간, 기타 제약
- 한정된 자원
- 이익 > 비용이 되어야 함
- 더 빠르고 값 싸게해야 경쟁에서 이긴다
- 비용과 시간을 부정확하게 예측하면 프로젝트가 실패로 끝남
소프트웨어 공학이라는게 어디서부터 시작된 것일까?
1968년 NATO conference에서 처음으로 언급되었다.이때 소프트웨어 개발에 엔지니어링 원리가 도입되어야 함을 처음으로 인식하였다.
위에서 말한 엔지니어링은 자격증 제도가 필수이다!
- 공공보호, 도덕적 윤리
- 수학, 과학, 경제 등의 원리를 적용하기 위한 충분한 연습
소프트웨어 공학의 정의를 내려보면...
IEEE, W.Humphrey, 목표로 내릴 수 있다.
1. IEEE : 소프트웨어의 개발, 운용, 유지보수 및 파기에 대한 체계적인 접근 방법
2. W.Humphrey : 좋은 소프트웨어를 경제적으로 생산하려고 공학, 과학, 수학적 원리에 의하여 소프트웨어 개발
3. 목표 : 좋은 소프트웨어를 최소의 비용으로 계획된 일정에 맞추어 개발
# 소프트웨어 공학 관련자
사용자, 고객, 소프트웨어 개발자(요구 분석가, DB 전문가 등등, 개발 관리자(프로젝트 관리, 비즈니스 경영)
# 소프트웨어 품질
1. 사용용이성(usability)
- 빨리 배우고 쉽게 작업
2. 효율성(efficiency)
- 자원을 효율적으로 사용
3. 신뢰성(efficiency)
- 요구한 기능을 실패 없이 수행
4. 유지보수성(maintainability)
- 유지 보수를 쉽게 수행
5. 재사용성(reusability)
- 부품이 다른 프로젝트에서 사용
- 서로 다른 품질 속성이 상충될 수 있다.
=> ex) 효율성을 높였더니 유지보수성이 떨어졌다
-품질을 목표 설정 후 이에 맞게 설계해야 함. 자원을 과다하게 낭비하는건 피해야함.
- 때때로 최적화가 필요함. 즉 한정된 예산으로 최대의 효율/신뢰도를 얻음.
1. 내부 품질 요소
- 설계의 특징을 좌우
- 외부 품질 특성에 영향 (ex. 원시코드의 주석의 양, 원시코드의 복잡도)
2. 단기적 품질
- 고객의 요구사항을 만족하고 있는가?
- 현재 처리할 자료의 분량을 효율적으로 처리할 수 있는가?
3. 장기적 품질
- 유지보수성 및 고객의 미래 요구
# 소프트웨어 프로젝트
소프트웨어 프로젝트 작업에 대해 알아보자
1. 요구분석과 명세화
- 도메인 분석
- 문제 정의
- 요구 추출, 요구 분석, 요구 명세화
2. 설계
- 요구사항이 가용한 기술로 어떻게 구현되어야 하는가
- 중요 기술
>> 시스템 엔지니어링 : 어떤 부분이 하드웨어, 소프트웨어가 되는가
>> 소프트웨어 아키텍처 : 시스템을 서브시스템으로 분할 후, 이게 어떻게 작동하는가
>> UI, DB, 서브시스템 내부에 대한 설계
3. 모델링
- 도메인이나 소프트웨어의 표현을 만드는 과정
>> 유스케이스, 정적, 동적, 행위 모델링
- 프로그래밍, 품질 보증, 배포, 프로세스 관리...
'CS > Software Engineering' 카테고리의 다른 글
[SE] 유스케이스 모델링 (5) | 2024.10.22 |
---|---|
[SE] 요구사항 정의 및 개발 (0) | 2024.10.21 |
[SE] 프로젝트 관리 (1) | 2024.10.21 |
[SE] 소프트웨어 프로세스 (2) | 2024.10.21 |