본문 바로가기
정보과학/소프트웨어공학특론

소프트웨어공학특론 개요

by J1소프트 2023. 11. 23.
728x90

1. 개요
먼저 1절에서는 소프트웨어공학과 관련한 기본적인 내용이나 개념들에 대해 질문/답변 형식으로 살펴보고,

2절에서는 소프트웨어공학자로서 갖추어야 할 책임의식이나 윤리관에 대해 간단히 언급 하기로 한다.   


2. 학습내용
1)  1절: (FAQ) 

▪ 소프트웨어(Software)란 무엇인가?
많은 사람들이 소프트웨어(Software)와 컴퓨터 프로그램(Computer program)을 같은 것으로 생각하 지만 정확하진 않다. 소프트웨어(Software)는 프로그램(programs)뿐 아니라 관련한 모든 문서 (Documents)와 프로그램이 정상적으로 동작하기 위해 필요한 설정 데이터(Configuration data)를 포 함한다. 
 
Software = Programs + Documents + Configuration data 
 
  소프트웨어(Software) 제품은 2가지로 구분할 수 있다. 
 
1. Generic products : 일반적인 목적으로 사용되는 제품으로,  필요로  하는  사용자가 시장에 나와있는 것을 구입하게 된다. 
Software Specification의  주도권은  개발조직이  가지게  된다. 

예) DB서버, 문서 편집기, 이미지 도구, 프로젝트 관리 도구 등 
 
2. Bespoke(또는 customized) product : 특정 고객에 맞도록 개발되는 제품. Software Specification의 주도권은 사용자가 가지게 된다. 
예) 특정 전자장비의 제어 시스템, 특정 업무를 지원하는 시스템, 항공 운항 통제 시 스템 등 
 

▪ 소프트웨어공학(Software Engineering)은 무엇인가?
시스템 명세(System Specification)단계와 같은 초기단계부터 시스템이 사용된 후 유지보수에 이르기까지 소프트웨어 생산과 관련한 모든 공학적 분야를 말함. 
 
1. 공학자들은 어떤 문제를 해결함에 있어서 가장 적합한 이론이나 방법론, 도구를 사 용하려고 한다. 

기존의 해결책이 없는 경우에도 새로운 시도를 하게 된다. 하지만, 문제해결과정에서 조직이나 예산의 제한성도 고려해야 한다. 
2. 소프트웨어공학은 소프트웨어를 개발하는데  있어서의  기술적  과정뿐  아니라  프로젝트 관리나 도구, 방법론 및 이론의 개발과도 관련되어 있다. 
3. 문제해결과정에서 조직적이고 체계적인 접근뿐 아니라 비정형화된 접근이 필요한 경 우도 있다.

( 웹 기반 e-Commerce 시스템의 경우는 다양한 소프트웨어 기술과 그 래픽 디자인 기술의 융합을 필요로 한다. ) 


▪ 소프트웨어공학(Software engineering)과 컴퓨터과학(Computer science)의 차이점은 무엇인가?
컴퓨터 과학(Computer science)는 컴퓨터나 소프트웨어시스템 하부에서의 이론이나 방법론들과 관련된 것이고,

소프트웨어공학(Software engineering)은 소프트웨어를 개발함에 있어서 발생하는 실용 적인 문제들과 관련한 것이다. 
1. 물리학 지식이 전자공학자에게 필요하듯이 컴퓨터과학(Computer science)는 소프트웨어공학자(Software Engineer)에게 필수적이다. 
2. 하지만, 항상 컴퓨터과학의 이론에 따르는 것은 아니다. 

▪ 소프트웨어공학(Software engineering)과 시스템공학(System engineering)의 차이점은 무엇 인가?
소프트웨어공학은 소프트웨어기반의 시스템을 주로 다루는데 비해, 시스템공학은 하드웨어 개발, 정책, 프로세스 설계, 시스템 배포 및 소프트웨어공학을 포함하는 개념이라 할 수 있다. 그러므로, 시스 템공학은 개별  시스템  컴포넌트(하드웨어,  소프트웨어  등)  개발과  관련된  공학은 아니다.

