관리 메뉴

흰둥씨의 개발장

[#6] 테스트와 함수형프로그래밍 본문

함수형 프로그래밍/함수형 자바스크립트

[#6] 테스트와 함수형프로그래밍

돈워리비해삐 2023. 9. 12. 23:47

  🤍 함수형 프로그래밍과 프로그램 테스트  

명령형 코드를 테스트 하려고 한다면...
1. 순수함수와 부수효과가 있는 함수를 분리해서 테스트 가능한 단위를 설정해야 함
2. 전역 데이터에 의존하는 함수를 테스트 할 수 없음
3. 평가순서도 신경써야 함 

선언형 코드(함수형)를 테스트 하려고 한다면...
1. 평가해야할 함수를 블랙박스로 보고 "동일한 input에 동일한 output내는지" 보면 됨
2. 비즈니스 로직에 집중해서 테스트 할수 있음 
3. 모나드로 결합된 함수에서 순수함수/부수효과있는 함수를 떼어서 테스트할 수 있음  
4. 부수효과 있는 함수는 "mocking"을 이용하여 테스트
    (mocking? 테스트할 함수와 상호작용하는 객체가 할 일을 미리 정의, 기대식을 충족하지 않으면 불합격하는 식으로 사용)

함수형코드는 명령형 코드보다 "참조투명성" 이 좋다는 점에서 테스트성이 압도적으로 좋다. 

 

**번외 ) 퀵체크 ? 속성을 무작위로 생성하여 프로그램 명세와 속성을 테스트 하는 하스켈 라이브러리
                           케이스 자동생성해서 테스트 실행해주고 보고서도 생성해준다고 함

  🤍 JSCheck를 응용한 속성 기반 테스트  

JSCheck ? 퀵체크를 모방한 자바스크립트 라이브러리 (made by 더글러스 크록퍼드) <- 저서 <자바스크립트 핵심가이드>절판됨...
                   순수함수에만 사용할수 있음 

JSC.claim(이름, 술어, 특정자, 분류자);

//이름 : 주장을 서술함
//술어 : 주장을 만족하면 true, 그렇지 않으면 false의 결론을 내는 함수
//특정자 : 입력 매개변수의 형식과 무작위 자료집합의 생성 기준을 서술한 배열
//분류자 (optional) : 해당없음 케이스를 버릴 때 쓰려고 각 테스트 케이스에 붙이는 함수

 

  🤍 블랭킷JS로 프로그램 복잡도를 측정   

블랭킷 JS ? 자바스크립트용 코드 실행률 도구 
   - 소스 파일을 읽고 -> 추적기 라인을 추가해서 코드를 장착하고 -> 테스트 실행기에 걸어 상세 실행률 정보를 산출함