Software Engineering

[소프트웨어공학] Chapter 01. Introduction

ChoiSW 2023. 3. 15. 18:56

소프트웨어공학이란

 소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문이다.

( 소프트웨어 생산의 모든 내용( 개발초기 단계부터 유지보수 단계까지 ) 을 담고 있는 학문이다. )

- 개발기술 뿐만 아니라 프로젝트 관리, 개발환경, 개발방법 등을 포함한다.

- 문제를 해결하기 위해 적절한 이론과 방법들을 사용한다.

 

소프트웨어 비용에 관련하여

 - 일반적으로 유지보수 비용이 개발 비용보다 더 많이 든다. (long life의 소프트웨어일수록.)

 - 소프트웨어공학에서는 비용대비 효율을 고려한다.

 

소프트웨어 프로젝트가 실패하는 경우

 - 시스템이 복잡해지면서 새로운 기능을 추가하기 힘들어지는 경우 

 - 소프트웨어공학의 방법을 사용하지 않는 경우 ( 사용하지 않는 경우 프로그램을 만들기 쉽지만, 프로그램이 커지면서 비용이 증가하고 신뢰도가 떨어질 수 있다 )

 

 


 

Professional software development

 

소프트웨어공학에 대한 질문들 !

소프트웨어란 ? 

 컴퓨터 프로그램관련 문서(ex.명세서)

 

좋은 소프트웨어의 특징은 ?

 기능과 성능 요구조건을 만족하고 유지-보수 가능(maintainable)하며 믿고 쓸 수 있고(dependable) 사용가능한 것(usable)

 

소프트웨어공학이란 ?

 소프트웨어 생산의 모든 내용( 개발초기 단계부터 유지보수 단계까지 ) 을 담고 있는 공학 학문

 

소프트웨어공학의 근본적인 활동들은 ?

 specification(세부사항 명시) , development(개발) , validation(점검) , evolution(업데이트)

 

소프트웨어공학과 컴퓨터과학(cs)의 차이점은 ? 

 컴퓨터과학은 이론만을 다루고 소프트웨어공학은 이론, 개발, 배포까지 다 다룬다.

 

소프트웨어공학과 시스템공학의 차이점은 ?

 소프트웨어공학은 소프트웨어한정으로 다루고 시스템공학은 소프트웨어, 하드웨어, 프로세스 등의 모든 측면을 다룬다. 

 

소프트웨어공학이 직면하는 주요 과제는 ?

 시대에 따라 증가하는 다양성에 대한 대처, 요구사항들을 더 짧은 시간 내에 줄여 만드는 것, 신뢰할만한 소프트웨어 만드는 것

 

소프트웨어공학 비용이란 ?

 개발 비용(통상 60%)과 테스트 비용(통상 40%) / 특정 사용자를 위한 custom 소프트웨어는 종종 유지보수 비용이 개발비용보다 클 수 있다.

 

소프트웨어공학의 최고 기술과 방법론은 ?

 개발 분야마다 기술과 방법이 다르기 때문에 특정짓기 어렵다

 

소프트웨어 상품

 - Generic products (일반적인 sw)

 독립실행형 시스템 ( 캐드, word .. )

 개발자에 의해 어떻게 프로그램될지 결정되며 소프트웨어가 개발자에 의해 관리된다.

 - Customized products (커스텀 sw)

 특정 사용자의 요구에 맞춰 만들어진다. ( 임베디드 시스템, 수강신청프로그램 .. )

 고객에 의해 어떻게 프로그램될지 결정되며 고객의 요구에 맞춰 소프트웨어가 관리된다.

 

좋은 소프트웨어의 필수 특징 !

Maintainability ( 유지보수성 ) 고객의 요청이 있을 시 업데이트 가능한지 

Dependability and Security ( 신뢰성과 보안성 ) 물리적, 경제적 손상을 주면 안된다.

Efficiency ( 효율성 ) 시스템 자원의 낭비가 없어야한다.

 Acceptability ( 수용가능성 ) 사용자가 이해할 수 있어야하고 사용할 수 있어야하며 사용자가 사용하는 다른 시스템과 공존가능한지

 

소프트웨어공학의 중요성

- 발달하는 소프트웨어 시스템에 사회가 점점 더 의존하므로 신뢰할 수 있는 시스템을 경제적이고 빠르게 만들 수 있어야한다.

- 장기적으로 봤을 때, 소프트웨어공학 기법을 사용하는 것이 단순히 프로그램을 개발하는 것보다 더 경제적이다.

- 대부분의 시스템에서는 완성 후 유지-보수, 업데이트 비용이 많이 든다.

 

소프트웨어 개발 과정

1  Software specification ( 요구사항 명세 )  -  고객과 개발자 간의 소통으로 어떻게 소프트웨어를 만들고 소프트웨어의 동작에 제약사항을 둘지 정하는 단계

