Testing on Dspace
-----------------

                 Key: DS-532
                 URL: http://jira.dspace.org/jira/browse/DS-532
             Project: DSpace 1.x
          Issue Type: Improvement
          Components: DSpace API
    Affects Versions: 1.6.0
         Environment: Any
            Reporter: Pere Villega
            Priority: Minor
         Attachments: DSpace-1.6-jmeter.jmx, mvn_reports.patch, tests.patch

Hi everybody,

I'm writing on behalf of Enovation Solutions. After contacting Tim Donohue and 
Stuart Lewis,  we did a bit of  work on testing for DSpace. What I send you now 
is, as commented to Tim Donohue and Stuart Lewis,  some scaffolding that can 
allow others to continue. I send the current files so you can validate and 
comment on them. Be aware this is a initial work, to see how feasible is to 
integrate unit testing on Dspace, detect any possible issues and provide a 
platform to start developing more cases.

I've submitted a GSoC 2010 proposal to continue on this work in a personal 
basis, as Enovation will gladly support my efforts on this. If you find it 
interesting and useful, please consider the proposal. 

We have created 3 components for DSpace, which I list next with some comments 
on each:

1) JMeter

It was mentioned by Tim Donohue and Stuart Lewis that some JMeter scripts for 
both regression and performance testing would be interesting, so we have 
created a script for that (see attached file Dspace-1.6-jmeter.jmx) 

The script includes:
- Testing for a vanilla JSPUI dspace (deployed with no data at all)
- Testing for a vanilla JSPUI dspace (deployed with some data)
- Testing for OAI-PMH (deployed with some data)

The script is properly parametrised so you can run it from command-line in a 
continuous integration environment.

Be aware JMeter is focussed on performance testing more than regression, so  
the script does a fairly basic test by checking that the main links of DSpace 
don't return any error, and by verifying they contain expected fields and data. 
It can't manage submission of items or other similar forms in enough detail to 
be more useful, but should be enough for a quick validation check.

At a later stage we will probably develop some Selenium scripts for functional 
testing on DSpace, but this is a work in progress and will take a while (can't 
give any realistic estimate on it).

2) Maven reports

We have created a patch (maven_reports.patch) that adds some reporting to 
DSpace.  This is important if unit testing classes will be created, as it gives 
an image of the coverage of the tests and the overall quality of the code. The 
reports integrate with the maven site and can be generated by running: "mvn 
site"

We have included the following reports:
1- Cobertura: shows which % of the classes is covered by unit tests
2- Testability explorer: displays how testable are the classes of DSpace and 
what should be fixed
3- Tag list: lists all the TODO/FiXME/@todo notes in the code
4- Surefire: generates reports on unit tests run
5- PMD and CPD: checks the source code for bugs/bad practices and duplicated 
code (probably from copy-paste)
6- Findbugs: Locates bugs/bad practices in the code
7- Maven changes: links to JIRA to show the changes done to this project

The first 4 are really important when creating unit testing, and the next two 
(5 and 6) are quite good at catching issues in the code.

While developing this we dectected a problem with the reporting in DSpace. Due 
to the way Maven subprojects work and the hierarchy of subprojects in Dspace, 
most of these modules can't aggregate the reports, so the report will be 
created for each subproject that has some java classes instead of having one 
unique report with all data. 

There is a solution to this, which is the use of Sonar 
(http://sonar.codehaus.org/). Sonar is an open source web application that 
automatically inspects and performs some analysis on the projects, attaching 
automatically the configuration for many Maven 2 plugins (like Cobertura) to 
the projects. It can also link to JIRA and some continuous integration systems. 
You can see an example at their demo site Nemo (http://nemo.sonarsource.org/)

We strongly suggest to install it as it will provide a clear image of the 
status of the unit testing efforts and will reveal issues in the code. We can 
provide help installing Sonar on any server you may have available if required.

3) Unit tests

We have created some unit tests, using JUnit 4.7 and Mockito 
(http://mockito.org/). This is a work in progress and you will see the current 
tests are minimal, more of a proof of concept. 

The patch is in file tests.patch, and it will run the tests from both Maven and 
the IDE. You will notice some tests are giving errors, that's done in purpose 
to 
highlight some issues.

About the unit testing effort, we have noticed by running the reports on point 
2 that DSpace suffers from many testability issues. Many classes are not easily 
testable using unit tests (for example, Context).  It would be advisable to 
refactor all these classes, as it will increase the quality of the DSpace code. 
The downside is that it will break compatibility with previous versions of the 
API.

In the GSoC proposal I've commented on this issue. Refactoring of the code 
(starting with the core API and moving up to the other services) to follow 
Demeter's Law (http://en.wikipedia.org/wiki/Law_of_Demeter) should be feasible 
during the GSoC, would improve the code quality and would allow contributors to 
create more unit tests easily. It would also allow the use of frameworks like 
Guice or Spring for  dependency injection, making code clearer and more 
maintainable. We could just throw extra unit tests into Dspace, but thinking in 
the long term, this is not a good idea, although if it's the choice of the 
community, it can be done with some workarounds for the testability issues.


That would be everything by now. I hope you find these contributions useful. As 
was mentioned above, they are work in progress, a foundation stone that we 
will try to grow as time goes. I'm at your disposition if you want to discuss 
anything related to the contributions or unit testing.


Best regards,
Pere Villega

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.dspace.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Dspace-devel mailing list
Dspace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dspace-devel

Reply via email to