Return-Path: Delivered-To: apmail-ant-dev-archive@www.apache.org Received: (qmail 20777 invoked from network); 5 Jun 2006 05:20:40 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 5 Jun 2006 05:20:40 -0000 Received: (qmail 67765 invoked by uid 500); 5 Jun 2006 05:20:39 -0000 Delivered-To: apmail-ant-dev-archive@ant.apache.org Received: (qmail 67715 invoked by uid 500); 5 Jun 2006 05:20:39 -0000 Mailing-List: contact dev-help@ant.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Ant Developers List" Reply-To: "Ant Developers List" Delivered-To: mailing list dev@ant.apache.org Received: (qmail 67701 invoked by uid 99); 5 Jun 2006 05:20:38 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 04 Jun 2006 22:20:38 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [130.216.190.11] (HELO groucho.itss.auckland.ac.nz) (130.216.190.11) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 04 Jun 2006 22:20:37 -0700 Received: from localhost (smtpa.itss.auckland.ac.nz [127.0.0.1]) by groucho.itss.auckland.ac.nz (Postfix) with ESMTP id A0F79350CF for ; Mon, 5 Jun 2006 17:20:14 +1200 (NZST) Received: from groucho.itss.auckland.ac.nz ([127.0.0.1]) by localhost (smtpa.itss.auckland.ac.nz [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 30874-10 for ; Mon, 5 Jun 2006 17:20:14 +1200 (NZST) Received: from localhost (webmail1.ec.auckland.ac.nz [130.216.190.25]) by groucho.itss.auckland.ac.nz (Postfix) with ESMTP id 77D473528B for ; Mon, 5 Jun 2006 17:20:12 +1200 (NZST) Received: from prj-hmel011.cs.auckland.ac.nz (prj-hmel011.cs.auckland.ac.nz [130.216.42.50]) by webmail1.ec.auckland.ac.nz (IMP) with HTTP for ; Mon, 5 Jun 2006 17:19:38 +1200 Message-ID: <1149484778.4483beea1c5ba@webmail1.ec.auckland.ac.nz> Date: Mon, 5 Jun 2006 17:19:38 +1200 From: Hayden Melton Reply-To: hayden@cs.auckland.ac.nz To: Ant Developers List Subject: Re: Structure of Ant (OO Design) References: <4475A4E7.7090509@apache.org> <87lksqi4d6.fsf@www.samaflost.de> <1149315369.44812929e6fe3@webmail1.ec.auckland.ac.nz> <1149476853.44839ff5c4d0c@webmail1.ec.auckland.ac.nz> <0A04463C-1A24-4C9B-9483-A78D50E84F13@gmail.com> In-Reply-To: <0A04463C-1A24-4C9B-9483-A78D50E84F13@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit User-Agent: Internet Messaging Program (IMP) 3.2.3 X-Virus-Scanned: by amavisd-new at mailhost.auckland.ac.nz X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N > 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: dev-unsubscribe@ant.apache.org For additional commands, e-mail: dev-help@ant.apache.org