SLAM 엔지니어는 여러 알고리즘을 사용하여 SLAM 시스템을 만든다
TDD
- Test Driven Development / Test Driven Design (테스트 주도 개발, 디자인)
- 개발을 하기 전부터 테스트를 먼저 작성한다
- 그러면 코드, 아키텍서를 디자인 하는 방식이 바뀌게 된다
TDD cycle

1. 실패하는 테스트 작성 (유저들이 어떤 형태로 feature detector를 쓰고 싶을까를 먼저 생각, 클래스?함수?)
2. 테스트가 패스할 수 있는 최소한의 코드 작성 (빈 클래스 생성 등..)
3. refactor
4. 원하는 기능을 다 만들었으면 종료. 아니면 다시 1번으로
실패하는 테스트
- 테스트의 의미 2가지
- 기능상의 테스트
- 테스트 프레임워크(GTest, Catch2)를 통해 기능상의 테스트할 수 있다
- GTest 추천
- 컴파일러 빌드 테스트
테스트가 패스할 수 있는 최소한의 코드
- 빠르게 / 테스트가 요구하는 기능 충족할 수 있다
- 기능 개발에 집중
refactoring
- 클린 코드 만들기
- 가독성을 높이고, 아키텍처 고려
종합하면...
- TDD의 장점은 테스트하기 쉬운 코드를 유도하게 된다. 이를 통해 기능의 모듈화나 인터페이스 분리와 같은 점들을 빠르게 고려해서 짜게 되는 점이 굉장히 큰 이점이다. 테스트하기 어려운 코드는 아무래도 좋은 디자인을 가지지 않기 때문에 고치게 된다.
- 개발을 할 때 테스트는 implemetation test로써 개발의 진척도를 나타내는 지표
- 개발이 완료되었을 때는 regression test로써 코드의 안정성을 나타내는 지표
- 테스트하기 쉬운 코드를 짜야한다는 '디자인 압박' -> 테스트하기 좋은 코드, 사용하기 좋은 코드 작성하게 된다!
- TDD를 통해 개발하면 거의 항상 100%의 coverage를 달성할 수 있다. (모든 코드가 테스트 된다)
GTest
EXPECT_EQ
: 기대하는 결과
- EXPECT_EQ(pts3D.allFinite(), true) : pts3D.allFinite() 결과가 true임을 기대한다. -> pts3D.allFinite() 결과가 true인지 확인
코드
- module 단위로 test하는 것 선호
- module안에 include, test, resources, src, CMakelists.txt가 있다
- test : test 파일 만들어 사용
- resources : test에 필요한 파일들, module을 실행할 때 필요한 것들
- module1/CMakelists.txt
- compile options(target_compile_options)
- compile을 빌드할 때 사용하는 flag로 더욱 안전한 코드를 만들 수 있다.
-Wall
: 컴파일에서 지정하는 warning을 다 띄우도록
-Wextra
: 더 체크하면 좋을 것들
-Wpedantic
: 더 체크하면 좋을 것들
-Werror
: 모든 warning은 error로 해서 빌드 터지도록
TDD Demo
- project을 어떻게 구현하는지 보여준다
- 실사용 예제를 만들고 구현을 하기 때문에 나중에 함수 사용 방법을 알고 싶으면 TEST를 보면 된다
- 결과
- 유저가 원하는대로 코드를 구현했다
- 설계 방법도 알려줬다
- 코드가 설계한대로 돌아간다 -> 안정성 보장
template 사용법
https://github.com/changh95/programmers_slam_project_template/tree/master
- thirdparty의 yaml 파일을 보면 필요한 라이브러리들이 다 있다. 빌드를 자동화해주는 부분이다.
- 터미널에서
./buildDeps.py
를 실행시키면 자동으로 빌드된다
- argument 안하면 릴리즈로 빌드
--d
: 디버그, 릴리즈 둘다 빌드
--system
: thirdparty 폴더에 설치하는 것이 아니고 system에 설치
--password 패스워드입력
: sudo 부분들에서 패스워드 입력을 알아서 해준다
- 나는
./buildDeps.py --d
로 빌드
- cmake_files : cmake의 find_package, include directory 이런 것들을 여기 파일들을 include하면 알아서 다 찾아준다