-
MGP 과제를 하며 느낀 점 - 테스트의 중요성project 2022. 6. 11. 16:51
먼저, 과제 내용은 CUDA 프로그래밍을 통해 VGG 네트워크 (DNN) 을 개발하는 것이었다.
과제를 하는 과정에서 느낀 점에 대해 적어보자. 분명 다른 개발 (Spring 등) 을 할 때도 도움이 될 것이다.
1. 관심사를 작게 나누고 그 부분을 완전하게 개발하는 것의 중요성
처음에는 통합 테스트 코드만이 주어졌다. 수십 개의 layer 가 이어진 구조에서, 처음부터 끝까지 통과하는 테스트 코드만으로 개발을 하려니까 막막하고 어려웠다. 각 부분을 테스트하는 코드를 만들고, 테스트에 성공하도록 코드를 짜는 방식으로 개발하였고, 작은 부분에만 집중해서 할 수 있어 훨씬 쉽게 개발할 수 있었다.
2. 테스트 코드의 효율성 - 더 빠르게 정확하게 개발할 수 있는 방법
하나의 메소드 (convolution) 을 방법 1, 2, 3, 4 ... 로 바꾸며 성능을 개선하는 작업이 있었다.
그 부분을 개발하면서 몇백 줄이나 되는 테스트 코드를 짜는게 과연 필요한가? 하고 의문이 들었다.
하지만 시간을 투자해서 정성스럽게 테스트 코드를 짰고 훨씬 효율적으로 빠르게 구현할 수 있었다.
또, 중간에 하나의 메소드를 두 개로 나누는 과정이 있었는데, 이 때에도 각각 테스트 코드를 추가로 짜고 구현하는 것이 더 효율적이었다. 오류가 1번에서 나는지, 2번에서 나는지 확인하지 못하는 상황이 정말 막막했고, 그걸 확정지은 후엔 더 확실하게 집중할 수 있었다. 몇 시간을 들여도 정답이 보이지 않았는데, 테스트를 나누니까 오류가 보였다.
3. 하드웨어의 특성을 고려해서 개발하는 것
이 경우엔 GPU 의 특성을, C++ 은 CPU 특성을 고려해서 개발해야 했다.
자바의 경우엔 JVM 이 아닐까?
<느낀 점 정리>
테스트 코드 중요하긴 한데, 귀찮은데 왜 짜야 하지? 하고 의심을 가지고 있었다.
이 과제를 통해 의심이 조금 풀렸고, 테스트 코드를 신경써서 개발함으로써 더 빠르고 정확하게 개발할 수 있었다.
더 나아가, 개발 방법론에 대해 적극적으로 공부하고, 그러한 것을 적용하는 것이 개발을 편하게 더 잘 할 수 있을거란 생각이 들었다.
'project' 카테고리의 다른 글
Git 과 Git-gui 정리 글 (0) 2022.09.18 cs 수업 과제 정리 (0) 2022.06.17 광고 프로젝트 - 개발 일기 (0) 2022.06.01 SnsChats - 개발 일기 (0) 2022.05.25 Docker 시작 (0) 2022.05.22