엔터프라이즈 SAS 코드 자산을 위한, 테스트로 입증한 마이그레이션
귀사의 SAS 자산은 잘 돌아갑니다. 수천 개의 프로그램, 매크로, 포맷, 예약 작업이 여러 해에 걸쳐 다듬어졌고, 그것들이 무엇을 하는지는 코드 자체 말고는 어디에도 기록되어 있지 않습니다. 아무리 호환성이 높은 새 플랫폼이라 해도 이를 옮기는 데에는 실질적인 위험이 하나 있습니다. 예전에는 맞았던 것이 미묘하게 틀리게 되고, 문제가 될 때까지 아무도 알아채지 못한다는 것입니다.
Jenner 전문 서비스는 간단한 원칙으로 그 위험을 제거합니다. 무엇이든 바꾸기 전에, 현재 시스템이 무엇을 하는지에 대한 포괄적이고 실행 가능한 기록을 만듭니다. 그런 다음 그 기록을 사용해 마이그레이션된 시스템이 동일하게 동작함을 테스트 하나하나로 증명합니다.
그 결과는 확신이 아니라 증거로 승인할 수 있는 마이그레이션이며, 영원히 귀사가 보유하는 회귀 테스트 스위트입니다.
저희는 SAS 전문가입니다. 그 언어와 시스템의 완전한 구현체를 직접 만들어냈다는 사실이 이를 보여줍니다. 다만 그쪽으로 옮겨가는 것은 저희와 함께 택할 수 있는 여러 경로 중 하나일 뿐입니다.
저희의 SAS 호환 코드 구현과 테스트 주도 방식을 활용해, Python이나 R, Snowflake나 Databricks, 나아가 Siemens SLC를 비롯한 다른 솔루션으로의 성공적인 이전도 보장할 수 있습니다.
그럼에도 저희가 Jenner로의 이전을 권하는 이유는, 기존 SAS 인프라를 갖춘 기업에게 더 빠르고, 덜 복잡하며, 비용이 더 낮기 때문입니다.
Jenner는 SAS 언어와 거의 모든 프로시저, 매크로 기능, 그래픽, 폭넓은 데이터 연결을 실행합니다. 대부분의 코드에서 마이그레이션은 같은 프로그램에 Jenner를 겨누는 일입니다. 그러나 엔터프라이즈 코드 자산은 결코 언어만이 아닙니다. 언어가 닿는 모든 것이기도 합니다.
autoexec.sas, 구성 파일, 시스템 옵션(ENCODING, LOCALE, YEARCUTOFF, VALIDVARNAME, FMTSEARCH, SASAUTOS), 환경 변수, SYSPARM, 그리고 WORK 라이브러리의 크기와 수명.
LIBNAME 문에 박아 넣은 비밀번호, {SAS002}로 인코딩된 문자열, %include된 파일 안의 자격 증명, Kerberos 또는 SSO 티켓, 그리고 그 모든 것이 대신 어디에 있어야 하는가라는 문제.
Oracle, DB2, Teradata, SQL Server, Snowflake, Hive 등을 위한 SAS/ACCESS 엔진, 명시적·묵시적 패스스루 SQL, 결과에 영향을 주는 엔진 옵션(DBCOMMIT, READBUFF, INSERTBUFF, BULKLOAD), 날짜·소수·NULL의 타입 매핑, 그리고 SQL이 로컬 실행 대신 데이터베이스로 내려갔을 때 조용히 달라진 동작.
하드코딩된 경로, Windows 드라이브 문자와 Linux 마운트, 대소문자를 구분하는 파일 이름, NFS 및 SMB 공유, FILENAME PIPE와 X 명령, SYSGET, 그리고 파일 권한.
포맷 카탈로그, 컴파일되거나 저장된 매크로, 인덱스, 감사 추적, 뷰, SPDE 라이브러리, 트랜스포트 파일, 암호화되거나 압축된 데이터셋, 그리고 복사가 아니라 재생성이 필요한 V6/V8 시대의 데이터셋.
SAS/CONNECT의 RSUBMIT 블록, Grid, SAS/SHARE, 저장 프로시스, 메타데이터 서버 권한 부여, Enterprise Guide 프로젝트, DI Studio가 생성한 작업, Viya CAS 액션. 각각 새 플랫폼에 대응물이 있지만, 동일한 것은 아닙니다.
LSF, Control-M, cron, 작업 의존성, 반환 코드 규약, 특정 NOTE/WARNING/ERROR 텍스트를 찾는 로그 스크레이퍼, SYSERR 및 SYSCC 로직, 그리고 FILENAME EMAIL 알림.
ODS의 PDF, RTF, Excel, HTML 대상, PROC TEMPLATE 스타일, 태그셋, 글꼴, 그래프 장치 드라이버, 그리고 하류 소비자가 위치로 파싱하는 보고서.
경계값에서의 부동소수점 반올림, 정렬 콜레이션과 동순위 순서, 구현마다 재현되지 않는 난수 스트림(RANUNI, RAND, STREAMINIT), 그리고 허용 오차 안에서 수렴 경로가 달라질 수 있는 반복 프로시저.
초기화되지 않은 변수, PROC SQL의 리머징, 묵시적 RETAIN, 정상으로 취급되는 절단 경고, 그리고 오늘은 우연히 옳은 답을 내는 문서화되지 않은 동작.
SASPy를 통한 Python, R, IOM을 통한 Java 및 .NET 클라이언트, SAS/SHARE로의 JDBC, .sas7bdat 파일을 직접 읽는 Tableau와 pandas, 그리고 Viya로의 REST 호출.
규제 산업의 검증 요건(GxP, 21 CFR Part 11, 모델 리스크 관리), 행 수준 보안, 개인정보 처리, 감사 추적, 그리고 오래된 다수의 SAS 자산에 버전 관리가 없다는 사실.
이 가운데 특이한 것은 하나도 없습니다. 모두 사전에 찾아낼 수 있고, 모두 테스트할 수 있습니다. 아래 프로세스가 존재하는 이유가 바로 그것입니다.
작업을 견적하기 전에 자산을 조사합니다. 소스 트리, 스케줄, 로그를 자동 분석해 프로그램, 매크로, 포맷, 라이브러리, 외부 파일, 데이터베이스 연결의 의존성 그래프를 만들고, 실제로 무엇이 돌아가는지, 무엇이 죽었는지, 무엇이 누구 소유인지 식별합니다. 위의 모든 범주를 점검하고, 발견 사항은 마이그레이션 공수로 점수를 매깁니다.
인벤토리 및 리스크 보고서와, 남은 단계에 대한 고정 가격 제안. 진행하지 않기로 하셔도 보고서는 귀사의 것입니다.
나머지 전부를 신뢰할 수 있게 만드는 단계이며, 아무것도 옮기기 전에 기존 SAS 시스템 위에서만 수행합니다.
범위에 속한 모든 프로그램에 대해 AI 기반 분석으로 특성화 테스트를 만듭니다. 이는 코드가 오늘 무엇을 하는지에 대한 실행 가능한 명세입니다. 각 테스트는 프로그램이 소비하는 입력(데이터셋, 매크로 파라미터, 외부 파일, 데이터베이스 추출, 환경 설정)을 포착하고, 현재 SAS 설치본에서 실행한 뒤, 산출되는 모든 것을 기록합니다. 출력 데이터셋, 로그 내용, 반환 코드, ODS 출력, 매크로 변수 상태, 그리고 파일 기록이나 메일 발송 같은 부수 효과입니다.
이것을 엔터프라이즈 규모에서 현실적으로 만드는 것이 AI입니다. 만 개의 프로그램을 읽고 각각이 처리하는 경계 사례를 추론하는 일은 마감이 있는 사람이 할 일이 아닙니다. 테스트 케이스와 픽스처, 비교 로직을 생성하는 일은 현재 모델이 뛰어난, 대량이고 패턴이 많은 작업 그 자체이며, 생성된 모든 테스트는 그것이 기술하는 시스템에 대해 실행하여 검증합니다. 현재 SAS에서 통과하지 못하는 테스트는 귀사 시스템의 테스트가 아니므로 폐기합니다.
비교 규칙은 출력마다 정합니다. 데이터셋은 기본적으로 정확히 비교합니다. 부동소수점이나 반복 프로시저 때문에 비트 단위 일치가 무의미해지는 곳에서는 수치 허용 오차를 명시적으로 선언합니다. 로그 비교는 텍스트가 아니라 구조로 하므로, 문구가 바뀐 NOTE는 작업을 실패시키지 않지만 행 수가 달라지면 실패합니다. 현재 날짜나 난수 시드처럼 비결정적인 입력은 통제하여, 같은 테스트가 어느 날에도 같은 답을 내도록 합니다. 테스트에 운영 데이터를 쓸 수 없는 경우에는 같은 코드 경로를 지나는 마스킹 또는 합성 픽스처를 만듭니다.
프로그램, 매크로, 프로시저 전반에 걸쳐 측정된 커버리지를 갖춘 버전 관리 테스트 스위트와, 현재 시스템에서 기록한 기준선. 이 스위트는 귀사의 것입니다. Jenner에서도, SAS에서도, 이 언어를 이해하는 다른 어떤 환경에서도 돌아가도록 작성되며, 마이그레이션과 무관하게 가치가 있습니다. 대부분의 SAS 자산은 이런 것을 가져본 적이 없기 때문입니다.
기준선이 갖춰지면 마이그레이션은 '완료'의 정의가 분명한 엔지니어링 작업이 됩니다. 귀사 환경에 Jenner를 세우고, 디스커버리에서 찾은 환경 항목(경로, 라이브러리, 비밀 정보 관리, 데이터베이스 연결, 스케줄러 연동)을 정리한 뒤, 스위트 전체를 실행합니다.
모든 실패는 네 가지 범주 중 하나로 분류합니다.
코드가 맞고 Jenner가 틀린 경우입니다. Jenner는 매주 새 빌드를 배포하며, 고객 마이그레이션에서 발견된 결함은 우선 처리되고, 실패한 테스트는 Jenner 자체 회귀 테스트 스위트에 영구히 편입됩니다.
설정이 필요한 경로, 자격 증명, 연결 또는 옵션. 고쳐서 다시 실행합니다.
코드가 문서화되지 않은 SAS 동작에 기대고 있습니다. 해당 줄과 해당 동작을 구체적으로 보여드리고, 코드를 바꾸실지(테스트가 그 변경이 안전함을 증명합니다) 아니면 Jenner가 그 특이 동작을 맞출지 선택하시게 합니다.
선언된 허용 오차 범위에서 결과가 다르거나, 로그 메시지의 문구가 다른 경우입니다. 문서로 남기고 승인을 받으며, 조용히 넘어가는 일은 결코 없습니다.
문제를 고치는 동안 스위트를 계속 돌리므로 진척은 의견이 아니라 숫자가 되고, 회귀는 도입된 그날 잡힙니다.
스위트 전체가 통과하는 마이그레이션된 코드, 또는 남은 모든 차이가 문서로 처리된 코드.
인증은 귀사의 스폰서와 감사인, 규제 기관이 마이그레이션을 받아들일 수 있게 하는 증거 패키지입니다.
운영 작업을 두 시스템에서 모두 실행하고 테스트 스위트와 동일한 규칙으로 출력을 자동 비교하는 병행 운영 기간을 둡니다. 인증 패키지에는 인벤토리, 테스트 스위트와 그 커버리지, 기준선, 최종 실행 결과, 모든 차이에 대한 처리, 그리고 각 요구사항이나 프로그램에서 그것을 덮는 테스트로의 추적성이 포함됩니다. 규제 대상 고객을 위해서는 IQ/OQ/PQ 검증과 감사를 뒷받침하도록 구성합니다.
서명된 인증 패키지와 진행 여부 권고.
전환은 귀사의 배치 처리 시간대와 SAS 라이선스 갱신일에 맞춰, 검증된 롤백 경로와 함께 계획합니다. 스케줄러를 다시 겨누고, 모니터링과 알림을 확인하며, SAS 환경은 귀사의 일정에 따라 폐기합니다.
테스트 스위트는 전환 후에도 계속 돌아갑니다. Jenner는 매주 배포하므로, 의존하고 계신 어떤 것도 달라지지 않았다는 동일한 증거와 함께 모든 개선을 받습니다. 코드 자산이 커짐에 따라 스위트를 확장할 수 있도록 귀사 팀을 교육합니다.
Jenner 위의 운영 환경, SAS 폐기 계획, 그리고 계속 일하는 회귀 테스트 스위트.
고정 가격이며 기간이 짧습니다. 남은 단계에 대한 제안을 만들고, 가격은 자산 규모와 복잡도의 추정치가 아니라 실측치로 정합니다.
보통 범위를 고정한 단일 프로젝트로 제공하며, 마일스톤 검수는 스위트 결과에 연동합니다.
테스트 스위트를 인계하고 귀사 팀이 확장 교육을 마친 뒤, 연간 서비스로 이용하실 수 있습니다.
$1,000 – $21,000
대개 원격으로 수행할 수 있으며, 기간은 일주일에서 한 달 사이입니다.
$52,000 – $405,000
일부 현장 작업이나 심화된 도메인 전문성이 필요하며, 기간은 보통 두 달에서 여섯 달입니다.
모든 금액은 미국 달러(USD) 기준입니다.
여기에는 소프트웨어 라이선스 비용이 포함되지 않습니다. 다만 라이선스 체계는 매우 단순하고 가격도 경쟁력이 있습니다. 요금 페이지 보기.
전문 서비스에 문의하기SAS 환경에 대한 설명(플랫폼, 대략적인 프로그램 수, 사용 중인 제품, 데이터베이스, 스케줄러)을 보내주시면 디스커버리 범위를 잡아 드립니다.