GithubHelp home page GithubHelp logo

min-ho-kim / dexter Goto Github PK

View Code? Open in Web Editor NEW

This project forked from samsung/dexter

0.0 1.0 0.0 229.54 MB

Dexter is a static analysis platform to find and remove defects efficiently and immediately during the coding-time.

License: BSD 2-Clause "Simplified" License

Java 17.83% EmberScript 1.07% C++ 10.44% C 1.79% HTML 30.96% JavaScript 35.15% CSS 1.39% Ruby 0.01% Shell 0.12% Perl 0.05% Python 0.10% Batchfile 0.01% C# 1.08%

dexter's Introduction

Dexter

Dexter helps you to improve coding skills. Whenever you save a source file, Dexter analyzes it and shows its improvements point on your editor in real-time.

Who needs Dexter?

  • A developer who sometimes forgets to check code quality (just like me !)
  • A developer who needs a peer reviewer (but you are shy)
  • A S/W engineering team member who wants to improve developers' code quality without annoying
  • A static analysis engine developer who needs UI and server-side features

Links

Downloads (ver. 0.10.5, 23. Sep. 2016)

Eclipse Update Site

Eclipse JAVA+CPP

#####Eclipse JAVA

#####Eclipse C/C++

#####Tizen SDK

Dexter Daemon for Source Insight

Dexter CLI

Dexter Server

Dexter Monitor

Supports

  • Eclipse IDE for Java language (Kepler 4.3+)
  • Source Insight for C/C++ (3.50.0072+)
  • CLI for executing by a script (Jenkins, other editors)

Concepts

Dexter is a static analysis platform to find and remove defects efficiently and immediately during the coding-time. In addition, Dexter saves your learning cost because it contains multiple static analysis tools as a plug-in type.

How to build

(refer to detailed document : https://github.com/Samsung/Dexter/blob/master/doc/Dexter_Build_Guide.pdf)

Prerequisites

Import Dexter Projects into Eclipse

  • run with suffice memory (in eclipse.ini) : -Xmx1024m --launcher.XXMaxPermSize256m
  • make sure your text file encoding setting is 'UTF-8' : eclipse > Preferences > General > Workspace
  • import Dexter Projects that you already downloaded except dexter-server project
  • use 'gradle build' command in a command line console : '/project' folder
  • refresh all projects in eclipse, then all errors will be gone

Build Dexter CLI

  • use ant script on build-install.xml file in dexter-executor project
  • you can see the 'dexter-cli_#.#.#_bit.zip file in dexter-executor/install folder
  • after unzip this file, you can run dexter in a command line: unzip-folder/bin/dexter.bat or dexter.sh
  • before you run dexter.bat file, you have to set dexter_cfg.json file to set the scope of analysis (refer to dexter_cfg.json.help file)

Build Dexter Daemon for source insight

  • open dexter-daemon.product file in dexter-daemon project
  • click 'Eclipse Product export wizard' link on the 'Exporting' tab in a editor
  • set the fields - Root direoct:dexter-daemon Destination/Directory: your directory
  • click "Finish" button
  • check export folder, there will be dexter-daemon folder
  • run dexter.exe file, then you can see the login dialog
  • check 'Run in Standalong mode', then you can run dexter without Dexter Server
  • run source insight, and open 'Base' project
  • add 'project/script/dexter.em' macro file into 'Base' project
  • after editing and saving your source file, you will see the result of analysis in your editor and Dexter Daemon

Build Dexter Eclipse Plugins

  • create feature project in your eclipse
  • include all of dexter projects witout dexter-daemon and dexter-cppcheck project
  • create update site on the feature.xml file
  • include your feature and build all, then you will see the feature and plugins folders in you update project
  • you can make a update site or just copy plugin folder into your new eclipse
  • then, you can use Dexter

Build Dexter Visual Studio Plugin

In order to build a plugin for Visual Studio you need following prerequisites:

  • Microsoft Visual Studio 2013 or newer
  • Microsoft Visual Studio SDK (2013 or newer)
  • (Optionally) NUnit3 Test Adapter (Visual Studio Extension) - for executing unit tests

To build a plugin:

  • open a solution file "dexter-vs.sln" located in project/dexter-vs directory.
  • right click on "Build/Rebuild dexter-vs". NuGet will download all required dependencies and Visual Studio will rebuild you project.
  • after this, you should have a self-installing extension file "dexter.vsix" located in "dexter-vs/bin/{ConfigurationName}"
  • you can install an extension by double clicking it.

The most convenient way to debug this plugin is to use an Experimental Instance of Visual Studio.

  • go to "Project/dexter-vs Properties..." and then go to "Debug" tab.
  • select "Start external program:" and provide path to Visual Studio executable (devenv.exe).
  • enter in "Command line arguments" value "/RootSuffix Exp".
  • save your changes
  • run a project (F5).
  • it should start Visual Studio Experimental Instance with dexter-vs installed as an extension.

Future Plan

support more languages

  • JavaScript

support more IDEs

  • Tizen SDK
  • WebStorm
  • Android Studio
  • Enhance Source Insight

support more Static Analysis Open Source

  • Java: PMD, Checkstyle, etc.
  • JavaScript: Flow, JSHint
  • Custom Checkers

Dexter Web Monitor for organization(SE)

  • TBD

License

Dexter is BSD-licensed.

dexter's People

Contributors

alxpark avatar hmyun avatar marchpig avatar min-ho-kim avatar minjung-baek avatar minjung978 avatar serendipitygen avatar yes-ho avatar

Watchers

 avatar

dexter's Issues

Json 형태의 결과 파일 생성: -j 옵션

Create Json result file - dexter-result.json. eg) -j

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>dexter2.bat -u yes.ho -p yes.ho -j

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>java -Xms256m -Xmx786m -XX:MaxPermSize=256m -jar dexter-executor.jar -u yes.ho -p yes.ho -j
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0