시스템공학 이 소프트웨어공학에 비해 훨씬 역사가 오래되었다. 하지만, 최근 시스템의 대부분이 소프트웨어로 대 체되고 있기 때문에 시스템공학에서 소프트웨어공학의 기술을 활용하기도 한다.( 예: use-case modeling ) 
 
▪ 소프트웨어 프로세스(Software Process)란 무엇인가?
소프트웨어 생산과 관련한 행위들의 집합으로, 대부분의 소프트웨어 프로세스에 적용되는 기본적인 4단계 프로세스는 다음과 같다. 
 
1. 소프트웨어 명세(Software Specification) : 소프트웨어의 기능과 동작에 대한 제약사항 정의 
2. 소프트웨어 개발(Software Development) : 소프트웨어 요구사항에 맞는 제품 생산 
3. 소프트웨어 검증(Software Validation) : 고객이 원하는 것을 개발했는지 확인 
4. 소프트웨어 진화(Software Evolution) : 변화하는 고객의 요구사항에 맞도록 소프트웨어 변경 
 
▪ 소프트웨어 프로세스 모델(Software process model)이란 무엇인가?
소프트웨어 프로세스를 단순화, 추상화시킨 것으로  소프트웨어  프로세스  모델의  종류에는  다음과 같은 것들이 있다. 
 
1. Workflow model : 일련의 활동 
2. Data-flow (또는 Activity) model : 정보의 흐름 
3. Role/action model : 누가 어떤 일을 하는가를 표현 
 

일반적인 프로세스 모델 
1. Waterfall Approach : 요구사항분석, 명세,  설계,  구현,  테스팅  등의  각  단계가  엄격 하게 구분되어 순서대로 진행 
2. Evolutionary development : 명세, 개발, 검증등을 반복하며, 초기에는 추상적인 명 세로부터 시작하여 점점 명확해지며 고객이 만족하는 수준이 될때까지  계속적으로 개발을 진행한다. 
3. Formal transformation : 수학적으로 시스템을 명세하여, 정형적인 변환과정을 통해 시스템을 만들게 된다. 
4. System assembly  from  reusable  components  :  기존에 존재하는  컴포넌트  재사용 및 조합을 통해 시스템을 개발 


▪ 소프트웨어 공학의 비용은 어떻게 되는가?
> 대략적으로 60%가 개발비용이고, 40%가 테스트 비용이지만 커스터마이징이 필요한 소프트웨어의 경우는 개발 비용보다 유지보수 비용이 훨씬 많이 든다. 
> 성능이나 신뢰도 수준 또는 개발되는 시스템의 종류에 따라 다양하다. 
> 사용한 개발 모델에 따라서도 비용이 다르게 나타난다. 
 
p.10 그림 1.2 개발비용의 분포를 보여줌. 통합과 테스팅에 가장 많은 비용이 들어감 
p.10 그림  1.3  진화적(evolutimary) 개발의 경우에는 명세비용은 줄어들고 설계와 개발비용이 합쳐짐 
p.10 그림 1.4 긴 수명 주기를 가지는 소프트웨어 시스템의 경우 개발비의 3~4배 정도가 시스템 진화비용에 투입됨 
p.10 그림 1.5 맞춤형이 아닌 일반적 소프트웨어 제품의 경우 명세비용은 상대적으로 적지만 다양한 사용 환경에서 사용되어 지도록 상당한 테스팅 비용이 지출됨 
 
▪ 소프트웨어공학 방법론(Software engineering methods)는 무엇인가?
 시스템 모델, 표기법, 규칙, 설계 조언이나 프로세스 길잡이를 포함하는 소프트웨어 개발에 대한 구 조적인 접근법을 말한다. 
 
