SoC 2008 Ideas

Mifos and the Google Summer of Code 2008

Welcome potential Mifos Summer of Code participants! The following is a list of Mifos projects for students to work on. Attack poverty and complex technical challenges simultaneously!

Guidelines

Students working on Mifos will be expected to:

Please also see the list of suggested tools for development with Mifos. Drop by the IRC channel or email Adam Monsen with specific questions.

Project Ideas

Progress out of Poverty Index (PPI) Enhancements

PPI is one leading metric for assessing poverty levels in developing countries. Often it is hard to ascertain income levels, so PPI consists of a set of survey questions that translate information about a clients home, children, etc. into a quantifiable score and probability of poverty level. Mifos has a feature for collecting this survey data and producing scores. We have plans in the roadmap to extend this feature to add in correlation with other poverty level assessments.

Implement mobile banking interface to Mifos

There is a great demand for mobile banking, since in many rural areas of developing countries, access to mobile phones is more prevalent than access to internet. Given an API for the operations that will be supported, this project would include implementing the mobile communications mechanism from the phone to the API.

Improve input, presentation and storage of dates and numbers

Date formats in Mifos are in need of overhaul/cleanup/enhancement:

  • Storage of dates in database
  • i18n date formats
  • Joda time to support more than just Gregorian calendar
  • Also consider time-machine for automated testing
  • using locale based numeric separators, (1,000.00 vs. 1.000,00)

Replace usage of Mayfly in unit tests

Mifos currently utilizes Mayfly for certain unit tests. While Mayfly is fast and generally easy to get started with, a number of issues routinely surface with respect to Mayfly:

  • Developer confusion when unit tests work differently in Mayfly than in MySQL
  • Mayfly has very little documentation and is only supported by one volunteer developer
  • Mayfly blocks the UpgradeHibernate project
  • No easy way to use MySQL instead of Mayfly in certain unit tests; developers must usually refactor particular tests or add hacks for them to succeed

Tasks:

  • allow for simple substitution of database backends. A developer should be able to choose which backend to use in a particular unit test
  • replace the usage of Mayfly with another Java in-memory database such as HSQLDB

Improve unit test suite

Many issues exist with the current Mifos unit test suite. A student choosing this project will be encouraged to implement as many improvements as possible, thereby:

  1. Increasing developer productivity * A fast test suite leaves more time for the developer to write code
  2. Reducing the chance of introducing bugs * A fast test suite will be run more often so bugs will be caught sooner and the chance of an untested change being committed and breaking the build will be reduced
  3. Make identifying and fixing problems more efficient * Eliminating test dependencies will mean that only those tests actually affected by a problem will fail and can be immediately compared to help identify a problem (rather than only the first failure yielding useful information)

Tasks:

  • decrease the runtime of unit tests; target speed increase should be tenfold
  • eliminate useless or redundant unit tests
  • eliminate test order dependencies
  • in LatestTestAfterCheckpoint, consider structural "SQL diffs" rather than text-based

Advanced unit test suite improvements

A number of business objects include transaction management code in their methods which makes it difficult or impossible to test them independently of the database. This project is intended for a student capable of advanced Java and database development.

Tasks:

  • remove database transaction code from business objects and move it to a service layer
  • create Repository (DAO) interfaces for accessing objects of a given type and when needed use these interfaces in the business objects. By using these interfaces, the interface could be implemented by an in memory test stub for unit testing rather than hitting the database)
  • separate out functionality that can be tested by a unit test rather than an integration test and try to rewrite as many test cases as possible as unit tests that operate on POJO business objects and don't touch the database.

Javascript improvements

Tasks:

Integrate with Quartz for scheduled tasks

Mifos contains implementations of several batch jobs that run overnight, building summary tables for reports, updating meeting schedules, and so on. Right now, our scheduling mechanism is lacking in some functionality. The task would be to integrate Quartz, an open source scheduling library, into Mifos.

Create Fitnesse tests

The financial calculation parts of Mifos may be well suited for Fitnesse (fitnesse.org) testing.

Tasks:

  • Work with business owners and test team to identify useful test cases.
  • create a Fitnesse instance for Mifos.
  • Design and implement a set of java test fixtures.