===== Starting Dexter Analysis =====

  • Loaded cppcheck 0.10.3
  • Loaded findbugs 0.10.3
  • Loaded dexter-opensource 0.10.3
  • Loaded dexter-vd-cpp 0.10.3

== Defects Report ==
analyze synchronously...
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:213)
at com.google.common.io.Files$FileByteSink.(Files.java:195)
at com.google.common.io.Files$FileByteSink.(Files.java:189)
at com.google.common.io.Files.asByteSink(Files.java:186)
at com.google.common.io.Files.asCharSink(Files.java:232)
at com.google.common.io.Files.write(Files.java:508)
at com.google.common.io.Files.append(Files.java:492)
at com.samsung.sec.dexter.executor.cli.CLIResultFile.writeJsonResultFilePrefix(CLIResultFile.java:42)
at com.samsung.sec.dexter.executor.cli.CLIAnalysisResultHandler.handleBeginnigOfResultFile(CLIAnalysisResultHandler.java:101)
at com.samsung.sec.dexter.executor.cli.CLIAnalysisResultHandler.handleAnalysisResult(CLIAnalysisResultHandler.java:64)
at com.samsung.sec.dexter.executor.DexterAnalyzerThread.run(DexterAnalyzerThread.java:102)
at com.samsung.sec.dexter.executor.DexterAnalyzer.runSync(DexterAnalyzer.java:79)
at com.samsung.sec.dexter.executor.cli.Main.analyzeSynchronously(Main.java:204)
at com.samsung.sec.dexter.executor.cli.Main.analyze(Main.java:129)
at com.samsung.sec.dexter.executor.cli.Main.main(Main.java:74)

특정 체커만 Enable하여 실행: -e 옵션

Enable only specified checker(s), checkercode1;checkercode2:language:toolname;... eg) -e nullpointer;initializerlist:CPP:cppcheck

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>dexter2.bat -u yes.ho -p yes.ho -e nullpointer;initializerlist:CPP:cppcheck

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>java -Xms256m -Xmx786m -XX:MaxPermSize=256m -jar dexter-executor.jar -u yes.ho -p yes.ho -e nullpointer;initializerlist:CPP:cppcheck
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.samsung.sec.dexter.executor.cli.DexterCLIOption.setEnabledCheckers(DexterCLIOption.java:207)
at com.samsung.sec.dexter.executor.cli.DexterCLIOption.setFieldsByCommandLine(DexterCLIOption.java:132)
at com.samsung.sec.dexter.executor.cli.DexterCLIOption.createCliOptionFromArguments(DexterCLIOption.java:77)
at com.samsung.sec.dexter.executor.cli.DexterCLIOption.(DexterCLIOption.java:71)
at com.samsung.sec.dexter.executor.cli.Main.main(Main.java:65)

데몬 파일 분석 오류

-현상 : 개별파일에 대한 분석 X : source insight에서 코드 수정하여 저장하였으나 demon에서 분석결과 나타나지 않음.
-원인 : 분석 후 json파일이 result에 생성되지 않음.
-Dexter Daemon Home Path : D:\dev\dexter\20160831_dexter\daemon\eclipse\dexter-home
-수정한 파일 위치 : D:\dev\dexter\20160831_dexter\daemon\20160831test.c

