나는 고전적인 소프트웨어 엔지니어링 프로젝트 (MVC), 사용자 GUI, 데이터베이스, 중간 계층의 비즈니스 로직 등 MVC와 같은 단위 테스트에 대해 약간의 경험을 가지고 있습니다. 저는 C #에서 과학 컴퓨팅 라이브러리를 작성하고 있습니다 (예, C #이 너무 느리다는 것을 알고 C를 사용하고 바퀴를 재발 명하지 마십시오. 그러나 C #의 교수진에서 과학 계산을하는 많은 사람들이 있습니다. 필요합니다). 소프트웨어 개발 산업 측면에서 볼 때 소규모 프로젝트입니다. 나는 주로 혼자서 작성하고 있기 때문에 때때로 몇몇 동료의 도움을 받아 작성하기 때문입니다. 또한, 나는 그것을 지불하지 않으며, 가장 중요한 것은 학업 프로젝트입니다. 오픈 소스를 계획하고 있기 때문에 언젠가는 전문적인 품질을 기대합니다.
어쨌든, 프로젝트는 커지고 있고 (한 사람의 프로젝트에는 큰 18,000 줄의 코드), 내 손에서 벗어나고 있습니다. 소스 제어를 위해 git을 사용하고 있는데 꽤 괜찮은 것 같지만 구식과 같은 테스트를하고 있습니다. 시스템의 큰 부분을 테스트하는 전체 콘솔 응용 프로그램을 작성하는 것은 주로 방법을 모릅니다. 이 시나리오에서 단위 테스트를 수행해야하지만 그렇게해야한다고 생각합니다. 문제는 라이브러리에 주로 알고리즘, 예를 들어 그래프 알고리즘, 분류 자, 수치 솔버, 랜덤 분포 등이 포함되어 있다는 것입니다. 각 알고리즘에 대해 작은 테스트 사례를 지정하는 방법을 모르겠습니다. 확률론 나는 정확성을 검증하는 방법을 모른다. 예를 들어 분류의 경우 정밀도 및 회수와 같은 측정 항목이 있습니다. 그러나 이러한 메트릭은 단일 알고리즘을 판단하는 것보다 두 알고리즘을 비교하는 것이 좋습니다. 그렇다면 여기서 정확성을 어떻게 정의 할 수 있습니까?
마지막으로 성능 문제도 있습니다. 나는 완전히 다른 테스트 세트를 알고 있지만 성능은 사용자 만족도 또는 다른 소프트웨어 엔지니어링 메트릭이 아니라 과학 도구의 중요한 기능 중 하나입니다.
내 가장 큰 문제 중 하나는 데이터 구조입니다. kd-tree에 올 수있는 유일한 테스트는 스트레스 테스트입니다. 많은 임의의 벡터를 삽입하고 많은 임의의 쿼리를 수행하고 순진 선형 검색과 비교하십시오. 성능도 동일합니다. 그리고 수치 최적화 도구를 사용하면 테스트 할 수있는 벤치 마크 기능이 있지만 스트레스 테스트입니다. 나는 이러한 테스트가 단위 테스트로 분류 될 수 있다고 생각하지 않으며, 가장 중요한 것은 대부분 무겁기 때문에 계속 실행됩니다. 그러나 나는 또한 이러한 테스트를 수행해야한다고 생각합니다. 두 요소를 삽입하고 루트를 팝 할 수 없으며 예를 들어 0-1-n 경우에 작동합니다.
그렇다면 이러한 종류의 소프트웨어에 대한 (단위) 테스트 방법은 무엇입니까? 그리고 코드 빌드 커밋 통합주기에 대한 단위 테스트와 무거운 테스트를 어떻게 구성합니까?