Successfully reported this slideshow.
Your SlideShare is downloading. ×

[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 30 Ad
Advertisement

More Related Content

More from PgDay.Seoul (20)

Advertisement

Recently uploaded (20)

[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱

  1. 1. POSTGRES 테스트 코드로 기여하기 발표자: 이동욱 이메일: sh95119@gmail.com PGDay.Seoul 2022 마지막 업데이트: 2022.10.24
  2. 2. 자기소개 현재 ’씨알에스 큐브’ 회사에서 재직중 GSoC’22 Completion Certificate of Contributor. 오픈소스 기여에 많은 관심을 가지고 있습니다. 이동욱 POSTGRES 테스트 코드로 기여하기
  3. 3. 발표 내용 테스트 코드를 작성하면 무엇이 좋은지에 대해서 알아본다. 테스트 코드를 작성하는 방법과 테스트 코드의 종류에 대해서 알아본다. 작성한 테스트 코드를 제출하여 실제 소스코드에 반영하는 절차에 대해서 알아본다. 이동욱 POSTGRES 테스트 코드로 기여하기
  4. 4. 1. 기여를 시작하는데 테스트 코드가 좋은 이유 이동욱 POSTGRES 테스트 코드로 기여하기
  5. 5. 1. 기여를 시작하는데 테스트 코드가 좋은 이유 테스트 코드를 읽고 분석함으로써 프로그램의 기본 동작에 대해서 쉽게 익힐 수 있다. 코드를 분석하는 시나리오 및 방향성을 잡아준다. 코드를 작성함으로써 기여를 시도해 볼 수 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  6. 6. 2. POSTGRES 프로젝트 구조 - contrib POSTGRES 익스텐션이 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  7. 7. 2. POSTGRES 프로젝트 구조 - src/bin POSTGRES 도구들이 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  8. 8. 2. POSTGRES 프로젝트 구조 - src/backend 메인 소스코드가 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  9. 9. 3. PG 테스트 코드 종류 테스트 코드 종류 1. SQL 테스트 2. TAP 테스트 3. SPEC 테스트 SQL 테스트는 SQL 문을 실행해서 나온 결과를 비교하는 테스트이다. TAP 테스트는 Perl 의 Test::More 모듈을 이용하여 하는 테스트이다. SPEC 테스트는 여러 세션을 이용하여 수행하는 테스트이다. 이동욱 POSTGRES 테스트 코드로 기여하기
  10. 10. 3. PG 테스트 코드 종류 - SQL 테스트 터미널에 ’make check’ 를 입력하면 sql 디렉터리 안에 있는 *.sql 파일이 실행된다. 이동욱 POSTGRES 테스트 코드로 기여하기
  11. 11. 3. PG 테스트 코드 종류 - SQL 테스트 pg_stat_statements.sql CREATE EXTENSION pg_stat_statements; -- -- simple and compound statements -- SET pg_stat_statements.track_utility = FALSE; SET pg_stat_statements.track_planning = TRUE; SELECT pg_stat_statements_reset(); SELECT 1 AS "int"; SELECT ’hello’ -- multiline AS "text"; ... 이동욱 POSTGRES 테스트 코드로 기여하기
  12. 12. 3. PG 테스트 코드 종류 - SQL 테스트 pg_stat_statements.out ... SELECT pg_stat_statements_reset(); pg_stat_statements_reset -------------------------- (1 row) SELECT 1 AS "int"; int ----- 1 (1 row) SELECT ’hello’ -- multiline AS "text"; text 이동욱 POSTGRES 테스트 코드로 기여하기
  13. 13. 3. PG 테스트 코드 종류 - TAP 테스트 TAP 테스트는 Perl로 작성되어 있으며 t 디렉터리 안에 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  14. 14. 3. 테스트 코드의 종류 - TAP 테스트 pg_prewarm/t/001_basic.pl ... use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; use Test::More; ... $node->safe_psql("postgres", "CREATE EXTENSION pg_prewarm;n" . "CREATE TABLE test(c1 int);n" . "INSERT INTO test SELECT generate_series(1, 100);"); # test read mode my $result = $node->safe_psql("postgres", "SELECT pg_prewarm(’test’, ’read’);"); like($result, qr/^[1-9][0-9]*$/, ’read mode succeeded’); 이동욱 POSTGRES 테스트 코드로 기여하기
  15. 15. 3. 테스트 코드의 종류 - TAP 테스트 이동욱 POSTGRES 테스트 코드로 기여하기
  16. 16. 3. PG 테스트 코드 종류 - SPEC 테스트 spec 테스트는 여러 세션간의 동작을 테스트하며 specs 디렉터리 안에 위 치한다. 이동욱 POSTGRES 테스트 코드로 기여하기
  17. 17. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec setup { CREATE TABLE multixact_conflict (a int PRIMARY KEY, b int); INSERT INTO multixact_conflict VALUES (1, 2), (3, 4); } teardown { DROP TABLE multixact_conflict; } ... 이동욱 POSTGRES 테스트 코드로 기여하기
  18. 18. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec session s1 step s1_begin { BEGIN; } step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; } step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; } step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; } step s1_updatea { UPDATE multixact_conflict SET a = 10 WHERE a = 1; } step s1_updateb { UPDATE multixact_conflict SET b = 11 WHERE b = 4; } step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s; } step s1_commit { COMMIT; } session s2 step s2_rowlocks { SELECT locked_row, multi, modes FROM pgrowlocks(’multixact_conf lict’); } 이동욱 POSTGRES 테스트 코드로 기여하기
  19. 19. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec permutation s1_begin s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_updateb s2_rowlocks s1_commit # test multixact cases using savepoints permutation s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit 이동욱 POSTGRES 테스트 코드로 기여하기
  20. 20. 4. 테스트 코드 작성이 처음이라면? 커버리지 사이트에서 테스트 커버리지가 적은 모듈을 선택해 테스트 코 드를 작성해보는 것을 추천 이동욱 POSTGRES 테스트 코드로 기여하기
  21. 21. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  22. 22. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  23. 23. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  24. 24. 5. 코드를 제출하는 방법 패치의 제목과 어떤 주제인지 토픽을 적는다 그리고 마지막에 메일을 보 냈을 때 생성된 쓰레드 ID를 기입하면 된다. 이동욱 POSTGRES 테스트 코드로 기여하기
  25. 25. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  26. 26. 6. 테스트 코드를 작성하면서 배운 것들 디버깅 능력 및 도구에 대해서 배울 수 있다. 내부 구현에 대한 이해를 할 수 있다. 몰랐던 기능들 및 익스텐션에 대해서 알 수 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  27. 27. 7. 한 걸음 더 나아가기 PostgreSQL Person of the Week(https://postgresql.life/) 이동욱 POSTGRES 테스트 코드로 기여하기
  28. 28. 8. 한 걸음 더 나아가기 이동욱 POSTGRES 테스트 코드로 기여하기
  29. 29. 참고하면 좋을 링크 How (and why) to become a PostgreSQL contributor How to create, test and debug an extension written in C for Post- greSQL POSTGRES 빌드 및 디버깅하는 방법 What is PostgreSQL commitfest and how to contribute Reviewing a Patch 이동욱 POSTGRES 테스트 코드로 기여하기
  30. 30. 이동욱 POSTGRES 테스트 코드로 기여하기

×