When analyzing the structure of JSPWiki, I found that there are a lot of
package that contains small amount of classes (Around 2 to 3 classes in a
package). I hope to get some insight from the developers if this decision
is intended? Overall the system is very cohesive and compose with a lot of
strongly related classes.
However, problem might occur if we were to remove/add new modules into the
system because a lot of software components might be affected. I might be
able to perform a traceability study on JSPWiki to identify the severity of
adding or removing a particular component from JSPWiki.

Regards,
Chong



On Sun, Jun 2, 2013 at 8:27 AM, Chun Yong <cych...@siswa.um.edu.my> wrote:

> Dear developers
>
> I had exclude all the UML association, dependency and generalization
> notation in the diagram that I had provided. This is because I found that
> if I were to include those notation, the diagram would look very messy and
> very hard to comprehend. For the grouping of classes into package, I had
> ensure that classes with inheritance relationship all always grouped into
> the same package to avoid breaking the hierarchy.
> I hope to receive some comments from the developers regarding the accuracy
> of the package diagram as well as its usefulness in term of software
> maintenance (i.e. from a scale from 1 to 5, 5 being very good).
> I strongly appreciate any kind of comments from the developers.
>
> Thanks and regards
> Chong
>
> On 28 May, 2013, at 8:37 PM, Chun Yong Chong <cych...@siswa.um.edu.my>
> wrote:
>
> Sorry for the confusion, I should have explained in detail in the first
> place. Yes, a "cluster" is a "Java Package".  Also, "entities" are "Java
> Classes". I should rephrase cluster as Java Package from now on.
> The distance between the entities are calculated based on two aspect:
> 1. The dependency between java classes by referring to [#1]. If A is
> depend on B, then a 1-1 relationship is established in between these two
> classes.
> 2. Inheritance of java classes. If A is the superclass of B or vice versa,
> then A and B must be in the same package (or in another word, in the same
> cluster).
> Next, I try to calculate the similarity between classes
> using Sorensen-Dice coefficient [#2] to find out the distance between A and
> B. If A=B, then the similarity is equal to zero. Next, based on the result
> this coefficient, a dendrogram is drawn. A dendrogram [#3] shows the
> correlation of data at different hierarchy. Cutting/pruning the dendrogram
> at different level generate different amount of java package with different
> amount of java classes inside the package.
> To answer your question regarding what is "entity distance", it is
> basically the average distance between Java classes inside a package.
> Ideally, if classes inside a package is cohesive, it should have low
> distance score among the Java classes. I made a mistake by saying "low
> cohesion" score. It should be "low distance" score. I am very sorry once
> again. The same principle goes to distance between package/cluster. If the
> package are well-defined, it should be far apart from each other.
>
> Regards,
> Chong
>
> [#1] https://analysis.apache.org/**plugins/resource/110730?page=**
> org.sonar.plugins.design.ui.**page.DesignPage<https://analysis.apache.org/plugins/resource/110730?page=org.sonar.plugins.design.ui.page.DesignPage>
> [#2] http://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient
> [#3] https://en.wikipedia.org/wiki/Dendrogram
>
>
> On Tue, May 28, 2013 at 8:09 PM, Glen Mazza <glen.ma...@gmail.com> wrote:
>
>> "Note that lower cohesion score implies that the distance between
>> entities inside the cluster is lower, which leads to more cohesive
>> cluster." -- What's a cluster?  (Do you mean "Java package"?)  Could you
>> define "entity distance" for us?  Also, a *lower* cohesion score means the
>> clusters are *more* cohesive?
>>
>> Glen
>>
>>
>> On 05/28/2013 02:41 AM, Chun Yong Chong wrote:
>>
>>> Dear Developers,
>>>
>>> Additional points to add. The breakdown of cohesion and coupling score
>>> for
>>> all three solutions are as below:
>>> JSPWiki1.jpg - Average Cohesion = 24 Average Coupling = 11.0
>>> JSPWiki2.jpg - Average Cohesion = 23 Average Coupling = 1.5
>>> JSPWiki3.jpg - Average Cohesion = 19 Average Coupling = 1.2
>>> Note that lower cohesion score implies that the distance between entities
>>> inside the cluster is lower, which leads to more cohesive cluster. Higher
>>> coupling score implies that the clusters are well separated in their own
>>> domain.
>>> As mentioned in my previous message, I feel that JSPWiki3.jpg is a better
>>> design view although it score badly in term of coupling score. This might
>>> be due to the way how software components in JSPWIKI are
>>> interacting/depending on each others. I found that several classes are
>>> acting like utility classes where a lot of function call are being made
>>> to
>>> the same classes.
>>> Hope to get some feedback from you guys.
>>>
>>>
>>> Regards,
>>> Chong
>>>
>>>
>>> On Mon, May 27, 2013 at 11:26 PM, Chun Yong Chong
>>> <cych...@siswa.um.edu.my>**wrote:
>>>
>>>  Dear dev,
>>>>
>>>> I had managed to use the information from [#1] (as pointed out by Juan)
>>>> and run through my algorithm to identify the similarity between
>>>> components
>>>> in JSPWiki. Basically my algorithm uses agglomerative clustering to
>>>> form a
>>>> dendrogram that depicts the hierarchy of relationships between each
>>>> entity
>>>> (each java classes represent one entity). I then tried to cut the
>>>> dendrogram at some certain threshold to form meaningful representation
>>>> of
>>>> the systems in the form of clusters. Entities that are related to each
>>>> others are clustered together. To decide whether the entities should be
>>>> cluster together, I measure the cohesion and coupling of each entities
>>>> based on the data mined from [#1].
>>>> All in all, I managed to come out with 3 possible solutions in the form
>>>> of
>>>> class/package diagram drawn in Visual Paradigm [#2]. The files are
>>>> accessible from this link:
>>>>
>>>> https://www.dropbox.com/sh/**bw2h0hn3wmiuwot/vyCAWueafI<https://www.dropbox.com/sh/bw2h0hn3wmiuwot/vyCAWueafI>
>>>>
>>>> The three sample solutions (JSPWIKI1.jpg, JSPWIKI2.jpg, JSPWIKI3.jpg)
>>>> yield 22, 32, and 63 clusters respectively. Out of all the possible way
>>>> to
>>>> cut the dendrogram, these 3 sample solutions achieve the best balance in
>>>> term of cluster cohesion and coupling. These solutions exhibit different
>>>> behaviour in term of cohesion and coupling strength:
>>>>
>>>> Solution 1 (22 clusters) - Highest coupling but lowest cohesion.
>>>> Clusters
>>>> are well-seperated from each others which leads to high coupling
>>>> strength.
>>>> However, the entities inside the same cluster is weakly bond together
>>>> and
>>>> resulting in clusters with a lot of entities (Package 22).
>>>> Solution 2 (32 clusters) - Average coupling and low cohesion.
>>>> Solution 3 (63 clusters) - Low coupling but highest cohesion. A lot of
>>>> small clusters are formed. However, the entities inside the same cluster
>>>> exhibit very high cohesion strength.
>>>>
>>>> In my opinion, solution 3 looks more convincing but it contains a lot of
>>>> clusters with small amount of entities (2-3). I am wondering if this
>>>> intended? Furthermore, I found that a lot of classes in JSPWiki are
>>>> dependant on class wiki.tags. Class wiki.tags. behave similar like an
>>>> utility class. It could probably get wrapped by an interface class for
>>>> better performance.
>>>> I hope to receive some feedbacks from fellow developers regarding the
>>>> accuracy/usefulness of this proposed result.
>>>>
>>>> Regards,
>>>> Chong
>>>>
>>>> [#1]:
>>>>
>>>> https://analysis.apache.org/**plugins/resource/110730?page=**
>>>> org.sonar.plugins.design.ui.**page.DesignPage<https://analysis.apache.org/plugins/resource/110730?page=org.sonar.plugins.design.ui.page.DesignPage>
>>>> [#2]:
>>>> http://www.visual-paradigm.**com/ <http://www.visual-paradigm.com/>
>>>>
>>>>
>>>> On Wed, May 15, 2013 at 6:32 AM, Juan Pablo Santos Rodríguez <
>>>> juanpablo.san...@gmail.com> wrote:
>>>>
>>>>  Hi Chong,
>>>>>
>>>>> I'm curious to see that high-level design view. A good starting point
>>>>> on
>>>>> what to modularize can be found at [#1], especially at the design tab
>>>>> [#2].
>>>>>
>>>>> As for concrete classes, you can take a look at WikiEngine, which uses
>>>>> ClassUtil#getMappedObject to locate helper classes which can be
>>>>> understood
>>>>> as entry points for the different modules/subsystems. Also,
>>>>> WikiEngine/WikiContext probably need to be wrapped with an interface,
>>>>> as
>>>>> they're passed around mostly everywhere
>>>>>
>>>>> Regarding the nifty UML diagrams, provided that you have graphviz
>>>>> binaries (
>>>>> www.graphviz.org) on your path, you can check out the maven branch
>>>>> [#3]
>>>>> and
>>>>> execute mvn javadoc:javadoc you'll get those diagrams embedded within
>>>>> the
>>>>> javadocs at app, package and class level.
>>>>>
>>>>>
>>>>> br,
>>>>> juan pablo
>>>>>
>>>>> [#1]: 
>>>>> https://analysis.apache.org/**dashboard/index/110730<https://analysis.apache.org/dashboard/index/110730>
>>>>> [#2]:
>>>>>
>>>>> https://analysis.apache.org/**plugins/resource/110730?page=**
>>>>> org.sonar.plugins.design.ui.**page.DesignPage<https://analysis.apache.org/plugins/resource/110730?page=org.sonar.plugins.design.ui.page.DesignPage>
>>>>>  [#3<https://analysis.apache.**org/plugins/resource/110730?**
>>>>> page=org.sonar.plugins.design.**ui.page.DesignPage[#3<https://analysis.apache.org/plugins/resource/110730?page=org.sonar.plugins.design.ui.page.DesignPage[#3>
>>>>> >
>>>>>
>>>>> ]:
>>>>> https://svn.apache.org/repos/**asf/incubator/jspwiki/**
>>>>> branches/MVN3_BRANCH<https://svn.apache.org/repos/asf/incubator/jspwiki/branches/MVN3_BRANCH>
>>>>>
>>>>> On Tue, May 14, 2013 at 3:38 PM, Chun Yong Chong <
>>>>> cych...@siswa.um.edu.my
>>>>>
>>>>>> wrote:
>>>>>> Hi Glen!
>>>>>>
>>>>>> Thanks for the feedback. I fully understand your concern. I would not
>>>>>> attempt to change any component/structure of the source code but
>>>>>> rather
>>>>>> provide a high-level design view of JSPWiki to fellow developers. This
>>>>>> high-level design view will solely depend on the structure of the
>>>>>> source
>>>>>> code. For example, components/classes that behave similarity (method
>>>>>>
>>>>> call,
>>>>>
>>>>>> shared variable, share data, etc.) will be clustered into the same
>>>>>>
>>>>> package
>>>>>
>>>>>> diagram. Ultimately, I hope the resulting high-level design view can
>>>>>> improve the modularity of future release of JSPWiki
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, May 14, 2013 at 8:51 PM, Glen Mazza <glen.ma...@gmail.com>
>>>>>>
>>>>> wrote:
>>>>>
>>>>>> Hi Chun.  Could be a good idea, much of our code may be rather old and
>>>>>>> could use a reexamination.  I work still at a macro level with
>>>>>>>
>>>>>> JSPWiki so
>>>>>
>>>>>> can't answer yet which modules could use improvement--perhaps others
>>>>>>>
>>>>>> can
>>>>>
>>>>>> give you a suggestion.
>>>>>>>
>>>>>>> We're already modularizing as part of Maven, but the modularization
>>>>>>>
>>>>>> you
>>>>>
>>>>>> mention is of a much more granular (class-level) manner, so I don't
>>>>>>>
>>>>>> think
>>>>>
>>>>>> your work would effect that.  Main concern I have is that many
>>>>>>>
>>>>>> university
>>>>>
>>>>>> types get bored after a few weeks and end up switching projects so I
>>>>>>> wouldn't want any massive changes to JSPWiki that are dependent on
>>>>>>>
>>>>>> your
>>>>>
>>>>>> presence and would leave JSPWiki in a heavily unfinished state if you
>>>>>>>
>>>>>> were
>>>>>>
>>>>>>> to leave it.  In other words, I'll let you paint a house if you paint
>>>>>>> room-by-room, so if you leave there can only be one unfinished room
>>>>>>> to
>>>>>>>
>>>>>> deal
>>>>>>
>>>>>>> with; *not* by painting 10% of every room before finishing any,
>>>>>>>
>>>>>> requiring
>>>>>
>>>>>> *every* room to be repainted if you leave.
>>>>>>>
>>>>>>> Another concern is that sometimes the class design necessary for
>>>>>>>
>>>>>> beautiful
>>>>>>
>>>>>>> UML diagrams and that for easy understanding and maintenance are not
>>>>>>>
>>>>>> the
>>>>>
>>>>>> same.
>>>>>>>
>>>>>>> Glen
>>>>>>>
>>>>>>>
>>>>>>> On 05/14/2013 04:13 AM, Chun Yong Chong wrote:
>>>>>>>
>>>>>>>  Dear devs,
>>>>>>>>
>>>>>>>> I understand that jspwiki is in incubator stage and requires
>>>>>>>>
>>>>>>> contributors
>>>>>>
>>>>>>> to improve the project. I am currently developing an algorithm to
>>>>>>>>
>>>>>>> reverse
>>>>>>
>>>>>>> engineer java source codes into clusters of cohesive classes to give
>>>>>>>>
>>>>>>> a
>>>>>
>>>>>> better view of the software design. The output will be represented in
>>>>>>>>
>>>>>>> UML
>>>>>>
>>>>>>> class and package diagram. The output will assist developers when
>>>>>>>> modifying
>>>>>>>> or adding new modules into the system. Developers can easily
>>>>>>>> identify
>>>>>>>> correlated software components when modifying a particular module.
>>>>>>>> Thus, I hope to receive some ideas from fellow developers as in
>>>>>>>> which
>>>>>>>> module of the software requires re-modularization. Finally, I hope
>>>>>>>>
>>>>>>> that
>>>>>
>>>>>> interested developers can assist me in verifying the quality of the
>>>>>>>>
>>>>>>> output
>>>>>>
>>>>>>> after re-modularization.
>>>>>>>>
>>>>>>>> Thanks and regards,
>>>>>>>> Chong
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>
>>
>

Reply via email to