소프트웨어공학#2 - Quality

juyeong-s·2021년 10월 19일
0

소프트웨어공학

목록 보기
1/3

소프트웨어공학의 목표

  1. 사용자의 요구를 만족시키는 예산 내에서 품질 소프트웨어를 적시에 생산
  2. 소프트웨어의 품질과 생산성 향상
  3. 시스템과 제품의 품질 및 생산성 향상
  4. 비즈니스 성과 향상

품질에 대한 통찰력

  1. 절대적이지 않음
  2. 다차원적
  3. 제약(사람, 돈, 시간, 도구)의 영향을 받음
  4. 수용 가능한 타협에 관한 것
  5. 품질 기준은 독립적이지 않음

왜 소프트웨어 품질이 다른 품질과 다른가?

  1. 물리적 존재가 아님
  2. 처음에 고객의 니즈를 정확하게 알 수 없음
  3. 시간이 지남에 따라 니즈가 변화
  4. 하드웨어와 소프트웨어의 급격한 변화 속도
  5. 고객의 높은 기대

품질 분류

유저, 스폰서, 유지보수자

대표적인 품질

1. 정확성

프로그램이 기능 명세서에 따라 잘 동작함
아래 전제 하에
-> 시스템 명세가

2. 신뢰성

제품 고장의 빈도 및 위험도 측정
통계적으로 정의 할 수 있음
-> MTTF(평균 고장 시간) : 사용 개시(수리 복구)부터 고장까지 동작시간의 평균치
MTBF(평균 무고장 시간) : 고장에서 다음 고장까지의 동작시간의 평균치

3. 견고성

요구 사항 사양에서 예상하지 못한 상황에서도 합리적으로 작동하는 경우 견고함

신뢰성, 정확성과의 관계

4. 성능

=효율성(메모리, 응답시간)

시스템의 사용성에 영향을 줌

평가는 아래의 3가지로 함
1. 측정(모니터링)
2. 분석
3. 시뮬레이션

프로세스에 성능을 적용하면 -> 생산성
성능=생산성

언제 성능 평가가 필요한가?

분석, 설계 단계에서.

5. 사용 용이성

개인화된 환경에 맞게 시스템을 쉽게 구성하고 조정할 수 있음

6. 검증성

안전하게 검증될 수 있음
모든 가능한 경우에 대해 테스팅이 됨

7. 유지보수성

  1. Corrective 버그수정
  2. Adaptive 적응성 - OS변화에 적응하기 위한 유지보수
  3. Perfective 코드 재구조화
  4. Preventive 예방 - 사건이 일어나기 전에 미리 점검
    ->요즘은 maintenance대신 software evolution이라는 말로도 씀

유지보수성에는 아래 2가지가 있음

1. Repairability 수정가능성

  • 제한된 작업량으로 시스템 결함을 수정할 수 있음
  • 모듈화를 잘 하는 것 = 유지보수성
  • 적절한 툴 사용으로 개선가능 : HL, PL, CASE등등
  • 신뢰성과의 관계 : 결함 고치는 시간↓수록 → usetime↑가면 → 신뢰성↑


몰랑 질문..

2. Evolvability 진화성

  • 소프트웨어는 시간이 지남에 따라 수정됨
  • 크고 복잡한 소프트웨어에서 중요함
  • 새로운 버전이 출시될 때마다 감소함
  • 제품군 및 소프트웨어 아키텍처로 발전 가능성을 촉진

8. 재사용성

기존 구성 요소를 사용하여 새 제품을 만듦

재사용 수준

  • 사람
  • 요구사항
  • 디자인
  • 코드
    -> 코드만 재사용 가능하 것은 아니다.

다른 수준의 재사용
모듈->함수->소프트웨어->시스템

9. 휴대성

다른 환경에서 실행할 수 있는 경우

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

모듈화에 의해 달성될 수 있음

10. 이해가능성

내부 제품 품질
'객체 지향 패러다임'은 이해하기 쉽다 라고 부름
추상화 및 모듈화로 향상됨
유지보수성과 관계 :

11. 상호 운용성

시스템이 다른 시스템과 공존하고 협력하는 능력
인터페이스 표준화로 달성

