본문 바로가기
[Effective Unit Testing] Chap9. 테스트 속도 개선 [Effective Unit Testing] Chap9. 테스트 속도 개선 -좋은 단위 테스트는 수행 시간도 짧다.그러나 테스트 스위트의 덩치가 커질수록 피드백 주기가 길어지는 건 피할 수 없다. -테스트 속도 개선과 빌드 속도 개선 두 가지 측면을 볼 수 있다.테스트 속도 개선은 테스트를 빠르게 해줄 실마리를 찾기 위해 코드를 파해치는 작업이다.빌드 속도 개선과 관련해서는, 빌드 스크립트가 테스트를 실행하는 방식을 봐야 한다. 구체적으로는 고성능 컴퓨터나 다수 컴퓨터를 이용한 병렬 실행을 통해 빌드 시간 단축을 볼 수 있다. 9.1. 속도 개선을 위해서 9.1.1. 더 빠르게! -테스트가 빨리 끝나야 하는 이유는 피드백이 늦어질수록 피해가 더 커지기 때문이다.좁게 보면 개발자는 작업을 마무리하지 못하고.. 2019. 3. 19.
[Effective Unit Testing] Chap5. 유지보수성 [Effective Unit Testing] Chap5. 유지보수성 -코드는 쓰이는 횟수보다 읽히는 횟수가 훨씬 많다.그리고 현실에서의 작성의 대부분은 기존 코드를 수정하거나 확장하는 걸 뜻한다.이를 유지보수라 하기도 하고 개발이라 부르기도 한다. -테스트도 태생은 제품 코드와 다를 바 없는 코드인지라, 근본적으로 똑같이 불안정하다.자동화된 단위 테스트를 작성할 때도 이런 취약성에 주의하면서 관리해야 한다. 5.1. 중복-모든 악의 근원 넘버원은 “어설픈 최적화” 이고, 넘버투는 “중복(Duplication)이다. 5.1.1. 예시 -상수 중복은 given 과 then 의 상수를 따로 정의해서 쓰는 것을 이야기한다.상수 중복은 지역 변수로 만들어서 제거할 수 있다. 5.1.2. 개선 방법 -구조 중복과 .. 2019. 3. 14.
[Java Concurrency] 활동성 최대로 높이기 #2 [Java Concurrency] 활동성 최대로 높이기 #2 10.2. 데드락 방지 및 원인 추적 - 한 번에 하나 이상의 락을 사용하지 않는 프로그램은 락의 순서에 의한 데드락이 발생하지 않는다. 물론 그다지 실용적이지 않은 방법일 수 있지만, 가능하다면 한 번에 하나 이상의 락을 사용하지 않도록 프로그램을 만들어 보는 것도 좋다. - 여러 개의 락을 사용해야만 한다면 락을 사용하는 순서 역시 설계 단계부터 충분히 고려해야 한다. 설계 과정에서 여러 개의 락이 서로 함께 동작하는 부분을 최대한 줄이고, 락의 순서를 지정하는 규칙을 정해 문서로 남기고 그 규칙을 정확하게 따라서 프로그램을 작성해야 한다. - 세세한 수준에서 락을 관리하는 프로그램에서는 두 단계의 전략으로 데드락 발생 가능성이 없는지를 확.. 2017. 5. 2.
[Java Concurrency] 중단 및 종료 #1 [Java Concurrency] 중단 및 종료 #1 - 작업이나 스레드를 안전하고 빠르고 안정적으로 멈추게 하는 것은 어려운 일이다. 더군다나 자바에는 스레드가 작업을 실행하고 있을 때 강제로 멈추도록 하는 방법이 없다. 대신 인터럽트(interrupt)라는 방법을 사용할 수 있게 되어 있는데, 인터럽트는 특정 스레드에게 작업을 멈춰달라고 요청하는 형태이다. 실제 상황에서 특정 스레드나 서비스를 "즉시" 멈춰야 할 경우는 거의 없고, 강제로 종료하면 공유되어 있는 여러 가지 상태가 비정상적인 상태에 놓일 수 있기 때문에 스레드 간의 협력을 통한 접근 방법이 올바르다. 다시 말해, 작업이나 서비스를 실행하는 부분의 코드를 작성할 때 멈춰달라는 요청을 받으면 진행 중이던 작업을 모두 정리한 다음 종료하도록.. 2017. 4. 25.
[Effective Java] 스레드 스케쥴러에 의존하지 말자 [Effective Java] 스레드 스케쥴러에 의존하지 말자 - 많은 스레드가 runnable 상태일 때는 어떤 스레드를 실행시킬 것인지, 그리고 얼마 동안 실행시킬 것인지를 스레드 스케쥴러가 결정한다. 운영체제에서는 공정하게 그런 결정을 내리려고 하겠지만, 그 정책은 서로 다를 수 있다. 따라서 잘 작성한 프로그램은 그런 정책의 상세한 내용에 매달려서는 안 된다. 정확성이나 성능을 스레드 스케줄러에 의존하는 프로그램이라면 그 어떤 것도 이식성이 없어질 가능성이 크다. - 강력하고, 응답성이 좋고, 이식성이 있는 프로그램을 작성하는 가장 좋은 방법은, runnable 상태의 평균 스레드 개수가 프로세서의 개수보다 그리 크지 않게 하는 것이다. 이렇게 하면 스레드 스케줄러는 선택의 여지 없이 runnab.. 2017. 3. 17.
반응형