|Think about Loose Coupling|
Before going too much into specific Perl's related questions regarding testing, I think that you must define what you want to test.
In our organization, the software is tested tons of time, with several approaches.
- Unit tests : you want to test a specific subset of your application, and this subset is often related to a specific use case. This tests are mainly to verify that a given functionality is working as expected. In that case, all inputs and outputs, from other applications or databases, are simulated
- End-to-end tests: you take the full range of applications, in a controlled environment, and any real use case in your business can be tested, this is a complement to the first test, as interactions between your applications are checked
- performance/robustness : your application is tested with all transactions captured from a real environment, and you verify the resource consumption is not too high and that there is no crash/core/dump. This is purely technical, but ensure that the application is ready to handle a real traffic
- non-regression: you verify from one delivery to another that same inputs generate the same outputs. Your expected results must be adapted or validated when functionality is changed
and their are others. This is just some examples of what testing could be, to give you some hints. Also, some tests can be easily automated, some needs to remains manual. Another idea is to create a script each time a bug is found, and to add it to a set of automated tests, to ensure that no future dev will break something that was already fixed.
Anyway, all tests must be performed in a controlled environment (data, configuration, links...), to ensure that no modification in the environment will interfere with your tests.