Search
🏫

[소프트웨어 공학] 1. 소프트웨어 공학 개요

[소프트웨어 공학] 12. 상호작용 다이어그램
CS
Software Engineering
2023/06/1115:16
[소프트웨어 공학] 12. 상호작용 다이어그램
CS
Software Engineering
2023/06/1115:16

1. 소프트웨어의 정의와 성질

1.1. 소프트웨어

소프트웨어의 정의
좁은 의미
프로그램과 관련 데이터의 묶음
포괄적 의미
관련 문서들을 포함한 개념
소스 코드와 데이터 외에도 실행 파일, 설계 문서, 설치 파일, 시스템 매뉴얼과 사용자 매뉴얼 등을 포함하는 개념
소프트웨어의 중요성과 역할
사업체의 의사결정과 과학적/공학적 문제 해결의 지원 도구
모든 종류의 컴퓨터 시스템에 내장되어 사용됨
모든 산업의 기반기술로 중요성이 증가
세상을 바꾸는 원동력

1.2. 소프트웨어의 분류

기능에 따른 분류
시스템 소프트웨어
컴퓨터를 동작시키기 위한 목적의 소프트웨어
운영체제, 장치 드라이버
컴파일러, DBMS
유틸리티 프로그램 등
응용 소프트웨어
사용자의 실제 업무를 수행하는 소프트웨어
웹브라우저
사무용 SW, 게임 SW
MIS, ERP 등
사용자에 따른 분류
일반 소프트웨어
불특정 다수를 대상으로 설계되는 패키지 범용 소프트웨어
요구사항이 일반적이고 안정적
상용 제품으로 판매될 수 있음
데이터베이스 관련 제품, 사무용 패키지, 운영체제 등
맞춤형 소프트웨어
특정 고객을 위해 주문제작된 소프트웨어
응용 도메인, 사용환경, 요구사항이 특별함
프로세스 제어, 교통관제 시스템 등

1.3. 소프트웨어의 성질

무형의 인공물로 물질적인 성질이 없음
컴포넌트의 조립을 통해 만들기 어려움
상대적으로 설계 과정의 품질 보증 활동이 중요함
개발 비용의 대부분은 노동력에 투입됨
상대적으로 변경에 용이함
소프트웨어의 유연성, 순응성
소프트웨어는 마모되지 않음
환경이 변화되어 쓸모가 없어지거나 품질이 저하될 수 있을뿐
하드웨어 신뢰성을 보여주는 욕조 곡선과 비교됨
소프트웨어 유지보수 작업은 설계의 변경을 요구함

1.4. 소프트웨어 응용 분야

시스템 소프트웨어
실시간 소프트웨어
이벤트 발생과 처리가 실시간으로 이루어짐
자동 제어, 은행, 좌석 예약
내장형 소프트웨어
시스템 일부로 내장된 소프트웨어
자동차, 전자 제품 등에 내장된 제어 소프트웨어
비즈니스 소프트웨어
사업 목적의 업무를 처리
회계 업무, 급여 관리, 경영정보 등
개인용 소프트웨어
워드, 멀티미디어, 게임
인공지능 소프트웨어
복잡한 문제 해결을 위한 것
로보틱스, 전문가 시스템, 화상/음성 인식 소프트웨어
웹 기반 소프트웨어
웹 브라우저 기반
공학용/과학용 서프트웨어
CAD, 기상분석

2. 소프트웨어 공학의 정의

2.1. 소프트웨어 위기

정의
소프트웨어 기술 발전이 더딤을 일컫는 용어
1968년 NATO 소프트웨어 공학 컨퍼런스
하드웨어 기술의 급격한 발전과 요구의 다양화와 복잡화
규모가 크고 복잡한 소프트웨어를 빠르게 개발해야 할 필요성
소프트웨어 공학이라는 학문분야가 등장하게된 계기

2.2. 소프트웨어 위기 현상 사례

개발 일정의 지연
초과 비용 발생
제품 신뢰도 결여
명세를 충족하지 못하는 제품
유지보수의 어려움

2.3. 소프트웨어 위기 현상의 원인

소프트웨어 엔지니어의 부족
경영층의 인식 부족
방법론과 도구 부재. 개발 생산성의 저하
프로젝트 관리 기술의 부재
소프트웨어 자체의 규모와 복잡성 증가

2.4. 소프트웨어 공학의 유래

공학이란?
문제 해결을 위한 재료/구조물/기계 등의 결과물을 생산하기 위해 지식이나 경험의 적용을 연구하는 분야
소프트웨어 공학
1968년 NATO 소프트웨어 공학 컨퍼런스 이후 고품질 소프트웨어의 경제적이고 빠른 생산과 유지보수를 위한 연구분야가 됨
소프트웨어 위기 현상을 부각하고 해결책으로 표현하기 위해 만든 용어

2.5. 소프트웨어 공학의 정의

NATO 컨퍼런스의 바우어 교수
신뢰성이 있고 요구기능을 효율적으로 수행하는 소프트웨어를 경제적으로 생산하기 위해 건전한 공학적 원리와 방법을 만들고 사용하는 것
IEEE 소프트웨어 공학 표준 용어집
소프트웨어의 개발, 운영, 유지보수에 체계적이고 제어가능하며 정량화된 접근 방법을 적용하는 것
즉 소프트웨어 개발에 공학 기술을 적용하는 것
기타
인간에게 유용한 소프트웨어 제품을 만드는 과정에 과학적 지식을 적용함으로써 실제적 문제의 비용과 효율적 해결책을 다루는 일

