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:
- use the mailing list
- use the IRC channel
- be able to provide patches
- follow the Mifos coding standards
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:
- Increasing developer productivity * A fast test suite leaves more time for the developer to write code
- 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
- 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:
- eliminate
conversion.js
and replace it with server-side validation code - seek and destroy browser-specific Javascript code
- refactor and document Javascript code as necessary
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.