방법론 구성요소(Method components) 
 
> 시스템 모델 설명(System model description) : 개발되어야할 시스템 모델과 그 모델을 정의하는데 필요한 표기법에 대한 설명 
> 규칙(Rules) : 시스템 모델에 항상 적용되는 제약사항들 
> 권고사항(Recommendations) : 이 방법론을 올바르게 사용하기 위한 지침 
> 프로세스 길잡이(Process guidance) : 시스템 모델을 개발하기 위해 따라야할 활동들에 대한 정의 
 
▪ CASE란 무엇인가?
Computer Aided Software Engineering 의 약자이며, 요구사항분석, 시스템 모델링, 디버깅, 테스팅 등의 소프트웨어 프로세스를 지원한다. 지원하는 개발 시점에 따라 크게 2가지 upper-CASE 도구와 lower-CASE 도구로 나뉜다. 
1. upper-CASE : 분석  및  설계 

2. lower-CASE : 구현 및 테스팅 
 
▪ 좋은 소프트웨어의 속성들은 무엇인가?
1. Maintainability : 소프트웨어는  변화하는  요구사항을  만족시킬수  있도록  설계되어야 한다. 
2. Dependability : 소프트웨어는 신뢰도(reliability)가 높아야 하며, 보안(security)이나 안전성(safety)도 뛰어나야 한다 
3. Efficiency : 소프트웨어는 시스템의  자원을  낭비하지  않도록  효율적으로  동작해야 한 다. 
4. Usability : 소프트웨어는 의도한대로 사용자가 사용하기 쉬워야 한다. 


▪ 소프트웨어공학이 직면한 주요 과제들은 무엇이 있는가?
1. 오래된 시스템 : 수년전에 개발되어 사용되고 있는 오래된 시스템을 비용 효율적으로 유지보수하고 업데이트시킬 수 있어야 한다. 
2. 환경의 이질성 : 네트워크를 통해 분산된 환경에서 다양한 컴퓨터들과 운영체제등에 독립적으로 동작할 수 있어야 한다 
3. 품질과 생산속도 :  품질을  위해  시간을  너무  많이  투자해서는  안된다.  오늘날과  같 이 빠르게 변화하는 시장에서 살아남기 위해서는 품질도 충분히 보장하면서 비용을 줄이면서도 빠르게 시스템을 개발할 수 있어야 한다. 
 
2)  2절: 전문가로서의 책무와 윤리관 

1. 소프트웨어공학은 단순한 기술에 대한 활용을 떠나 폭넓은 책임을 필요로 한다. 
2. 소프트웨어공학자들은 전문가로서 정직하고 윤리적인 책임의식을 가질 필요가 있다. 
3. 이러한 윤리적 행위는 단순히 법을 따르는 것 이상을 의미한다. 
 
기밀(Confidentiality) – 비밀유지계약서등의 형식적인 약속을 하지  않더라도  고객이나  고용주에 대한 비밀을 유지해야한다. 
능력(Competence) – 자신의 능력을 과장해서는 안되며 수준에 맞는 일을 해야한다. 
지적 재산권(Intellectual property rights) – 고객이나 고용주의 특허와 같은 지적 재산권을 보호 해야한다. 
컴퓨터 남용(Computer misuse) – 기술적 능력을 이용하여 다른  사람의  컴퓨터를  남용해서는 안된다. 

▪ ACM/IEEE Code of Ethics 

1. ACM, IEEE(Institue of Electrical and Electronic Engineers), British Computer Society는 기술 전문가가 지켜야할 윤리강령을 만들었으며 다음과 같은 내용으로 구성되어 있다. 

