시뮬레이션 윤리: 실제 고통을 이용하지 않고 Trauma-Informed 기능을 테스트하는 방법
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: 실제 경험을 바탕으로 한 동의 우선 테스트
합성 데이터는 코드를 테스트합니다. 하지만 그 코드가 실제 사람들에게 도움이 될까요? 이를 위해서는 인간 테스터가 필요합니다