개요1.
기존에 임시로 구성한 SonarQube 환경에서 특정 프로젝트의 코드를 검사했다.
(
https://blog.naver.com/genycho/222934463515
)
단순히 검사를 하고 관련 링크를 공유하는 것에서 더 나아가,
이 검사 결과를 미리 정리하고, 개발자 분들과 공유하는 시간을 가졌다.
개발자들에게 공유한 기대/목표 효과는,
<- SonarQube나 코드정적검사 개요 소개할 겸,
<- XXX Product 코드의 이슈 살펴 볼 겸
<- 향후 코드리뷰(오프라인)하는 걸 맛보기?
로 소개했다.
개발자들의 코드리뷰 문화는,
. 종종 개발자들 스스로 다양한 방식으로 진행하기도 하고
. SonarQube 등 코드 인스펙션 도구를 개발 단계에 익숙하게 사용하고 있는 경우에는
이런 코드 인스펙션 도구를 돌려도 나오는 이슈가 그렇게 크리티컬한 내용들은 없는 경우도 많은데,
운이 좋은건지 나쁜건지 우리는 위 둘 다 상황이 아니었다.
정기적인 코드리뷰 세션을 우선은 SonarQube가 지적하는 건들을 우선으로
개발팀, 자들간에 논의하는 시간으로 시작해도 좋지 않을까 하는 생각이 들었다.
본문 go~
개요2
- XXX 제품을 구성하는 2개 구성요소 FE / BE에 대해
- 3가지 유형의 룰 위반 유형으로 그루핑을 한 후
- 심각도가 높고, 건수가 많은 룰을 순서대로
(a)룰 자체에 대한 설명
과 (b)
수정해야 하는 이유
,
(c)실제 코드
, (d)
수정 방법
을 설명했다.
[ SonarQube의 정적검사 이슈 유형 ]
- Bug : 코드결함
- Code Smells : 코드 리팩토링 고려 대상
- Security Hotspots : 잠재적 보안위험
[ Technical Dept (기술 부채(빚)) ]
: 기술 부채(technical debt, design debt[1], code debt)는 현 시점에서 더 오래 소요될 수 있는 더 나은 접근방식을 사용하는 대신 쉬운(제한된) 솔루션을 채택함으로써 발생되는 추가적인 재작업의 비용을 반영하는 소프트웨어 개발의 한 관점이다 (위키백과)
(* SonarQube의 여러 지표에 대한 설명
: [
https://sonarqubekr.atlassian.net/wiki/spaces/SON/pages/395311](https://sonarqubekr.atlassian.net/wiki/spaces/SON/pages/395311))
[ 심각도(Severity) ]
- Blocker : 운영/보안 리스크(risk): 이 이슈는 실제 환경에서 운용되는 어플리케이션 전체를 불안정하게 만들 수 있습니다.
예: 가비지 컬렉터 호출, 소켓 닫지 않음 등
- Critical : 운영 보안 리스크(risk): 이 이슈는 실제 환경에서 운용되는 어플리케이션 전체의 무결성(integrity)에 영향을 미칠 수 있는 예상치 못한 행동으로 이어질 수 있습니다.
예: NullPointerException, 잘못 처리한 익셉션, 단위 테스트 부족 등
- Major : 이 이슈는 생산성(productivity)에 주요한(substantial) 영향을 미칠 수 있습니다.
예: 너무 복잡한 메소드, 패키지 사이클 등
- Minor : 이 이슈는 생산성(productivity)에 잠재적이거나 미미한 영향을 미칠 수 있습니다.
예: 네이밍 컨벤션, finalizer가 상위 클래스의 finalizer를 호출하기만 하고 아무 동작도 하지 않는 등
- Info : 이 이슈는 알려지지 않았거나 잘 정의되지 않은 보안 리스크 혹은 생산성에 대한 영향을 의미합니다.
본문.
[ **xxx_be ]
- java, springboot : java, html, xml
SonarQube 링크
Bug / major 보기(15건)
( java )
- "NullPointerException" could be thrown; {xxx} is nullable here.
: boardDto가 null인 경우 로그 찍다가 NullPointerException이 발생하게 되는 코드
-코드 리뷰-
: 마찬가지로 pinInfo가 null인 경우 로그 찍다가 에러 발생
-코드 리뷰-
: aiEngineDto가 null일 때(도) 타게 되는 else if문 안에서 .getStatus를 시도하여 NullPointerException이 발생하게 되는 코드
-코드 리뷰-
Security Hotspots / Medium - 3개
- Make sure that using this pseudorandom number generator is safe here.
← “java.lang.Math.random()” 등을 기반으로 쓸 때, 해커가 다음 랜덤 값을 알아낼 수 있는 취약점이 있다. 크리티컬한 영역(인증,암호화 등)에 쓰고 있는 건 아닌지 검토 필요
← “"java.security.SecureRandom”” 를 대신 사용
using pseudorandom number generators (PRNGs) is security-sensitive. For example, it has led in the past to the following vulnerabilities:
- [CVE-2013-6386](
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-6386)
- [CVE-2006-3419](
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-3419)
- [CVE-2008-4102](
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4102)
When software generates predictable values in a context requiring unpredictability, it may be possible for an attacker to guess the next value that will be generated, and use this guess to impersonate another user or access sensitive information.
-코드 리뷰-
{"title":"(사례 two) SonarQube 결과를 기반으로 개발팀과 코드리뷰 세션 갖기","source":"https://blog.naver.com/genycho/222947683490","blogName":"길에서찾는..","domainIdOrBlogId":"genycho","nicknameOrBlogId":"구랭구랭이","logNo":222947683490,"smartEditorVersion":4,"meDisplay":true,"lineDisplay":true,"outsideDisplay":false,"cafeDisplay":true,"blogDisplay":true}