일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- spring formatter
- 정적팩토리메서드
- 동적파라미터
- 스프링시큐리티
- 비기능적 요구사항
- jpa lazy
- 스프링부트 도커
- 생성자주입
- jpa no session
- Atomicity
- kotlin 리팩터링
- 그래프큐엘
- 소프트웨어의 품격
- 스프링 포매터
- kotlin ::
- 도커 이미지 빌드
- 토비의 스프링
- 스프링
- 수정자주입
- ioc컨테이너
- 스프링 시큐리티 설정
- fetch join
- Spring
- 자바 필터
- 스프링di
- java predicate
- 기능적 요구사항
- method refetence
- open-session-in-view
- IOC
- Today
- Total
공부기록
소프트웨어 품질 본문
책 '소프트웨어의 품격'을 읽고 적는 글입니다.
소프트웨어의 품질
소프트웨어의 전반적인 가치가 아닌, 특정 특성을 말한다.
모든 특정 특성을 품질로 취급할 수는 없다. 예를 들어 '언어는 자바로 작성되어야한다'는 분명히 특성을 이루는 요소지만, 품질이라고 할수는 없다.
품질은 어떻게 측정해야하는가?
생각해보면 너무나도 많다. 사용자에게 직관적인가? 유지보수는 얼마나 쉬운가? 사용자가 만족하는가? 등등..
따라서 전문가들은 크게 두 가지 특성으로 품질 기준을 분류한다.
1. 내적 품질, 외적 품질
2. 기능적 품질, 비기능적 품질
내적 품질과 외적 품질
외적품질?
- 최종 사용자가 시스템과 상호작용하는 동안 인지할 수 있는 품질
내적품질?
- 소스 코드를 봐야만 알 수 있는 품질
다만, 외적품질과 내적품질의 경계는 명확하지 않다.
최종 사용자는 일부 내적품질을 간접적으로 체험가능하고, 모든 외적품질은 소스 코드에 의존하기 때문.
예를 들어:
- 유지보수성은 내적 속성이지만, 결함을 고치는데 오래걸린다면 최종 사용자는 이를 인지할 수 있음.
- 잘못된 입력에 대한 견고성은 흔히들 외적 속성으로 분류하지만, 최종 사용자가 아닌 다른 시스템 모듈과 상호작용하는 거라면 내적속성으로 간주할 수 있음.
기능적 품질과 비기능적 품질
기능적품질?
- 소프트웨어가 무엇을 하는가?
- 모든 기능적품질은 외적 품질이다. 소프트웨어가 무엇을 하면 그 효과는 사용자가 체감할 수 있기 때문.
비기능적 품질?
- 어떻게 하는가?
- 외적품질, 내적품질 다 될 수 있다. 코드 자체와 관련되느냐 혹은 코드로부터 파생된 특성과 관계되느냐에 따라 결정.
외적 품질에 가까운 기준
정확성
요구 사항이나 명세를 비롯해 명문화된 목적을 고수하라
- 개발자 스스로 달성할 명세를 이해하지 못하면, 정확성도 달성할 수 없다. 명세를 규약(contract) 관점에서 바라보고, 그 규약을 지키도록 구현하는 방법이 유용.
견고성
잘못된 입력이나 불리하고 예상하지 못한 외부 조건(자원 부족 등)에 대한 복원력을 갖추자
사용성
소프트웨어 사용법을 배우고, 그 목표를 달성하는데 필요한 노력 정도(샤용 용이성)
효율성
적당한 자원 소모량
내적 품질에 가까운 기준
가독성
동료 프로그래머가 명확하게 이해해야한다.
재사용성
유사한 문제를 해결하기 위해 코드를 쉽게 재사용할 수 있으며, 이를 위해 필요한 변경이 적다.(적응성)
테스트 용이성
프로그램의 모든 동작을 촉발하고 그 효과를 관측하는 테스트를 작성할 수 있는가? 쉽게 작성할 수 있는가?
유지보수성
버그를 쉽게 찾아 수정하고 소프트웨어를 발전시킬 수 있다.
기타 특수한 품질
일반적으로 거론되는 소프트웨어 품질은 아니지만, 클래스 수준에서 필요한 두 가지 속성
스레드 안정성
멀티스레드 환경에서 매끄럽게 작동하는 클래스
간결성
주어진 작업을 수행할 수 있는 가장 짧은 프로그램 만들기