요약

  • 그레이스 호퍼가 1967년 해군 복무로 복귀한 뒤, 그녀는 컴파일러 표준화 목표를 인력을 갖춘 테스트·검증 활동으로 전환하는 데 기여했다. 그녀의 1980년 구술 인터뷰는 공용 COBOL과 FORTRAN 테스트 루틴을 서로 다른 컴퓨터에서 실행할 수 있게 한 핵심 기법을 자신이 아니라 조지 베어드(George Baird)의 것으로 돌린다.
  • 해군의 테스트는 선별된 컴파일러 기능과 출력을 관찰 가능하게 만들었다. 그러나 그 테스트가 모든 벤더 구현이 정확하다는 것, 모든 가능한 기능 조합이 시도되었다는 것, 임의의 응용 프로그램이 다른 시스템에서 그대로 실행될 것이라는 것을 입증하지는 못했다.
  • 오래 지속되는 구분은 다음과 같다. 문서화된 표준과, 컴파일러가 명명된 테스트를 통과한다는 근거, 그리고 특정 프로그램이 완전한 운영 환경에서 이식 가능하게 동작할 것이라는 증명. 이 셋은 서로 연관된 주장이지만 서로 교환 가능한 주장은 아니다.

표준은 결과가 아니었다

같은 벤더의 기계를 영원히 사지 않으면서 급여 또는 물류 프로그램을 컴퓨터 간에 옮기고 싶어 하는 정부 부처를 상상해 보라. 공용 언어 표준이 문제를 해결해 주는 것처럼 보인다. 양쪽 시스템이 COBOL을 지원한다면 프로그램을 옮길 수 있을지도 모른다. 그러나 표준은 목표이지 측정이 아니다. 벤더는 필수 기능을 잘못 구현하거나 생략하거나 경계 사례를 다르게 처리하면서도 지원을 주장할 수 있다.

여러 제조사의 시스템을 도입하는 연방 기관이 늘어나면서 이 격차는 실무적 관심사가 되었다. 조달 담당관에게는 컴파일러가 표준을 준수한다는 약속만으로는 부족했다. 구매자에게 필요한 것은 반복 가능한 근거였다. 즉, 컴파일러가 받아들일 프로그램, 기대 결과, 관찰된 결과, 그리고 그 결과들을 여러 기종 간에 비교하는 방법이었다.

이것이 그레이스 호퍼 경력에서 상대적으로 덜 알려진 부분이다. 그녀의 공개 평판은 대개 초기 컴파일러 연구와 COBOL에 영향을 준 FLOW-MATIC을 중심으로 형성되어 있다. 이 글의 사건은 그보다 뒤에 시작된다. 공용 프로그래밍 언어를 옹호하는 일에서 구현체를 테스트 가능하게 만드는 일을 돕는 것으로 옮겨 간 시점이다. 이 전환이 중요한 이유는 이식 가능한 소스 코드가 읽기 쉬운 문법만으로 만들어지지 않기 때문이다. 그것은 표준이 무엇을 요구하는지, 컴파일러가 실제로 무엇을 구현하는지, 테스트 스위트가 무엇을 보여 줄 수 있는지에 달려 있다.

기능 목록에서 테스트 실행으로

기술적 계보는 이미 집단적인 것이었다. 조지 N. 베어드(George N. Baird)는 1972년 국방부 COBOL 컴파일러 검증 시스템에 관한 글에서 1963년에 시작된 표준 그룹의 활동을 기술했다. 그 COBOL 워킹 그룹은 컴파일러가 명시된 기능을 실제로 제공하는지 판별하기 위한 프로그램을 작성했다. 목표는 모든 컴파일러를 디버깅하거나 가능한 모든 조합을 열거하는 것이 아니었다. 기능을 선별하고, 개별적으로 그리고 조합으로 테스트하며, 결과를 보고하는 것이었다.

