It is good that you use a real project now. What I like to see how many 
"bundles" we have after the first round, where you group strongly connected 
packages. This should already simplify because the nr of entities will be 
smaller.

I need to see a real case. Step 1 is ok, but maybe you can add merging of 
bundles that have identical usesExternal (imports). And make sure you ignore 
all java.* to make the info smaller (in OSGi, java is always provided by the 
VM). Can you just print out something like

name            usesInternal            usesExternal
g1              g2                      a,b,c
g2                                      d,e,f

I hope we see one big bundle which is the core and then have to find rules to 
classify the remaining bundles. I expect there are the following categories:

core            implementation classes, lots of strongly connected packages
api             api classes, do not refer to core, very few imports
bridge          refer strongly to core and have expensive imports


At this stage, the trick is to do some work by hand until you find you really 
understand the problem.

It would be perfect if you could take a look at Tinkerpop and JUNG. I think it 
would be quite easy to visualize the graph of dependencies.

Kind regards,

        Peter Kriens




On 26 jul 2011, at 16:24, Tiger Gui wrote:

> Hi Peter,
> 
> This is the whole application split algorithm here. After application
> source code analyse algorithm described here[1], we can know each
> package/class use which packages/classes and be used by which
> packages/classes. Now, we just discuss package here, we treat package
> as a single atom, each package has three important attributes, usedBy,
> usesExternal and usesInternal, just like below:
> 
> <package name="org.apache.catalina.deploy"
> sources="/E:/GSoC/gsoc2011osgi/runtime-New_configuration/TomcatJava/bin"
> size="30" usedBy="8" usesInternal="11" usesExternal="14" layer="6"
> cycle="org.apache.catalina et al.">
>      <packageRef name="org.apache.catalina.core" type="usedBy"/>
>      <packageRef name="org.apache.catalina.startup" type="usedBy"/>
>      <packageRef name="org.apache.catalina.deploy" type="usedBy"/>
>      <packageRef name="org.apache.catalina.authenticator" type="usedBy"/>
>      <packageRef name="org.apache.catalina" type="usedBy"/>
>      <packageRef name="org.apache.catalina.mbeans" type="usedBy"/>
>      <packageRef name="org.apache.catalina.connector" type="usedBy"/>
>      <packageRef name="org.apache.catalina.realm" type="usedBy"/>
>      <packageRef name="java.lang" type="usesExternal"/>
>      <packageRef name="java.io" type="usesExternal"/>
>      <packageRef name="org.apache.catalina.deploy" type="usesInternal"/>
>      <packageRef name="org.apache.catalina.util" type="usesInternal"/>
>      <packageRef name="java.util" type="usesExternal"/>
>      <packageRef name="org.apache.juli.logging" type="usesInternal"/>
>      <packageRef name="org.apache.tomcat.util.res" type="usesInternal"/>
>      <packageRef name="java.beans" type="usesExternal"/>
>      <packageRef name="(default package)" type="usesExternal"/>
>      <packageRef name="org.apache.catalina" type="usesInternal"/>
>      <packageRef name="org.apache.catalina.mbeans" type="usesInternal"/>
>      <packageRef name="javax.management" type="usesExternal"/>
>      <packageRef name="namingResources" type="usesExternal"/>
>      <packageRef name="javax.naming" type="usesExternal"/>
>      <packageRef name="org.apache.naming" type="usesInternal"/>
>      <packageRef name="java.lang.reflect" type="usesExternal"/>
>      <packageRef name="javax.servlet" type="usesInternal"/>
>      <packageRef name="javax.servlet.annotation" type="usesInternal"/>
>      <packageRef name="org.apache.catalina.order" type="usesExternal"/>
>      <packageRef name="java.net" type="usesExternal"/>
>      <packageRef name="webXml" type="usesExternal"/>
>      <packageRef name="webXml.version" type="usesExternal"/>
>      <packageRef name="webxml" type="usesExternal"/>
>      <packageRef name="org.apache.catalina.core" type="usesInternal"/>
>      <packageRef name="javax.servlet.descriptor" type="usesInternal"/>
>    </package>
> 
> usedBy means who use current package;
> usesInternal means which packages current package use in current
> application source code;
> usesExternal means which packages current pakcage use not in current
> application's source code.
> 
> Now, we start split the whole application in to bundles, according to
> above algorithm source code analyse algorithm, we can also know
> package cycles in current application.
> 
> 1. Treat each package cycle as a single bundle;
> 2. Treat each packages not in cycle as a single bundle;
> 3. Then we should decide which bundles can be merged into one new bundle;
> 
> First round merge job:
> 4. If one bundle's all usesInternal elements are in the other bundle,
> these two bundles should be merged into a new bundle;
> 
> Think about how to merge used by only bundle (bundle be used only by
> other bundle, it does not rely on any other bundle):
> Define two variable for used by only bundle:
> sameUB: it means the number of two bundles have same usedBy elements.
> sameUE: it menas the number of two bundles have same usedExternal
> external package rely elements.
> 
> boolean condition1 = 4 * sameUB >= one.usedByList.size() +
> two.usedByList.size();
> boolean condition2 = 2 * sameUE >= one.usedExternalList.size() +
> two.usedExternalList.size();
> 
> if condition1 or condition2 is true, we should merge these two usedBy
> only bundle.
> 
> Merge the other bundles:
> 5.The core problem is how to decide two bundles(bundle one and bundle
> two) can be merged or not.
> 
> Define 5 variables:
> uiNumber: the sum of bundle one's usesInternal elements in bundle two
> number and bundle two's usesInternal elements in bundle one number;
> 
> ubNumber:the sum of bundle one's usedBy elements in bundle two number
> and bundle two's usedBy elements in bundle one number;
> 
> sameUI: the same usesInternal number bundle one and two have
> 
> sameUB: Be similar with used by only bundle's this variable
> 
> sameUE: Be similar with used by only bundle's this variable
> 
> Define these conditions:
> boolean condition1 = 2 * uiNumber >= one.usesInternalList.size() +
> two.usesInternalList.size();
> boolean condition2 = 2 * ubNumber >= one.usedByList.size() +
> two.usedByList.size() ;
> boolean condition3 = 3.5 * sameUI >= one.usesInternalList.size() +
> two.usesInternalList.size();
> boolean condition4 = 4 * sameUB >= one.usedByList.size() +
> two.usedByList.size();
> boolean condition5 = 3 * sameUE >= one.usedExternalList.size() +
> two.usedExternalList.size();
> 
> If any above condition is true, these two bundles can be merged. But
> these are another problem, if bundle A can be merged with B, but it
> also can be merged with C, now, we should decide merge A with B or A
> with C.
> 
> Define the follow attribute:
> int mergeFactor= 2 * (uiNumber + ubNumber) + 0.4 * (sameUI + sameUB) +
> 0.2 * sameUE - number;
> 
> If A and B's mergeFactor is 20 and A and C's mergeFactor is 30, we
> should merge A and C.
> 
> This is current merge algorithm in OSGiMaker, i will keep on improving
> it, use class relationship factors or etc. You can find the source
> code detail of this algorithm in class AnalyseJob of our project.
> 
> The attach file is the analyse result document OSGiMaker analyse
> Tomcat's source code and split it into bundles, you can have a review.
> 
> 
> In fact, i did not want to bother you too much, but it seems that you
> have enough time to help me to improve it, this is a good thing. If
> you have any advises, please let me know, let's improving it together
> :-)
> 
> Thank you
> 
> [1] 
> http://code.google.com/p/osgimaker/wiki/Implement_of_project_analyse_algorithm
> 
> 2011/7/26 Peter Kriens <peter.kri...@aqute.biz>:
>> Well, I do not think I am eager but I have a hard time getting a feeling 
>> where you are. You do not have to send reports, I want to see intermediate 
>> results and discuss issues if there are any. As I said earlier, it is not 
>> clear to me yet what the best algorithm is so that need to be worked out 
>> before we do the gui stuff.
>> 
>> Kind regards,
>> 
>>        Peter Kriens
>> 
>> 
>> 
>> On 26 jul 2011, at 11:24, Tiger Gui wrote:
>> 
>>> In my schedule, i will report current status to you tomorrow as i
>>> think i can get a usable version today,  the whole analyse and split
>>> algorithm is complex i have to organize a document to describe it
>>> clearly. As you are really eager to see its progress, it is OK, i will
>>> start the report now
>>> 
>>> 2011/7/26 Peter Kriens <peter.kri...@aqute.biz>:
>>>> If that is the case you have to provide more on going feedback. What 
>>>> happened to the analysis by hand?
>>>> 
>>>> Kind regards,
>>>> 
>>>>        Peter Kriens
>>>> 
>>>> 
>>>> On 26 jul 2011, at 11:02, Tiger Gui wrote:
>>>> 
>>>>> No, Peter, i am really working hard for this project, you can check
>>>>> the progress here[1]. Now, this tool can analyse a whole project and
>>>>> export the its analyse result to bundles( I test it in Spring and
>>>>> Tomcat project), if possible, you can install it in your Eclipse and
>>>>> have a trial of it. But, i am still improving the split algorithm as
>>>>> the current algorithm is not working perfect.
>>>>> 
>>>>> I will supply a document about the current status of this project and
>>>>> a simple guide for you to have a trial of it. I am really working very
>>>>> hard for it these days :-(
>>>>> 
>>>>> [1] http://code.google.com/p/osgimaker/updates/list
>>>>> 
>>>>> 2011/7/26 Peter Kriens <peter.kri...@aqute.biz>:
>>>>>> I am getting the feeling that you're not working very hard on this 
>>>>>> project and only does something just for the evaluations ...
>>>>>> 
>>>>>>        Peter Kriens
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Best Regards
>>>>> ----------------------------------------------------
>>>>> Tiger Gui [tigergui1...@gmail.com]
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Best Regards
>>> ----------------------------------------------------
>>> Tiger Gui [tigergui1...@gmail.com]
>> 
>> 
> 
> 
> 
> -- 
> Best Regards
> ----------------------------------------------------
> Tiger Gui [tigergui1...@gmail.com]
> <TomcatJava.analyse>

Reply via email to