저는 소프트웨어 엔지니어가 아닙니다. 저는 지구과학 분야의 박사 과정 학생입니다.
거의 2 년 전에 저는 과학 소프트웨어를 프로그래밍하기 시작했습니다. CI (Continuous Integration)를 사용한 적이 없었습니다. 주로 처음에는 그것이 존재하는지 몰랐고이 소프트웨어를 작업하는 유일한 사람이었습니다.
이제 소프트웨어의 기반이 실행되고 있기 때문에 다른 사람들이 소프트웨어에 관심을 갖기 시작하고 소프트웨어에 기여하기를 원합니다. 계획은 다른 대학의 다른 사람들이 핵심 소프트웨어에 추가 기능을 구현하는 것입니다. (버그가 생길 우려가 있습니다). 또한 소프트웨어가 상당히 복잡해져 테스트하기가 점점 어려워졌으며 계속해서 작업 할 계획입니다.
이 두 가지 이유 때문에 CI 사용에 대해 점점 더 생각하고 있습니다. 소프트웨어 엔지니어 교육을받은 적이없고 주변 사람들이 CI에 대해 들어 본 적이 없으며 (우리는 과학자, 프로그래머는 없음) 프로젝트를 시작하기가 어렵다는 것을 알게되었습니다.
조언을 얻고 싶은 몇 가지 질문이 있습니다.
먼저 소프트웨어 작동 방식에 대한 간단한 설명 :
소프트웨어는 모든 필수 설정이 포함 된 하나의 .xml 파일로 제어됩니다. 입력 인수로 .xml 파일의 경로를 전달하여 소프트웨어를 시작하면 실행되고 결과가있는 몇 개의 파일이 작성됩니다. 한 번의 실행은 ~ 30 초가 걸릴 수 있습니다.
과학적인 소프트웨어입니다. 거의 모든 함수에는 여러 입력 매개 변수가 있으며 그 유형은 대부분 복잡한 클래스입니다. 이 클래스의 인스턴스를 만드는 데 사용되는 큰 카탈로그가있는 여러 .txt 파일이 있습니다.
이제 내 질문에 봅시다 :
단위 테스트, 통합 테스트, 엔드 투 엔드 테스트? : 내 소프트웨어는 현재 수백 개의 함수와 ~ 80 개의 클래스를 가진 약 30.000 줄의 코드입니다. 이미 구현 된 수백 가지 함수에 대한 단위 테스트 작성을 시작하는 것은 다소 이상합니다. 그래서 나는 단순히 테스트 케이스를 만드는 것에 대해 생각했습니다. 10-20 개의 서로 다른 .xml 파일을 준비하고 소프트웨어를 실행하십시오. 이것이 엔드-투-엔드 테스트라고하는 것 같아요? 나는 종종 당신이 이것을해서는 안된다는 것을 읽었지만 이미 작동중인 소프트웨어가 있다면 시작으로 괜찮을까요? 또는 이미 작동중인 소프트웨어에 CI를 추가하려고 시도하는 것은 어리석은 생각입니까?
함수 매개 변수를 작성하기 어려운 경우 단위 테스트를 어떻게 작성합니까? 내가 함수가 있다고 가정
double fun(vector<Class_A> a, vector<Class_B>)
일반적으로, 나는 타입의 객체 생성하기 위해 여러 텍스트 파일에서 첫 번째 읽을 필요Class_A
와Class_B
.Class_A create_dummy_object()
텍스트 파일을 읽지 않고 같은 더미 함수를 만드는 것에 대해 생각했습니다 . 나는 또한 일종의 직렬화 구현에 대해 생각했다 . (클래스 객체의 생성은 여러 텍스트 파일에만 의존하기 때문에 테스트를 계획하지 않습니다)결과가 매우 다양한 경우 테스트를 작성하는 방법은 무엇입니까? 내 소프트웨어는 큰 몬테카를로 시뮬레이션을 사용하고 반복적으로 작동합니다. 일반적으로 반복 횟수는 ~ 1000 회이며 매 반복마다 몬테카를로 시뮬레이션을 기반으로 ~ 500-20.000 개의 객체 인스턴스를 생성합니다. 한 번의 반복으로 인해 하나의 결과 만 조금 다른 경우에는 다음에 나오는 전체 반복이 완전히 다릅니다. 이 상황을 어떻게 처리합니까? 최종 결과가 매우 다양하기 때문에 이것이 종단 간 테스트에 비해 큰 포인트라고 생각합니다.
CI에 대한 다른 조언은 높이 평가됩니다.