이 구분은 놓치기 쉽다. 언어 명세에는 많은 기능과 상호작용이 담길 수 있다. 테스트 스위트는 유한한 사례 집합을 골라야 한다. 베어드가 기술한 초기 해군 루틴은 기존 작업에서 출발해 더 유용한 보고 기능을 더했다. 컴퓨터가 산출한 결과를 기대 결과와 함께 보여 주고, 장애가 나타난 프로시저를 식별할 수 있었다. 예비 세트는 12개 프로그램과 약 5,000줄의 소스로 구성되었다.

이런 세부 사항들이 작업을 구체적으로 만든다. “이 컴파일러는 COBOL을 지원한다”는 넓은 보증이다. “이 컴파일러는 이 테스트 환경에서 이러한 필수 구성물을 받아들였고 이러한 결과를 산출했다”는 다른 구매자가 재현할 수 있는 한정된 진술이다. 테스트가 판단을 없애지는 않았다. 판단의 일부를 보이게 만들었다.

호퍼의 과제는 역량을 세우는 것이었다

1980년 인터뷰에서 호퍼는 자동 데이터 처리를 담당하던 해군 관료 노먼 림(Norman Ream)이 1967년 현역 복귀를 요청했다고 회상했다. 그녀가 기억하는 과제는 언어 표준을 지원하고 소프트웨어의 이식성을 높일 수 있는 테스트·검증 절차를 개발하는 것이었다. 그녀는 그 필요를 제품 테스트에 비유했다. 표준에는 구현이 표준을 충족하는지 보여 주는 테스트가 필요하다는 것이었다.

호퍼는 혼자 작업하기보다 프로그래머들을 요청했다고 말했다. 그녀는 초기 인원으로 민간인 에드 포드(Ed Ford), 장교 한 명, 수병 두 명을 꼽으며 그 수병 중 한 명이 조지 베어드였다고 했다. 아놀드 존슨(Arnold Johnson)은 나중에 합류했다. 1971년 업계 언론은 해군의 검증 루틴을 호퍼 대위가 이끄는 참모진이 개발한 것으로 소개했다. 이 당시 보도는 그녀의 리더십 역할을 뒷받침하지만, 그 코드를 한 사람의 창작물로 만들지는 않는다.

시점도 중요하다. 1971년 1월Datamation은 해군이 COBOL 컴파일러의 검증을 요구하게 되었고, 국방부와 국립표준국이 ANSI 언어 표준에 맞춘 표준화된 루틴을 개발하기로 원칙적으로 합의했다고 보도했다. “원칙적 합의”는 정부 전역 서비스의 완성과 같지 않다. 이 보도는 그 시점의 제도적 방향을 기록한 것이지 최종 결과가 아니다.

호퍼가 베어드의 것이라고 말한 부분

호퍼의 구술 역사에서 가장 말을 드러내는 대목은 발명 주장이 아니라 공로의 귀속이다. 그녀는 베어드가 테스트 루틴이 기종별 고유 이름과 제어카드 세부사항을 별도의 구성 데이터로 처리하게 만드는 기법을 고안했다고 말했다. 공용 테스트 로직은 표준 COBOL로 남을 수 있었고, 특정 컴퓨터에서 실행하는 데 필요한 차이는 작은 기종별 파일이 공급했다.

이 구성은 이식성을 테스트 하네스 자체의 속성으로 만들었다. 모든 테스트를 모든 컴파일러마다 다시 써야 한다면 비교는 유지하기 더 어렵고 편향되기 더 쉬워졌을 것이다. 공용 테스트를 기종별 설정과 분리함으로써 팀은 컴퓨터마다 제어 방식이 다르다는 사실을 인정하면서도 같은 검사를 재사용할 수 있었다.

호퍼의 회상은 사후 정리된 기록이므로, 팀의 설계와 분업에 대한 그녀의 서술로 읽어야 한다. 베어드의 1972년 논문은 검증 시스템과 그 기술적 구조를 독립적으로 뒷받침한다. 두 출처를 함께 보면 신중한 그림이 나온다. 호퍼는 과제 설정과 팀 구성에 기여했고, 베어드는 중요한 기종 간 기법을 공급했으며, 더 넓은 표준·테스트 작업에는 여러 기여자와 선행 작업이 있었다.

