"Christo" is an open-source tool to dynamically and safely retrieve code-coverage in Squeak. It provides a simple user interface, hiding the complexity of dynamic analysis and offers many powerful extensions compared to 'standard' code coverage tools.
Download / How to get Christo
Install by yourself:
- Load the package "PackageLoader" from SqueakSource (http://www.squeaksource.com/PackageLoader)
- Run "CoverageLoader new loadAll" in a workspace ... This will interactively install Christo and all its dependencies into your image.
Download an all-inclusive image (running version, but likely not up-to-date)
- All-inclusive Squeak-Image (Testing-xxxx-xx-xx.zip).
Public sources on SqueakSource:
- A very Quick-Video-Intro to Christo
- Some example Screenshots from "Christo" Browsers and Visualisations ...
- Statistics, Case Studies and more ...
Features of Version 0.1
- Exchanging analysis technology, default: ByteSurgeon
- Collecting any kind of runtime data, for example senders, receivers, contex, arguments, ... default: senders/calls
Technology independence. Currently supported: ByteSurgeon, JMethods/Ast-Interpretation, MethodWrappers, ObjectsAsMethods
Method and sub-method coverage
Dynamic links between tests and sources
System coverage notification events
Persistent live-cache of dynamic data
Image-Safety, unsafe nodes don't get method-wrapped
- Simple and intuitive browsers completely hiding the complexity of dynamic analysis
- Coverage-Configurations to quickly change the scopes of coverage
- Coloring of nodes, for example classes, methods, sub-method-nodes, ...
- 1-click coverage
- Tightly integrating unit testing, debugging, profiling and coverage
- Additional actions to support testing, coverage, ...
Partial Ordering of Tests
- Browser and Visualization using GraphViz and Mondrian
- Graph/Image-Export for GraphViz
- Complexity View for debugging purposes
- Identification of the least/most abstract test
(beta) (Delta) Debugger
- Kind of (delta) Debugger to more effectively and efficiently debug tests/sources
- Multiple different strategies exists
(beta) Code Generation
- Test-code generation based on coverage-analysis (templates only)
- Coverage and Partial Ordering of Tests
- Various Visualizations to more effectively search for badly covered sources or complex/ abstract tests, ...
- Generation on Seaside-Server pages
- Dynamically updating
Known Bugs of Version 0.1
Visualization-Scripts don't work on all nodes -> Dictionary/Graph-Bug
- Coloring of sub-method doesn't work properly
- block variables are not annotated
- producing empty/nil results
- failing tests
MethodWrappers are broken in 3.9
- Compilation of Methods
Install/Uninstall instrumentation bug
- optimization had some very nasty side effects -> wrappers don't work correctly, produce garbage in systemn dictionaries
Plans for future versions:
Complete refactoring of the coverage-kernel
- Sub-method coverage as standard + coloring + dyn type information (args, ...)
- Smaller, lightweight, get rid of some high level code/abstractions making the analysis slow
- Full-tracing techs
- Unification of nodes (clean-up)
- Un-installation routines (fix and accelerate)
- Improve safety, but base don technology, not global
- Scoped Coverage
- Gepetto 2 and Object Flow !!!
- Adapt to the latest OBs
- Better, faster browsers (old OBs are slow!)
- Better actions and visualizations (focus)
- Even tighter integation into the coding/testing process
- More interactivity/agility (browsers, visualizations, debugging, ...)
- Enhance the cache with the graph-based dictionary
- More transparency
- Seaside components, visualizaions
- Ansync-Coverage / "Multithreaded" anaylsis (?)
- Enhancing the Delta Debugger, maybe implementing a real Delta Debugger
- Better graphs, Layouts, ...
- Real code/test analysis and real code generation
- simpler, more stable !!!
- My Master Thesis ;) ...