Lecture #1 SW 공학과 정보시스템
1. 과학과 공학
- 자연과학: 자연의 법칙을 탐구하는 것
- 공학: 자연과학이 발견한 자연의 법칙을 응용, 인류의 편익을 위해 생상
- 공학과 자연과학의 상호 의존적인 관계
2. 시스템 공학
2-1. 시스템
- 어떤 목적과 기능을 수행하기 위하여 유기적인 관계를 맺으며 함께 작용하는 요소들의 집합
- 여러 요소들로 이루어진 특정한 집합
2-2. 시스템의 예
2-3. 시스템 공학
- 시스템의 개발과 운용, 유지보수를 합리적으로 행하기 위한 사고방법, 절차, 조직 및 기법 등을 총칭
- 기술적인 측면: 시스템을 구성하는 물적 요소의 적합성과 효과적인 조합에 의한 효율의 극대화 추구
- 관리적인 기능: 시스템 개발에 관련된 업무가 제대로 이루어지도록, 인원, 설비, 자재 등에 대한 계획과 통제를 행하는 관리 기술
3. 소프트웨어공학
3-1. 정의
- 실제 효과적으로 작동할 수 있는 우수한 소프트웨어를 최적의 비용으로 얻기 위하여 사용하는 엔지니어링 원칙
- 허용하는 예산과 시간 범위 안에서 효과적으로 소프트웨어 제품을 개발하고 유지 보수하는 활동과 관련된 기술적, 관리적 원리
3-2. 주요 목표
- 소프트웨어 제품의 품질 향상, 생산성 및 사용자 만족도 증진
- 소프트웨어 공학은 관리이다.
- 소프트웨어 공학은 체계적인 과정으로, 제품의 신뢰성(고품질)과 생산성 향상(비용절감)을 위한 과정이다.
4. 정보 시스템이란?
4-1. 정보 혁명
- 컴퓨터와 산업화의 결합
- 행정, 금융, 운송, 교육, 문화 등
4-2. 정보 시스템의 정의
- 업무를 처리하기 위하여 정보를 모으고 처리하고 저장하고 제공하기 위한 관련 컴포넌트의 집합체
- 조직이 기본적인 비즈니스 기능들을 수행하는 정보시스템을 구축하고 유지관리하는 방법
4-3. 정보 시스템의 요소
- 시스템 경게, 입력, 출력, 서브시스템, 제어 메커니즘, 저장장치
4-4. 정보 시스템의 특성 요소
- 구성요소, 상호연관성, 경계선, 목적, 환경, 인터페이스, 제약조건, 입력물, 산출물
4-5. 정보 시스템과 비즈니스
- 합리적 활동에 중요한 자산
- 의사결정 이 중요함

4-6. 정보 시스템의 종류
- ERP 시스템 (자산관리 시스템)
- 트랜잭션 처리 시스템
- 의사결정 지원 시스템
5. 분석과 설계
5-1. 시스템 분석
- 정보 시스템이 무엇을 해야 하는지 이해하고 명세로 나타내는 작업
- 시스템 분석가는 다음과 같은 사항들을 기반으로 분석과 설계를 수행함
- 조직의 목표, 구조, 프로세스에 대한 이해
- 이익을 위해 어떻게 정보기술을 활용하는지에 대한 지식
5-2. 시스템 설계
- 정보 시스템이 어떻게 구현되어야 하는지 자세히 나타내는 작업
- 유지보수에 대한 문제를 항상 체크해야 함
5-3. 소프트웨어 개발
- 비즈니스 니즈에 맞도록 설계하고 구축하여 사용자에게 배포하는 과정
6. 시스템 개발 과정
6-1. 시스템 개발생명주기 (SDLC)
- 계획 및 선정
- 왜 정보 시스템을 구축해야 하는지 이해
- 프로젝트 팀이 앞으로 어떻게 할 것인지를 결정
- 타당성 분석 - 기술적, 경제적, 조직적 타당성
- 작업 계획 수립
- 팀 조직 수립
- 프로젝트 관리 계획
- 프로젝트 계획서가 결과물로 나옴
- 분석
- 질문
- 누가 사용?
- 시스템이 무엇을 해야 하나?
- 언제 사용?
- 작업
- 분석 전략 수립 - SWOT 분석
- 요구 수집
- 문서화
- 설계
- 시스템을 어떻게 구축할 것인가?
- 시스템의 동작을 결정
- UI, 입력 양식, 보고서
- 프로그램
- 데이터베이스, 파일
- 설계 전략 수립
- 아키텍처 설계
- 데이터 설계
- 프로그램 설계
- 구현
- 구축 또는 패키지 구입으로 설계를 현실화
- 작업 단계
- 시스템 구축과 테스트(유지보수)
- 시스템 설치, 전환
- 지원 계획
6-2. SDLC 단계별 작업과 결과물

