an agenda for concern-oriented software engineering
The principle of separation of concerns has certainly stood the test of time in guiding the field of software engineering, leading to an amazing variety of approaches available to programmers to actually separate and manage concerns in their software. In this paper, we provide a novel perspective on these approaches, a perspective that is guided by the observation that the underlying goal of any approach should not be to always separate concerns, but instead to minimize the impact of concern scattering and tangling. Reframed as such, we survey and relate existing work, highlight fundamental limitations of the four canonical approaches to minimizing the impact of concern scattering and tangling, and provide an agenda for future work -- at both the code level and beyond.
separation of concerns scattering and tangling software maintenance and evolution software concerns modularization