본문 바로가기
☕️ JAVA

📕 소프트웨어의 품질과 그 특성들

by kukim 2022. 1. 8.

* 이 글은 책 소프트웨어의 품격 1장을 참고하여 작성되었습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻


소프트웨어 품질이란 무엇인가

내적(internal) vs 외적(external) 소프트웨어 품질 

기능적(functional) vs 비기능적(nonfunctional) 소프트웨어 품질 

소프트웨어 품질 특성에 대한 설명

소프트웨어 품질 기준 사이 상호작용, trade-off


소프트웨어 품질이란 무엇인가

책에서 말한 소프트웨어 품질(quality)이란 소프트웨어에 대한 전반적인 가치가 아니라 소프트웨어가 지녀야 할 특성을 말한다. 

여기서 특성은 특정 프로그래밍 언어, 효율성 등 많이 있지만 품질에서 이야기하는 특성은 이론상 측정 가능한 특성을 말한다.(특정 언어는 측정 가능 X)

 

소프트웨어 품질, 측정 가능한 특성의 기준은 크게 2가지로 볼 수 있다.

1. 내적 품질과 외적 품질

2. 기능적 품질과 비기능적 품질

내적(internal) vs 외적(external) 소프트웨어 품질 

내적 품질 : 소스코드 품질

외적 품질 : 최종 사용자(enduser)가 SW와 상호작용하는 동안 인지할 수 있는 품질

하지만 두 경계는 명확하지 않다. 예를 들어 유지보수성(maintainability)은 내적 속성으로 볼 수 있다. 말 그대로 유지 보수하기 좋은 코드는 소스코드에 대한 품질이기 때문이다. 하지만 유지보수성이 좋지 못해 개발자가 고치는데 시간이 오래 걸린다면 사용자(enduser)도 이를 인지할 수 있다.

기능적(functional) vs 비기능적(nonfunctional) 소프트웨어 품질 

기능적 품질 : 소프트웨어가 무엇을 하는가?

비기능적 품질 : 어떻게 하는가?

 

모든 기능적 품질은 외적 품질이다. 비기능적 품질은 코드와 관련되느냐, 코드로부터 파생된 특성과 관계되느냐에 따라 내적, 외적 품질로 나뉠 수 있다.

소프트웨어 품질 특성에 대한 설명

소프트웨어 품질 특성 (사진 1)

* 토스터기 예와 사진 1을 참고하여 설명한다.

 

특성 소프트웨어 설명 가까운 쪽
정확성(correctness) 토스터가 제대로 작동하는지 체크
빵을 노릇하고 바삭하게 조리하는지
말그대로 기능적 품질에 속한다.
요구사항이나 명세를 지키는 것

- contract(규약) 관점에서 규약을 지키며 개발한다.(5장)

- 테스트를 하며 개발한다. (6장)
외적 / 기능적
견고성(robustness) 토스터기 안에 빵대신 포크를 넣거나 물을 부었을 때 가열되면 안된다. 예외처리, 서버 문제 발생 시 복원력(5장)

- 잘못된 입력이나 예상하지 못한 외부 조건에 대응
외적 / 기능적
사용성(usability) 토스터기에 빵을 넣고, 가열하는 레버를 내리고, 빵을 꺼내는 등 사용자가 기계를 사용할 때 사용하는 디자인, 외관 UX/UI (이 책에서 설명하지 않음) 외적 / 비기능적
효율성(efficiency) 빵을 데우는 데 걸리는 시간과 얼마의 전기가 필요한지 시간, 공간 복잡도 : 자원 소모량(3,4장)

내적 품질로 볼 수 있지만 실행 속도에 따라 최종 사용자가 느끼는것이 달라지기 때문에 외적, 비기능적에 속한다. 
외적 / 비기능적
       
가독성(readability) 점검 기사가 토스터기 A/S 시에 내부 전자장치와 가열장치가 잘 분리돼 있어서 어떤 문제가 있는지 내부 구조를 명확하게 볼 수 있는지 코드의 가독성(7장)

"내일 쉽게 변경할 수 있는 코드를 짜야한다 - 센드메츠"
내적 / 비기능적
재사용성(reusability) 기존 토스터기 부품을 가지고 다른 가전제품에도 적용할 수 있는지, 전원 코드 규격 통일 or 온도 센서를 온열기에 사용 코드의 재사용성 (예로 OOP, 프레임 워크, 9장)

유사한 문제를 해결하기 위해 코드를 쉽게 재사용하는 것
내적 / 비기능적
테스트 용이성 토스트기의 모든 동작을 테스트, 잘 구워지는지, 온도는 적당한지 등 등 유닛 테스트, 통합 테스트

프로그램의 모든 동작을 테스트하고, 얼마나 쉽게 테스트를 작성하는가
내적 / 비기능적
유지보수성 토스터기가 분해와 정비가 얼마나 쉬운지 버그를 쉽게 찾아 수정하거나 새로운 요구사항을 빠르게 적용 내적 / 비기능적
       
쓰레드 안전성(thread safety) - 멀티 스레드 환경의 프로세스, 클래스

- 스레드 동기화(thread synchronization)와 동시성(concurrency)는 중요하고 어렵다.
- 내적 품질로 생각할 수 있지만, 안전성에 미치는 영향은 사용자에게 영향을 바로 끼치기 때문에 외적 영역에 두었다.
외적 / 기능적
간결성(succinctness) - 렘이 작은 환경(스마트 카드, Iot)에서 주어진 작업을 수행할 수 있는 가장 짧은 코드, 프로그램

- 가독성 생각하지 않고 무조건 짧은 코드
내적 / 비기능적

소프트웨어 품질 기준 사이 상호작용

가독성 - - - -
견고성 - - - -
공간 효율성 ⬇️ - - -
시간 효율성 ⬇️ ⬇️ ⬇️ -
  가독성 견고성 공간 효율성 시간 효율성

가독성을 높인다면 공간, 시간 효율성은 낮아진다.

견고성을 높이면 시간 효율성은 낮아진다.

공간 효율성을 높이면 시간 효율성은 낮아진다.

댓글