[1] PUBLIC –   소프트웨어 공학자는 대중의 이익에 부합하는 행동을 한다. 
[2] CLIENT AND EMPLOYER – 소프트웨어 공학자는 대중의 이익에 부합하는 범위내에서 그들의 고객과 고용주의 최대 이익을 내기 위한 행동을 한다. [3] PRODUCT – 소프트웨어 공학자는 제품 및 관련 변경이 최대한 전문가적 기준에 부합 하도록 한다. 
[4] JUDGEMENT – 소프트웨어 공학자는 그들의 전문가적 판단 아래 성실하고 독립적으로 행동한다. 
[5] MANAGEMENT – 소프트웨어 공학 관리자와 지도자는 소프트웨어 개발과 유지보수를 함에 있어 윤리적 접근을 지향한다. 
[6] PROFESSION – 소프트웨어 공학자들은 대중의 이익에 부합하면서 전문자로서의 성실과 평판을 유지 발전시켜 나가야 한다. 
[7] COLLEAGUES – 소프트웨어 공학자들은 동료에게 공평하고 협조적이어야 한다. 
[8] SELF – 소프트웨어 공학자들은 그들의 전문지식을 지속적으로 공부하면서, 윤리적인 접근으로 전문가로서의 실천을 행해야 한다 
참고로 한국의 경우, 과학기술단체총연합회에서 1980년 "과학기술인의 신조"라는 일종의  행동강령을 공포한 적이 있다.     
 
<과학기술인의 신조>  
우리 과학기술인은 과학기술의 창달과 진흥을  통하여  국가발전과  인류복지사회가  이룩될  수  있음을 하고 다음과 같이 다짐한다.


1. 우리는 창조의 정신으로 진리를 탐구하고 기술을 혁신함으로써 국가 발전에 적극 기여한다.   
2. 우리는 봉사하는 자세로 과학기술 진흥의 풍토를 조성함으로써 온국민의 과학적 정신을 진작한다.   
3. 우리는 높은 이상을 지향하여 자아를 확립하고 상호협력하므로써 우리의 사회적 지위와 권익을 신장한다.
4. 우리는 인간의 존엄성이 숭상되고 그 가치가 보장되는 복지사회의 구현에 헌신하다.   
5. 우리는 과학기술을 선용함으로써 인류의 번영과 세계의 평화에 공헌한다. 
  
 
[ 정리하기 ] 


1. 요약정리 
▣ 소프트웨어 공학은 소프트웨어 생산의 모든 관점과 관련한 공학적 기법이다. 
▣ 소프트웨어 제품은 프로그램과 관련 문서 및 실행에 필요한 데이터를 포함하며, 좋은 소프트웨 어 제품이 되기 위해서는 유지보수성(Maintainability), 의존성(Dependability), 효율성(Efficiency) 그리고 사용성(Usability)가 보장되어야 한다. 
▣ 소프트웨어 프로세스는 소프트웨어 개발과 관련한 일련의 활동으로 기본적으로 명세(Specification), 개발(Development), 확인(Validation)과 진화(Evolution)으로 이루어진다 
▣ 방법론(Methods)는 소프트웨어를 개발하는 구조적인 방법으로 따라야 할 행위들과 표기법, 규칙 등이 포함된다. 
▣ 소프트웨어 공학자는 단순히 기술뿐 아니라 윤리적인 책임을 가진다. 
 
2. 참고자료
ACM/IEEE Code of Ethics (IEEE/ACM 1999)   
No silver bullet: Essence and accidents of software enginnering 
(F.P. Brooks, IEEE Computer, 20(4), April 1987.)  In spite of its age, this paper is a good general introduction to the problems of software engineering.   
The essential message of the paper hasn't changed in the past 13 years. 
 

'정보과학 > 소프트웨어공학특론' 카테고리의 다른 글

요구 공학 프로세스  (2) 2023.11.25
소프트웨어 요구사항  (1) 2023.11.25
소프트웨어 프로세스(2)  (1) 2023.11.23
소프트웨어 프로세스(1)  (1) 2023.11.23
시스템 공학  (0) 2023.11.23