There has been a lot of press around Aspect-Oriented Programming (AOP) and Software Development (AOSD). Every time I read an article such as this one the QA guy in me shudders uncontrollably. How can I possibly resolve the risk associated with AOP with the benefits that it is purported to provide? Also, given the inherent decoupled nature of AOP from the actual code (using, for example, deployment time AOP or byte-code based AOP), how can one effectively perform change managment?
Recently, I attended a JBoss discussion in hopes that it would quell some of my AOP concerns. Instead, the exact opposite occurred. Scott Stark managed to scare the bejesus out of me with transactions and protocol concerns being injected at deployment.
- How in the world can I test and certify a single deployment of my application if significant and complex components are deployment specific?
- Can I repackage this deployed application after testing and certification so that I’m guaranteed my clients will receive the same application?
- How can debug a stack trace that I get back from a client?
- How can I reproduce the client’s environment in my test lab?
I know that these “advances” provided by AOP sound great to the trench developer (to which Mr. Stark was directing his discussion) that would normally have to struggle to create this functionality but there are clearly maintenance concerns with these approaches that have yet to be addressed.
Rickard Öberg voices some of my current concerns but unfortunately, like most developers, he limits it to “testing”. Testing isn’t the only concern; it’s the full product life-cycle. I typically associate a 5 to 1 ratio of maintenance and debugging time to initial development time on any piece of complex code (where I will leave complex undefined here) throughout its lifecycle. If AOP is only addressing the “1” part of that ratio while increasing the “5” part then that’s pretty crappy!
People have spent a good deal of time claiming the programmatic benefits of AOP, but now it is time to start looking forward at debugging, maintaining, changing and growing AOP based code.