7. 방법론
7-1. 모델과 도구 기술의 상호작용
- 모델
- 실세계를 특정한 관점으로 표현한 것
- ex) 지도, 흐름도, 자료흐름도, 엔티티 관계도, 구조도, 사용 사례 다이어그램
- 도구
- 설계, 구현, 유지보수, 테스트 등 소프트웨어 생산에 도움을 주는 툴
- 기술
- 작업 단계에 사용하는 기술
- ex) 프로젝트 관리 기술, 인터뷰 기술, 데이터 모델링, 구조적 분석
7-2. 방법론의 비교

8. 프로세스
8-1. Intro
- 생명 주기
- 소프트웨어 개발의 성패에 영향을 미치는 중요한 요소
- 소프트웨어를 개발해 나가는 단계나 과정
- 컨셉트를 정하는 것부터 소멸될 때까지
- 몇 달 또는 몇 년이 걸릴 수 있음
- 각 단계의 목표
- 명확한 작업 단계
- 손에 잡히는 결과
- 작업의 검토
- 다음 단계의 명시
8-2. 폭포수 모델

- 각 단계가 다음 단계 시작 전에 끝나야 함
- 순서적 - 각 단계 사이에 중복이나 상호작용이 없음
- 각 단계의 결과는 다음 단계가 시작 되기 전에 점검
- 바로 전단계로 피드백
- 단순하거나 응용 분야를 잘 알고 있는 경우 적합
- 한 번의 과정, 비전문가가 사용할 시스템 개발에 적합
- 모든 분야에서 좋은 방법이 아님 -> 복잡한 프로젝트는 적합하지 않음
- 한 단계에서 잘못되면, 맨 위로 올라가서 수정하는 과정이 필요
- 맨 위에서 고치는 동안은 중간 혹은 아래에서 일하는 사람들이 일을 못함
- 장점
- 프로세스가 단순하여 초보자가 쉽게 적용 가능
- 중간 산출물이 명확, 관리하기 좋음
- 코드 생성 전 충분한 연구와 분석
- 단점
- 처음 단계가 지나치게 강조되면 코딩, 테스트가 지연
- 각 단계의 전환에 많은 노력
- 프로토타입과 재사용의 기회가 줄어듦
- 소용없는 다종의 문서를 생산할 가능성 있음
- 적용
- 이미 잘 알고 있는 문제나 연구 중심 문제에 적합
- 변화가 적은 프로젝트에 적합
8-4. 병렬 개발 모델

- 폭포수 모형의 변형
- 대규모 시스템을 쪼개어 병렬로 진행
- 개발 인력을 많이 투입
8-5. 프로토타이핑 모델

- 초기 시스템을 빨리 만들어서 시각화 하기
- 프로토타입의 적용
- 사용자의 요구를 더 정확히 추출
- 알고리즘의 타당성, 운영체제와의 조화, 인터페이스의 시험 제작
- 프로토타이핑 도구
- 공동의 참조 모델
- 사용자와 개발자의 의사소통을 도와주는 좋은 매개체
- 프로토타입의 목적
- 단순한 요구 추출-만들고 버림
- 제작 가능성 타진-개발 단계에서 유지보수가 이루어짐
- 단점
- 오해, 기대심리 유발, 관리가 어려움, 중간 산출물의 정의가 난해함
- 적용
- 개발 착수 시점에 요구가 불투명할 때
- 혁신적인 기술을 사용해 보고 싶을 때
8-6. 진화적 모델

- 여러 버전으로 나누어 순차적으로 개발
- 분석 과정에서 많은 일을 해야한다.
- 장점
- 유용한 시스템을 빠른 기간 내에 사용자의 손에 들려줌
- 중요한 추가 요구를 조기에 발견
- 단점
- 의도적인 미완성 시스템을 가지고 작업하기 시작
- 로드맵을 다 그려야 함 (전체를 버전으로 쪼개는 작업이 어려움)
8-7. 애자일 모델

- Heavy한 프로세스
- 과다한 단계
- 과다한 문서
- 코드가 나오기까지 시간이 많이 소요됨
- 분석하는 단계가 없음! (이미 어떤 내용인지 다 아는 사람들이 모여서 일을 하기 때문에)
- 과도한 모델링과 문서화의 짐을 과감히 생략하고 개발에 집중
- 잘하는 사람들(전문가)만 모아서 일을 시킨다.
- Extreme Programming, Scrum, DSDM
- Extreme Programming
- 의사소통, 단순함 -> 경험이 많아서 이미 내용을 잘 알고 있음
- 피드백, 격려, 테스팅
8-8. 개발 모델의 선택

9. 팀의 역할
9-1. 프로젝트 팀 구성
- 프로젝트 관리자
- 시스템 분석가
- 프로그래머
- 사용자 지원
- 품질보증
- DB 관리자
- 네트워크 관리자
9-2. 시스템 분석가의 능력
- 비즈니스, 분석, 관리, 윤리, 의사소통, 기술
- 시스템 개발에서 제기된 이슈를 다룸
- 비즈니스 프로세스 개선
- 분석과 설계 작업에 대한 훈련과 경험
9-3. 프로젝트 관리자
- 계획 수립, 모니터링
- 인원, 예산, 시간 조절 및 관리
- 제안서 작성