* 이 글은 책 소프트웨어의 품격 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을 참고하여 설명한다.
특성 | 예 | 소프트웨어 설명 | 가까운 쪽 |
정확성(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)에서 주어진 작업을 수행할 수 있는 가장 짧은 코드, 프로그램 - 가독성 생각하지 않고 무조건 짧은 코드 |
내적 / 비기능적 |
소프트웨어 품질 기준 사이 상호작용
가독성 | - | - | - | - |
견고성 | - | - | - | - |
공간 효율성 | ⬇️ | - | - | - |
시간 효율성 | ⬇️ | ⬇️ | ⬇️ | - |
가독성 | 견고성 | 공간 효율성 | 시간 효율성 |
가독성을 높인다면 공간, 시간 효율성은 낮아진다.
견고성을 높이면 시간 효율성은 낮아진다.
공간 효율성을 높이면 시간 효율성은 낮아진다.
'☕️ JAVA' 카테고리의 다른 글
최적의 시간 복잡도를 찾아서 🐠 (0) | 2022.01.20 |
---|---|
자바 객체의 메모리 크기는 얼마일까? (OOPs, Java Object Header, JOL 사용하기) 🤖 (2) | 2022.01.14 |
JAVA의 클래스 (0) | 2021.11.01 |
JAVA의 제어문 (0) | 2021.11.01 |
JAVA의 연산자 (0) | 2021.11.01 |
댓글