Software Quality & Principles

mong·2022년 11월 19일
0

Software Engineering

목록 보기
1/2

01. What is software?

1) Software in nowadays

Software in nowadays

  • 여러 분야에서 사용된다

  • 선진국의 경제는 SW와 밀접한 연관이 있다.
  • 많은 시스템들이 SW로 제어된다.
  • Software Engineering?
    • 이론, 방법 및 도구와 연관이 있음
    • 전문 소프트웨어 개발을 위한 도구
  • GNP(Gross National Product)에 SW의 영향이 클 수록 선진국일 가능성이 높다.

소프트웨어의 정의

  • Program VS Software
    • 프로그램

      • computer에서 실행되는 명령어의 집합
      • 날 것의 코드를 포함
    • 소프트웨어
      - 프로그램 + (사람이 만든) SW 개발에 사용되는 산출물들
      - 데이터 구조, 데이터베이스, 데이터베이스 구조, 테스트 결과물, 각 개발 과정 문서, 사용자 매뉴얼 등 모든 과정에서의 산출물

      ⇒ 소프트웨어는 프로그램 이상의 것을 포함하는 복합적 & 종합적인 것


2) Characteristics of software

소프트웨어의 특징

  • 소프트웨어란?

    : 소프트웨어 개발의 생산성에 영향을 줄 수 있는 개인(개발자)의 능력치

    • 제작 X

      • 물리적으로 무언가를 만든다
      • 큰 범주의 생산
      • 주로 큰 공장에서 이루어진다
    • 개발 O

      • 사람이 창의적인 무언가(새로운 것)를 개발하는 과정
  • Quality Degradation, but not consumed ( 품질 저하, 소비 X ..?)

    • 하드웨어
      - 초반에 실패 가능성이 높음
      but 나~중에 에러 고친 이후에 사용될 수 O
      - 계속 사용하다 보면 안정화되다가 외부적 요소에 의해 고장나기도 함
      - 외부적 요소: 먼지, 진동, 열기 등
    • 소프트웨어
      • 하드웨어와 달리 물리적인 데미지 X : 환경이 미치는 영향이 적음
      • 이론상으로는 에러 수정 이후 실패율이 감소해야 함 : but 실제로는 실패율 증가
      • 사용하는 중간에도 언제든 변경 가능 → Error 확률 증가 : 요구사항 多 → 수정 → 충돌

3) Etc of Sotware

Software problems to solve

  • 문제#1 : SW 개발이 Hardware에 비해 발전이 더디다.
    • 상대적으로 느린 발전 속도
    • 하드웨어는 1970년대 이후로 상상 이상으로 빠르게 진화
    • 소프트웨어는 아직 진화 중이나, 하드웨어보다 느림.
  • 문제#2 : 새로운 소프트웨어에 대한 사용자의 수요 증가
    • 하드웨어
      • 대량 생산 가능
      • 이미 만들어진 부품을 조립하여 제조
    • 소프트웨어
      • 사용자의 요구가 다르기에 대량 생산 불가능
      • 생산력 ↓
  • 문제#3 : 써야하는 개발 방법론이 다 다름
    • 소프트웨어 개발은 방법론이 필요함
    • PMBOK를 통해 철저한 관리
      • Project Management Knowledge System
    • 시스템 강점을 제공하는 개발 방법론을 사용해야 함

소프트웨어 비용

  • 소프트웨어 비용 > 하드웨어 비용
  • SW 유지 비용 > SW 개발 비용
  • 소비를 가장 효율적으로 할 수 있는 최적의 SW 개발에 관심
    • 유지 비용 감소 → 싸고 좋은 SW 개발을 목적으로 둠

소프트웨어 위기

  • 초창기 컴퓨터 과학에서 사용된 용어
  • 시간 안에 유용하고 효율적인 컴퓨터 프로그램 작성이 어려움
  • 위기 종류
    • 요구사항 증가 및 변경
    • SW가 커질수록 복잡해짐 (복잡도 증가)
    • 요구사항 多 → 난이도 UP
    • 한정적인 사람 (개발할 건 多)
    • 특징에 따라 개발 방법론도 달라야하는데 같은 방법론 사용
    • 개발 툴 변화 X : 요즘 트렌드는 ~ 를 쓰는데 난 아직 옛날 tool 사용

4) Software project failure

SW *project 실패의 2가지 주요 이유

*project : 일정 시간 안에 무언가를 개발

  1. 시스템 복잡도의 증가

    • 새로운 SW engineering 기술 등장
      → 복집해진 시스템 → 변화 요구

    • 시스템은 더 빠르게 빌드하고 전달되어야 함

      → 크고 더 복잡한 시스템이 요구 된다.

    • 시스템은 이전에 불가능하다고 여겨졌던 새로운 기능이 있어야 함

  1. 소공을 잘못 사용하는 경우 (SW engineering을 사용하지 X)

    • 소프트웨어 공학의 방법론과 기술 없이 컴퓨터 프로그램을 작성하는 것은 쉬움

    • 대다수가 개발에 집중 & 관리 및 보수에 신경 X

    • 모든 일에 소공을 사용하진 X

    • 개발 수정할 때 설계 문서도 수정해야 하는데 그러지 X 경우가 多

      → 체계적 관리 X

    ⇒ 결과적으로, 소프트웨어가 자주 더 비싸지고 신뢰도가 떨어지게 됨.



