본문 바로가기
컴퓨터과학[4-1]/소프트공학

소프트웨어 공학 - [제1강] 소프트웨어 공학의 개요

by boolean 2016. 12. 12.
728x90

소프트웨어공학 - [제1강] 소프트웨어 공학의 개요

소프트웨어와 시스템 .소프트웨어 위기 .소프트웨어 공학 .좋은 소프트웨어의 조건 .소프트웨어 생명주기 모형 .소프트웨어 공학 근본 지식


주요용어

  • 소프트웨어 포괄적 의미에서 프로그램과 데이터 및 관련 문서(설계문서, 설치 문서, 사용자 메뉴얼 등)들의 묶음
  • 소프트웨어 공학 소프트웨어 생산과 관련된 모든 부분에 공학적 원리와 방법을 적용시키려는 연구분야 또는 전문 작업 분야
  • 소프트웨어 개발 방법론 프로세스(what)와 방법(how) 을 하나로 묶은 것으로 하나의 프로세스를 수행할 때 적용되어야 하는 여러 방법들과 기술들을 표현한 것
  • 소프트웨어 개발 프로세스 소프트웨어 개발이나 유지보수 목적으로 수행되는 일련의 활동
  • 학습정리

  • 소프트웨어의 성질
    1. 무형의 인공물로 다른 공학제품에 비해 변경이 용이(소프트웨어의 유연성 또는 순응성)하다.
    2. 컴포넌트들의 조립을 통해 만들기 어렵다.
    3. 상대적으로 설계 과정의 품질 보증 활동이 중요하다.
    4. 개발비용의 대부분은 노동력에 투입됨
    5. 소프트웨어는 마모되지 않음(장수성)
    6. 소프트웨어 고장률은 하드웨어 고장률을 보여주는 욕조곡선과 다름
    7. 소프트웨어 유지보수 작업은 설계의 변경을 요구함
  • 소프트웨어 위기 현상(software crisis)은 소프트웨어 공학 기술의 후진성에 기인한다.
    1. 1968년 NATO 소프트웨어 공학 컨퍼런스에서 등장
    2. 하드웨어 기술의 급격한 발전과 요구의 다양화, 문제의 복잡화에 비해 소프트웨어의 기솔 발전이 더딤을 일컫는 용어
    3. 소프트웨어에 대한 수요 증가에 비해 공급 능력이 부족함을 의미
    • 소프트웨어의위기현상 사례
      1. 개발 일정의 지연
      2. 초과 비용의 발생
      3. 제품 신뢰도의 결여
      4. 명세를 충족하지 못하는 제품
      5. 유지보수의 어려움
    • 소프트웨어 위기 현상의 원인
      1. 소프트웨어 엔지니어 부족
      2. 경영층의 인식 부족
      3. 방법론과 도구의 부재, 개발 생산성의 저하
      4. 소프트웨어 자체의 복잡성 증가
      소프트웨어 개발의 고려사항
    • 소프트웨어 개발이 단순한 코드의 생성이 아님
      1. 통합적 문제 인식이 필요
    • 개발 프로세스와 프로젝트 관리가 중요함
    • 비용을 줄이고 제품의 품질을 높이기 위한 방법은 ?
      1. 문서화와 프로젝트 관리가 필요함
      2. 초기 요구사항 명세화 작업에 노력을 기울임
      3. 변경이나 재사용을 염두에 둔 작업이 필요함
    • 소프트웨어 공학의 계층구조 환경
      • 다양한 해결 방법들을 통합적으로 다루어야 함
      • 환경의 구성
        1. 소프트웨어 공학 원리(추상화, 분할정>복, 계층적 조직의 원리)에 기초하여 방법과 기술(행위 통제, 속성적용)>이, 방법과 기술을 가지고 방법론(조직화, 프로세스와 방법을 기술)이, 방법론에 기초하여 도구(실제 적용시키지 위해 사용되어지는 소프트웨어 툴)가 만들어 짐

    소프트웨어 프로세스 모델

    • 소프트웨어의 생산과 진화 과정을 추상화하여 요약 표현한 것
    • 시스템 개념화, 요구사항 정의, 설계, 그리고 구현에 이르는 전이 과정을 표현
      • 필요한 활동들, 결과물, 사람의 역할 등을 포함
    • 좋은 프로세스 모델은
      • 전이 과정에서 생기는 문제를 최소화해야 함
      • 공통 개발 프레임워크를 제공하여 생산성을 향상시킴
      • 개발자 간 공통의 문화와 공통의 기술을 제공함

    좋은 소프트웨어의 기준

    외부 품질

    • 사용자가 인지할 수 있는 것
    • 사용성, 신뢰도, 속도

    내부 품질

    • 외부 품질의 향상에 도움을 주는 것으로 개발자에게 중요함
    • 잘 작성된 요구사항이나 설계문서

    소프트웨어 신뢰도

    • 사용자가 소프트웨어를 신뢰하는 정도
    • 정확한 결과를 적시에 제공
    • 오랜시간 작동되며 필요할 때 사용할 수 있음
    • 오류 발생이 적고, 오류가 발생 후에 무난히 복구되며, 오류 결과가 치명적이지 않으며 강건함
    • 시스템의 종류나 특성에 따라 측정방법이 다름
      1. 주어진 시간 동안 정확히 작동될 확률
      2. 고장의 빈도, 평균 수명 등
    • 시간이 지남에 따라 안정화되거나, 소프트웨어 고장 함수가 욕조 곡선과 유사한 형태를 가지는 경우도 있음
      1. 버그 수정이나 기능의 개선이나 추가로 인해 새로운 오류가 유입되는 경우
      2. 하드웨어나 운영체제를 변경하는 경우
      3. 적정 용량이나 성능을 초과하여 사용하는 경우

    정확성, 성능, 사용성

    • 소프트웨어의 정확성
      1. 명세서와 일치하게 작동하는 능력, 사용자의 요구를 만족시키는 능력
      2. 작은 결함이 있어도 정확한 것은 아니나 신뢰도에 문제가 되지 않을 수 있음
    • 소프트웨어의 성능
      1. 지정된 시간 안에 컴퓨터 시스템이 처리할 수 있는 작업량
      2. 주어진 조건 하에서 주어진 기능을 빠르게 제공하느 능력
    • 소프트웨어의 사용성
      1. 본래의 목적으로 효율성 있게 사용할 수 있는가의 정도

    상호 운영성, 유지보수성

    • 소프트웨어의 상호운영성
      1. 다른 시스템과 공존하며 협력할 수 있는 능력
    • 소프트웨어의 유지보수성
      1. 소프트웨어의 변경이 용이한 정도
      2. 유지보수 요인
        • 새로운 기능의 추가, 기존 기능의 개선
        • 환경의 변화에 따른 수정, 존재하는 오류의 수정

    이식성, 검사성, 추적성

    • 소프트웨어의 이식성
      1. 다른 환경에서 동작할 수 있는 능력
      2. 이식 요인
        • 하드웨어, 운영체제, 상호작용하는 시스템의 변경 등
    • 소프트웨어의 검사성
      1. 좋은 소프트웨어의 속성을 갖추었는지 검사할 수 있는가
    • 소프트웨어의 추적성
      1. 관련자(stakeholer), 요구사항, 설계문서, 소스코드 간의 관계를 추적할 수 있는가

    소프트웨어공학은 1968년 NATO 소프트웨어 공학 컨퍼런스이후로 고품질 소프트>웨어의 경제적이고 빠른 생산과 유지보수를 위한 연구분야가 됨

  • 소프트웨어 공학의 정의는 소프트웨어의 개발, 운영, 유지보수에 제계적이고 정량화된 접근 방법을 적용하는 것이다.
  • 소프트웨어 개발 방법론이란 문제 해결을 위해 여러 방법들과 기술들이 정해진 프로세스 안에서 함께 묶인 것이다.
  • 좋은 소프트웨어인가를 판단하는 기준으로 신뢰도, 정확성, 성능, 상호운영성, 유지보수성, 이식성, 검증성, 추적성 등이 있다.
  • Q1포괄적 의미에서 소프트웨어의 정의는 무엇인가?

    • 1 소스 프로그램
    • 2 소스 프로그램과 데이터의 묶음
    • 3 프로그램과 데이터 및 설계 문서나 매뉴얼 등의 관련 문서
    • 4 응용 소프트웨어와 시스템 소프트웨어
    확인
    정답 및 해설
    정답입니다.
    정답 : 3번
    포괄적 의미의 소프트웨어는 소스 코드와 데이터 외에도 실행 파일, 설계 문서, 설치 파일, 시스템 매뉴얼과 사용자 매뉴얼 등을 포함하는 개념이다.
    Q2소프트웨어 위기 현상을 가져온 원인에 해당되지 않는 것은?

    • 1 소프트웨어 규모와 복잡도의 증가
    • 2 프로젝트 관리 기술의 부재
    • 3 소프트웨어 엔지니어의 부족
    • 4 소프트웨어 수요의 감소
    확인
    정답 및 해설
    정답입니다.
    정답 : 4번
    하드웨어 성능이 향상되면서 그것에 상응하도록 소프트웨어 수요는 증가한다.
    또 하드웨어에 비해 소프트웨어가 변경되기 쉬우므로 소프트웨어 수요는 증가한다.
    Q3 소프트웨어 공학의 목표에 해당하지 않는 것은?

    • 1 품질 좋은 소프트웨어
    • 2 소프트웨어의 경제적 생산
    • 3 자원을 최대한 사용
    • 4 계획된 일정에 맞게 소프트웨어를 생산
    확인
    정답 및 해설
    정답입니다.
    정답 : 3번
    자원은 보통 제한적으로 제공되므로 효율적으로 이용해야 한다.
    Q4 소프트웨어 개발 프로세스(what)와 개발 방법(how)을 결합한 개념은?

    • 1 기술(technique)
    • 2 소프트웨어 개발 방법론(methodology)
    • 3 소프트웨어 생명 주기(life cycle)
    • 4 소프트웨어 공학 원리(principle)
    확인
    정답 및 해설
    정답입니다.
    정답 : 2번
    소프트웨어 생명주기는 탄생에서 폐기까지의 변화 과정을 의미하는 개념이며 기술은 방법에 비해 기계적이며 “제한적인 적용”을 내포하는 용어이다.
    Q5다음이 설명하는 좋은 소프트웨어의 기준은 무엇인가?
    소프트웨어가 탑재되어 실행될 하드웨어나 운영체제가 달라져도, 소프트웨어가 쉽게 수정될 수 있어서 계속 동작할 수 있다.
    • 1소프트웨어의 검사성
    • 2소프트웨어의 이식성
    • 3소프트웨어의 유지보수성
    • 4소프트웨어의 정확성
    확인
    정답 및 해설
    정답입니다.
    정답 : 2번
    소프트웨어의 이식성이란 소프트웨어의 환경이 바뀌어도 쉽게 수정되어 동작하는 능력을 의미한다.
    이때 환경은 하드웨어, 운영체제 및 상호작용하는 다른 시스템을 말한다.


    연습문제
    01 포괄적 의미에서 소프트웨어의 정의는 무엇인가?
    ① 컴퓨터 프로그램과 데이터
    ② 고품질 소프트웨어의 경제적이고 빠른 생산을 위한 전문 작업
    ③ 프로그램과 데이터 그리고 설계 문서나 매뉴얼과 같은 관련 문서도 포함
    ④ 응용 소프트웨어와 시스템 소프트웨어
    정답 | ③
    해설 | 좁은 의미의 소프트웨어는 프로그램과 관련 데이터의 묶음을 말한다.
    02 소프트웨어 위기 현상을 가져온 원인에 해당되지 않는 것은?
    ① 소프트웨어 규모와 복잡도의 증가 ② 프로젝트 관리 기술의 부재
    ③ 소프트웨어 엔지니어의 부족 ④ 소프트웨어 수요의 감소
    정답 | ④
    해설 | 하드웨어 성능이 향상되면서 소프트웨어 수요는 증가하고 요구사항은 복잡해진다.
    03 소프트웨어의 특성이 아닌 것은?
    ① 물리적 마모에 의해 사용할 수 없게 된다.
    ② 유형의 매체에 저장되나 보이지 않는다.
    ③ 수학이나 물리학에서 나타나는 규칙적이고 정형적인 구조가 없다.
    ④ 사용자 요구나 환경의 변화에 적응될 수 있다.
    정답 | ①
    해설 | 소프트웨어는 물질적 특성을 가지지 않는다.
    04 소프트웨어 공학의 목표에 해당하지 않는 것은?
    ① 품질 좋은 소프트웨어 ② 소프트웨어의 경제적 생산
    ③ 자원을 최대한 사용 ④ 계획된 일정에 맞게 소프트웨어를 생산
    정답 | ③
    해설 | 자원을 최소한으로 효율적으로 이용해야 함
    05 소프트웨어 개발 프로세스(what)와 개발 방법(how)을 결합한 개념은?
    ① 기술(technique) ② 소프트웨어 개발 방법론(methodology)
    ③ 소프트웨어 생명 주기(life cycle) ④ 소프트웨어 공학 원리(principle)
    정답 | ②
    해설 | 소프트웨어 생명주기는 탄생에서 폐기까지의 변화 과정을 의미하는 개념이며 기술
    은 방법에 비해 기계적이며 제한적인 적용성을 가지는 용어
    06 소프트웨어 품질 목표 중 소프트웨어를 다른 환경으로 이식할 경우에도 쉽게 수정
    될 수 있는 능력을 의미하는 것은?
    ① 성능 ② 추적성
    ③ 이식성 ④ 효율성
    정답 | ③
    해설 | 환경이란 기존과 다른 하드웨어, 운영체제 또는 상호작용 하는 다른 시스템을 말한
    다.
    정리하기
    a01 포괄적 의미의 소프트웨어란 무엇인가?
    소스 코드와 데이터는 물론 모든 관련 문서들까지 포함하는 개념
    02 소프트웨어 위기 현상이란 무엇인가?
    하드웨어 발전에 비해 소프트웨어 발전이 더딤을 나타내기 위한 용어로 소프트웨어 공학 기
    술의 후진성을 의미
    03 소프트웨어 공학의 정의는 무엇인가?
    소프트웨어의 개발, 운영, 유지보수에 체계적이고 숙달되고 정량화된 접근 방법을 적용하는
    것, 즉 소프트웨어 개발 과정에 공학 기술을 적용하는 것
    04 소프트웨어 개발 방법론이란 무엇인가?
    문제 해결을 위해 필요한 여러 방법과 기술들이 정해진 프로세스 안에서 함께 묶인 것이다.
    프로세스(what)와 방법(how)을 포함한 개념
    05 좋은 소프트웨어인지 판단하기 위한 기준으로 무엇이 있는가?
    신뢰도, 정확성, 성능, 사용성, 상호운영성, 유지보수성, 이식성, 검사성, 추적성 등
    

    댓글