Confronting Antagonistic Views of Software Design Sergio Martins Fernandes José Eduardo Belix Selma Shin Shimuzu Melnikoff Edison Spina The Department of Computing and Digital Systems Engineering (PCS) University of São Paulo - Polytechnic School Av Professor Luciano Gualberto, travessa 3, nº158 - Sala C2-42. Cidade Universitária - São Paulo - SP CEP: 05508-900 Brazil Abstract: - Despite some skepticism from the software industry about software design, the traditional software engineering approach has been enriched in the last years by new concepts, tools and techniques, like design patterns, software architecture, the UML, frameworks and, more recently, by the emergency of OMG’s MDD/MDA. On the other hand, different approaches have emerged, notably the agile processes, opposing many established software design best practices. This paper briefly presents the approach regarding these software design views, and characterizes their strengths and weaknesses for specific types of software systems developments. Key-Words: - Software Design, Software Modeling, RUP, Agile Processes, MDD/MDA 1 Introduction The design of a software system is a key aspect of software development. The software engineering community has always emphasized the quality of software design as fundamental for the effective success of software development projects. On the other hand, a large part of the software development industry has resisted putting a significant effort on the design of software systems. Even complex systems were built by the direct translation of requirements into source code. The central argument of the industry to justify these practices: tight schedules. Others are the difficulty to keep the model and the code synchronized during the software life cycle; and the developer’s lack of skills to use modeling languages effectively. One answer of the software engineering community to that point of view is to underline the frequent quality and maintenance problems in software systems that are built without a graphic model. Modeling reduces the coding effort and increases quality, making maintenance easier. Nevertheless, the software engineering community recognizes that the problems appointed by the industry are relevant, and is trying to solve them. The usual path they point involves adequate developers training and extensive use of software tools (like CASE tools) to support the modeling effort and to help automatically synchronize model and code. The OMG (Object Management Group) adopted the vision of tools supporting modeling, and is developing an initiative named MDA/MDD (model driven development / model driven architecture). MDD establishes standard ways for the elaboration of UML software models that are platform independent, and the automatic translation of that models into other models – platform dependent models – and, subsequently, into source code. A group of the software engineering community self named agile community followed a different path, questioning the conventional practice of software design. This community advocates what is called evolutionary design, which reduces the importance of a graphic design, accepting it could be directly expressed into the source code. This paper briefly analyses each of these views, and characterizes their strengths and weaknesses for specific types of software systems developments 2 The Software Industry View The software industry recognizes the problems concerning software development and maintenance, but it frequently has been skeptical about the