소프트웨어 공학

심지혜·2024년 3월 11일
0

소프트웨어 공학

목록 보기
3/5

소프트웨어 공학📚

소프트웨어 공학은 단순 프로그래밍을 넘어 소프트웨어의 전 생명주기에 걸친 개발, 운용 및 유지보수 등을 체계적, 효율적으로 접근하는 학문분야다.
대충 프로젝트 관리, 테스팅, 품질 보증과 같은 내용이 포함되어 있다.

왜 소프트웨어 공학을 배워야 하나요? 🤔

프트웨어의 규모와 복잡도가 너무 증가해 일일이 작성하고 테스트 하는것 만으로는 부족하기에 필요하다고 한다.
소프트웨어 공학을 적용하면 기간 내에 높은 품질의 소프트웨어를 개발하고, 프로젝트&유지보수 비용을 줄일 수 있다.

소프트웨어 품질 용어

소프트웨어 품질

다양한 정의들이 있지만 미국 국방부(DoD)에 따르면 아래와 같다.

소프트웨어의 속성이 그것이 의도된 최종 사용을 수행하는 데 
어느 정도로 기여하는지에 대한 정도

품질의 특징

  • 절대적이지 않음
  • 다차원적
  • 제약 조건(사람, 돈, 시간, 도구)에 의해 결정
  • 수용 가능한 타협에 관한 것
  • 품질 기준은 독립적이지 않음
  1. 외부 품질 VS 내부 품질
    외부 품질: 시스템의 사용자에게 보이는 품질
    내부 품질: 시스템의 개발자에게 관련된 품질
  2. 제품 품질 VS 공정 품질
    제품 품질: 기능성, 사용성, 효율성, 신뢰성 등
    공정 품질: 생산성,방법,도구의 효과성, 표준의 사용 관리 등

소프트웨어 품질 주요 용어들

Correctness(정확성)

프로그램이 기능의 명세에 따라 동작하면 '정확'합니다.
가정 :
1. 시스템의 명세가 사용 가능합니다.
2. 프로그램이 명세를 만족하는지 명확하게 판단할 수 있습니다.

Reliability(신뢰성)

신뢰성은 사용자가 그것에 의존할 수 있는지에 따릅니다. 이는 종속성과 같은 의미입니다.
제품의 실패에 대한 빈도와 중요성을 측정하는 것입니다.
실패: 허용되는 운영 조건 하에서 발생하는 불편한 효과나 동작을 의미합니다.
통계적인 행동으로 정의할 수 있습니다: MTTR(평균 수리 시간), MTTF(평균 고장 시간), MTBF(평균 고장 간격)

Robustness(강건성)

강건성은 요구 사항 명세에서 예상하지 못한 상황에서도 합리적으로 동작하면 튼튼하다고 할 수 있습니다.
이는 운영 조건의 범위, 유효한 입력으로 인한 불편한 결과의 가능성,
제품이 유효하지 않은 입력을 받았을 때의 효과의 수용성 등 여러 요소의 기능입니다.

Performance(성능)

성능은 효율성(공간, 시간)과 동일시됩니다.
시스템의 사용성에 영향을 미칩니다.
성능 평가

  • 측정 (모니터링)
  • 분석
  • 시뮬레이션

User Friendliness(사용자 친화성)

사용하기 쉬움
시스템을 하드웨어 환경에 쉽게 구성하고 적응시킬 수 있는 용이성

Verifiability(검증 가능성)

검증 가능한 속성이 안전하게 검증될 수 있다면, 그것은 검증 가능하다고 할 수 있습니다.
이는 형식 분석 방법이나 테스팅을 통해 수행될 수 있습니다.

Maintainability(유지보수성)

유지 보수

  • 수정 유지 보수
  • 적응 유지 보수
  • 완성 유지 보수
    소프트웨어 진화 (유지 보수 대신)
    수리 가능성과 진화 가능성

Reusability(재사용성)

기존 컴포넌트를 사용하여 새 제품을 구축합니다.
예시: 과학 라이브러리, 모티프, 유닉스 쉘 등
재사용 수준

  • 사람
  • 요구 사항
  • 디자인
  • 코드
  • 도메인 분석 등
    객체 지향 기술, 컴포넌트, 서비스 등
    공정에의 적용
  • 소프트웨어 방법론
  • 생명주기 모델

Portability(이식성)

다른 환경에서 실행할 수 있다면, 그것은 이식성이 있다고 말할 수 있습니다.

  • 하드웨어 플랫폼
  • 소프트웨어 플랫폼

Understandability(이해성)

내부 제품 품질입니다.

  • 내부 품질 요소 - 다른 많은 품질을 달성하는 데 도움이 됩니다.
  • 쉬운 유지 보수
  • 외부적인 관점에서 보면, 예측 가능한 행동이 있다면 이해하기 쉽습니다.
    객체 지향 패러다임은 이해하기 쉬울 수 있음

Interoperability(상호 운용성)

시스템이 다른 시스템과 공존하고 협력하는 능력
오픈 시스템 개념

Productivity(생산성)

소프트웨어 생산 과정의 품질
프로세스: 과정의 효율성을 측정하기 위함
Difficult to measure: 단순한 척도 : LOC
툴은 생산성을 증가시킵니다.

Timeliness(시기적절성)

공정 관련 요소

  • 제품을 시간 내에 제공하는 능력.
    필요한 것들:
  • 세심한 스케줄링,
  • 정확한 작업 추정,
  • 명확하게 지정된 이정표.
    이를 달성하기 위해 Incremetal delivery를 사용한다.
    요구사항을 기능적으로 잘게 잘게 나눠서 increment(증분)로 나누는것이다.
    요구사항에 중요도를 매기고, 가장 중요한 요구사항을 앞쪽에 있는 increment에 부여한다.

Visibility(가시성)

공정 관련
모든 단계와 현재 상태가 문서화되어 있으면 가시적이라고 할 수 있습니다.
이를 통해 각각의 영향을 파악하고 결정을 내리는 데 도움을 줍니다.


참고: [Software Engineering] 소프트웨어 공학이란?, 소프트웨어 공학의 필요성, 좋은 소프트웨어의 특성

0개의 댓글