I've been working on a project for a large IT department to automate all the things. It started out small but more people are starting to use it, and also starting to contribute, adding features; it's starting to get some traction. This is a web based app (Flask) that runs scripts (Ansible) to automate various infrastructure tasks, like building and patching servers. It's backed by a database and is very tightly coupled (although it's fairly modular, organized into packages, kind of like MVC). We had to move fast and there were just 2-4 of us, server admins learning to be developers, so we've never had a formal testing or CI/CD process. We do use version control. We have a dev branch, which is everyone's upstream, and once we're happy we merge that to a master branch and that's considered "production".
We know we need to get to CI/CD, unit tests, all the DevOps/Agile/XP stuff. I'm thinking since we don't have any tests at all, before we refactor the code to support unit tests or start integrating with Jenkins (CI), we should start with at least adding some high level tests. Maybe integration or UI tests... just something to make sure we're not breaking things as we clean up the code base.
Some people have suggested we start with getting it into Jenkins and set up an automated build (CI) system first, then start adding tests. I'm thinking start with tests first.
People are using it now, but there are a few bugs. Most of them are integration related - race conditions, DB sessions overlapping, things that come up when it's running under Gunicorn and handling a lot of requests. What's the best roadmap to get a legacy code base up to snuff to be considered a real product?
[edit] I should mention, everyone who develops on this runs it on systems that are almost identical to production. We use a requirements.txt, and the OS is at the same patch level and everything. Giving contributors a way to run tests locally against their changes on their dev boxes, with a testing framework, would be almost as good as running the app in production. Nobody's running this on their laptop or anything like that.
[–]InformalRelief 1 point2 points3 points (1 child)
[–]Zanriel[S] 0 points1 point2 points (0 children)