- Run
pip3 install -r requirements.txt
.
-
Create config.py.
Prerequisite = A pre-existent database in a MySQL server
Rename config_template.py to config.py and fill in the information required.
-
Run
python3 create.py
-
Run
python3 app.py
The following document contains the breakdown of the development process of "Expense Tracker App". This web application aims to help its users keep their day-to-day expenses under control.
The agreed requirements for this project / app are the following:
-
An application with full CRUD functionality, using the following technologies (which we have learned during the last 4 weeks):
- Databases (MySQL / SQLAlchemy)
- Python Programming Language
- Python Web Development: Flask / Gunicorn
- Continuous Integration: Jenkins
- Version control: Git
- Unit Testing with Python: Pytest
- Cloud Fundamentals
The main objective of creating this application is to put into practice the acquired knowledge, in a case similar to real life.
Therefore, the first step will be to define who would be the user of this application and why that person would want to use this tool.
The targeted audience for this application are people who want to understand how are spending their money in order to better control their personal finances.
Taking this information into account, we can start working on user stories and try to define what expectations our user may have.
(*)In order to satisfy, the MVP, I have prioritized the user stories that were focused on CRUD functionality and have left two of the stories (related to the visualization of expenses) for future releases.
A Trello Board has been used to keep a constant tracking of my activities, where I have been annotating the tasks derived from user stories and all significant changes, trying to emulate the Agile methodology at all times.
The appearance of the board, during development.
The board has evolved as the development of the application did. Given the presence of blocks, I added a new tab called "Blocked" where the problems, that have needed investigation and a trial/error approach, are noted.
The appearance of the board, at the end of development.The following diagram shows which tables will be created and what is their relationship (One to Many).
The application has two tables: Users and Expenses.
- Users will store the personal data of our user such as their name and email
- Expenses will store the information about the type of expenses of each user, a description, the date of purchase/expense and finally the amount spent.
Once the bases of our project were defined, we began to code our application. This is when we start to go through our CI pipeline.
The code is created by the developer (VSCode, Python, Flask) and in order to track any changes, we use a VSC. After that, the CI server (Jenkins) handles all the automatic building, testing and deployment of the application. Once finished, a report is generated and if there is any failure, the developer is informed. Based on a Continuous Deployment approach, there is a final quality test before the application is ready for the Live Environment.
Every time the set of assigned tasks has been completed, we return to the Backlog (Trello) to find out what our next task or set of tasks is.
The following Risk Assessment identifies hazards and risk factors that have the potential to cause harm to our application deployment. I have listed the prevention measures that I have used to control the risk when the hazard cannot be eliminated.
Two testing frameworks: Pytest and Unittest have been used in order to achieve the desired coverage level.
In this case, this application has been 100% tested in its relevant parts.
Trello Board: Trello Board - Expenses Tracker App
Power Point Presentation: Power Point Presentation - Expenses Tracker APP
After the application deployment has been completed, there are some additions and improvements that I would like to accomplish:
- Improve the appearance of the application
- Show expenses by categories and their evolution over time
- Add the functionality to share expenses automatically with another person
- Add the functionality to notify the user when they spend more than planned
Andrea Torres-Jaramillo