#summary Project Progress/Log for the Testing, Code Guru, Code Quality Assurance Project (GSoC2010) of Melange
#labels Phase-Design,Contents-Draft,Importance-Details

<wiki:toc max_depth="3" />


= Introduction =
  This document will be used to documents the progress and details of the Testing, Code Guru, Code Quality Assurance Project (GSoC2010) of Melange. 


= Meetings and Agendas =

== Wednesday May 14, 2010 18:00 in UTC ==
===Meeting Logs===
    Meeting start: http://www.thousandparsec.net/~irc/logm/%23melange.2010-05-14.log.html#t2010-05-14T18:08:47

    Meeting End: http://www.thousandparsec.net/~irc/logm/%23melange.2010-05-14.log.html#t2010-05-14T19:19:48    
    

===Meeting Notes===

  Location: #melange on freenode

  Chaired by: Sverre Rabbelier

  Notes taken by: Leo (Chong Liu)

    * Told Sverre what I had done:
       * Learned the code base of Melange and Melange tests
       * Generated the directory organization of Melange and Melange tests
       * Generated the package diagram and the class diagram of Melange
       * Made some statistics on the code base of Melange
    * Sverre suggested me to do:
       * Start with the testing of the modules which are the most important and used most, e.g. soc.logic.models.base and soc.views.models.base
       * Specifically add more test cases to the existing tests of these modules, e.g. tests.app.soc.logic.models.base and tests.app.soc.views.models.base


= Tentative Timeline =
== Week 1 (24 May - 30 May) ==

*TODO*:
  # Study the methods of app.soc.logic.models.base.Logic and calculate the frequency they are used.
  # Study existing test cases for app.soc.logic.models.base.Logic and their coverage.
  # Add test cases for app.soc.logic.models.base.Logic.

*Deliverables*:
  # Complete most of the test cases for app.soc.logic.models.base.Logic.

== Week 2 (31 May - 6 June) ==

*TODO*:
  # Finish up the work for app.soc.logic.models.base.Logic.
  # Add test cases for app.soc.views.models.base.View.
  # Add test cases for app.soc.logic.models.User.Logic and app.soc.views.models.User.View.
  # Add test cases for app.soc.logic.models.Role.Logic and app.soc.views.models.Role.View.

*Deliverables*:
  # Finish up the work for app.soc.logic.models.base.Logic.
  # Complete most of the work for the above modules.


== Week 3-6 (7 June - 4 July) ==
  # Add test cases for other modules of app.soc.logic.models and app.soc.views.models
  # Create a wiki page to explain how the test is currently done before the start date of TDD to provide a reference for developers to design their tests

== Week 7 (5 July - 11 July) ==
  # Add test cases for helper functions of  app.soc.logic and app.soc.views.

== Week 8 (12 July - 18 July): _mid-term evaluations_ ==
  # Finish up the work for app.soc.logic and app.soc.views and clean up code.

== Week 9-11 (19 July - 8 August) ==
  # Add test cases for modules of app.soc.modules.gsoc and app.soc.modules.ghop.

== Week 12 (9 August - 15 August): _pencils down_ ==
  # Finish up the work for app.soc.modules.gsoc and app.soc.modules.ghop and clean up code.


= Plans beyond GSoC =
Because of the time limit of GSoC, there are still many modules, which needs to be tested, remaining to be tested, e.g. soc.logic.cleaning as pointed out by Sverre. But I will continue to work on the testing project beyond GSoC, i.e. add more test cases for more modules, improve the testing design and code, integrate Felix' data seeder, and so on.
= Tentative/rough Timeline =
  # Add test cases for at least one module every one or two weeks depending on the size of the module or the amount of work.
  # Add tests for all (almost all at the very least) modules which needs to be tested before next GSoC.
  # Further improve the GettingStartedOnTesting wiki page and help others with their tests.
  # Integrate Felix' data seeder.
  # Improve the testing design and code whenever necessary or time allows.