APIFest08:TaskX

From APIDesign

(Difference between revisions)
Jump to: navigation, search
Line 14: Line 14:
and now your hunt can start. Repeat following tasks as many times you wish. First of all somehow select the solution you want to find problem in. Usually I use a diff:
and now your hunt can start. Repeat following tasks as many times you wish. First of all somehow select the solution you want to find problem in. Usually I use a diff:
<source lang="bash">
<source lang="bash">
-
diff -ru task1/solution03 task4/solution03
+
diff -ru task2/solution03 task3/solution03
</source>
</source>
Each difference is potential candidate for compatibility problem. It is just necessary to write code against the old API that does something different in the new version. If I notice some potential evolution problem, then I setup the '''against''' project and write a test into it to show the error:
Each difference is potential candidate for compatibility problem. It is just necessary to write code against the old API that does something different in the new version. If I notice some potential evolution problem, then I setup the '''against''' project and write a test into it to show the error:
Line 42: Line 42:
ant -f taskx/jhacker/against-solution03/build.xml run
ant -f taskx/jhacker/against-solution03/build.xml run
</source>
</source>
-
or by pressing F6 in the [[NetBeans]] IDE, your test is compiled, executed against ''taskA'' and it has to succeed. If it does, the test is executed against ''taskB'' library. If it fails, you have demonstrated [[BackwardCompatibility]] problem and that is why the build succeeds. '''Make sure you open the Output Window''' to see the real result! If the test succeeds with ''taskB'' library, the sources of your test are compiled once again against ''taskB'' library. This can fail, if there are source incompatibilities. Failure means your success, as you have demonstrated incompatibility! Perfect, you can repeat these steps for another solution.
+
or by pressing F6 in the [[NetBeans]] IDE, your test is compiled, executed against ''taskA'' and it has to succeed. If it does, the test is executed against ''taskB'' library. If it fails, you have demonstrated [[BackwardCompatibility]] problem and that is why the build succeeds. '''Make sure you open the Output Window''' to see the real resul! There is also the '''JUnit Result Window''' and it is not really helpful in the '''against''' project, but I do not know how to suppress its appearance. If the test succeeds with ''taskB'' library, the sources of your test are compiled once again against ''taskB'' library. This can fail, if there are source incompatibilities. Failure means your success, as you have demonstrated an incompatibility! Perfect, you can repeat these steps for another solution.
-
The rules for writing compatibility tests are similar to [http://openide.netbeans.org/tutorial/api-fest.html API Fest One] - e.g. the less '''tricks''' you use the better. Where trick means more or less Java Permission. Do not try to use reflection, with that every solution can be broken. Also do not use wildcard imports in source, that can easily break each solution as well. Rules are simple: ''less tricks is better'' and ''[[User:JaroslavTulach|I]] am the judge''. Enjoy!
+
The rules for writing compatibility tests are similar to [http://openide.netbeans.org/tutorial/api-fest.html API Fest One] - e.g. the less '''tricks''' you use the better. Where trick means more or less Java Permission. Do not try to use reflection that could obviously break each solution. Also do not use wildcard imports in source, that can easily break each solution as well. Rules are simple: ''less tricks is better'' and ''[[User:JaroslavTulach|I]] am the judge''. Enjoy!
After you are done, please generate the diff using ''hg diff'' and submit your solutions by Sun, Oct 26, 2008, morning of CET to [mailto:apifest08@apidesign.org our mailing list]. Possibly you can ZIP your sources and send them to us too. As soon as we process your submissions, I'll write an [[APIFest08]] report and announce winners. Also I will prepare [[TheAPIBook]] for the winner.
After you are done, please generate the diff using ''hg diff'' and submit your solutions by Sun, Oct 26, 2008, morning of CET to [mailto:apifest08@apidesign.org our mailing list]. Possibly you can ZIP your sources and send them to us too. As soon as we process your submissions, I'll write an [[APIFest08]] report and announce winners. Also I will prepare [[TheAPIBook]] for the winner.

Revision as of 06:00, 18 October 2008

The judgment day is here! Dear APIFest08 participants, during the last rounds, you were concentrated on making your own solution perfect. However since today you will have to stop looking just at your own solution, you will need to start digging in solutions provided by others to find possible evolution mistakes. This is a new task, different to what you have done so far, but I hope you'll make it. Because only if you find mistakes in solutions provided by others you will be allowed to win TheAPIBook.

If your own solution is found backward compatible, you'll be awarded with 10 points. By default you all have those points. However you can be awarded with 1 point by showing compatibility problems in each solution provided by someone else. Of course, in case somebody finds such problem, the author of the solution looses own 10 points. As I wrote in the last post, I know that at least five solutions have some problems, so do not give up and seek for them! Your points are waiting! Also please note that the fact that I may know about a problem of your solutions does not mean other participants are going to find it. Don't give up and good luck!

First of all you need to setup your working environment:

# create the repository
hg clone http://source.apidesign.org/hg/apifest08/
# or update it
hg pull; hg update
# create directory named by you Joe Hacker would have:
mkdir taskx/jhacker

and now your hunt can start. Repeat following tasks as many times you wish. First of all somehow select the solution you want to find problem in. Usually I use a diff:

diff -ru task2/solution03 task3/solution03

Each difference is potential candidate for compatibility problem. It is just necessary to write code against the old API that does something different in the new version. If I notice some potential evolution problem, then I setup the against project and write a test into it to show the error:

# select the solution you want to break, let supposed it is #3:
hg copy taskx/jtulach/against-solutionXY/ taskx/jhacker/against-solution03
# now open some of the created files in your favorite editor:
netbeans --open taskx/jhacker/against-solution03/project.properties

Now adjust the content of the properties file:

# change definition of apitotest property to solution03:
apitotest=solution03
# you can also adjust the taskA and taskB variables to 
# reflect the days that you want to compete against
# for example if there is compatibility problem between
# task2 and task3, change them to:
taskA=${apifest}/task2
taskB=${apifest}/task3

Now you can open the project in the NetBeans IDE

netbeans --open taskx/jhacker/against-solution03/

or directly edit its jhacker/against-solution03/test/apifest/CurrencyTest.java file. The goal is to make this file compilable against api available in the version taskA. If you execute the project:

ant -f taskx/jhacker/against-solution03/build.xml run

or by pressing F6 in the NetBeans IDE, your test is compiled, executed against taskA and it has to succeed. If it does, the test is executed against taskB library. If it fails, you have demonstrated BackwardCompatibility problem and that is why the build succeeds. Make sure you open the Output Window to see the real resul! There is also the JUnit Result Window and it is not really helpful in the against project, but I do not know how to suppress its appearance. If the test succeeds with taskB library, the sources of your test are compiled once again against taskB library. This can fail, if there are source incompatibilities. Failure means your success, as you have demonstrated an incompatibility! Perfect, you can repeat these steps for another solution.

The rules for writing compatibility tests are similar to API Fest One - e.g. the less tricks you use the better. Where trick means more or less Java Permission. Do not try to use reflection that could obviously break each solution. Also do not use wildcard imports in source, that can easily break each solution as well. Rules are simple: less tricks is better and I am the judge. Enjoy!


After you are done, please generate the diff using hg diff and submit your solutions by Sun, Oct 26, 2008, morning of CET to our mailing list. Possibly you can ZIP your sources and send them to us too. As soon as we process your submissions, I'll write an APIFest08 report and announce winners. Also I will prepare TheAPIBook for the winner.

Personal tools
buy