분명한 사실은 우리 모두가 R&D 분야에서 일할 수 있는 것은 아니라는 것입니다. 하지만 우리는 여전히 일부 용어를 배울 수 있습니다. 다음은 JSL 단위 테스트 프레임워크입니다. 그것은 무엇입니까? 어떻게 되었나요? 왜 중요한가요?
JSL 단위 테스트 프레임워크를 이해해 보겠습니다.
설명을 제공해 주신 고급 분석 테스트 수석 관리자인 Nicole Jones( @Nicole_Jones )에게 감사드립니다.
“ 단위라는 용어는 소프트웨어 제품의 테스트 가능한 가장 작은 구성 요소를 의미하며 단위 테스트라는 용어는 장치가 예상대로 작동하는지 확인하는 프로세스입니다. 단위 테스트 프레임워크 라는 문구는 자동화된 단위 테스트를 용이하게 하는 데 사용되는 메커니즘을 나타내게 되었습니다.”
수석 연구 통계학자인 Joseph Morgan( @joseph_morgan )은 2005년에 통계 테스터로 일하기 시작하면서 JMP에 이러한 용어를 소개했습니다. (그는 현재 DOE 그룹에서 일하고 있습니다.) Joseph Morgan의 배경은 소프트웨어 엔지니어링, 컴퓨터 과학, 이산 수학 분야입니다. 그리고 통계.
테스트 엔지니어링 수석 관리자인 Audrey Shull( @Audrey_Shull )은 "그는 전체 개념, 즉 중앙 테스트 프레임워크를 구상했습니다."라고 말합니다. "그는 많은 큰 아이디어를 가지고 있는데 이것이 그 중 하나였습니다."
Nicole은 "JMP와 JSL에 익숙해진 후 소프트웨어의 통계적 특성을 염두에 두고 JSL 단위 테스트 프레임워크를 개발할 수 있었습니다."라고 말합니다.
조셉 모건 설명(4:38)
'우리만의 샴페인을 마시다'
단위 테스트 프레임워크는 다른 언어로 작성될 수 있지만 자체 JSL보다 더 나은 도구가 있을까요?
Audrey는 JSL 단위 테스트 프레임워크를 통해 "JMP를 사용하여 JMP를 테스트하고 있습니다"라고 설명합니다. 즉, 우리는 “우리만의 샴페인을 마시고 있다”는 것이다. 그리고 모든 도구에서 이것이 가능한 것은 아닙니다.
Audrey는 계속해서 "다양한 JSL 언어가 있기 때문에 소프트웨어를 사용하여 소프트웨어를 테스트할 수 있습니다."라고 Audrey는 말합니다. "JSL이 프레임워크를 지원하기 위해 수행할 수 있는 작업의 한계를 확장했습니다. 이는 매우 특별한 일입니다. 그리고 프레임워크 자체는 JSL 이전 버전과의 호환성을 위한 대규모 회귀 테스트입니다.
"개발 직원이 스크립팅 작동 방식을 변경하면 우리가 JSL 언어의 첫 번째 고객이기 때문에 테스트 그룹에서 먼저 찾아냅니다.
“모든 회사는 자동화를 사용하려고 노력하지만 이를 위해 다른 타사 도구를 사용하는 경우도 많습니다. 그들은 항상 자신의 소프트웨어를 사용할 여유가 있는 것은 아닙니다."
확장 가능한 프레임워크
A screenshot of the original dialog. 원본 대화의 스크린샷입니다. JSL 단위 테스트 프레임워크는 모든 JMP 플랫폼에서 사용됩니다. 예를 들어 그래프 빌더의 드래그 앤 드롭 기능을 테스트하는 데 사용할 수 있습니다. 또는 빨간색 삼각형 메뉴. 또는 배포 플랫폼의 코드 단위.
Audrey는 “JSL 자체를 테스트하는 데 사용할 뿐만 아니라 다른 모든 플랫폼을 테스트하는 데에도 프레임워크를 사용할 수 있습니다.”라고 말합니다.
Nicole은 다음과 같이 자세히 설명합니다.
“Joseph가 프레임워크를 개발할 당시 그의 주된 초점은 JMP에서 통계 플랫폼을 위한 회귀 테스트 모음을 만드는 방법을 찾는 것이었습니다. 그러나 그는 확장 가능한 프레임워크를 만들 수 있었습니다. 회귀 테스트 제품군에는 통계 플랫폼과 그래프 플랫폼이 포함되어 있으며 Windows뿐만 아니라 Macintosh에서도 작동하고 데이터 테이블 명령과 보고서 구조를 테스트합니다.”
'안전망'으로 일하기
프레임워크는 수동으로 실행할 수 있습니다. 테스터와 개발자는 시작하고, 지정하고 클릭하고, 실행할 수 있습니다. 그러나 자동화는 지속적인 개선의 핵심입니다.
프레임워크는 개발자의 작업이 존재하고 코드가 구현되는 Perforce(작업 저장소)를 통해 자동화됩니다. JMP 테스터는 테스트 사례를 작성하고 이를 Perforce의 전용 섹션에 업로드합니다.
Screenshot of the testing dialog as it looks today.현재 보이는 테스트 대화 상자의 스크린샷입니다.
수석 시스템 개발자인 Jim Borek이 실행하는 야간 자동화 프로세스는 그날 업로드된 모든 테스트와 그날 푸시된 모든 코드를 포착하고, 업데이트된 코드에 대한 테스트 사례를 실행하고, 오류가 발생하면 팀에 알립니다. Jim은 이 프로세스를 자동화하고 기계를 유지 관리하는 데 핵심입니다.
Audrey는 진행되는 테스트의 규모에 대해 설명했습니다. 매일 밤 240만 건의 테스트가 실행됩니다. JMP 17과 JMP 16.2의 모든 운영 체제(예: Windows, Catalina, BigSur)에서 이러한 현상이 발생합니다. 단일 머신에서 테스트를 실행하는 프로세스는 머신 속도에 따라 6~10시간이 소요됩니다.
Audrey는 "이것이 회귀 테스트 스위트입니다. 이 프레임워크가 없었다면 우리는 이러한 것들을 매일 테스트하여 깨지는지 여부를 확인해야 했습니다"라고 말했습니다. “수동으로 할 수는 없어요. 테스트 모음은 자동화되어 시스템에서 오류가 발생했음을 알려줍니다.
"우리는 때때로 이를 안전망이라고 부르기를 좋아합니다. 지난 번 테스트했을 때 작동했다는 것을 알고 테스트 사례를 작성했으며 시스템이 중단되면 알려줍니다. 다른 작업으로 넘어갈 수 있습니다. 우리는 노력하고 있습니다. 새로운 기능과 앞으로 출시될 기능, 소프트웨어에 추가되는 기능을 테스트해 보세요.”
JSL 테스트 프레임워크 워크플로


