Academia.eduAcademia.edu

Software architects in practice

2006, Proceedings of the 2006 conference of the Center for Advanced Studies on Collaborative research - CASCON '06

Software architecture can be a critical factor in software development. Understanding what software architects do in practice is necessary to the enterprise of providing techniques, methods, process, tools and technologies to support the development and use of software architecture. In this paper, we present the results of how architects handle requirements in practice. We then summarize the key lessons learned from the study.

Software Architects in Practice: Handling Requirements Vidya Lakshminarayanan, WenQian LiuÍ, Charles L Chen, Steve EasterbrookÍ, Dewayne E Perry ÍSoftware Engineering Department of Computer Science University of Toronto, Canada {wl,sme}@cs.toronto.edu Empirical Software Engineering Lab Electrical and Computer Engineering The University of Texas at Austin, TX {vidya,clchen,perry}@ece.utexas.edu used to gain a deep understanding of a particular phenomenon in its real life context. As such, they are characterized by analytical generalizations rather than statistical generalizations; they are to be understood in terms of analysis and comparison of cases, not of samples [11]. So far, we have interviewed fourteen different architects from different domains (such as security, usability, product lines, etc.) in different organizations (ranging from relatively small to extremely large, from specific product focuses to general system and solution providers, etc). The architects in this study were chosen from software intensive organizations in two general areas: in and near Toronto, and Texas (Austin, Houston and Dallas). Where the subject architects are from the same companies, they either represent different divisions (which are often the size of medium sized companies) or represent different kinds of architects. With a few exceptions, our subject architects have significant experience both in their roles as architects (4 to 15 years). Where the subjects have only a few years experience as architects, they do have significant experience as developers (five or more years). In [6], we describe the full scope of our study, and our process of defining it from its preparation to its evidence chain and evidence trail. We also discussed various validity issues with the then current state of our case studies. Our main concern then was the concentration of architects from one international company. As noted above, we have expanded the representation of architects in terms both of companies and of domains. Thus, we feel that the external validity of our multiple case study has been strengthened significantly. Abstract Software architecture can be a critical factor in software development. Understanding what software architects do in practice is necessary to the enterprise of providing techniques, methods, process, tools and technologies to support the development and use of software architecture. In this paper, we present the results of how architects handle requirements in practice. We then summarize the key lessons learned from the study. 1 Introduction Research in the areas of requirements engineering and software architecture have developed independently for more than a decade [4][7]. However, in the last few years, a number of researchers have begun to investigate the relationships between requirements and architecture, and how to bridge the gap from one to the other [1][3]. In particular, techniques have been proposed for generating software architectures from the requirements [2][5][9][10]. However, there have been no studies to date on how architects currently perform this transformation in practice. In this paper, we report the some of the results of a multiple case study of experienced software architects. We take an empirically based approach and use an interview-based case study methodology to carry out our investigations. Case studies are a specific empirical research method Copyright  2006. Lakshminarayanan, Liu, Chen, Easterbrook and Perry. Permission to copy is hereby granted provided the original copyright notice is reproduced in copies made. 1 2.2 Discovering Real Requirements 2 Requirements Requirements set the goals and expectations for a system to be developed. However, a variety of requirements problems make it difficult to produce the right system. Our subjects state that requirements elicitation is difficult because multiple stakeholders are usually involved. Each one has a view of what is important and what needs to bee done based on past experiences, and personal prejudices. Requirements are often expressed in technological terms and often reflect their personal biases and, thus, obscure the real requirements.. Higher level goals are often left out, leading to partial or incorrect requirements. Our subjects recognize this as a problem and respond to it by participating in the elicitation process. This helps them obtain first hand the information to understand what the stakeholders actually need. Sometimes architects with their experiences and knowledge need to influence and educate the stakeholders to broaden their focus and move in a different direction. One of our subjects, however, suggests that architects should communicate with the requirements engineers instead of going straight to the customers because of the following reasons: 1) these engineers have the necessary training for handling requirements and customers, and 2) the architects’ understanding may differ from that of the requirements engineers leading to synchronization problems between the requirements and the architecture. Another issue is that requirements are not always consistent. Interacting with the stakeholders (and possibly educating them) can help to resolve these inconsistencies. Our subjects often rely on brainstorming in a group setting to resolve such issues. This technique focuses on generating as many ideas as possible. The resulting ideas are evaluated, and the ones best suited for the stakeholders are chosen. Unfortunately, not all inconsistencies can be resolved this way. Occasionally, architects must rely on their own judgment to resolve these inconsistencies. This tactic is risky and not recommended but sometimes it is the only alternative available to them. From our data, it is evident that there was a clear consensus on what requirements are - things that are wanted, needed, asked for, or demanded. However, there was little consensus on how they are handled. 2.1 Functional vs. Non-Functional A typical distinction is that functional requirements specify the functions that a system must have, while non-functional requirements describe general constraints on the acceptable solutions, such as performance requirements, software design constraints, software quality attributes, etc. Our subjects do not have a uniform opinion about functional and non-functional requirements. The majority of our subjects distinguish between them. A few architects, however, suggested that they see no real difference between functional and non-functional requirements and each requirement (if committed) must be accommodated in the design. For example, one subject indicated that security is neither functional nor non-functional; it is simply a serious business and technical requirement that can “make or break the deal”. Several subjects consider that every requirement has both functional and non-functional aspects. Depending on one’s perspective and the problem context, one aspect may dominate the other. In security, there are standard functional requirements dealing with interoperability and manageability issues: a VPN client has to implement a chosen protocol in order to communicate with the server; a system administrator needs to be able to safely update the access information using scripts overnight. Also, specific requirements are set to prevent performance degradation: one cannot impose more than 1/10 of a second latency on the startup of a connection; or more than 3% throughput overhead due to cryptography. While there is some disagreement, the differences between them are more cosmetic than fundamental. The underlying themes of our subjects’ opinions are as follows: • Non-functional requirements are frequently used for convenience to refer to high-level properties and abstract phenomena that are desirable. • Non-functional properties must be (re)formulated as functional ones before they can be satisfied. 2.3 Anticipating Changes Changes are a very common in software developments. They can represent new requirements or re-evaluations of existing requirements. They are usually stated as additional functionality or an 2 Third, it is always a challenge to be able to correctly interpret requirements in the absence of contextual information. In such cases, making incremental changes and integrating back into the product is appropriate. It also helps in uncovering any hidden assumptions. Fourth, with a ‘middle man’ (such as marketing staff) filtering and interpreting the requirements, the real problem may not be conveyed properly to the architects. To mitigate this problem, one subject believes that architects need to analyze “a number of problems in aggregate” instead of focusing on a given single instance before committing to a solution. One of the ways to manage change is to lay out a roadmap to help customers move on from one release of the system to the next. By having a clear plan for upgrades and changes, the problem of dealing with multiple versions with different configurations can be minimized or even eliminated. incremental problem to solve. One subject indicates that in creating an architecture that can be reused and can be adapted to changing needs, architects must be able to see the big picture so that resources can be better planned and critical problems can be better addressed. He further suggests that “what is going to change really is related to the domain” and trying to handle everything without an understanding where changes are likely to occur is a poor approach in software engineering. One key to anticipating changes is the understanding of business needs and customers goals. Otherwise, it will be just a guessing game. Another subject suggests that satisfying every request from the customer may not be the right thing to do because some requests do not fit in the long-term direction of the industry. He believes that the key to understanding the long-term direction of industry must involve the collaboration of the industrial and research communities. By sharing their knowledge and experience, both communities can benefit. Professional experience is always an asset.. Typically, experienced architects will seek to reuse information and predict possible problems and changes. Experience helps architects to identify potential risks, what is hard, and what are critical issues. A number of subjects suggest that using good design principles provides an indirect solution for dealing with changes and anticipating future requirements. For example: 1) the natural cohesion found in the requirements can be used in the design to make maintenance and enhancements easier, 2) modularity can be used to minimize the effects of changes on the entire system, and 3) generic solutions can be used to provide reusable and extensible frameworks. The benefits of anticipating changes do not come without a price or without challenges. First, it is a time consuming task. There may be cases when this investment is not warranted. This is especially true for products with shorter anticipated life spans and in cases where the time to market for the first release is a dominant factor. Second, “disruptive technologies” (technologies that become dominant and radically change the state of practice) provide a special challenge. One way of dealing with this is to design the system to be adaptable to mitigate the risk of unforeseeable changes. 2.4 Managing Requirements Software architects use a number of strategies to manage complex and costly requirements. Understanding the rationale and the business problem of the given requirements by asking the ‘why’ and ‘what’ questions is critical. Answers to these questions provide both deeper insight into the real problem and more options for solving them. During these back and forth question-and-answer sessions, the negotiation of the requirements is actually taking place to produce acceptable requirements that can be signed off by both sides. Conflicts, unrealistic ‘sales promises’ and impossible requirements must all be negotiated with the customer. In some cases, a compromise can be achieved, but in others, ‘no’ is the only answer. Under such circumstances, prioritization helps to determine which requirements are essential and which are optional. These priorities can be based on cost/benefit analyses or specific areas of concern to the stakeholders. There may still be a case that there are too many requirements all with the highest priority where an “80/20 rule” could be applied: i.e., choose 20% of the requirements that cover 80% of the stakeholders’ concerns. Problem decomposition is often used to manage complexity. In most problems that involve automating human activity, decomposition is fairly straightforward because people tend to do 3 will also make available appropriately sanitized technical reports summarizing the results of our interviews and providing salient quotes [8]. things in uncomplicated ways.. Decomposition helps to break down the problem into smaller pieces and to make implementation easier. We note, however, that the refinement and decomposition methods and techniques used often depend on the architect’s experience and domain knowledge. Since there are no specific techniques or methods to handle complex requirements, it is important that the architects perform post mortem analysis so that they can analyze their mistakes and come up with better methods and techniques to handle such requirements. However, such post mortem analyses are usually not conducted well in practice because of a lack of tool support to trace back to the requirements. Acknowledgements We thank our anonymous interviewees and their companies for their contributions. This research is supported in part by NSF CISE Grant CCR0306613 and IBM CAS Fellowship. We also thank our co-researcher Deepika Mahajan References [1] D. M. Berry, R. Kazman, and R. Wieringa, editors, The Second International Software Requirements to Architecture Workshop (STRAW’03), ICSE 2003, Portland OR. [2] M. Brandozzi and D. E. Perry, “From GoalOriented Requirements to Architectural Prescriptions: The Preskiptor Process”, in [3]. [3] J. Castro and J. Kramer, editors, The First International Workshop on From Software Requirements to Architecture (STRAW’01,).ICSE 2001. Toronto. [4] D. Garlan, “Software architecture: a roadmap”, Future of Software Engineering, ICSE 2000, Limerick Ireland,. [5] D. Jani, D. Vanderveken and D. E. Perry. “Deriving Architectural Specifications from KAOS Specifications: A Research Case Study”, European Workshop on Software Architecture 2005, Pisa Italy. [6] W. Liu, C. L. Chen, V.Lakshminarayanan, D.E. Perry, “A Design for Evidence-based Software Architecture Research”, Workshop on REBSE'2005, ICSE 2005, St. Louis. [7] B. Nuseibeh and S. Easterbrook, “Requirements engineering: a roadmap”, Future of Software Engineering, ICSE 2000, Limerick Ireland. [8] D. E. Perry. NSF Grant CCR-0306613 Project Web Site “Transforming Requirement Specifications into Architectural Prescriptions”, http://www.ece.utexas.edu/ ~perry/work/projects/nsf-r2a/ [29 October 2005] [9] A. van Lamsweerde, “From System Goals to Software Architecture”, In M. Bernardo and P. Inverardi, editors, Formal Methods for Software Architectures, 2003. [10] D. Vanderveken, A. van Lamsweerde, D. E. Perry, and C. Ponsard, “Deriving Architectural Descriptions from Goal-Oriented Requirements Models”, September 2005 [11] R. K. Yin, “Case Study Research: Design and Methods”, 3/e. Thousand Oaks, CA: Sage Publications, 2002. 3 Lessons Learned Lessons learned from out subjects include: Lesson 1 Architects need to be generalists rather than specialists. They need to draw from a wide range of design and domain knowledge. Lesson 2 The distinction between functional and non-functional requirements is not always a concern, but both must be carefully considered and reflected in the architecture. Lesson 3 Change is inevitable in software developments. Therefore, anticipating changes early can save implementation and maintenance effor Heuristics and professional experience play a large role in this. Lesson 4 Requirements are often filtered by middle men where much of the relevant contextual information is missing. This can cause major problems for the architect. Lesson 5 Architects need to ensure that they are working with reasonable, consistent requirements. If there are problems with the requirements, then they should either send the requirements back to the requirements engineers for rework, or they should negotiate directly with customers. Most of our subjects favored the latter approach. 4 Future Work There are still lessons to be obtained from our architects beyond what we have provided here. We expect these to be made available in workshop, conference and journal publications. We 4