12. 생산성

효율성과 성능면에서 소프트웨어 생산 프로세스의 품질
측정하기 어려움 :
1. SLOC : Source lines of code
2. FP : Function Point

13. Timeliness 적시

적시에 제품을 제공할 수 있는 능력
필요사항 :
1. 신중한 일정
2. 정확한 작업 예측
3. 명확하게 지정된 마일스톤 (얼마만큼 했는지 현황 기록하는)

14. 가시성

모든 단계와 현재 상태가 문서화된 경우 visible하다.
1. 모듈의 모음으로 명확하게 구조화된 경우
2. 명확하게 이해할 수 있는 기능들인 경우
3. 사용 가능하고 정확한 문서로 작성된 경우

15. 보안성

악의적인 공격 및 기타 해커 위험으로부터 소프트웨어를 보호하기 위한 아이디어가 구현된 경우
보안 취약성 :
1. 접근가능 : 공격자가 얻을 수 있음
2. 악용가능 : 공격자가 피해를 줌

16. 안전성

Software safety : software hazards로부터 벗어나기
software hazards란? 사고가 전제가 되는 조건

어떻게 소프트웨어 안전성을 측정할까?

Quality Requirements in Specific Application Areas

1. Information Systems

데이터 저장 및 검색

품질 :

  • 데이터 무결성
  • 보안성
  • 데이터 가용성
  • 처리 성능
  • 유저 용이성

ex) 은행 시스템, 도서관 카탈로그 시스템

2. Real-time Systems

사전에 정의된 엄격한 기간 내에 응답

운영체제 수준의 스케줄링 :

  • 데드라인
  • 우선순위

품질 :

  • 응답시간 요구사항
  • 안전성

ex) 공장 모니터링 시스템, 미사일 유도 시스템, 마우스 핸들링 소프트웨어

3. Distributed Systems

병렬화 및 통신

분포도 :

  • 데이터
  • 컨트롤
  • 하드웨어

품질 :

  • 시스템 가용성
  • 코드 이동성

ex) 클라이언트/서버 시스템의 미들웨어, 그룹웨어

4. Embedded Systems

소프트웨어는 많은 구성 요소 중 하나
최종 사용자에 대한 인터페이스가 없다.

품질 :

  • 신뢰성
  • 적응성
  • 메모리, 성능 효율성

ex) 비행기, 로봇, 전자레인지, 식기세척기, 자동차

인공지능/머신러닝에서의 품질은 기존 소프트웨어와 근본적으로 다르다.

캡슐화 및 모듈화의 다른 점 :

예를 들어 신경망은 단순히 더 작은 서브넷으로 절단되어 모듈로 재사용될 수 없다.

우선순위..?

모델을 실행하는 알고리즘은 훈련 및 테스트에 사용되는 데이터보다 훨씬 덜 중요한 역할을 한다.

6개의 품질 특성

  1. Functionality - 소프트웨어에서 필요한 기능인가?
  2. Reliability - 소프트웨어를 얼마나 신뢰할 수 있나?
  3. Usability - 소프트웨어를 사용하기 쉽나?
  4. Efficiency - 얼마나 효과적인 소프트웨어인가?
  5. Maintainability - 얼마나 수정하기 쉬운가?
  6. Portability - 소프트웨어를 다른 환경으로 쉽게 이전할 수 있나?

    특징을 만족하면 서브특징도 만족한다.
    서브특징

    1. Functionality - 적합성, 정확성, 상호 운용성, 규정 준수, 보안
    2. Reliability - 성숙도, 결함 내성, 복구 가능성
    3. Usability - 이해성, 학습성, 조작성
    4. Efficiency - 시간 행동, 자원 행동
    5. Maintainability - 분석 가능성, 변경 가능성, 안정성, 테스트 가능성
    6. Portability - 적응성, 설치성, 적합성, 교체성

왜 소프트웨어 품질이 중요한가?

품질은 사용자의 니즈 충족과 직결되기 때문이다.

유지보수성의 sw퀄리티를 어떻게 측정하는가?

올바른 모듈화
profile
frontend developer

0개의 댓글

관련 채용 정보