#summary Progress tracker for Melange project: Testing, Code Guru and Quality Assurance, GSoC 2011
#labels Phase-QA,Importance-Details,Contents-Update

<wiki:toc max_depth="3" />

= Introduction =
  This page will serve as a log and a resource for all the development activity being done in this project on testing. I have to write tests for the logic and views of Melange. The framework has undergone a major revision and the old tests are to be re-written.


= Meetings and Agendas =

== Monday May 16, 2011 (Community Bonding Period) 10:10 UTC ==

===Notes===
  Location : Gmail Chat

  Chaired by : Leo (Chong Liu)

  Notes taken by: Praveen

  * Told Leo that :
    * I have not been unable to concentrate on the project due to exams.
    * I have started reading the books which I had ordered, _'Django 1.1 Testing and Debugging, Karen M. Tracey'_ and _'Python Testing, Daniel Arbuckle'_
  * We discussed how to get started with the project.
  * Leo suggested:
    * start with soc.logic which are relatively easier and do not require much knowledge of Django and GAE
    * reuse the old tests which will require some modifications according to the new framework
    * after soc.logic attack modules.gsoc.logic and modules.gci.logic
    * write a python/shell script to calculate the frequency of a particular class and function which will give an idea about its importance and need for its thorough testing
  * We also discussed what functional testing is which I had not able to explain to Leo

= Coding Plan =

== May 16 - May 22 (Community Bonding Period) == 
  * Upload a GAE instance and write a view to run all the tests and return all results back
  * Write a python script to calculate the frequency of a term in the codebase
  * Read Django and GAE documentation.

== May 23 - June 15 (Official Coding Period) ==
  * Generate the directory structure of soc.logic
  * Write tests for app.soc.logic and then for modules.gsoc.logic and modules.gci.logic

= Links =
* My GSoC Proposal [https://github.com/praveen97uma/GSoC-Docs/wiki/Testing,-Code-Guru-and-Quality-Assurance/]

* My melange instance [http://melangetesting.appspot.com]

= External Testing Resources =
* _All I really need to know about [testable, maintainable, packagable] “scripts”_ [http://www.testingtv.com/2010/01/27/all-i-really-need-to-know-about-testable-maintainable-packagable-scripts/]

* Building Tests for Large, Untested Codebases [http://www.testingtv.com/2009/12/31/building-tests-for-large-untested-codebases/]

* Paver - Easy Build and Deployment Automation Tool for Python Projects [http://www.testingtv.com/2010/02/03/paver-easy-build-and-deployment-automation-for-python-projects/]

* Coverage Testing - The Good and the Bad [http://www.testingtv.com/2009/12/29/coverage-testing-the-good-and-the-bad/]