> 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]

Reply via email to