!ENTRY dexter-daemon 4 4 2016-08-31 20:53:20.026
!MESSAGE there is no result file path : D:/dev/dexter/20160831_dexter/daemon/eclipse/dexter-home/result/daemon/dev/dexter/20160831_dexter/daemon/20160831test.c
!STACK 0
com.samsung.sec.dexter.core.exception.DexterRuntimeException: there is no result file path : D:/dev/dexter/20160831_dexter/daemon/eclipse/dexter-home/result/daemon/dev/dexter/20160831_dexter/daemon/20160831test.c
at com.samsung.sec.dexter.core.config.DexterConfigFile.setResultFileFullPath(DexterConfigFile.java:428)
at com.samsung.sec.dexter.core.config.EclipseDexterConfigFile.setFields(EclipseDexterConfigFile.java:39)
at com.samsung.sec.dexter.core.config.DexterConfigFile.loadFromFile(DexterConfigFile.java:76)
at com.samsung.sec.dexter.daemon.job.MonitorForDexterConfigFile.checkDexterConfigFileAndAnalyze(MonitorForDexterConfigFile.java:116)
at com.samsung.sec.dexter.daemon.job.MonitorForDexterConfigFile.run(MonitorForDexterConfigFile.java:95)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

!ENTRY dexter-daemon 4 4 2016-08-31 20:53:27.030
!MESSAGE there is no result file path : D:/dev/dexter/20160831_dexter/daemon/eclipse/dexter-home/result/daemon/dev/dexter/20160831_dexter/daemon/20160831test.c
!STACK 0
com.samsung.sec.dexter.core.exception.DexterRuntimeException: there is no result file path : D:/dev/dexter/20160831_dexter/daemon/eclipse/dexter-home/result/daemon/dev/dexter/20160831_dexter/daemon/20160831test.c
at com.samsung.sec.dexter.core.config.DexterConfigFile.setResultFileFullPath(DexterConfigFile.java:428)
at com.samsung.sec.dexter.core.config.EclipseDexterConfigFile.setFields(EclipseDexterConfigFile.java:39)
at com.samsung.sec.dexter.core.config.DexterConfigFile.loadFromFile(DexterConfigFile.java:76)
at com.samsung.sec.dexter.daemon.job.MonitorForDexterConfigFile.checkDexterConfigFileAndAnalyze(MonitorForDexterConfigFile.java:116)
at com.samsung.sec.dexter.daemon.job.MonitorForDexterConfigFile.run(MonitorForDexterConfigFile.java:95)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

XML 형태의 결과 파일 생성: -x 옵션

Create XML result file - dexter-result.xml. eg) -x

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>dexter2.bat -u yes.ho -p yes.ho -x

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>java -Xms256m -Xmx786m -XX:MaxPermSize=256m -jar dexter-executor.jar -u yes.ho -p yes.ho -x
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0

===== Starting Dexter Analysis =====

  • Loaded cppcheck 0.10.3
  • Loaded findbugs 0.10.3
  • Loaded dexter-opensource 0.10.3
  • Loaded dexter-vd-cpp 0.10.3

== Defects Report ==
analyze synchronously...
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:213)
at com.google.common.io.Files$FileByteSink.(Files.java:195)
at com.google.common.io.Files$FileByteSink.(Files.java:189)
at com.google.common.io.Files.asByteSink(Files.java:186)
at com.google.common.io.Files.asCharSink(Files.java:232)
at com.google.common.io.Files.write(Files.java:508)
at com.google.common.io.Files.append(Files.java:492)
at com.samsung.sec.dexter.executor.cli.CLIResultFile.writeXmlResultFilePrefix(CLIResultFile.java:47)
at com.samsung.sec.dexter.executor.cli.CLIAnalysisResultHandler.handleBeginnigOfResultFile(CLIAnalysisResultHandler.java:105)
at com.samsung.sec.dexter.executor.cli.CLIAnalysisResultHandler.handleAnalysisResult(CLIAnalysisResultHandler.java:64)
at com.samsung.sec.dexter.executor.DexterAnalyzerThread.run(DexterAnalyzerThread.java:102)
at com.samsung.sec.dexter.executor.DexterAnalyzer.runSync(DexterAnalyzer.java:79)
at com.samsung.sec.dexter.executor.cli.Main.analyzeSynchronously(Main.java:204)
at com.samsung.sec.dexter.executor.cli.Main.analyze(Main.java:129)
at com.samsung.sec.dexter.executor.cli.Main.main(Main.java:74

XML 형태의 결과 파일 생성: -X 옵션 (파일명 뒤에 타임스탬프 추가)

Create XML result file with timestamp - dexter-result_yyyyMMddhh:mm:ss.xml. eg) -X

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>dexter2.bat -u yes.ho -p yes.ho -X

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>java -Xms256m -Xmx786m -XX:MaxPermSize=256m -jar dexter-executor.jar -u yes.ho -p yes.ho -X
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0