2  Software development ( 개발 )  -  소프트웨어 설계 및 개발 단계

3  Software validation ( 점검 )  -  고객의 요구사항 대로 동작하는지 확인하는 단계

4  Software evolution ( 진화  )  -  변화하는 고객, 시장의 요구사항을 반영하여 수정되는 단계

 

소프트웨어에 영향을 미치는 일반적인 사안 ( issue )

Heterogeneity ( 이질성 )  -  시스템들이 서로 다른 종류의 디바이스에서 분산된 시스템으로 동작되도록 점점 요구되고 있음

Business and Social Change (시장과 사회의 빠른 변화 )  시장과 사회적 변화가 점점 빠르게 변화하는 것에 맞춰 기존 소프트웨어를 바꾸거나 새로운 소프트웨어를 개발해야한다

Security and Trust ( 보안성과 신뢰성 )  -  우리의 삶의 많은 곳과 밀접하게 연관되어 있기에 신뢰할만 해야한다.

Scale ( 규모 )  -   소프트웨어가 웨어러블 기기, 클라드 시스템 등의 매우 넓은 범위로 개발되고 있다.

 

소프트웨어공학의 다양성에 관하여

- 많은 다양한 종류의 소프트웨어 시스템이 있기에 이 많은 것들에 적용할 수 있는 보편적인 소프트웨어 기술은 없다.

- 소프트웨어공학 방법과 개발환경은 개발될 소프트웨어의 종류, 고객의 요구사항, 개발팀의 배경지식에 따라 달라진다.

 

응용프로그램 종류

Stand-alone applications  - PC와 같은 개인 local 컴퓨터에서 동작하며 모든 필요기능을 포함하고 네트워크를 필요로 하지 않음

Interactive transaction-based applications  -  PC(personal computer)를 이용해 외부의 컴퓨터에 접속하여 실행되며 네트워크를 필요로 한다.

Embedded control systems  -  하드웨어 장치에서 제어되고 관리되는 시스템  /  가장 많다

Batch processing  -  일괄처리 시스템  / 한번에 많은 일을 처리한다.

Entertainment systems  -  오락을 위한 시스템 / 게임, 음악 등

Systems for modeling and simulation  -  과학자, 공학자를 위한 모델링, 시뮬레이션 시스템

Data collection systems  - 많은 양의 센서들을 이용하여 데이터를 수집하여 처리를 위해 다른 시스템으로 전송하는 시스템 /  ex. 날씨 파악

Systems of systems  -  많은 수의 다른 소프트웨어 시스템들로 구성된 시스템

 

 

소프트웨어 공학의 기본 원리 ( 모든 종류의 software에 적용됨 )

 - 잘 관리되고 이해가능한 개발 과정으로 개발되는 것 ( 유지, 보수를 위해 )

 - 신뢰성과 성능

 - 명세서와 요구사항을 이해하고 관리하는 것

 - 새로 개발하는 것보다 이미 있는 소프트웨어를 적절하게 재사용 하는 것

 


Software engineering ethics - 윤리

소프트웨어 공학에서의 윤리

-  소프트웨어 공학은 단순히 기술을 적용하는 것보다 책임감이 더 중요하다.

-  개발자는 프로로서 존중받고자 한다면 정직하고 윤리적인 책임을 가지고 행동해야한다.

법적으로 문제되지 않는 행동을 하는 것 이상으로 도덕적으로 옳은 행동을 해야한다.

 

전문가(개발자)의 의무/책임 ( Issues of professional responsibility )

- Confidentiality ( 기밀유지 )

- Competence ( 능력을 속이지 말기 )

- Intellectual property rights ( 지식재산권, 저작권 등의 법을 잘 알고 있어야한다 )

- Computer misuse ( 개발자는 다른 사람의 PC를 오용해서는 안된다 )

 


Case studies - 사례연구

사례연구란 ? 

 특정 사례를 주제로 삼고 총체적인 자료수집을 하여 연구하는 것

 

당뇨병 환자를 위한 인슐린 펌프 제어 시스템

- 혈당 수치 센서로부터 데이터를 수집하고 투여할 인슐린의 양 계산

- 계산은 혈당 수치 변화를 기반으로 진행 

- 펌프에 신호를 보내고 정확한 양의 인슐린을 전달

- Safety-critical system : 건강, 목숨과 관련된 중요 시스템 ( 수치의 정확성 중요 )

 

Insulin pump hardware architecture

 

 

Activity model of the insulin pump

 

Essential high-level requirements

- The system shall be available to deliver insulin when required. 

- The system shall perform reliably and deliver the correct amount of insulin to counteract the current level of blood sugar.
- The system must therefore be designed and implemented to ensure that the system always meets these requirements.