56 lines
4.1 KiB
Markdown
56 lines
4.1 KiB
Markdown
# 개발과 검증 기준
|
|
|
|
## 소유권과 의존성
|
|
|
|
- 공개 header는 단독 include가 가능해야 하며 `src`의 private header와
|
|
MKL·TBB·HDF5·Win32 타입을 노출하지 않는다. Concrete adapter 선언과 vendor resource는 구분한다.
|
|
- Domain 정의·DOF와 equation·local 응답·accepted state·backend resource의 소유권을
|
|
섞지 않는다. Non-owning view와 borrowed adapter는 참조 대상의 수명·주소 안정성을 지킨다.
|
|
- 새 procedure는 typed state와 completed outcome을 사용한다. Static state의 미사용 field나
|
|
무타입 buffer로 다른 family를 위장하지 않는다. Element가 equation이나 accepted history를 소유하지 않는다.
|
|
- Expected failure는 `Status`/`Result<T>`로 전달한다. Adapter의 vendor 오류를 정상 빈 값이나
|
|
CLI exit 번호로 직접 흘리지 않는다. 결과 family에 필수 writer가 없으면 실패한다.
|
|
- 병렬 worker는 자기 index의 buffer만 쓴다. 공유 CSR 누적·진단 선택·결과 ordering이
|
|
hash 순서나 worker 완료 시각에 의존하면 위반이다.
|
|
|
|
## 변경 범위와 코드 규약
|
|
|
|
승인된 물리·입력·영속 schema·판정 기준을 구현 편의로 바꾸지 않는다. 필요한 변경이
|
|
이 계약과 충돌하면 근거와 영향을 사용자에게 알린다. 무관한 사용자 변경·기준자료 원본을 보존한다.
|
|
수식·적분·reduction 순서·cache 수명 변경도 수치 변경으로 분류한다.
|
|
|
|
C++17 이상, `.h`와 repository 경로 기반 include guard, self-contained header를 사용한다.
|
|
파일·namespace는 snake_case, 타입·함수는 PascalCase, 변수는 snake_case,
|
|
class member는 trailing `_`, format은 Google 기반 2-space다.
|
|
생산 target의 MSVC `/W4 /WX`를 유지하고 외부 GoogleTest에 제품 warning 정책을 강제하지 않는다.
|
|
단독 소유 resource는 RAII로 정리하고 dense allocation의 크기 곱 overflow와 vendor integer
|
|
변환을 할당·호출 전에 검사한다.
|
|
|
|
Source 변경은 직접 MSVC와 CMake의 명시적 source 목록에 함께 반영한다.
|
|
제품·검사 본문을 빌드 경로별로 복제하지 않는다. `/arch:AVX2`는 전용 Hex8 source에만 적용한다.
|
|
개인 설치 경로는 환경변수나 ignored local 설정으로 주입하고 추적 파일에 고정하지 않는다.
|
|
승인된 local dependency를 사용하며 자동 다운로드와 외부 source 수정을 추가하지 않는다.
|
|
직접 MSBuild의 선행 단계로 CMake·Ninja·Doxygen을 숨겨 호출하지 않는다.
|
|
|
|
## 검증 완료의 조건
|
|
|
|
문서만 바꾸면 source·경로·원문 보존을 정적으로 검토하고 build/test를 실행하지 않는다.
|
|
동작 변경은 영향받은 검사부터 수행한다. 솔버 기능 완료에는 구성된 전체 MSVC x64 Debug
|
|
build/CTest와 필수 reference 비교가 필요하다. 수식 변경에는 독립 수치 검토와 필요한
|
|
analytical/invariant·물리 검증을 함께 수행한다.
|
|
|
|
직접 MSVC와 CMake의 compiler·구성·CRT·ISA·source·link·DLL과 전체 검사 등록 identity를
|
|
대조한다. 실제 실행한 identity와 제외·skip·중단을 기록하며 discovery 0건을 통과로 세지 않는다.
|
|
Release 시간 측정이나 선택 검사 통과가 전체 Debug 검증을 대체하지 않는다.
|
|
C++ unit·integration·reference, 별도 Python suite, 실제 solver와 외부 비교 결과를 구분한다.
|
|
과거 revision의 통과를 현재 source의 미실행 범위에 승계하지 않는다.
|
|
|
|
Reference 비교는 hash가 확인된 새 작업 복사본에서만 수행한다. `reference/temp`를
|
|
검증에 사용하거나 정식 자료로 승격하지 않는다. 정식 자료 부재는 미완료다.
|
|
검사를 삭제하려면 동등한 대체 identity·실패 경계·수치 조건 또는 폐기 구조 전용임을
|
|
입증해야 하며 자료 누락과 실행 유예만으로 삭제하지 않는다.
|
|
|
|
사용자 지시에 따른 한정 실행은 선택·제외 identity와 이유를 기록한 해당 작업의 근거다.
|
|
그 한정 실행을 이후 일반 기능의 검증 의무 축소로 해석하지 않는다.
|
|
Commit·branch·merge·release는 해당 요청 범위를 따르며 문서 갱신만으로 자동 수행하지 않는다.
|