통과한 스위트가 말할 수 있는 것과 없는 것

이 시스템의 가치는 한계가 읽힌다는 데 있었다. 성공적인 실행은 컴파일러가 테스트된 언어 기능을 처리하고 테스트 조건에서 기대 결과를 산출했음을 보여 준다. 그러나 테스트 스위트가 모든 유효한 조합을, 모든 구현 결함을, 기관이 이후 작성할 모든 프로그램을 다뤘음을 보여 주지는 않는다.

이는 COBOL에만 국한된 결함이 아니다. 베티 홀버튼(Betty Holberton)과 엘리자베스 파커(Elizabeth Parker)가 이끈 별도의 FORTRAN 테스트 활동에 관한 NIST의 역사는 유한한 테스트 집합이 컴파일러의 완전한 정확성을 증명할 수 없는 이유를 설명한다. 그것은 병행된 국립표준국 프로젝트였지 호퍼의 해군 COBOL 스위트가 아니다. 이 구분은 기술적으로도 역사적으로도 중요하다. 적합성 테스트는 여러 팀과 언어에 걸쳐 제도적 관행이 되어 가고 있었다.

컴파일러 적합성과 응용 프로그램 이식성도 서로 다른 층위다. 컴파일러가 선별된 표준 테스트를 통과하더라도 특정 응용 프로그램은 여전히 벤더 확장, 운영체제 서비스, 파일 배치, 런타임 동작, 데이터 표현에 의존할 수 있다. 이는 테스트가 다루는 범위로부터 도출하는 추론이지, 해군 스위트가 그런 의존성을 전부 검사했다는 주장이 아니다. 응용 프로그램을 옮기려면 여전히 응용 수준의 테스트와 그것이 실행된 환경에 대한 기록이 필요하다.

실무적 교훈은 표준이나 테스트를 불신하라는 것이 아니다. 근거를 정확하게 명명하라는 것이다. 표준은 기대 동작을 정의한다. 적합성 스위트는 구현의 한정된 표본을 검사한다. 응용 마이그레이션 테스트는 구매자가 실제로 옮기려는 시스템을 검사한다. 셋을 모두 “이식성”이라고 부르면 위험이 어디에 남아 있는지 가려진다.

측정 가능한 주장의 유산

이 사건에서 호퍼의 역할은 부풀리지 않을 때 오히려 더 흥미로워진다. 그녀는 넓은 상호운용성 야망을 인력을 갖춘 검증 역량으로 전환하는 데 기여했다. 그녀는 또한 홀로 성취한 발명가 서사에서 놓치기 쉬운 관리 관행을 보여 주었다. 협력자를 요청하고, 기술적 기제를 작동하게 만든 아이디어의 주인에게 공을 공개적으로 돌리는 관행이다.

베어드의 기여는 그 관행이 왜 중요했는지 보여 준다. 이식성은 언어 위원회가 약속하는 기능만이 아니었다. 그것은 테스트 설계, 구성, 출력 비교, 반복 가능한 실행의 기계적 세부에도 달려 있었다. 관찰 가능한 테스트 없는 표준은 구매자에게 주장만 남긴다. 공로 귀속에 주의하지 않은 테스트 스위트는 그 기제를 만든 사람들을 가릴 수 있다. 범위 한계 없이 통과하는 스위트는 자신의 근거보다 더 큰 새로운 약속이 될 수 있다.

따라서 장수하는 소프트웨어에서는 영수증이 주장과 함께 다녀야 한다. 어느 표준 개정판인가, 어느 컴파일러 빌드인가, 어느 테스트인가, 어느 기종별 구성인가, 어느 결과인가? 호퍼의 해군 활동은 벤더 차이를 없애지 않았다. 그것은 제도에 그 차이 일부를 드러내고, 구현을 비교하고, 더 단단한 근거 위에서 조달 결정을 내릴 방법을 주었다. “COBOL이 소프트웨어를 이식 가능하게 만들었다”는 더 한정된 성취이며, 더 오래 지속되는 성취이기도 하다.

출처