Tool for understanding indirect links between code.Requires Connectors.If you have trouble, please run the tests first. Documentation:Paper for ESUG 2003:http://esug2003.esug.org/academic/1-vainsencher.pdfShort description of that presentation:http://wiki.eranova.si/esug/MudPie And something like a tutorial is below: Start executing these from the top (use print it or explore it): mma _ MultiModuleAnalyzer onCategoriesWithPrefix: 'FFI'mma isNonCyclicmma packageStrongComponentsmma badStrongComponentsIn: mma packageStrongComponentsmma badStrongComponentsIn: mma classStrongComponents "this is no big deal - just 2 classes. And classes that collaborate closely will often know each other, and they're in the same category, so it's a given that they will be loaded/unloaded together" "The eToys Protocols stuff has some issues - it's categories are not built as hierarchially partitioned layers. This will show pretty quickly."mma _ MultiModuleAnalyzer onCategoriesWithPrefix: 'Protocols'mma isNonCyclicmma packageStrongComponentsmma badStrongComponentsIn: mma packageStrongComponentsMessageSet openMessageList: mma cycleExampleForLargestPackageStrongComponent name: 'Methods/inheritance references that create one bad cycle (might be more)'CodeAnalyzer clumpinessOfComponents: mma packageStrongComponents "To see how some more basic infrastructure used, walk through the following.setup (this will take a minute or two):" graph _ CodeGraphCreator graphForClassesAndExtensions: Smalltalk allClasses "The following show one way each class is dependent on the other (therecould be other ways):" CodeAnalyzer referencePathBetweenClass: MIMEDocument andClass: Object in: graph CodeAnalyzer referencePathBetweenClass: Object andClass: MIMEDocument in: graph "a far less proper dependency..." CodeAnalyzer referencePathBetweenClass: MIMEDocument andClass: GeeBookMorph in: graph "You can also find paths between groups of classes (useful to analyze whole categories): " GraphAnalyzer new shortestPathFro