시뮬레이션 윤리: 실제 고통을 이용하지 않고 Trauma-Informed 기능을 테스트하는 방법

발행: (2025년 12월 12일 오후 11:00 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

개요

​CrisisCore 빌드 로그의 일부 – 테스트 전략이 도덕적 질문이 될 때

테스트 데이터는 어디서 오나요?

대부분의 애플리케이션에서는 아무도 신경 쓰지 않습니다. 모의 사용자. 가짜 주소. 무작위 문자열.

통증 추적기에서는 어떨까요? 테스트 데이터는 고통에 대한 설명입니다. 그리고 이것은 프로젝트를 시작했을 때 예상치 못한 질문들을 제기합니다:

  • 현실적인 위기 시나리오를 생성하는 것이 윤리적인가?
  • 자살 충동에 대한 테스트 케이스를 누가 작성할 수 있나요?
  • 팀을 재트라우마 없이 트라우마‑인식 시스템을 어떻게 테스트할 수 있나요?

이 게시물은 그 질문들을 솔직히 고민해 본 시도입니다.

불편한 현실

통증 추적기를 제대로 테스트하려면 다음과 같은 테스트 데이터가 필요합니다:

const sampleMoodEntries: MoodEntry[] = [
  {
    mood: 2,
    energy: 1,
    anxiety: 9,
    context: 'Severe pain flare-up, emergency room visit',
    triggers: ['acute pain', 'medical emergency', 'work absence'],
    notes: 'Overwhelmed by sudden pain onset. Anxious about work and recovery.',
  },
  // ...
];

이는 누군가의 최악의 하루를 TypeScript로 인코딩한 것입니다. 테스트 데이터가 현실적일수록 위기 감지가 더 잘 작동합니다. 하지만 현실성에는 대가가 있습니다. 개발자가 해당 픽스처 파일을 열 때마다 고통에 대한 설명을 읽게 됩니다.

테스트 엄격함트라우마 착취 사이의 경계는 어디인가요?

원칙 1: 합성 데이터는 허구이어야 하며, 추출된 것이 아니어야 함

추출 문제

실제 통증 일지는 구체적이고 식별 가능한 세부 정보를 포함합니다:

  • “세 번째 병가 후에 상사가 나에게 소리를 질렀다”
  • “새 약이 딸의 리사이틀 중에 구토를 일으켰다”
  • “아내가 떠날까봐 두렵다”

“익명화”된 경우에도 이는 누군가의 실제 경험을 그대로 담고 있습니다. 테스트에 사용한다는 것은:

  • 개발자가 사적인 순간을 반복해서 읽는다
  • 패턴으로부터 데이터를 재구성할 수 있다
  • 그 사람은 자신의 최악의 날이 테스트 픽스처가 되는 것에 동의하지 않았다

합성 접근법

대신에, 허구이지만 그럴듯한 데이터를 생성합니다:

/**
 * SYNTHETIC DATA GENERATION
 *
 * These entries are FICTIONAL. They represent patterns, not people.
 * No real person's pain journal was used to create these fixtures.
 */
export function generateSyntheticMoodEntry(
  scenario: 'crisis' | 'recovery' | 'stable' | 'declining'
): MoodEntry {
  const patterns = {
    crisis: {
      moodRange: [1, 3],
      anxietyRange: [7, 10],
      contextTemplates: [
        'Unexpected pain flare',
        'Sleep disruption for multiple days',
        'Medication change with difficult adjustment',
      ],
      triggerPool: ['pain spike', 'sleep loss', 'isolation', 'work stress'],
    },
    // ... other scenarios
  };

  const pattern = patterns[scenario];

  return {
    id: generateId(),
    timestamp: generateTimestamp(),
    mood: randomInRange(pattern.moodRange),
    anxiety: randomInRange(pattern.anxietyRange),
    context: randomChoice(pattern.contextTemplates),
    triggers: randomSubset(pattern.triggerPool, 2, 4),
    // Notes are generic, never mimicking real journal entries
    notes: generateGenericNote(scenario),
  };
}

데이터는 패턴을 테스트하기에 충분히 현실적이지만, 실제 사람의 경험을 나타내지는 않습니다.

원칙 2: 실제 경험을 바탕으로 한 동의 우선 테스트

합성 데이터는 코드를 테스트합니다. 하지만 그 코드가 실제 사람들에게 도움이 될까요? 이를 위해서는 인간 테스터가 필요합니다

Back to Blog

관련 글

더 보기 »