Git Product home page Git Product logo

code-analyst's Introduction

Code Analyst Project

Build Status License

Code Analyst는 코드 품질에 대한 다양한 지표를 통합적으로 확인할 수 있는 프로그램입니다.

기본적으로 측정되는 코드 규모(프로그램 개수, loc 등)뿐만 아니라 중복도, 복잡도, Inspection 결과(PMD, FindBugs) 등을 확인할 수 있습니다.

※ 현재 Java, JavaScript(Node.js), C# 및 Python을 지원

Build & Installation

Code Analyst를 실행하기 위해서는 Java 1.8이 필요하며, 하나의 통합 jar로 구성되어 있습니다. (참고로 분석 대상 프로젝트의 JDK 버전과는 별도임)

빌드는 다음과 같이 maven을 통해 수행합니다.(사전에 maven 혹은 이클립스 등 컴파일 도구가 필요합니다.)

git clone https://github.com/RedCA-Family/code-analyst.git
cd code-analyst
mvnw clean package

생성된 jar 파일을 임의의 디렉토리에 위치시키고 아래 사용법과 같이 실행하여 사용합니다.

Docker 기반 빌드 및 실행

Docker를 통해 다음과 같이 빌드를 할 수 있습니다.

$ docker image build -t code-analyst .

실행은 /project에 대한 volume을 지정하여 분석하고자 하는 프로젝트 위치를 지정합니다. 최종 결과 파일도 지정된 /project volume에 생성됩니다. (docker를 사용하는 경우 -p 프로젝트 위치 옵션 지정 대신 이 /project volume을 사용합니다.)

$ docker run --rm -v /workspace/project:/project code-analyst [options] 

API 사용

API 형태로 사용하기 위해서는 Maven dependencies에 다음과 같은 dependency를 추가하면 됩니다.

<dependency>
	<groupId>com.samsungsds.analyst</groupId>
	<artifactId>code-analyst</artifactId>
	<version>2.10.6</version>
</dependency>

API 활용에 대한 사항은 Guide를 참조해 주세요.

Usage

CLI(Command Line Interface) 형태로 사용되며, Java, JavaScript(Node.js), C# 및 Python을 지원합니다. 언어에 대한 지정은 --language 또는 -l 옵션을 통해 지정됩니다.

Java 언어 점검

$> java -jar Code-Analyst-2.10.6.jar -l java -p "프로젝트 위치" -s "src\main\java" -b "target\classes"

※ 참고로 -l,--language 지정이 없으면, Java 언어를 기본 점검 대상으로 합니다.

기본적으로 --project 옵션을 통해 분석하고자 하는 프로젝트 위치를 지정합니다.

이와 함께 --src, --binary 옵션으로 소스 디렉토리와 binary 디렉토리(컴파일된 class 파일 생성 위치)를 지정합니다. (생략되면 maven 프로젝트 기준으로 설정되며, "--project" 옵션에 대한 상대 경로로 지정해야 합니다.)

Help (Java)

