Search code examples
automationautomated-testsdevopsautomated-deployment

What types of architecture or architecture layers are not suitable for automated testing?


I was recently tasked with developing automated build and release pipelines for one of my company's legacy applications. After some investigation, I keep hearing from managers and other devs that certain application layers and architectures don't lend themselves to automation, particularly automated testing. Therefore, it's often suggested I shouldn't bother trying to apply DevOps principles and AT unless I want to re-architect the whole app.

The common cited example would be PL/SQL backends or monolithic architectures. I asked why these were not suitable, but never got a really clear answer. Does anyone have any insight on when automated test should not be used in favor of dumping the old architecture and starting fresh?


Solution

  • Short answer - ones that suffer from testability issues.

    For a more in depth one, let's first admit that many software systems are untestable, or not immediately testable. So that, the effort of

    trying to apply DevOps principles and AT

    is far greater than the ROI. Such notorious example is Google's ReCAPTCHA, which causes some pain for the automation testing folks (like me). The devs are actually right to say that it will take be a

    re-architect the whole app

    journey, as testabilty is highly related to other key software qualities such as encapsulation, coupling, cohesion, and redundancy.

    common cited example would be PL/SQL backends or monolithic architectures

    Now, that is totally not the case. The firt one is more data-centric and requires a deeper understanding, but there are solutions to that as well. As to, single-tiered software applications - one can argue that in contrast to the mSOA, monolithic applications are much easier to debug and test. Since a monolithic app is a single indivisible unit, you can run end-to-end testing much faster/easier.

    Put simply - if your app is highly testable, is highly usable. In case, the architecture and design were aligned to a very, very specific company needs - no wonder, is usable only up to a point.