01. 시스템이란?
- 시스템: 비즈니스 문제를 해결하기 위한 목적으로 구성된 소프트웨어와 하드웨어의 조합.
이때 중요한 것은 '비즈니스 문제를 해결하기 위한다는' 것. 비즈니즈 문제가 존재해야만 시스템이 요구된다.
- 더 폭넓은 개념의 시스템: 컴퓨터 기반 솔루션 + 밀접히 연관된 사람과 프로세스까지 포함된 개념.
예를 들어, 정보 시스템Imformation Systems에는 하드웨어, 소프트웨어, 데이터, 네트워크 그리고 사람, 프로세스가 포함된다. 전자의 4가지 요소는 일반적으로 시스템을 구성할 때 함께 언급되는 요소들이지만 후자는 다소 특별.
사람에는 유저와 개발자라는 불가분의 두 관계가 존재, 프로세스에는 개발과 운영이 함께 포함.
이는 복잡성의 문제를 야기한다.
위의 6가지 요소들이 언급되는 이유는 비즈니스 문제가 굉장히, 굉장히, 굉장히 복잡하기 때문.
예를 들어 ATM의 기본 원리는 굉장히 복잡하며 만일 문제가 발생한다면 그보다 더 까다롭게 복잡해질 것이다.
그렇다면 그런 방대하고 복잡한 시스템을 어떻게 만들 수 있을까?
! 소프트웨어 개발의 현실
많은 컴퓨터공학과 학생들은 기업에서 일하기 시작하면 한가지 문제를 목도한다. 자신의 직무가 자신이 배운 것과는 다르다는 괴리이다.
IT 시스템과 개발과정을 이해하기 위해서는: 정부시스템구축 프로세스인 Software Development Life Cycle(SDCL)의 특성을 이해하는 것이 중요하다.
실제로 많은 프로젝트들이 실패로 끝난 사례들이 보고되곤 한다. 다음은 책의 번역이다.
Sofrware Development Life Cycle(SDLC)은 시스템을 디자인하고, 구축하고, 유저들에게 인도하며 어떻게 정보 시스템이 비즈니스 요구를 충족시킬 수 있는지를 이해하는 절차입니다.
만일 당신이 프로그래밍 수업을 들었거나 자신의 프로그래밍 기술을 보유하고 있다면, 이런 절차는 매우 간단하게 들릴지도 모릅니다. 하지만 불행하게도, 그렇지 않습니다. 1996년에 이뤄진 연구는 42%의 협력 프로젝트가 완성하기도 전에 실패했다는 사실을 발견했습니다. 1996년에 수행된 또다른 유사한 연구 또한 53%의 US 정부 프로젝트가 실패했다는 사실을 발견했습니다.
불운하게도, 많은 수의 실패하지 않았던 시스템들조차 유저를 인도하는 것이 매우 늦었거나, 계획한 것보다 비용이 더 지출되었거나, 사전에 계획했던 것보다 적게 특징을 충족했습니다.
성공적인 시스템 개발의 핵심은 프로그래밍이 아닌 분석으로부터 시작한다.
즉 시스템 개발의 성패는 개발된 시스템이 사용자의 비즈니스 목적, 즉 이윤창출에 얼마나 부합되는지에 있다.
그러나, 시스템 분석가의 제 1의 목적은 놀라운 시스템을 탄생시키는 것이 아닙니다. 대부분의 기업들에게 이익을 증가시키는 구조를 위한 가치를 만드는 것입니다.
많은 실패한 시스템들은 어떻게 시스템이 기업의 목적과 최근의 비즈니스 프로세스, 그리고 가치를 제공하는 다른 정보 시스템에 걸맞을지에 대한 분명한 이해 없이, 분석가가 놀라운 작품을 탄생시키기 위해 노력했기 때문에 실패했습니다.
* 왜 많은 스타트업들이 문을 닫을까?
훌륭한 개발자가 훌륭한 기획자이며 분석가는 아니다. 개발자들 눈에 아름답다 해도 일반인들에게 그렇지는 않다. 사용자의 니즈를 읽고 그에 걸맞는 시스템을 개발해야 한다.
! 소프트웨어 개발의 성공기준
시스템 개발의 성공기준에는 3가지가 있다.
가장 먼저 주어진 시간 안에 했는지, 다음으로 주어진 예산 안에 했는지, 마지막으로 주어진 범위 안에 했는지.
On time, On budget, On target(scope).
다음은 프로젝트가 실패한 요소들을 분석한 것이다.
첫번째로 요구가 충분하지 않았기 때문에, 두번째로는 유저의 충분한 인풋이 부족해서, 세번째로는 자원의 부족이 있으며, 네번째로는 현실적이지 않은 지나친 기대였고, 다섯번째는 정확한 지원의 부족이었으며, 여섯번째는 요구의 계속된 변화 때문이었다.
1. 시스템 개발 단계
1) 분석 Analysis
문제 영역의 요구사항이 무엇인지를 검증하기 위한 활동이다.
사용자가 가진 문제를 명확하게 정의해야 한다. 요구 수집, 분석, 명세, 검증 등 다양한 일이 필요하다. 가장 중요한 단계이며 이때 요구사항이 잘못되거나 흔들려서는 안된다.
2) 설계 Design
요구를 만족시키는 솔루션 중 최적의 방법을 찾아가는 과정이다.
아키텍처 설계, 상세 설계, 알고리즘 설계 등의 일이 필요하다. 분석을 철저하게 준수해야 한다.
3) 구현 Implementation
설계에서 명시된 조건을 반영하여 컴퓨터가 실행 가능한 언어로 코딩하고 단위 테스팅 활동을 수행한다.
인테리어 업자가 시공서를 철저하게 준수해야 하는 것처럼 설계에서 명시된 조건을 따라야 한다.
4) 테스트 Test
주어진 명세에 부합하는지를 자동 혹은 수동으로 테스트한다. 기능 테스트, 시스템 테스트, 인수 테스트 등이 포함된다.
분석에서의 요구사항이 만족되었는지를 확인한다. 주어진 명세를 만족시키지 못했을 때를 에러라고 부른다.
=> 다음과 같은 4가지 과정은 서로 밀접한 관련이 있으며 순서대로 수행된다.
2. 소프트웨어개발생명주기 Software Development Life Cycle
계획 - 분석 - 설계 - 구현 - 시험 - 인수설치
* Building SW / Write Code : 설계와 작성은 다르다. 소분설 과목에서는 설계(구축)을 다룬다.
* 비효율적인 설계로 코딩하는 것은 비용 측면에서도 경쟁력 측면에서도 좋지 않다. 사전에 모델을 통해 효율적인지를 판단하고 코딩하는 것이 더욱 효율적이다.
3. 객체지향 개발단계의 활동
객체지향Object-orient은 객체의 뷰로 보는 것을 의미한다.
- 객체지향 분석
문제영역problem domain을 구성하는 주요 개념과 기능요구사항을 정의한다.
영역분석을 통해 문제를 구성하는 객체, 클래스, 이들의 관계를 식별합니다.
- 객체지향 설계
시스템 및 서브시스템을 구성하는 객체와 클래스를 찾아내고 이를 바탕으로 아키텍처를 정의한다.
요구를 만족시키기 위해 객체들이 어떻게 상호작용하는지를 상세하게 설명한다.
- 객체지향 코딩
Java, C++, Python과 같은 객체지향 언어를 사용하여 구현한다.
설계의 내용이 충실히 반영하도록 코딩한다.
=> 개발단계를 관통하는 것은 객체의 개념이다.
4. 시스템을 보는 시각
시스템을 보는 3가지 측면.
- 정적인 측면
- 동적인 측면
- 기능적인 측면.
각각의 측면은 독립적인 모형이며, 이들 모형이 여러 형태로 표현되고 분석된다.
* 이 세개의 모형은 한학기동안 함께하게 될 주제이다. 이 모형을 사용하는 이유는 모델링때 미리 문제를 찾아내기 위해서이다. 모델링(분석) - 설계 - 코딩 - 테스팅의 과정 중 테스팅에서 문제를 찾아내는 것은 비효율적이다.
* 각자 사용자 입장, 개발자 입장, 데이터 분석 3가지 측면으로 나누어 분석하다가 3개의 모형이 탄생하게 되었다고 한다.
1) 정적 구조
데이터들의 관계를 살펴본다.
데이터베이스라는 데이터들의 집단은 데이터들을 정의해야 한다. => 데이터들을 정의하고 그 관계를 분석한다.
예를 들어 판매 정보는 판매 리포트로, 판매 정보와 고객 정보는 마케팅 리포트로, 고객 정보와 제품 정보는 제품 리포트로 연결됩니다.
2) 동적 구조
시간의 흐름에 따라 시스템의 동작을 보여주는 구조이다.
예를 들어 ATM을 만들고자 한다면 고객과 ATM, ATM과 컨소시엄, 컨소시엄과 은행, 은행과 거래, 거래와 계좌까지의 각자의 상호작용을 구성하고 정의한다.
* 모델링을 한다는 것은 없는 상태에서 정의해야 한다는 것을 뜻한다. 존재하지 않지만 눈앞에 있는 것처럼 동작을 설계해야 하기 때문에 난이도가 있고 신중함이 요구된다.
3) 기능 구조
사용자의 시각에서 시스템의 작동과 서비스에 접근하는 정보를 보여준다.
예를 들어 ATM 시스템에서 운영자Operator는 시스템 실행과 종료에 접근하고, 사용자Customer는 섹션에 접근하며, 은행Bank은 섹션이 접속하는 거래에 접근한다.
'강의 정리 > 소프트웨어 분석 및 설계' 카테고리의 다른 글
소프트웨어 분석 및 설계 (7) 상태 모델 (0) | 2024.04.15 |
---|---|
소프트웨어 분석 및 설계 (6) 유스케이스 모델2 (0) | 2024.04.08 |
소프트웨어 분석 및 설계 (5) 유스케이스 모델 (0) | 2024.04.02 |
소프트웨어 분석 및 설계 (4) 클래스 연관의 이해와 활용 (0) | 2024.03.25 |
소프트웨어 분석 및 설계 (3) 클래스 모델 (0) | 2024.03.19 |