$> java -jar Code-Analyst-2.10.6.jar --help
usage: java -jar Code-Analyst-2.10.6.jar
 ※ To see individual language-specific option usages, specify the '-l' or '--language' option
 -l,--language <arg>     specify the language to analyze. ('Java', 'JavaScript', 'C#' or 'Python', default : "Java")
 -h,--help               show help.
 -p,--project <arg>      specify project base directory. (default: ".")
 -s,--src <arg>          specify source directories with comma separated. (default: "${project}\src\main\java")
 -b,--binary <arg>       specify binary directories with comma separated. (default: "${project}\target\classes")
 -library <arg>          specify library directory, jar files contained.
 -d,--debug              debug mode.
 -e,--encoding <arg>     encoding of the source code. (default: UTF-8)
 -j,--java <arg>         specify java version. (default: 1.8)
 -pmd <arg>              specify PMD ruleset xml file.
 -findbugs <arg>         specify FindBugs ruleset(include filter) xml file.
 -sonar <arg>            specify SonarQube issue ruleset(exclude filter) xml file.
                         ex:
                         <SonarIssueFilter>
                         <Exclude key="common-java:DuplicatedBlocks"/>
                         </SonarIssueFilter>
 -checkstyle <arg>       specify CheckStyle configuration xml file.
 -o,--output <arg>       specify result output file. (default : "result-[yyyyMMddHHmmss].[out|json]")
 -f,--format <arg>       specify result output file format(json, text, none). (default : text)
 -v,--version            display version info.
 -t,--timeout <arg>      specify internal ws timeout. (default : 100 min.)
 -c,--complexity <arg>   specify class name(glob pattern) to be measured. (Cyclomatic Complexity Measurement mode)
 -w,--webapp <arg>       specify webapp root directory to be inspected. If it's not specified, 'javascript', 'css',
                         'html' analysis items will be disabled.
                         ※ webapp directory should not overlap the src directories.
 -include <arg>          specify include pattern(Ant-style) with comma separated. (e.g.: com/sds/**/*.java)
 -exclude <arg>          specify exclude pattern(Ant-style) with comma separated. (e.g.: com/sds/**/*VO.java)
                         ※ If 'include' or 'exclude' option starts with '@' and has file name, the option value is read
                         from the file
 -m,--mode <arg>         specify analysis items with comma separated. If '-' specified in each mode, the mode is
                         excluded. (code-size, duplication, complexity, sonarjava, pmd, findbugs, findsecbugs,
                         javascript, css, html, dependency, unusedcode, ckmetrics, checkstyle)
                         ※ 'javascript', 'css' and 'html' will be disabled when 'webapp' option isn't set, and 'css' and
                         'html' are disabled by default
 -a,--analysis           detailed analysis mode. (required more memory. If OOM exception occurred, use JVM '-Xmx' option
                         like '-Xmx1024m')
 -r,--rerun <arg>        specify previous output file to rerun with same options. ('project', 'src', 'binary',
                         'encoding', 'java', 'pmd', 'findbugs', 'include', 'exclude', 'mode', 'analysis', 'seperated',
                         'catalog', 'duplication', 'token' and 'webapp')
 -seperated              specify seperated output mode.
 -catalog                specify file catalog saving mode.
 -duplication <arg>      specify duplication detection mode. ('statement' or 'token', default : statement)
 -tokens <arg>           specify the minimum number of tokens when token-based duplication detection mode. (default :
                         100)

※ Java 11 버전 점검 : FindBugs, CKMetrics에 대하여 실험적 지원으로 일부 점검 결과가 틀릴 수 있음

JavaScript 언어 점검

$> java -jar Code-Analyst-2.10.6.jar -l javascript -p "프로젝트 위치" -s "."

Help (JavaScript)