===== Starting Dexter Analysis =====

  • Loaded cppcheck 0.10.3
  • Loaded findbugs 0.10.3
  • Loaded dexter-opensource 0.10.3
  • Loaded dexter-vd-cpp 0.10.3

== Defects Report ==
analyze synchronously...
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:213)
at com.google.common.io.Files$FileByteSink.(Files.java:195)
at com.google.common.io.Files$FileByteSink.(Files.java:189)
at com.google.common.io.Files.asByteSink(Files.java:186)
at com.google.common.io.Files.asCharSink(Files.java:232)
at com.google.common.io.Files.write(Files.java:508)
at com.google.common.io.Files.append(Files.java:492)
at com.samsung.sec.dexter.executor.cli.CLIResultFile.writeXml2ResultFilePrefix(CLIResultFile.java:53)
at com.samsung.sec.dexter.executor.cli.CLIAnalysisResultHandler.handleBeginnigOfResultFile(CLIAnalysisResultHandler.java:109)
at com.samsung.sec.dexter.executor.cli.CLIAnalysisResultHandler.handleAnalysisResult(CLIAnalysisResultHandler.java:64)
at com.samsung.sec.dexter.executor.DexterAnalyzerThread.run(DexterAnalyzerThread.java:102)
at com.samsung.sec.dexter.executor.DexterAnalyzer.runSync(DexterAnalyzer.java:79)
at com.samsung.sec.dexter.executor.cli.Main.analyzeSynchronously(Main.java:204)
at com.samsung.sec.dexter.executor.cli.Main.analyze(Main.java:129)
at com.samsung.sec.dexter.executor.cli.Main.main(Main.java:74

계정 생성 오류(CLI)

계정 생성이 정상적으로 되는가? [이하 create-user.bat(윈도우), create-user.sh(리눅스) 활용]

신규 계정 생성, 관리자/비관리자 계정 생성, 취소 시 정상 처리 여부

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>java -Xms256m -Xmx786m -XX:MaxPermSize=256m -jar dexter-executor.jar -c -u test.ho -p test.ho -h xxxxx -o 8190
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Exception in thread "main" java.lang.NullPointerException
at java.io.File.(Unknown Source)
at com.samsung.sec.dexter.executor.cli.Main.createDexterConfigFile(Main.java:173)
at com.samsung.sec.dexter.executor.cli.Main.main(Main.java:66)

업데이트 체크 오류

org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
at org.eclipse.swt.SWT.error(SWT.java:4361)
at org.eclipse.swt.SWT.error(SWT.java:4276)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4144)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.samsung.sec.dexter.daemon.DexterDaemonApplication.start(DexterDaemonApplication.java:48)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: java.lang.NullPointerException
at com.samsung.sec.dexter.daemon.ApplicationWorkbenchWindowAdvisor.updateDexterPluginAndRestart(ApplicationWorkbenchWindowAdvisor.java:410)
at com.samsung.sec.dexter.daemon.ApplicationWorkbenchWindowAdvisor.checkAndUpdatePluginAndRestart(ApplicationWorkbenchWindowAdvisor.java:380)
at com.samsung.sec.dexter.daemon.ApplicationWorkbenchWindowAdvisor.checkerAndUpdateDexterPlugin(ApplicationWorkbenchWindowAdvisor.java:366)
at com.samsung.sec.dexter.daemon.ApplicationWorkbenchWindowAdvisor.access$2(ApplicationWorkbenchWindowAdvisor.java:351)
at com.samsung.sec.dexter.daemon.ApplicationWorkbenchWindowAdvisor$4$1.run(ApplicationWorkbenchWindowAdvisor.java:338)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
... 24 more

서버 없이 독립 실행: -s 옵션

Standalone. Run Dexter Analysis without DexterServer. you don't need log in(id & password) eg) -s

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>dexter2.bat -s

D:\dev\dexter\20160811_dexter\cli\dexter-cli_0.10.3_64\bin>java -Xms256m -Xmx786m -XX:MaxPermSize=256m -jar dexter-executor.jar -s
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0

===== Starting Dexter Analysis =====

하고 아무것도 일어나지 않았습니다.

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.