[ 
http://jira.dspace.org/jira/browse/DS-532?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=11474#action_11474
 ] 

Pere Villega commented on DS-532:
---------------------------------

Hi,

as this has become a GSOC project, maybe we can close this ticket?

> 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

        

------------------------------------------------------------------------------

_______________________________________________
Dspace-devel mailing list
Dspace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dspace-devel

Reply via email to