[소프트웨어공학] Chapter 01. Introduction
소프트웨어공학이란
소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문이다.
( 소프트웨어 생산의 모든 내용( 개발초기 단계부터 유지보수 단계까지 ) 을 담고 있는 학문이다. )
- 개발기술 뿐만 아니라 프로젝트 관리, 개발환경, 개발방법 등을 포함한다.
- 문제를 해결하기 위해 적절한 이론과 방법들을 사용한다.
소프트웨어 비용에 관련하여
- 일반적으로 유지보수 비용이 개발 비용보다 더 많이 든다. (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.