#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


= Tentativ Timeline (more details will be added) =
== Week 1 (24 May - 30 May) ==

*TODO*:
  # Add test cases for app.soc.logic.models.base.Logic.

*Deliverables*:
  # Complete most of the test cases.

== 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 test cases for app.soc.logic.models.base.Logic.
  # Complete most of the test cases for these 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

== Week 9-11 (19 July - 25 July) ==
  # 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