3. 소프트웨어 공학 환경

3.1. 소프트웨어 개발 시 고려사항

소프트웨어 개발은 단순한 코드 생성이 아님
요구사항 명세, 설계, 프로젝트 관리 등 통합적 문제 인식 필요
개발 프로세스와 프로젝트 관리 중요함
비용을 줄이고 제품의 품질을 높이기 위한 방법?
문서화와 프로젝트 관리가 중요함
초기 요구사항 명세화 명세화 작업에 노력을 기울여야 함
변경이나 재사용을 염두에 둔 작업이 필요함

3.2. 소프트웨어 공학 환경

소프트웨어 공학의 대상은 중규모 이상의 복잡하고 중요한 소프트웨어
다양한 해결 방법을 통합적으로 다루어야함
소프트웨어 공학 환경의 구성
계층적 표현
도구
방법론
방법과 기술
소프트웨어 공학 원리
소프트웨어 공학 원리에 기초하여 방법과 기술이, 방법과 기술을 가지고, 방법론이, 방법론에 기초하여 도구가 만들어짐

3.3. 소프트웨어 공학 환경의 구성

소프트웨어 공학 원리 (principle)
소프트웨어 프로세스와 제품의 바람직한 측면들을 기술하는 일반적인 추상적인 설명
추상화, 분할정복, 계층적 조직의 원리
방법과 기술 (technique)
행위를 통제하는 체계적이고 일반적인 가이드라인
바람직한 속성을 프로세스나 제품을 포함하기 위해 필요
방법론 (methodology)
방법과 기술들의 조합으로 문제 해결을 위해 정해진 프로세스 안에서 조직화 한 것
프로세스(what)와 방법(how)을 함께 기술한 것

3.4. 소프트웨어 프로세스 모델

소프트웨어 생산과 진화 과정을 추상화하여 요약 표현한 것
생명 주기 모델
시스템 개념화, 요구사항 정의, 설계, 그리고 구현에 이르는 전이 과정을 표현
필요한 활동들, 결과물, 사람의 역할 등을 포함
좋은 프로세스 모델은
전이 과정에서 생기는 문제를 최소화해야함
공통 개발 프레임워크를 제공하여 생산성을 향상시킴
개발자 간 공통의 문화와 공통의 기술을 제공함

4. 좋은 소프트웨어의 기준

소프트웨어 품질에 관한 내용

4.1. 외부 품질과 내부 품질

외부 품질
사용자가 인지할 수 있는 품질 요소
사용성, 신뢰성, 속도
내부 품질
외부 품질의 향상에 도움을 주는 것으로 개발자에게 중요함
잘 작성된 요구사항이나 설계 문서

4.2. 소프트웨어 신뢰도

사용자가 소프트웨어를 신뢰하는 정도
신뢰도 개념
정확한 결과를 적시에 제공
오랜 시간 작동되며 필요할 때 사용할 수 있음
오류 발생이 적고, 오류가 발생 후에 무난히 복구되며, 오류 결과가 치명적이지 않으며 강건함 (robust)
시스템의 종류나 특성에 따라 측정 방법이 다름
주어진 시간 동안 정확히 작동할 확률
고장의 빈도, 평균 수명 등
시간이 지남에 따라 안정화되나, 소프트웨어 고장 함수가 욕조 곡선과 유사한 형태를 가지는 경우도 있음
버그 수정이나 기능의 개선이나 추가로 인해 새로운 오류가 유입되는 경우
하드웨어나 운영체제를 변경하는 경우
적정 용량이나 성능을 초과하여 사용하는 경우

4.3. 정확성, 성능, 사용성

소프트웨어의 정확성
명세서와 일치하게 작동하는 능력
사용자의 요구를 만족시키는 능력
작은 결함이 있어도 정확한 것은 아니나, 신뢰도에 문제가 되지 않을 수 있음
소프트웨어의 성능
지정된 시간 안에 컴퓨터 시스템이 처리할 수 있는 작업량
주어진 조건 하에서 주어진 기능을 빠르게 제공하는 능력
소프트웨어의 사용성
본래의 목적으로 효율성 있게 사용할 수 있는가

4.4. 상호운영성, 유지보수성

소프트웨어의 상호운영성
다른 시스템과 공존하며 협력할 수 있는 능력
소프트웨어의 유지보수성
소프트웨어의 변경이 용이한 정도
유지보수 요인
새로운 기능의 추가나 기존 기능의 개선
환경 변화에 따른 수정, 존재하는 오류의 수정

4.5. 이식성, 검사성, 추적성

소프트웨어의 이식성
다른 환경에서 동작할 수 있는 능력
이식 요인
하드웨어, 운영체제, 상호작용하는 시스템의 변경 등
소프트웨어의 검사성
좋은 소프트웨어의 속성을 갖추었는지를 검사할 수 있는가
소프트웨어의 추적성
이해관계자, 요구사항, 설게문서, 소스코드 간의 관계를 추적할 수 있는가