02. What is Software Engineering?

1) SW engineering

What is engineering? 공학이란 무엇인가?

  • 어떤것을 만들거나 구상하기 위해 과학적인 방법을 사용하는 것
  • SW공학은 SW 만들 때 생성
  • 특정 문제를 해결하기 위해 소공 원리 적용: 표준이나 순서가 존재

Software Engineering

  • Software + Engineering(과학적 수학적 원리) = 다양한 공학적 원리를 접목

  • 소공 사용 장점

    • 개발 난이도 Down
    • 생산성 Up ( 효율적 개발 방법론 사용 )
    • 사용자 만족도 Up
  • Software Engineering

    : 시스템 사양의 초기 단계에서 시스템이 사용된 후 유지 관리에 이르기까지 소프트웨어 생산의 모든 측면과 관련된 공학 분야(engineering discipline)

  • Engineering discipline

    : 조직 및 재정적 제약을 염두에 두고 문제를 해결하기 위해 적절한 이론과 방법을 사용하는 것

  • 소프트웨어 생산의 모든 측면

    • 개발의 기술적 과정만을 포함하는 것이 아님
    • 프로젝트 관리, 소프트웨어 생산을 지원하기 위한 툴 및 방법 개발 등도 포함

2) 소프트웨어 공학의 중요성

  • 소프트웨어의 의존성
    • 사회가 발전할 수록 시스템의 영향 UP
    • 개인과 사회에서 소프트웨어 시스템에 대한 의존도가 커짐
    • 신뢰할수 있는 시스템을 빠르게 개발해야 함

  • 비용 감소
    • 개인 프로그래밍 프로젝트인 것처럼 프로그램을 작성하는 것보다 소프트웨어 시스템에 소프트웨어 엔지니어링 방법과 기술을 사용하는 것이 장기적으로 일반적으로 더 저렴하다.

    • 대부분의 시스템 유형에서 대부분의 비용은 소프트웨어를 사용한 후 변경하는 비용이다.

      ⇒ 개발 비용 감소 노력



03. 소프트웨어 개발의 특징

1) SW 프로세스 과정

소프트웨어 프로세스 활동

  • 명세화 (SW specification)

    : 어떤 SW를 개발할지 문서화

  • 개발 (SW development)

    : 설계 & 코딩 (실제 개발)

  • 검증 (SW validation)

    : 명세화한 내용을 제대로 구현했는지 확인

    : 고객이 요구한 내용이 잘 들어갔는지

  • 진화 (SW evolution)

    : 변화하는 고객 및 시장 요구 사항을 반영하도록 소프트웨어를 수정


2) SW에 영향을 미치는 일반적인 문제

General issues that affect SW

  • 이질성 (Heterogeneity)

    • 점점 더 다양한 유형의 컴퓨터 및 모바일 장치를 포함하는 네트워크 전반에 걸쳐 분산 시스템으로 작동해야 하는 시스템이 필요
  • 사업 및 사회 변화 (Business and social change)

    • 신흥 경제가 발전하고 새로운 기술을 사용할 수 있게 되면서 비즈니스와 사회는 엄청나게 빠르게 변화하고 있다.
    • 기존 소프트웨어를 변경하고 새로운 소프트웨어를 신속하게 개발할 수 있어야 합니다.
  • 보안과 신뢰

  • 규모


3) Question to understand SE

소프트웨어 공학을 이해하기 위한 질문

  • 소프트웨어란?

    • 컴퓨터 프로그램 & 연관된 문서화들
    • 특정 고객이나 일반적인 마켓을 위해 개발된다.
  • 좋은 소프트웨어란?

    • 기능적 요구사항 만족
    • 퍼포먼스?도 중요
    • 유지보수 용이 및 사용법 간단
  • 소프트웨어 공학이란?

    • 소프트웨어 생산의 모든 측면과 연관된 공학 원칙
  • 기본적인 소프트웨어 엔지니어링 활동은 무엇인가?

    1. 문서화
    2. 개발
    3. 검증
    4. 진화
      +) 보안도 고려
  • SE (SW 공학) vs CS (컴퓨터 과학)

    • Computer Science : 이론과 기본적인 요소들에 집중
    • Software Engineering
      : 유용한 소프트웨어 개발 및 제공의 실용성과 연관

⇒ CS가 더 넓은 의미. SE를 포함하고 있음

  • SW 공학 vs 시스템 공학
    • System engineering (시스템 공학)

      : 하드웨어, 소프트웨어 및 프로세스 엔지니어링을 포함한 컴퓨터 기반 시스템 개발의 모든 측면과 관련이 있다.

    • Software engineering (소프트웨어 공학)

      : 시스템 공학보다 일반적인 프로세스의 일부이다.

0개의 댓글