Apple 버그 찾기
Joseph은 단위 테스트 프레임워크의 가치를 확고히 한 초기 일화를 공유합니다.
“JSL 단위 테스트 프레임워크의 초기 구현이 실행된 직후, 그 가치는 다소 특이한 방식으로 극적으로 드러났습니다. 흥미롭게도 JMP가 감지한 것은 JMP의 회귀가 아니라 MacOS에서 다소 심각한 버그를 찾아내는 데 핵심이었습니다.
“2006년 초, Apple은 Macintosh 라인을 PowerPC CPU에서 Intel CPU로 전환하기 시작했으며 이러한 전환을 지원하기 위해 Rosetta로 알려진 MacOS와 에뮬레이터를 번들로 제공했습니다. 이 에뮬레이터를 사용하면 PowerPC 응용 프로그램을 Intel Mac에서 실행할 수 있으므로 Apple에서는 핵심 소프트웨어로 간주했습니다.
“결과적으로 Rosetta 에뮬레이터에는 JMP 동작에 몇 가지 특이한 이상 현상을 일으키는 버그가 있었습니다. 단위 테스트 프레임워크를 사용하여 문제를 Rosetta의 제곱근 함수 구현 시 발생하는 버그로 격리할 수 있었습니다( 결함 S0351925 참조 ).
“Michael Hecht와 저는 문제를 설명하기 위해 Apple 엔지니어들과 여러 차례 전화 회의를 했지만 엔지니어들은 그것이 JMP 버그라고 단호했습니다. Michael이 나에게 문제가 Rosetta 버그라고 확신했던 버그를 보여주는 단위 테스트 중 하나를 모방한 매우 간단한 C++ 앱을 작성하라고 제안하기 전까지는 그렇지 않았습니다. 1년 후인 2007년 3월, Apple은 Mac OS X 10.4.8의 Rosetta 버그에 대한 수정 사항을 출시했습니다.
누가 혜택을 받나요?
"[프레임워크]는 테스터를 염두에 두고 개발되었지만 개발자에게도 유용한 것으로 입증되었습니다."라고 Nicole은 말합니다. “우리 중 많은 사람들의 요구 사항을 해결할 수 있는 프레임워크를 만드는 Joseph의 능력에 감사드립니다.”
캐리와 베이징에 있는 테스터들은 기능을 나누어 JMP의 특정 영역을 모니터링합니다. 하지만 JMP의 어느 부분에서 테스트를 담당하든 모든 사람은 본질적으로 스크립팅 언어도 테스트하게 됩니다.
Audrey는 이렇게 말합니다. “JMP와 JSL을 더 많이 사용할수록 '있으면 좋은 것'이라는 생각이 듭니다. 우리는 구현하는 사람은 아니지만 가끔 '이거 좀 추가해주실 수 있나요?'라고 요청하는 편이에요.”
물론 지속적인 개선은 고객에게도 이익이 됩니다.
“저희 고급 JSL 사용자들은 우리가 하고 있는 일 중 일부를 하고 싶어할 수도 있습니다. 이는 우리가 어떻게 하면 보다 강력한 방식으로 스크립트를 작성할 수 있는지 생각하게 만듭니다.”
추가된 많은 부가 기능은 개발, 테스트 및 릴리스 엔지니어링 팀의 크라우드소싱을 통해 이루어졌습니다.
수년에 걸쳐 기능을 추가한 주요 플레이어에게 찬사를 보냅니다.
조셉 모건 @joseph_morgan
멜라니 드레이크 @Melanie_J_Drake
짐 보렉
잰 그레그 @XanGregg
마이클 헥트 @hecht_jmp
저스틴 칠튼 @Justin_Chilton
에반 맥코클 @EvanMcCorkle
닉 홈즈 @nickholmes13
이는 JMP 부서의 독창성, 협력 및 지속적인 개선에 대한 헌신을 보여주는 많은 사례 중 하나일 뿐입니다. 우리는 이와 같은 이야기를 더 많이 강조하기를 바랍니다. 아이디어가 있으면 Jessica Marquardt에게 문의하세요.
더 많은 정보를 원하시나요?
JMP 테스트 대시보드
테스트 엔지니어링 관리자 Nala Sun( @Nala )이 작성한 중국 R&D 뉴스레터 기사는 이 게시물에 대한 영감을 제공했습니다. JSL 단위 테스트의 자동화 프레임워크
JSL 단위 테스트 결과가 야간 단위 테스트 실행을 위해 출력, 처리 및 활용되는 방법은 다음과 같습니다. JSL 프레임워크 데이터 파이프라인
Joseph Morgan의 기사: JSL 단위: 자동화된 JSL 테스트
오르소, 알레산드로, 그레그 로더멜. “소프트웨어 테스팅: 연구 여행기(2000-2014).” 소프트웨어 엔지니어링 절차의 미래. 2014. 117-132.
Alex Orso의 전문 페이지: https://www.cc.gatech.edu/home/orso/
배경과 지침을 제공해 주신 @shannon_conners 에게 감사드립니다.