코드 외부에서 시드 실행 가능 무작위화

코드 외부에서 시드 실행 가능 무작위화

우리는 일부 타사의 기존 소프트웨어에 대해 코드를 실행하는 기능 테스트 프레임워크를 구축했습니다. 우리는 이 작업을 정기적으로 수행하고 결과를 예상 결과와 비교합니다(단위 테스트와 동일하지만 테스트 자체는 단위 테스트보다 더 복잡합니다).

타사에서 사용하는 소프트웨어는 미리 컴파일된 실행 파일(실제로는 MoveIt(ROS 로봇 프레임워크 내) 및 Coppelia Sim(로봇 시뮬레이터)이라는 2개의 실행 파일이 있음)이며 가장 확실하게 C++로 코딩되어 있습니다. 이러한 세부 사항이 실제로 중요하다고 생각하지 않습니다. 결과를 계속해서 비교하고 싶기 때문에 미리 컴파일된 실행 파일이 난수 생성을 사용하더라도 테스트 프레임워크의 출력은 결정적이어야 합니다.

타사 실행 파일에 대한 난수 생성기에서 결정론적 결과를 얻으려면 외부에서 실행 파일을 시드하는 방법을 찾고 있습니다(즉, 전체 액세스 권한이 없는 코드가 아닌). 나는 대부분의 난수 생성이 컴퓨터 시계를 기준으로 시드된다는 것을 알고 있으므로 생각했습니다.실행 파일이 컴퓨터와 다른 시계에서 실행되고 있다고 믿도록 속일 수 있다면 실제로 이러한 실행 파일을 외부에 시드할 수 있습니다.

어떻게 생각하나요? 코드 외부에서 실행 파일을 심는 아이디어가 있습니까?

참고: 우리는 실제로 MoveIt의 소스 코드에 액세스할 수 있으며 이를 다시 컴파일할 수 있지만(비록 무겁고 알려지지 않은 코드 기반을 결정적인 동작으로 바꾸는 것은 상당히 무겁고 어려운 작업임에도 불구하고) 소스 코드에 액세스할 수는 없습니다. CoppeliaSim 코드 - 따라서 다시 컴파일할 수 없습니다(따라서 코드에서 시드할 수 없습니다).

답변1

고정된 시계를 사용해야 하는 것처럼 들립니다. 시스템 시계(벽시계) 대신 CPU에서 값을 가져오는 단조 시계에서 실행되는 코드를 사용하고 있기를 바랍니다.

이를 테스트하는 매우 간단한 방법은 다음 단계를 수행하는 bash 스크립트를 작성하는 것입니다.

  1. 시스템 시계 설정
  2. 소프트웨어 실행

몇 번 시도해보고 어떻게 되는지 살펴보세요. 스크립트를 실행할 때마다 결과를 일치시킬 수 있다면 실행 가능하고 매우 간단한 솔루션을 얻을 수 있습니다. 어떤 이유로 개발자가 밀리초 단위의 값으로 구축하기로 결정했다면 운이 좋지 않을 수도 있습니다.

스크립트는 다음과 같습니다.

#! /bin/bash
date --set="8 FEB 2021 10:00:00"
./your-program-here

관련 정보