소프트웨어 공학 실무적 접근
- 저자
- Pressman 지음
- 출판사
- McGRAW HILL | 2015-01-02 출간
- 카테고리
- 컴퓨터/IT
- 책소개
- ▶ 이 책은 소프트웨어 공학 이론서입니다. 소프트웨어 공학의 기...
1. 소프트웨어의 본질
소프트웨어(software 이하 SW)는 프로덕트이며, 동시에 프로덕트를 전달하는 수단이다. ① 프로덕트로써, 소프트웨어는 하드웨어나 네트워크에 의해 구체적인 컴퓨팅 잠재력을 전달한다. ② 프로덕트를 전달하는 수단으로써, 소프트웨어는 컴퓨터를 제어(운영체제)., 정보의 전달(네트워크), 다른 프로그램을 생성하고 제어(소프트웨어 도구와 환경)하는 역할을 한다.
소프트웨어는 가장 중요한 프로덕트인 정보(한 개의 비트에서부터 많은 데이터로 만든 멀티미디어 데이터)를 생산, 관리, 획득, 수정, 표시, 전파시킨다. 개인적인 관점에서 더욱 유용하게 사용할 수 있도록 개인적인 데이터를 변환하거나, 경쟁력을 향상시키기 위해 사업관련 정보를 관리하거나, 전 세계적인 정보 네트워크로의 게이트웨이를 제공하거나, 다양한 형태의 정보를 획득할 수 있는 수단을 제공한다.
지난 50년간 하드웨어 성능 개선, 컴퓨터 구조 변화, 저장용량 증가, 다양한 입출력 장치 등으로 인해 컴퓨터 소프트웨어는 더욱 정교해지고 복잡하게 변화하였다. 그러나 개발자의 입장에서는 큰 어려움이 되기도 하였다. 소프트웨어의 규모가 커짐에 따라 개인이 시스템을 개발하는 것이 아닌 여러 개의 팀으로 대체되었다. 하지만 여전히 같은 질문을 하고 있다.
시간 : 소프트웨어가 완성되기 위해 왜 그렇게 많은 시간이 필요한가?
비용 : 소프트웨어 개발 비용이 왜 그렇게 많이 드는가?
소프트웨어를 고객에게 전달하기 전에 왜 모든 에러를 찾지 못하는가?
개발된 프로그램을 유지 보수하는 데 왜 그렇게 많은 시간과 노력을 들여야 하나?
소프트웨어를 개발하고 유지 보수할 때 진척 정도를 측정하기가 왜 어려운가?
이와 같은 질문들은 소프트웨어의 개발 방식에 대한 질문으로, 이런 질문으로 소프트웨어공학 기술의 필요함을 알려준다.
1.1 소프트웨어 정의
먼저 프로그램은 특정 문제를 해결하기 위한 명령어들의 정렬된 집합을 말한다. 소프트웨어란 컴퓨터 프로그램과 함께 관련된 문서(요구서, 설계서, 분석서, 에러리포트, 설명서, 테스트 리포트, 테스트 케이스등 유지 보수하는데 사용되고, 개발하면서 필요한 모든 문서들)를 포함한 것을 말한다. 곧 프로그램은 하나의 소프트웨어의 진부분집합이다.
"소프트웨어는 ① 실행되면서 원하는 기능이나 함수, 성능을 제공해 주는 명령어들, ② 프로그램이 데이터를 적절하게 처리할 수 있게 해주는 자료구조, ③ 프로그램의 사용이나 운영을 나타내는 하드카피나 가상 형태의 문서이다.”
- 교재 p5
[그림 1] 하드웨어 고장률 곡선
그림 1은 하드웨어 고장률을 나타낸다. 욕조 커브(bathtub curve)로 불리는 그래프로, 하드웨어의 생명주기 초기에는 설계나 제조과정의 결점으로 인해 고장률이 높다. 그리고 결점의 수정을 통해 안정적인 수준으로 떨어진다. 하지만 시간의 지남에 환경적 요인(먼지, 진동, 오용, 극단적인 온도 등)을 겪으며 마모되고 고장률은 다시 올라가게 된다
.
[그림 2] 소프트웨어 고장률 곡선
소프트웨어는 하드웨어와 달리 환경적 요인에 의해서 마모되지 않는다. 즉, 하드웨어는 부품이 마모되면 새것으로 교체하면 되지만 소프트웨어는 오류가 발생하면 코드를 변경해야 한다. 이론상으로는 소프트웨어는 마모되지 않으므로 그림 2와 같이 초기에는 높은 고장률을 보이다가 수정을 통해 낮은 고장률인 곡선의 형태를 보여야 한다. 하지만 소프트웨어는 마모되는 것이 아니라 악화되는 것이다.
그림 2의 실제 곡선(Actual curve)과 같이 뾰족한 고장률 곡선이 나타난다. 생명주기에는 발견되지 않은 결함으로 인해 높은 고장률을 나타낸다. 결함들이 수정되어지면 다시 일정하게 낮아진다. 하지만 새로운 요구사항으로 인해 소프트웨어에 변경이 이루어지면 급격하게 고장률은 높아진다. 수정을 통해 곡선은 낮아지다가 안정적인 고장률로 돌아가기 전에 다른 요구사항으로 인해서 곡선은 뾰족하게 된다. 즉, 변경과정에서 많은 에러를 동반한다. 이러한 반복으로 인해 전체적으로 고장률 수준이 올라가기 시작하면서 소프트웨어는 저하된다. 따라서 변경을 요하는 소프트웨어 유지보수 작업은 하드웨어 유지보수보다 상당히 복잡하다.
소프트웨어공학 방법론에서는 소프트웨어 고장률 그래프에 변경으로 인해 고장률이 높아진 정도를 줄이기 위해 노력하고 있다.
1.2 소프트웨어 애플리케이션 도메인
컴퓨터 소프트웨어는 넓게 7가지 범주로 나눌 수 있다.
시스템 소프트웨어(System software) : 컴파일러나 파일 관리 유틸리티와 같은 시스템 소프트웨어는 결정적(소프트웨어의 입력, 처리, 출력의 시간과 순서가 예측 가능)인 정보구조를 처리하고, 운영체제 컴포넌트, 드라이버, 원거리 통신 처리기와 같은 시스템 소프트웨어는 비결정적인 데이터를 처리한다.
애플리케이션 소프트웨어(Application software) : 특수한 업무상의 요구를 해결해 주는 독자적인 프로그램이다.
공학/과학용 소프트웨어(Engineering/scientific software) : '수 처리' 알고리즘으로 사용되는 것들로, 천문학부터 화산학, 자동차 스트레스 분석부터 우주 왕복선 궤도 역학 등 다양하게 응용된다.
임베디드 소프트웨어(Embedded software) : 제품이나 시스템에 내정되어 있으면서 시스템 자체를 위한 특징적인 기능만 구현하고 제어하는 데 사용된다. 예를 들어 전자레인지나 밥솥에 내장된 소프트웨어를 말한다.
프로덕트라인 소프트웨어(Product-line software) : 많은 고객들이 사용할 수 있는 특수한 기능을 제공하기 위하여 설계되어지며, 제한적이고 개인적인 프로덕트나 또는 대규모 고객을 위한 프로덕트에 주안점을 두고 개발할 수 있다.
웹/모바일 애플리케이션(Web/mobile applications) : 네트워크 중심 소프트웨어의 범주에는 다양한 응용 분야가 있을 수 있으며, 브라우저 기반의 앱들과 모바일 기기들에서 동작하는 소프트웨어들을 모두 포함한다.
인공지능 소프트웨어(Artificial intelligence software) : 계산이나 직접적인 방법으로는 분석할 수 없는 복잡한 문제를 해결하기 위해 비수치적 알고리즘을 사용한다. 로보틱스, 패턴인식, 인공신경망 등을 분야로 들 수 있다.
일부 새로운 시스템이 만들어지고 있지만, 대부분, 기존 애플리케이션이 수정되고, 적용되며, 개선되고 있다. 이처럼 지난 세대의 소프트웨어 종사자들이 각 범주 별로 유산을 남겨두었다. 즉, 재사용성이 가능하도록 하여 새로운 시스템을 개발하는데 있어서 부담을 덜 수 있게 되었다.
1.3 레거시 소프트웨어
레거시 소프트웨어란 과거에 개발되어 현재에도 사용 중인 낡은 소프트웨어를 말한다. 이는 현대까지도 남아 쓰이는 기술일 수도 있고, 쓰이지 않더라도 현대의 기술에 영향을 주는 경우도 있다. 보통 레거시 소프트웨어는 오래 전에 개발되어서 품질이 낮은 경우가 많다. 즉, 확장 불가능한 설계, 매우 복잡한 코드, 문서화가 되어있지 않은 경우, 변경에 대한 기록이 없는 경우이다. 이 시스템이 "사업의 핵심 기능을 지원하며 사업상 꼭 필요한 것이다."라고 하면 어떻게 할 것인가?
이 질문에 대해서 한 가지 적합한 해결책은 아무것도 하지 않는 것이다. 만약 레거시 시스템이 사용자의 요구를 만족시키고 믿을 수 있게 작동한다면 이 시스템은 고장 난 것이 아니며, 고칠 필요가 없다. 하지만 레거시 시스템은 다음과 같은 이유로 계속 진화한다.
새로운 컴퓨팅 환경이나 기술이 필요한 경우 소프트웨어가 이를 만족시키기 위해 적응 되어야만 한다.
사업상 새로운 요구를 만족시키기 위해 기능이 향상되어야 한다.
새로운 시스템이나 데이터베이스와 상호 운용될 수 있도록 소프트웨어가 확장되어야 한다.
진화하는 컴퓨팅 환경에서 실행 가능하도록 하기 위해 소프트웨어는 재설계되어야 한다.
이런 식으로 점진적인 진화가 이루어지면 레거시 시스템은 새로운 환경에 맞게 재공학되어야 한다. 현대의 소프트웨어공학의 목표는 "진화 기초를 둔 방법론은 고안하는 것"이다. 진화 개념이란 소프트웨어는 계속적으로 변화한다는 것으로, 예전 소프트웨어와 새로운 소프트웨어 모두 서로 상호운용되어야 하고 서로 협력해야 한다는 것이다.
2. 소프트웨어 본질의 변화
산업계를 지배하며 진화하고 있는 소프트웨어에는 네 가지 범주가 있고, 약 10여 년 전까지 초기 단계에 머물러 있었다. 하지만 오늘날 급격하게 변화하였으며 각각의 범주는 다음과 같다.
1.1 웹앱
월드 와이드 웹은 하이퍼텍스트라는 기능에 의해 인터넷상에 분산되어 존재하는 온갖 종류의 정보를 통일된 방법으로 찾아볼 수 있게 하는 광역 정보 서비스 및 소프트웨어이다. 초기 단계에는 텍스트와 한정된 그래픽만을 사용하여 구성되어 있었다. 시간이 흘러, HTML(HyperText Markup Language)은 개발도구에 의해 확대되어 졌고, 정보 컨텐츠와 함께 계산 기능을 제공하는 것을 가능하게 하였다. 그로 인해 웹 기반 시스템과 응용프로그램(웹앱)들이 생겨났다.
지난 10여 년 동안, 씨맨틱 웹(Semantic Web) 기술들(종종 Web 3.0으로 표현됨)은 계속 진화해왔다. 그로 인한 정교하고 복잡한 관계형 자료 구조는 이전에는 불가능했던 상이한 정보들에 대한 접근을 가능하게 함으로써, 완전히 새로운 웹앱을 만들 수 있는 길을 열어주었다.
시맨틱 웹(Semantic Web)은 '의미론적인 웹'이라는 뜻으로, 현재의 인터넷과 같은 분산환경에서 리소스(웹 문서, 각종 화일, 서비스 등)에 대한 정보와 자원 사이의 관계-의미 정보(Semanteme)를 기계(컴퓨터)가 처리할 수 있는 온톨로지형태로 표현하고, 이를 자동화된 기계(컴퓨터)가 처리하도록 하는 프레임워크이자 기술이다. 웹의 창시자인 팀 버너스 리가 1998년 제안했고 현재 W3C에 의해 표준화 작업이 진행 중이다.
- '시맨틱 웹', 위키백과
1.2 모바일 앱
앱(app)이란 모바일 플랫폼에서 동작하도록 제작된 소프트웨어를 뜻한다. 모바일 앱과 모바일 웹 응용프로그램 사이의 차이점을 인식하는 것은 중요하다. 모바일 웹 응용프로그램(WebApp)은 모바일 디바이스로 하여금 모바일 플랫폼의 장단점을 포함하도록 디자인된 브라우저를 통해 웹 기반의 컨텐츠에 대한 접근을 가능하게 해준다. 즉, 모바일 브라우저를 통해서 실행되는 응용프로그램을 말한다. 반면에 모바일 앱은 특정 모바일OS에서 구동되는 것으로 하드웨어 특징들에 대한 직접적인 접근이 가능한 것을 말한다. 하지만 오늘날, 기술의 발전으로 브라우저들이 디바이스를 컨트롤 가능하게 되었기 때문에 모바일 앱과 모바일 웹 응용프로그램 간의 차이는 점점 흐려지고 있다.
1.3 클라우딩 컴퓨팅
클라우딩 컴퓨팅은 모든 사용자들이 장소에 구애 받지 않고 광범위한 범위에서 컴퓨팅 장치를 사용하여 컴퓨팅 자원들을 공유하게 하는 인프라스트럭처 또는 "생태계"를 포함한다.
클라우드 컴퓨팅의 구현은 프론트앤드와 백앤드 서비스들을 포함하는 구조의 개발이 필요하다. 프론트앤드는 클라이언트 디바이스와 백앤드 서비스에 대한 접근을 가능하게 해주는 응용 소프트웨어를 말한다. 백앤드는 서버와 관련 컴퓨팅 자원들, 데이터 저장 시스템, 서버에 상주하는 응용프로그램, 그리고 관리 서버들을 포함한다.
클라우드 컴퓨팅은 소프트웨어가 전달되는 방식과 존재하는 환경을 바꿀 것이다.
1.4 프로덕트 라인 소프트웨어
카네기 멜론 대학의 소프트웨어공학 연구소는 소프트웨어 프로덕트 라인을 "특정 시장 분야 또는 임무에 필요하며, 공통으로 관리되는 특징들을 공유하고, 규정된 방식에 따라 핵심 자산들로부터 개발된 일련의 소프트웨어 집약 시스템"으로 정의했다. 즉, 프로덕트 라인 내의 모든 프로덕트들 사이에서 공통적인 컴포넌트, 아키텍처, 모델 등을 활용하여 재사용하고 개발 기간을 단축시켜 생산성을 높이고 품질이 좋은 소프트웨어를 개발할 수 있게 됨을 의미한다.
'대학 생활 > 소프트웨어공학' 카테고리의 다른 글
애자일 개발 (0) | 2015.05.05 |
---|---|
[UML] 클래스 다이어그램 작성법 - 1 (0) | 2015.04.25 |
객체 지향 개발 방법론 : XP(eXtreme Programming) (0) | 2014.05.31 |
객체 지향 개발 방법론 : RUP(Rational Unified Process) (0) | 2014.05.28 |