在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Coca - toolbox for system refactoring and analysis
Related Tools: Coco is an effective DevOps analysis and auto-suggest tool. Migration Guide (Chinese Version): 《系统重构与迁移指南》 Ant To Maven: Merry Refactoring Modeling:
Features List: Available Commands: analysis analysis code api scan HTTP api from annotation arch project package visualization bs generate bad smell list and suggestions call show call graph with specific method cloc count lines of code with complexity estimation concept build domain concept from source code count count most refs function evaluate evaluate code situation and refactor effort git analysis git commit history for revs count, summary and suggest help Help about any command rcall reverse call graph visualization refactor auto refactor code suggest find usable Design Patterns from code tbs generate tests bad smell todo scan all todo, and list with time version version Requirements:
Getting startedThe easiest way to get coca is to use one of the pre-built release binaries which are available for OSX, Linux, Windows on the release page. You can also install yourself : go get -u github.com/phodal/coca UsageAnalysiscoca analysis Archcoca arch Android Studio Gradle DSL Module (merge header) command: Android Studio Gradle DSL Module Elements Part: command: Find Bad Smellscoca bs -s type Examples Result: { "dataClass": [ { "File": "examples/api/BookController.java", "BS": "dataClass" } ], "lazyElement": [ { "File": "examples/api/model/BookRepresentaion.java", "BS": "lazyElement" } ]} Code Line Countcoca cloc Results: ───────────────────────────────────────────────────────────────────────────────Language Files Lines Blanks Comments Code Complexity───────────────────────────────────────────────────────────────────────────────Go 58 31763 7132 890 23741 2847Java 44 971 208 21 742 62Markdown 8 238 75 0 163 0Gherkin Specificati… 2 32 2 16 14 0Document Type Defin… 1 293 36 0 257 0License 1 201 32 0 169 0SQL 1 2 0 0 2 0SVG 1 199 0 34 165 0Shell 1 3 1 1 1 0XML 1 13 0 0 13 0gitignore 1 61 8 4 49 0───────────────────────────────────────────────────────────────────────────────Total 119 33776 7494 966 25316 2909───────────────────────────────────────────────────────────────────────────────Estimated Cost to Develop $803,822Estimated Schedule Effort 14.120551 monthsEstimated People Required 6.743156─────────────────────────────────────────────────────────────────────────────── Results to json coca cloc --by-file --format json Cloc by directorycoca cloc ~/intellij-community/android/ --by-directory --include-ext=java,kt --not-match=".*(Test|Tests)\.(kt|java)" results csv: module,summaryadt-branding,169adt-testutils,257adt-ui,21987adt-ui-model,3450android,361270android-adb,497android-common,3280android-debuggers,3030android-kotlin,8816android-lang,24796android-lang-databinding,6392android-layout-inspector,2533... Cloc Top Filecoca cloc ~/intellij-community/android/designer/src/com/android/tools/idea --top-file --top-size 10 output to: | LENGTH | COMPLEXITY | LOCATION ||--------|------------|-----------------------------------|| 1642 | 236 | ConstraintLayoutHandler.java || 1492 | 375 | ConstraintComponentUtilities.java || 1189 | 166 | CommonActions.java || 1184 | 325 | ConstraintWidget.java || 1169 | 129 | SingleWidgetView.java || 1115 | 213 | ScoutArrange.java || 1097 | 281 | ScoutWidget.java || 1081 | 224 | 3d/Rasterize.java || 1016 | 159 | LayoutlibSceneManager.java || 1014 | 220 | TimeLinePanel.java | Build Deps Treecoca call -c com.phodal.pholedge.book.BookController.createBook -r com.phodal.pholedge. Examples Results: Identify Spring APIcoca api -f With Count coca api -r com.phodal.pholedge. -c or multi package:
+------+--------+------------------------------------------------+------------------------------------------------------------------------+| SIZE | METHOD | URI | CALLER |+------+--------+------------------------------------------------+------------------------------------------------------------------------+| 36 | GET | /aliyun/oss/policy | controller.OssController.policy || 21 | POST | /aliyun/osscallback | controller.OssController.callback || 17 | GET | /subject/list | controller.CmsSubjectController.getList || 17 | GET | /esProduct/search | search.controller.EsProductController.search || 17 | GET | /order/list | controller.OmsOrderController.list || 17 | GET | /productAttribute/list/{cid} | controller.PmsProductAttributeController.getList || 17 | GET | /productCategory/list/{parentId} | controller.PmsProductCategoryController.getList || 17 | GET | /brand/list | controller.PmsBrandController.getList || 17 | GET | /esProduct/search/simple | search.controller.EsProductController.search |+------+--------+------------------------------------------------+------------------------------------------------------------------------+ Git Analysiscoca git -t Results: +---------------------------------------------------------------------------------------------------------------------+-----------+-------------+| ENTITYNAME | REVSCOUNT | AUTHORCOUNT |+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+| build.gradle | 1326 | 36 || src/asciidoc/index.adoc | 239 | 20 || build-spring-framework/resources/changelog.txt | 187 | 10 || spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java | 170 | 10 || spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java | 159 | 15 || src/docs/asciidoc/web/webmvc.adoc | 121 | 24 || spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java | 118 | 9 || src/dist/changelog.txt | 118 | 9 || spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java | 116 | 15 || spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java | 113 | 15 || spring-web/src/main/java/org/springframework/http/HttpHeaders.java | 111 | 18 || src/docs/asciidoc/web/webflux.adoc | 108 | 21 || spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java | 107 | 9 || spring-test/spring-test.gradle | 105 | 7 || spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java | 105 | 13 || spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java | 101 | 12 || spring-web/src/main/java/org/springframework/web/client/RestTemplate.java | 98 | 17 || spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java | 96 | 14 || org.springframework.core/src/main/java/org/springframework/core/convert/TypeDescriptor.java | 93 | 4 || spring-core/src/main/java/org/springframework/core/ResolvableType.java | 92 | 10 |+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+ Concept Analysercoca concept Results Examples: +------------------+--------+| WORDS | COUNTS |+------------------+--------+| context | 590 || resolve | 531 || path | 501 || content | 423 || code | 416 || resource | 373 || property | 372 || session | 364 || attribute | 349 || properties | 343 || headers | 330 |+------------------+--------+ Count Refscoca count Results: +------------+--------------------------------------------------------------------------+| REFS COUNT | METHOD |+------------+--------------------------------------------------------------------------+| 2 | com.phodal.pholedge.book.BookRepository.byId || 2 | com.phodal.pholedge.book.model.Book.toRepresentation || 2 | com.phodal.pholedge.book.BookRepository.save || 2 | com.phodal.coca.analysis.JavaCallApp.parse || 2 | com.phodal.pholedge.book.BookRepository.save || 2 | com.phodal.coca.analysis.JavaCallApp.parse || 1 | com.phodal.pholedge.book.model.Book.save || 1 | evolution.analysis.jv.calls.JavaCallVisitor.parseNewType || 1 | evolution.analysis.jv.calls.JavaCallVisitor.isNotSpecialNewWord || 1 | com.phodal.pholedge.book.BookMapper.byId || 1 | com.phodal.pholedge.book.BookService.updateBook || 1 | com.phodal.pholedge.book.BookService.getBooksLists || 1 | com.phodal.pholedge.book.BookService.getBookById || 1 | com.phodal.pholedge.book.BookMapper.doSave || 1 | com.phodal.pholedge.book.BookMapper.list || 1 | com.phodal.pholedge.book.BookService.createBook || 1 | com.phodal.pholedge.book.BookFactory.create || 1 | com.phodal.pholedge.book.BookRepository.list || 1 | com.phodal.pholedge.book.model.Book.create |+------------+--------------------------------------------------------------------------+ Reverse Call Graphcoca rcall -c org.bytedeco.javacpp.tools.TokenIndexer.get Results: digraph G { edge [dir="back"];"org.bytedeco.javacpp.tools.Parser.extern" -> "org.bytedeco.javacpp.tools.Parser.declarations";"org.bytedeco.javacpp.tools.Parser.declarations" -> "org.bytedeco.javacpp.tools.Parser.extern";...} Auto Refactorsupport:
coca refactor -R rename.coca -p src/maincoca refactor -m move.config -p . Evaluatecoca evaluate Arduino Results(Old Version): +--------------------------------+-------+-----------------------+-------+-----------+| TYPE | COUNT | LEVEL | TOTAL | RATE |+--------------------------------+-------+-----------------------+-------+-----------+| Nullable / Return Null | 0 | Method | 1615 | 0.00% || Utils | 7 | Class | 252 | 2.78% || Static Method | 0 | Method | 1615 | 0.43% || Average Method Num. | 1615 | Method/Class | 252 | 6.408730 || Method Num. Std Dev / 标准差 | 1615 | Class | - | 7.344917 || Average Method Length | 13654 | Without Getter/Setter | 1100 | 12.412727 || Method Length Std Dev / 标准差 | 1615 | Method | - | 20.047092 |+--------------------------------+-------+-----------------------+-------+-----------+ New Version: | TYPE | TYPE COUNT | LEVEL | LEVEL TOTAL | VALUE = COUNT / TOTAL ||--------------------------------|------------|-----------------------|-------------|-----------------------|| Nullable / Return Null | 0 | Method | 6 | 0.00% || Utils | 0 | Class | 14 | 0.00% || Static Method | 1 | Method | 6 | 0.00% || Average Method Num. | 6 | Method/Class | 14 | 0.428571 || Method Num. Std Dev / 标准差 | 6 | Class | - | 0.646206 || Average Method Length | 0 | Without Getter/Setter | 0 | NaN || Method Length Std Dev / 标准差 | 0 | Method | - | NaN | Evaluate.json examples { "Nullable": { "Items": [ "nonnull.Name.testNull", "nonnull.Name.orElseNull", "org.ofbiz.base.util.UtilURL.fromResource", "org.ofbiz.base.util.UtilURL.getOfbizHomeRelativeLocationFromFilePath", "study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.toDomainModel", "study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.toDomainModel", "study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.of", "study.huhao.demo.infrastructure.persistence.blog.BlogPO.convertDomain" ] }, "ServiceSummary": { "LifecycleMap": null, "ReturnTypeMap": { "BookRepresentaion": [ "com.phodal.pholedge.book.BookService.getBookById", "com.phodal.pholedge.book.BookService.updateBook" ] }, "RelatedMethod": null }, "UtilsSummary": {}, "Summary": { "UtilsCount": 1, "ClassCount": 64, "MethodCount": 161, "StaticMethodCount": 19 }} Todococa todo results: +------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+| DATE | AUTHOR | MESSAGES | FILENAME | LINE |+------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+| 2019-12-09 | Cristian Maglie | happens on macosx, don't know | app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java | 118 || | | why | | || 2019-12-09 | Cristian Maglie | Make this a method of Theme | app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java | 233 || 2019-12-09 | Cristian Maglie | Do a better job in refreshing | app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java | 241 || | | only the needed element | | || 2019-12-09 | Cristian Maglie | Do a better job in refreshing | app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java | 273 || | | only the needed element | | || 2019-12-09 | Cristian Maglie | Make this a method of Theme | app/src/cc/arduino/contributions/libraries/ui/MultiLibraryInstallDialog.java | 149 || 2019-12-09 | Cristian Maglie | happens on macosx, don't know | app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java | 183 || | | why | | || 2019-12-09 | Cristian Maglie | show error | app/src/processing/app/Base.java | 1440 || 2019-12-09 | Cristian Maglie | error when importing. ignoring | app/src/processing/app/Base.java | 2423 || | | :( | | || 2019-12-09 | Cristian Maglie | Improve / move error handling | app/src/processing/app/Editor.java | 1541 || 2019-12-09 | Cristian Maglie | Should be a Theme value? | app/src/processing/app/EditorHeader.java | 78 || 2019-12-09 | Cristian Maglie | Should be a Theme value? | app/src/processing/app/EditorStatus.java | 73 || 2019-12-09 | Cristian Maglie | Improve decoupling | app/src/processing/app/EditorTab.java | 465 |+------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+``` Suggestcoca suggest results: +--------+------------------+--------------------------------+| CLASS | PATTERN | REASON |+--------+------------------+--------------------------------+| Insect | factory | too many constructor || Bee | factory, builder | complex constructor, too || | | many constructor, too many || | | parameters |+--------+------------------+--------------------------------+ Test Bad Smellscoca tbs results +---------------------+---------------------------------------------------------------+------+| TYPE | FILENAME | LINE |+---------------------+---------------------------------------------------------------+------+| DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 107 || DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 41 || DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 63 || RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 71 || RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 72 || RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 77 || DuplicateAssertTest | app/test/cc/arduino/net/PACSupportMethodsTest.java | 19 || DuplicateAssertTest | app/test/processing/app/macosx/SystemProfilerParserTest.java | 51 || DuplicateAssertTest | app/test/processing/app/syntax/PdeKeywordsTest.java | 41 || DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 57 || DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 83 || DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 109 |+---------------------+---------------------------------------------------------------+------+ Find unused depscoca deps -p _fixtures/deps/maven_sample results: +---------------------------+----------------------------------------+---------+| GROUPID | ARTIFACTID | SCOPE |+---------------------------+----------------------------------------+---------+| org.flywaydb | flyway-core | || mysql | mysql-connector-java | runtime || org.springframework.cloud | spring-cloud-starter-contract-verifier | test |+---------------------------+----------------------------------------+---------+ ShowcasesAndroid Studio Analysis Examples. Call with Roadmap
Documents Todo:
Tech Debt
DevInstall Go brew install go Env export GOROOT=/usr/local/opt/go/libexecexport GOPATH=$HOME/.goexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin clone git clone https://github.com/phodal/coca Test Frameworks go get github.com/onsi/ginkgogo get github.com/onsi/gomega LicenseArch based on Tequila Git Analysis inspired by Code Maat Test bad smells inspired by Test Smell Examples @ 2019 A Phodal Huang's Idea. This code is distributed under the MPL license. See |
请发表评论