https://pvs-studio.com/en/ “PVS‑Studio is a static analyzer on guard of code quality, security (SAST), and code safety” 홈페이지에 적혀있는 문구 그대로 보면 코드 정적 분석 툴로 코드 퀄리티와 보안을 위해 사용할 수 있는 툴입니다.
C, C++과 Java 코드를 분석하는 툴로 다른 정적 분석 툴로는 Cppcheck, Clang Static Analyzer, SonarQube 등이 있습니다. PVS Studio는 클라우드 제품은 없어보이고 설치형 프로그램으로 CI에 붙여서 사용하거나 코드 에디터에 설정하고 사용할 수 있습니다.
정적 코드 분석 툴로 TS(TypeScript)나 자바스크립트 앱을 제작할때 사용하는 TSLint, ESLint와 비슷하다고 볼 수 있겠네요. 실제로 빌드 및 프로그램이 실행할 때에 문제가 없을 수는 있지만 정적 코드 분석 결과 문제가 있을 요소는 미리 수정하는게 좋겠죠.
포인터 비교가 잘못된 코드가 있음. 포인터가 아닌 다른 것을 비교해야한다는 warning으로 이해할 수 있습니다.
위 처럼 Warning에 따라 수정하고 코드를 개선할 수 있는 서비스로 이해해볼 수 있겠습니다.
https://stackshare.io/stackups/pvs-studio-vs-sonarqube stackshare라는 서비스의 장단점 비교 서비스를 보았을 때 SonarQube와 인지도 차이가 크지만 PVS Studio도 C++ 개발하거나 게임 개발에 사용해볼만한 프로그램으로 사용되긴하는 것 같습니다. 😃 (SonarQube가 인지도가 높아 PVS Studio랑 어떤 차이가 있는지 확인차 살펴보았는데 PVS Studio는 인지도가 역시 낮았네요)
게임 개발을 하면서 코드 분석툴은 어떤 것들이 있고 그중에 PVS Studio는 뭘까 싶어 한번 찾아보게되었네요. 기본적으로 PVS Studio는 정적 코드 분석 툴로 분석한 코드는 개발자들이 확인하고 개선해나가야하는 중간 도우미 같은 친구이긴합니다. Warning을 다 해결한다고 다 좋은 코드는 아니지만 안정성, 품질을 신경쓰고 있는 코드로 볼 수는 있겠다는 생각이듭니다.
하지만 태스크 스트림을 일반 스트림으로 변환하면 해당 일반 스트림에 상위 스트림을 다시 지정할 수 있습니다.
💡 태스크 스트림이 다른 스트림과 다른점 💡 P4V나 가이드 문서를 확인해보니 태스크 스트림만 unload 할 수 있네요. mainline, development, release 스트림은 삭제만 가능하고 Virtual 스트림은 다른 유형의 스트림이니 제외하고 나면 태스크 스트림만 가능합니다. 스트림이 많을수록 서버 성능에 영향이 있을 수 있으니 사용하지 않는 스트림의 정보를 unload하고 데이터를 로딩하지 않는 형태로 서버 성능을 관리할 수 있는 형태인 것 같네요. 추가로 Unload할 수 있는 것은 워크스페이스인데 퍼포스 서버 쪽에서 관리하는 데이터를 unload해서 서버 성능 관리를 좀 해야하나 봅니다. (저희도 workspace, stream 전체 현황 검토해서 정리가 필요하겠네요 ㅎㅎ 😂)
정리
정리해보면, 태스크 스트림은 작은 작업, 버그 수정 등을 위한 피쳐 브랜치로 사용할 수 있는 스트림이라고 할 수 있네요. 다른 스트림들에 비해 스위칭 속도가 더 빠르거나 그런 것은 아닌 것 같지만 어떻게 스트림을 생성했냐에 따라 다를 수 있을 것 같습니다. (스트림 생성시 부모 스트림의 데이터를 그대로 사용하는 설정 등..?)
가이드 문서와 다른 메뉴얼들만 보았을때는 퍼포스 서버 성능 관리를 위한 기능 같아서 작업자들 입장에서 어떤 것들이 좋은지는 더 살펴봐야겠네요. 실제로 스트림간 스위치 성능이 다른지 확인해보고 추가 내용으로 포스트해보겠습니다.
→ ✨ 스크립트쪽 input 값에 .decode(‘cp949’).encode(‘utf-8’) 해서 강제로 utf8로 변환해주었음. 해결!
Client ‘test’ unknown - use ‘client’ command to create it. 에러
실제로 P4D(퍼포스 서버)가 동작하는 곳에 트리거 설정 후 테스트 해보았더니 Client 'test' unknown - use 'client' command to create it. 라는 에러가 발생함
대충봐도 client가 설정되지 않았으니 client 즉 workspace를 설정해야 CL을 수정할 수 있다는 것으로 보입니다.
→ ✨ P4D 동작하는 환경에 client 설정 후 트리거 동작. 해결! → 추가로 P4D 동작하는 환경에 유저 권한도 admin 또는 super 권한을 설정해줘야합니다.
마무리
이번에 트리거 설정하면서 P4D 환경에 설정할 것들도 많고, 스크립트에서도 신경써야할 것이 많은 점을 배웠네요. 사실 파일 검사나 Description 검사정도만 한다면 권한 문제는 없었을텐데 다른 사람이 작업한 설명을 수정하는 것이니 권한이 필요한 트리거 작업이었네요. 실제로 설정해보시려면 스크립트 구성 ~ 트리거 설정까지 따라 진행해보시면 될 것 같습니다. 어렵거나 모호한 부분이 있다면 편하게 질문해주세요! 💪
리뷰 페이지 상단에는 브랜치, 리뷰자 유무, 검토 필요/수정 필요/승인됨 등 리뷰 현황을 필터링할 수 있는 기능이 있습니다.
리뷰 진행 상황(열림/닫힘)에 따라 볼 수 있기도 하네요.
대부분의 기능이 Github과 비슷하긴 하지만 열림/닫힘으로 표현되어있으니 리뷰가 완료되서 머지가 된 것인지 알려면 닫힘 탭으로 가서 “승인됨” 상태로 필터링해야 “이건 머지가 되지 않았을까?” 알 수 있겠네요. 사실 정말 머지되었는지 알기는 어렵습니다. 승인만 되었지 실제 작업자가 머지 안했을 수 있으니까요.
참고: Github Pull requests 화면
실제 Swarm 서비스 화면
Swarm workshop 화면과 차이가 크지만 다른 소스 관리 서비스의 코드리뷰 기능과 비슷합니다. 다만 회사에서 사용할때 아쉬웠던 점은 코드에 맞춰 하이라이팅되는 것이 부족하다고 느꼈었네요.