Architectural Degeneration of Software Systems: Characterising and Diagnosing Degeneration of Software Architecture from Defect Perspective