> So you analyse each of the source files to determine which other > source files they depend on. This seems to be a Java-centric > analysis in that it relies on the source files containing a class > each? Is that correct? Ie would this be able to analyse source > files that contain many classes (like in other languages which don't > have the general 1 class/source file structure of Java)?
Yeah my analysis is Java-centric. In other languages there might be multiple (top-level classes) per source file. Other people have suggested similar analyses for other languages (see John Lakos, Large Scale C++ Software Design http://www.amazon.com/gp/product/0201633620/002-6391393-4360864?v=glance&n=283155 ) In fact, Java can have multiple classes declared in one source file (nested classes and inner classes. But since a source file is the usual `physical' unit we deal with as programmers it makes sense to look at dependencies between .java files. > From you analysis, does the 'flatter' the structure have any > correlation with the complexity of the code, or any other 'quality' > metric? Yip --- the flatter (and more `acyclic') the graph, the easier the system should be to understand, test and reuse. I have explained the reasons why on my research page: http://www.cs.auckland.ac.nz/~hayden/research.htm > Sorry to bug you about this, but I'm fairly interested in this (from > a layman's perspective), and I've got a fairly easy day at work so > I'm free to send inquiring emails :) The raw data is available for Ant, along with the tool I used to collect the data. My tool says that these classes are all (transitively) mutually dependent in ant 1.6.5: org.apache.tools.ant.filters.TokenFilter org.apache.tools.ant.types.RegularExpression org.apache.tools.ant.util.regexp.Regexp org.apache.tools.ant.filters.BaseFilterReader org.apache.tools.ant.types.selectors.ContainsRegexpSelector org.apache.tools.ant.loader.AntClassLoader2 org.apache.tools.ant.types.selectors.DateSelector org.apache.tools.ant.types.selectors.BaseSelectorContainer org.apache.tools.ant.filters.PrefixLines org.apache.tools.ant.AntClassLoader org.apache.tools.ant.types.Reference org.apache.tools.ant.filters.EscapeUnicode org.apache.tools.ant.types.AntFilterReader org.apache.tools.ant.types.selectors.NotSelector org.apache.tools.ant.filters.HeadFilter org.apache.tools.ant.taskdefs.condition.Condition org.apache.tools.ant.ProjectHelper org.apache.tools.ant.filters.ExpandProperties org.apache.tools.ant.AntTypeDefinition org.apache.tools.ant.filters.util.ChainReaderHelper org.apache.tools.ant.types.AbstractFileSet org.apache.tools.ant.types.EnumeratedAttribute org.apache.tools.ant.types.selectors.modifiedselector.DigestAlgorithm org.apache.tools.ant.helper.ProjectHelper2 org.apache.tools.ant.util.JavaEnvUtils org.apache.tools.ant.PropertyHelper org.apache.tools.ant.types.Path org.apache.tools.ant.taskdefs.Definer org.apache.tools.ant.types.selectors.ExtendSelector org.apache.tools.ant.DynamicAttributeNS org.apache.tools.ant.DynamicAttribute org.apache.tools.ant.UnsupportedElementException org.apache.tools.ant.BuildEvent org.apache.tools.ant.types.selectors.BaseSelector org.apache.tools.ant.types.FilterSetCollection org.apache.tools.ant.types.FilterChain org.apache.tools.ant.RuntimeConfigurable org.apache.tools.ant.TypeAdapter org.apache.tools.ant.types.selectors.DepthSelector org.apache.tools.ant.util.JAXPUtils org.apache.tools.ant.util.LineTokenizer org.apache.tools.ant.input.DefaultInputHandler org.apache.tools.ant.DirectoryScanner org.apache.tools.ant.types.FileList org.apache.tools.ant.types.selectors.MajoritySelector org.apache.tools.ant.taskdefs.Manifest org.apache.tools.ant.Executor org.apache.tools.ant.taskdefs.DefBase org.apache.tools.ant.types.selectors.SizeSelector org.apache.tools.ant.util.FileUtils org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector org.apache.tools.ant.types.selectors.MappingSelector org.apache.tools.ant.SubBuildListener org.apache.tools.ant.types.DataType org.apache.tools.ant.types.Substitution org.apache.tools.ant.Project org.apache.tools.ant.types.selectors.DifferentSelector org.apache.tools.ant.types.selectors.PresentSelector org.apache.tools.ant.filters.TailFilter org.apache.tools.ant.helper.AntXMLContext org.apache.tools.ant.input.InputHandler org.apache.tools.ant.helper.ProjectHelperImpl org.apache.tools.ant.filters.ClassConstants org.apache.tools.ant.taskdefs.Antlib org.apache.tools.ant.util.LoaderUtils org.apache.tools.ant.types.Mapper org.apache.tools.ant.PathTokenizer org.apache.tools.ant.types.selectors.SelectorContainer org.apache.tools.ant.taskdefs.AntlibDefinition org.apache.tools.ant.filters.StripLineBreaks org.apache.tools.ant.filters.StripLineComments org.apache.tools.ant.types.FilterSet org.apache.tools.ant.util.regexp.RegexpMatcherFactory org.apache.tools.ant.ComponentHelper org.apache.tools.ant.types.selectors.SelectSelector org.apache.tools.ant.ProjectComponent org.apache.tools.ant.types.PatternSet org.apache.tools.ant.types.selectors.FilenameSelector org.apache.tools.ant.types.Description org.apache.tools.ant.types.selectors.SelectorScanner org.apache.tools.ant.util.CompositeMapper org.apache.tools.ant.util.ContainerMapper org.apache.tools.ant.taskdefs.Typedef org.apache.tools.ant.taskdefs.condition.Os org.apache.tools.ant.types.selectors.TypeSelector org.apache.tools.ant.types.selectors.FileSelector org.apache.tools.ant.TaskContainer org.apache.tools.ant.types.selectors.AndSelector org.apache.tools.ant.types.selectors.BaseExtendSelector org.apache.tools.ant.TaskAdapter org.apache.tools.ant.filters.StripJavaComments org.apache.tools.ant.filters.TabsToSpaces org.apache.tools.ant.types.selectors.DependSelector org.apache.tools.ant.util.regexp.RegexpFactory org.apache.tools.ant.UnsupportedAttributeException org.apache.tools.ant.filters.LineContainsRegExp org.apache.tools.ant.DynamicElement org.apache.tools.ant.BuildListener org.apache.tools.ant.taskdefs.PreSetDef org.apache.tools.ant.filters.ReplaceTokens org.apache.tools.ant.Task org.apache.tools.ant.types.selectors.ExtendFileSelector org.apache.tools.ant.types.selectors.NoneSelector org.apache.tools.ant.UnknownElement org.apache.tools.ant.types.selectors.ContainsSelector org.apache.tools.ant.types.FileSet org.apache.tools.ant.Location org.apache.tools.ant.util.regexp.RegexpMatcher org.apache.tools.ant.DynamicElementNS org.apache.tools.ant.BuildException org.apache.tools.ant.Target org.apache.tools.ant.types.DirSet org.apache.tools.ant.IntrospectionHelper org.apache.tools.ant.types.selectors.OrSelector org.apache.tools.ant.filters.BaseParamFilterReader org.apache.tools.ant.filters.LineContains org.apache.tools.ant.util.ClasspathUtils > On the other hand I suppose I should really read your research > properly as you've probably described exactly how and where your > analysis works/fails Yeah, you should take a gander. Pretty much everything I have said in this email is explained there. It might be a bit wordy, but I have tried to be thorough. Incidentally, I have posted to a number of mailing lists results that I have collected from analysing various applications. All the feedback I get from developers about their feelings on the quality of the design of their system w.r.t. transitive compilation dependencies is very useful for my research. Cheers, / Hayden. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]