173 lines
7.5 KiB
Markdown
173 lines
7.5 KiB
Markdown
# Password Manager Business Case
|
||
|
||
## Metadata
|
||
| Key | Value |
|
||
| --- | --- |
|
||
| ID | BC-001 |
|
||
| CrossReference | [SA-001] |
|
||
| Language | en |
|
||
| Domain | it |
|
||
|
||
## Version History
|
||
| Date | Status | Author | Reviewer | Change | Commit |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [53f56ee] |
|
||
|
||
---
|
||
|
||
# Password Manager Business Case
|
||
|
||
## Executive Summary
|
||
|
||
A desktop password manager written in Python 3.13 and Tkinter, built as the
|
||
assignment of days 29 and 30 of Udemy's "100 Days of Code: The Complete Python
|
||
Pro Bootcamp". The application generates passwords, saves them with a website
|
||
and an e-mail address in a JSON file, handles a missing or empty data file
|
||
without crashing, and searches the saved data for a website. The repository is
|
||
meant to be read, run and compared by other course participants, so it keeps
|
||
the assignment's function names, has no runtime dependencies and ships a README
|
||
and a wiki in English, Danish and Bahasa Malaysia.
|
||
|
||
## Methodological and Standards Foundation
|
||
|
||
- Larman, *Applying UML and Patterns*: planning-first, small iterations, the
|
||
artifact chain of the framework mounted at `framework/`.
|
||
- ISO/IEC 25010:2023 characteristics tag every quality criterion.
|
||
- Clean Architecture layering and MVVM for the user interface
|
||
(`clean-architecture` skill).
|
||
- Python conventions of the `coding-conventions` skill; Doxygen comments in
|
||
the source.
|
||
|
||
## Problem Statement
|
||
|
||
The course's earlier version of the program stores passwords in a plain text
|
||
file. A text file cannot be searched by website, is hard to update without
|
||
rewriting the whole file and breaks the program when it is missing. A course
|
||
participant who wants to compare solutions also has no reference repository
|
||
that shows the finished assignment together with tests and set-up
|
||
instructions.
|
||
|
||
## Business Opportunity
|
||
|
||
A small, tested, documented reference solution lets other participants verify
|
||
their own work, and shows the author's engineering practice to anyone who
|
||
browses the repository.
|
||
|
||
## Objectives
|
||
|
||
1. O1: Store each saved entry as a nested key-value record (website, e-mail,
|
||
password) in a JSON file.
|
||
2. O2: Keep the program running when the data file is missing, empty or invalid
|
||
by creating or repairing it.
|
||
3. O3: Let the user search the saved data by website and see the e-mail and
|
||
password, or a clear message when nothing is found.
|
||
4. O4: Publish the work as a runnable, tested and documented repository with a
|
||
description, topics, a README and a three-language wiki with screenshots.
|
||
|
||
## Scope
|
||
|
||
### In Scope
|
||
|
||
- Password generation, saving to JSON, searching by website.
|
||
- Exception handling for a missing, empty or invalid data file.
|
||
- A Tkinter window with the assignment's fields and buttons.
|
||
- `pyproject.toml`, pytest tests, `constants.py`, a Python `.gitignore`, a
|
||
Doxyfile and Doxygen comments.
|
||
- README, a wiki in English, Danish and Bahasa Malaysia, and screenshots.
|
||
- Repository description and topics on the git host.
|
||
- Instructions for a local `.venv` and `python -m pip install --upgrade pip`.
|
||
|
||
### Out of Scope
|
||
|
||
- Encryption of the stored passwords; the file is plain JSON as in the course.
|
||
- Editing or deleting saved entries.
|
||
- Packaging for PyPI or an installer.
|
||
- Any runtime dependency beyond the Python standard library.
|
||
|
||
## Expected Benefits
|
||
|
||
### Tangible Benefits
|
||
|
||
- A runnable program with an automated test suite.
|
||
- A README and a three-language wiki a newcomer can follow without help.
|
||
- A repository with a description and topics that can be found and understood.
|
||
|
||
### Intangible Benefits
|
||
|
||
- Practice of exception handling and JSON in a worked example.
|
||
- A worked example of the planning-first framework for a small project.
|
||
|
||
## Strategic Alignment
|
||
|
||
The project supports the author's course goal of finishing the 100 Days of Code
|
||
bootcamp with reviewable, documented solutions, and the goal of keeping each
|
||
day's project as a self-contained repository.
|
||
|
||
## Success Criteria
|
||
|
||
| # | Criterion | Target | Measure |
|
||
| --- | --- | --- | --- |
|
||
| 1 | Entries are stored as nested JSON | 100 % of saves produce valid JSON that `json.load` reads back | pytest test of the storage module |
|
||
| 2 | A missing, empty or invalid data file does not crash the program | 3 of 3 cases handled, each covered by a test | pytest tests |
|
||
| 3 | A search for a saved website returns its e-mail and password; an unknown website gives a message | 2 of 2 cases covered by tests | pytest tests |
|
||
| 4 | The test suite passes on Python 3.13 | 0 failures | `python -m pytest` |
|
||
| 5 | The project has no runtime dependencies | 0 entries in `dependencies` of `pyproject.toml` | file inspection |
|
||
| 6 | The wiki exists in three languages with the same page set | 3 languages, same pages, every page has a screenshot or a reason it has none | `check-languages.sh` and file listing |
|
||
| 7 | The repository has a description and at least 5 topics | description set, topics >= 5 | git host API read |
|
||
|
||
## Risks
|
||
|
||
| Risk | Impact | Mitigation |
|
||
| --- | --- | --- |
|
||
| Plain-text storage of passwords is mistaken for a secure design | Readers copy an insecure pattern | README and wiki state in a Security note that the file is unencrypted and for learning only |
|
||
| The author's token in `.env` is committed or printed | Credential leak | `.env` is in `.gitignore`, is never imported by the program and is never echoed |
|
||
| Tkinter is missing on a reader's Python | The window does not start | README lists Tkinter as a requirement and the logic is testable without the window |
|
||
| Danish or Bahasa Malaysia translation errors | Misleading instructions | Code blocks and commands stay English; English is the authoritative text |
|
||
| Screenshots become outdated | Docs disagree with the program | Screenshots are produced by a documented step in the last milestone |
|
||
|
||
## Assumptions
|
||
|
||
- Python 3.13 or newer is installed on the reader's machine.
|
||
- Tkinter ships with the reader's Python.
|
||
- The git host `git.tirsystem.com` is reachable and the token in `.env` can edit
|
||
repository metadata and open pull requests.
|
||
- S01 can act as reviewer of every artifact, as stand-in in autonomous mode.
|
||
|
||
## Constraints
|
||
|
||
- Python 3.13 or newer; `venv` for the environment; pytest for tests.
|
||
- Folder structure `src/`, `tests/`, `docs/`.
|
||
- Constants live in `constants.py`.
|
||
- No runtime dependencies unless needed.
|
||
- Work is done on branches and pull requests, one per milestone.
|
||
- Tokens are read from `.env`, which is neither tested nor imported.
|
||
|
||
## Cost–Benefit Assessment
|
||
|
||
The assessment is qualitative: the project is an unpaid learning exercise with
|
||
no revenue, and the cost is the author's time.
|
||
|
||
| Costs | Benefits |
|
||
| --- | --- |
|
||
| About three working sessions of the author's time | A complete, reviewed reference solution |
|
||
| Effort to keep three wiki languages in step | Readable by English, Danish and Malay speaking participants |
|
||
| Effort to maintain tests and documentation | A reliable program and a repeatable set-up |
|
||
|
||
## Stakeholders
|
||
|
||
| Stakeholder ID (SA) | Interest in this project |
|
||
| --- | --- |
|
||
| S01 | Finish the assignment, own the result and review it |
|
||
| S02 | Readable, runnable code with the assignment's function names and run instructions |
|
||
| S03 | A clear description, topics and README, and no runtime dependencies |
|
||
|
||
## Recommendation
|
||
|
||
Proceed — the scope is small, every objective is verifiable by a test or a file
|
||
check, and the risks have mitigations.
|
||
|
||
---
|
||
|
||
[SA-001]: ./stakeholder-analysis.md
|
||
[53f56ee]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/030-password-manager/commit/53f56eeb143d810b91da23f743a53a32207f81bb
|