소프트웨어공학 1

LeemHyungJun·2023년 4월 18일
0

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. 프로젝트 관리자

  • 계획 수립, 모니터링
  • 인원, 예산, 시간 조절 및 관리
  • 제안서 작성

0개의 댓글