


# 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**:
  1. Study the methods of app.soc.logic.models.base.Logic and calculate the frequency they are used.
  1. Study existing test cases for app.soc.logic.models.base.Logic and their coverage.
  1. Add test cases for app.soc.logic.models.base.Logic.

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

## Week 2 (31 May - 6 June)

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

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


## Week 3-6 (7 June - 4 July)
  1. Add test cases for other modules of app.soc.logic.models and app.soc.views.models
  1. 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)
  1. Add test cases for helper functions of  app.soc.logic and app.soc.views.

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

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

## Week 12 (9 August - 15 August): _pencils down_
  1. 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
  1. 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.
  1. Add tests for all (almost all at the very least) modules which needs to be tested before next GSoC.
  1. Further improve the GettingStartedOnTesting wiki page and help others with their tests.
  1. Integrate Felix' data seeder.
  1. Improve the testing design and code whenever necessary or time allows.