$> java -jar Code-Analyst-2.10.6.jar -l javascript --help
usage: java -jar Code-Analyst-2.10.6.jar
 -l,--language <arg>   specify the language to analyze. ('Java', 'JavaScript', 'C#' or 'Python', default : "Java")
 -h,--help             show help.
 -p,--project <arg>    specify project base directory. (default: ".")
 -s,--src <arg>        specify source directories with comma separated. (default: "${project}\.")
 -d,--debug            debug mode.
 -e,--encoding <arg>   encoding of the source code. (default: UTF-8)
 -sonar <arg>          specify SonarQube issue ruleset(exclude filter) xml file.
                       ex:
                       <SonarIssueFilter>
                       <Exclude key="common-js:DuplicatedBlocks"/>
                       </SonarIssueFilter>
 -o,--output <arg>     specify result output file. (default : "result-[yyyyMMddHHmmss].[out|json]")
 -f,--format <arg>     specify result output file format(json, text, none). (default : text)
 -v,--version          display version info.
 -t,--timeout <arg>    specify internal ws timeout. (default : 100 min.)
 -include <arg>        specify include pattern(Ant-style) with comma separated. (e.g.: app/**/*.js)
 -exclude <arg>        specify exclude pattern(Ant-style) with comma separated. (e.g.: tests/**,tests-*/**,*-tests/**)
                         ※ If 'include' or 'exclude' option starts with '@' and has file name, the option value is read
                         from the file
 -m,--mode <arg>       specify analysis items with comma separated. If '-' specified in each mode, the mode is excluded.
                       (code-size, duplication, complexity, sonarjs)
 -a,--analysis         detailed analysis mode. (required more memory. If OOM exception occurred, use JVM '-Xmx' option
                       like '-Xmx1024m')
 -r,--rerun <arg>      specify previous output file to rerun with same options. ('project', 'src', 'encoding', 'sonar',
                       'include', 'exclude', 'mode', 'analysis', 'seperated' and 'catalog')
 -seperated            specify seperated output mode.
 -catalog              specify file catalog saving mode.
 -duplication <arg>      specify duplication detection mode. ('statement' or 'token', default : statement)
 -tokens <arg>           specify the minimum number of tokens when token-based duplication detection mode. (default :
                         100)

C# 언어 점검

$> java -jar Code-Analyst-2.10.6.jar -l C# -p "프로젝트 위치" -s "."

※ 참고로 프로젝트 위치는 Visual Studio 솔루션("*.sln") 파일이 있는 위치입니다.

Help (C#)

$> java -jar Code-Analyst-2.10.6.jar -l C# --help
usage: java -jar Code-Analyst-2.10.6.jar
 -l,--language <arg>   specify the language to analyze. ('Java', 'JavaScript', 'C#' or 'Python', default : "Java")
 -h,--help             show help.
 -p,--project <arg>    specify project base directory. (default: ".")
 -s,--src <arg>        specify source directories with comma separated. (default: "${project}\.")
 -d,--debug            debug mode.
 -e,--encoding <arg>   encoding of the source code. (default: UTF-8)
 -sonar <arg>          specify SonarQube issue ruleset(exclude filter) xml file.
                       ex:
                       <SonarIssueFilter>
                       <Exclude key="common-js:DuplicatedBlocks"/>
                       </SonarIssueFilter>
 -o,--output <arg>     specify result output file. (default : "result-[yyyyMMddHHmmss].[out|json]")
 -f,--format <arg>     specify result output file format(json, text, none). (default : text)
 -v,--version          display version info.
 -t,--timeout <arg>    specify internal ws timeout. (default : 100 min.)
 -include <arg>        specify include pattern(Ant-style) with comma separated. (e.g.: app/**/*.cs)
 -exclude <arg>        specify exclude pattern(Ant-style) with comma separated. (e.g.:
                       **/*.AssemblyInfo.cs,tests/**,tests-*/**,*-tests/**)
                       ※ If 'include' or 'exclude' option starts with '@' and has file name, the option value is read
                       from the file
                       - default exclusions pattern is added :
                       **/*.AssemblyInfo.cs,**/*.generated.cs,**/*Language.Designer.cs
 -m,--mode <arg>       specify analysis items with comma separated. If '-' specified in each mode, the mode is excluded.
                       (code-size, duplication, complexity, sonarcsharp)
 -a,--analysis         detailed analysis mode. (required more memory. If OOM exception occurred, use JVM '-Xmx' option
                       like '-Xmx1024m')
 -r,--rerun <arg>      specify previous output file to rerun with same options. ('project', 'src', 'encoding', 'sonar',
                       'include', 'exclude', 'mode', 'analysis', 'seperated', and 'catalog')
 -seperated            specify seperated output mode.
 -catalog              specify file catalog saving mode.
 -duplication <arg>      specify duplication detection mode. ('statement' or 'token', default : statement)
 -tokens <arg>           specify the minimum number of tokens when token-based duplication detection mode. (default :
                         100)

Python 언어 점검

$> java -jar Code-Analyst-2.10.6.jar -l Python -p "프로젝트 위치" -s "."

Help (Python)

$> java -jar Code-Analyst-2.10.6.jar -l Python --help
usage: java -jar Code-Analyst-2.10.6.jar
 -l,--language <arg>   specify the language to analyze. ('Java', 'JavaScript', 'C#' or 'Python', default : "Java")
 -h,--help             show help.
 -p,--project <arg>    specify project base directory. (default: ".")
 -s,--src <arg>        specify source directories with comma separated. (default: "${project}\.")
 -d,--debug            debug mode.
 -e,--encoding <arg>   encoding of the source code. (default: UTF-8)
 -sonar <arg>          specify SonarQube issue ruleset(exclude filter) xml file.
                       ex:
                       <SonarIssueFilter>
                       <Exclude key="common-js:DuplicatedBlocks"/>
                       </SonarIssueFilter>
 -o,--output <arg>     specify result output file. (default : "result-[yyyyMMddHHmmss].[out|json]")
 -f,--format <arg>     specify result output file format(json, text, none). (default : text)
 -v,--version          display version info.
 -t,--timeout <arg>    specify internal ws timeout. (default : 100 min.)
 -include <arg>        specify include pattern(Ant-style) with comma separated. (e.g.: app/**/*.py)
 -exclude <arg>        specify exclude pattern(Ant-style) with comma separated. (e.g.: tests/**,tests-*/**,*-tests/**)
                       ※ If 'include' or 'exclude' option starts with '@' and has file name, the option value is read
                       from the file
 -m,--mode <arg>       specify analysis items with comma separated. If '-' specified in each mode, the mode is excluded.
                       (code-size, duplication, complexity, sonarpython)
 -a,--analysis         detailed analysis mode. (required more memory. If OOM exception occurred, use JVM '-Xmx' option
                       like '-Xmx1024m')
 -r,--rerun <arg>      specify previous output file to rerun with same options. ('project', 'src', 'encoding', 'sonar',
                       'include', 'exclude', 'mode', 'analysis', 'seperated', and 'catalog')
 -seperated            specify seperated output mode.
 -catalog              specify file catalog saving mode.
 -duplication <arg>      specify duplication detection mode. ('statement' or 'token', default : statement)
 -tokens <arg>           specify the minimum number of tokens when token-based duplication detection mode. (default :
                         100)

Version 정보

$> java -jar Code-Analyst-2.10.6.jar --version
Code Analyst : 2.10.6
  - Sonar Scanner API : 2.15.0.2182 (LGPL v3.0)
  - Sonar Scanner for MSBuild : 4.10.0.19059 (LGPL v3.0)
  - Sonar Server : 7.9.4.35981 (LGPL v3.0)
     [Plugins]
       - SonarJava : 6.3.2.22818 (LGPL v3.0)
       - SonarJS : 6.2.1.12157 (LGPL v3.0)
       - SonarC# : 8.6.1.17183 (LGPL v3.0)
       - SonarPython : 2.8.6204 (LGPL v3.0)
       - CSS/SCSS/Less : 1.2.1325 (LGPL v3.0)
       - HTML : 3.2.2082 (Apache v2.0)
  - PMD : 6.22.0 (BSD-style)
  - FindBugs(SpotBugs) : 4.0.6 (LGPL v3.0)
  - FindSecBugs : 1.10.1 (LGPL v3.0)
  - JDepend : 2.9.1-based modification (BSD-style)
  - CKJM : 1.9-based modification (Apache v2.0)
  - Node.js : 10.15.3 LTS (MIT)
    ※ Supported Platform : Windows/MacOS/Linux(x64)
  - ESLint : 5.16.0 (MIT)
  - CheckStyle : 8.35 (LGPL v2.1)
  - MS CodeAnalysis Metrics : 3.3.0 (Apache v2.0)
    ※ Supported Platform : Windows
  - Radon(python) : 3.0.3 (MIT)
    ※ required Python runtime (any platform)

Default RuleSet
  - PMD : 91 ruleset (v5.4, RedCA Way Ruleset, '18.03)
  - SpotBugs(FindBugs) : 213 ruleset (v4.0.6, RedCA Way Ruleset, '20.09)
  - FindSecBugs : 81 rules (v1.10.1, RedCA Way Ruleset, '20.09)
  - SonarJava : 243 ruleset (v6.3.2, RedCA Way Ruleset, '20.09)
  - SonarCSharp : 155 ruleset (v8.6.1, RedCA Way Ruleset, '20.09)
  - SonarPython : 76 ruleset (v2.8, RedCA Way Ruleset, '20.09)
  - Web Resources :
      - JS : 89 ruleset (v6.2.1, RedCA Way Ruleset, '20.09)
      - CSS : CSS / Less / SCSS 27 ruleset (v1.2)
      - HTML : 28 ruleset (v3.2)
  - CheckStyle : 58 ruleset (RedCA Way Ruleset, '20.09)

Copyright(c) 2018-20 By Samsung SDS (DevOps Group)

보다 자세한 사항은 Guide를 참조해 주세요.

Contributing

버그 리포팅, 기능 개선 요청, pull request 요청 등은 issue tracker를 활용해 주세요.

History

  • (2017.05) Initial Version released (v1.0)
  • (2018.03) New Major Version released (v2.0)
  • (2018.10) OSS Version released (v2.4)
  • (2018.12) Design Metrics(CK Metrics) added (v2.5)
  • (2019.01) Token based duplication detection mode added (v2.6)
  • (2019.04) JavaScript language mode added & Node.js runtime provided for JavaScript/SonarJS analysis (v2.7)
  • (2019.07) CheckStyle check mode added (v2.8)
  • (2019.09) C# and Python language mode added (v2.9)
  • (2020.09) SonarQube 7.9(LTS) w/ related plugins and other OSS versions upgraded (v2.10)

License

Code Analyst is licensed under the version 2.0 of the Apache License. See LICENSE for the Code-Analyst full license text. Licenses about 3rd-party library are in ./src/main/resources/LICENSES.

Unless required by applicable law or agreed to in writing, Software distributed as an "AS IS" BASIS WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

code-analyst's People

Contributors

dependabot[bot] avatar switchover avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

code-analyst's Issues

중복도 점검 방식 추가

현재는 SonarQube 방식으로 literal을 제외하고 중복여부를 판단하고 있음

추가적으로 PMD의 CPD에서와 같이 literal을 포함하여 중복여부를 판단하는 방식 추가가 필요함

인터넷 연결이 되지 않는 환경에서 Python 언어 분석 시 timeout 오류 발생

Processing c:\users\sds\appdata\local\temp\1576632007632-0\radon-3.0.3-py2.py3-none-any.whl
Collecting mando<0.7,>=0.6 (from radon==3.0.3)
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x04B0DBB0>, 'Connection to pypi.org timed out. (connect timeout=15)')': /simple/mando/

참고 : 인터넷이 연결되어 있는 경우 (proxy 설정)
==> proxy 설정 후

Processing c:\users\sds\appdata\local\temp\1576632442545-0\radon-3.0.3-py2.py3-none-any.whl
Collecting flake8-polyfill (from radon==3.0.3)
Collecting colorama<0.5,>=0.4 (from radon==3.0.3)
Downloading https://files.pythonhosted.org/packages/c9/dc/45cdef1b4d119eb96316b3117e6d5708a08029992b2fee2c143c7a0a5cc5/colorama-0.4.3-py2.py3-none-any.whl
Collecting future (from radon==3.0.3)
Downloading https://files.pythonhosted.org/packages/45/0b/38b06fd9b92dc2b68d58b75f900e97884c45bedd2ff83203d933cf5851c9/future-0.18.2.tar.gz (829kB)
100% |████████████████████████████████| 829kB 6.8MB/s
Collecting mando<0.7,>=0.6 (from radon==3.0.3)
Collecting flake8 (from flake8-polyfill->radon==3.0.3)
Downloading https://files.pythonhosted.org/packages/f8/1f/7ea40d1e4146ea55dbab41cda1376db092a75794914169aabd7e8d7a7def/flake8-3.7.9-py2.py3-none-any.whl (69kB)
100% |████████████████████████████████| 71kB 1.0MB/s
Collecting six (from mando<0.7,>=0.6->radon==3.0.3)
Downloading https://files.pythonhosted.org/packages/65/26/32b8464df2a97e6dd1b656ed26b2c194606c16fe163c695a992b36c11cdf/six-1.13.0-py2.py3-none-any.whl
Collecting mccabe<0.7.0,>=0.6.0 (from flake8->flake8-polyfill->radon==3.0.3)
Collecting pyflakes<2.2.0,>=2.1.0 (from flake8->flake8-polyfill->radon==3.0.3)
Collecting pycodestyle<2.6.0,>=2.5.0 (from flake8->flake8-polyfill->radon==3.0.3)
Collecting entrypoints<0.4.0,>=0.3.0 (from flake8->flake8-polyfill->radon==3.0.3)
Installing collected packages: mccabe, pyflakes, pycodestyle, entrypoints, flake8, flake8-polyfill, colorama, future, six, mando, radon

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.