Conference PaperPDF Available

Teaching a Course on Software Architecture

Authors:
  • Vrije Universiteit Amsterdam, Amsterdam, Netherlands

Abstract and Figures

Software architecture is a relatively new topic in software engineering. It is quickly becoming a central issue, and leading-edge organizations spend a considerable fraction of their development effort on software architecture. Consequently, software architecture is increasingly often the topic of a dedicated course in software engineering curricula. There are two general flavors as for the contents of such a course. One flavor emphasizes the programming-in-the-large aspects of software architecture and concentrates on design and architectural patterns, architecture description languages and the like. The other emphasizes the communication aspects of software architecture to a variety of stakeholders, thereby acknowledging a broader view of software architecture. In this paper we report our experiences with two master-level courses in software architecture that focus on these communication aspects. We show that, by appropriately focusing the contents of such a course, key aspects of this industrially very relevant field within software engineering can be taught successfully in a university setting.
Content may be subject to copyright.
Teaching a Course on Software Architecture
Patricia Lago and Hans van Vliet
Vrije Universiteit, Amsterdam, The Netherlands
{patricia |hans}@cs.vu.nl
Abstract
Software architecture is a relatively new topic in software engineering. It is quickly becoming a central issue, and leading-
edge organizations spend a considerable fraction of their development effort on software architecture. Consequently, software
architecture is increasingly often the topic of a dedicated course in software engineering curricula. There are two general
flavors as for the contents of such a course. One flavor emphasizes the programming-in-the-large aspects of software ar-
chitecture and concentrates on design and architectural patterns, architecture description languages and the like. The other
emphasizes the communication aspects of software architecture to a variety of stakeholders, thereby acknowledging a broader
view of software architecture. In this paper we report our experiences with two master-level courses in software architec-
ture that focus on these communication aspects. We show that, by appropriately focusing the contents of such a course, key
aspects of this industrially very relevant field within software engineering can be taught successfully in a university setting.
1 Introduction
Software architecture is becoming one of the central topics in software engineering. In early publications, such as [16],
software architecture was by and large synonymous with global design. This view emphasizes design patterns and architec-
tural patterns [3] and the description of the resulting architecture in some Architectural Description Language (ADL) [14]. In
a broader view, software architecture involves making tradeoffs between quality concerns of different stakeholders. As such,
it becomes a balancing act reconciling the collective set of functional and quality requirements of all stakeholders involved,
eventually resulting in a (global) design that meets those requirements. This broader view is quickly becoming the received
view [1].
This broader view of what software architecture entails is also reflected in the characteristics of the architecture-centric
software development life cycle. We may by and large characterize the pre-architecture life cycle as follows (see also figure
1.(a) and any standard text on software engineering such as [17]):
Discussions about the system involve a few stakeholders only. Often, it is only the client. Possibly, one or a few user
representatives are involved.
Iteration involves functional requirements only. Once the functional requirements are agreed upon, these are supple-
mented with non-functional requirements. Together, these constitute the agreed-upon requirements specification for
the system to be built.
In particular, there is no balancing between functional and non-functional requirements. For example, there usually is
no discussion to trade off functionality and speed.
In these development approaches, requirements engineering very much is an activity that focuses on the problem space, while
the subsequent design phase focuses on the solution space. Conversely, the characteristics of an architecture-centric life cycle
are as follows (see also figure 1.(b)):
The discussions involve many stakeholders: the client, different classes of users, future maintainers of the system,
owners of other inter-operating systems.
Iteration concerns both functional and non-functional requirements.
1
Figure 1. Life cycles: (a) Pre-architecture and (b) Architecture-centric
In particular, architecting involves finding a balance between these types of requirements. Only when this balance is
reached, next steps can be taken.
In the latter view, software architecture has to bridge the gap between the world of a variety of, often non-technical, stake-
holders on one hand – the problem space –, and the technical world of software developers and designers on the other hand
– the solution space.
Software developers focus on the transition of the architecture into code. They view an architecture as consisting of
components and connectors. The other stakeholders may have a variety of other concerns, and are best served by some type
of architecture description that highlights how these concerns are addressed in the architecture. They are typically not served
best by a description that looks like a high-level programming language such as typically offered by ADL’s, or a formal
diagram as offered by UML.
Following this line of thought, the documentation of an architecture is typically split into a small number of views, each
of which highlights the concerns of a specific set of stakeholders. This same approach is used in other architecture fields.
In house construction, e.g., we use different drawings: one for the electrical wiring, one for the water supply, etc. These
drawings reflect different views on the same overall architecture. The same applies to software architecture.
The development and use of different architectural views in a context where the software architect communicates with
a variety of both technical and non-technical stakeholders, is the central issue in our software architecture course. This is
further elaborated in section 2, where we discuss the goals we had for our software architecture course, and how we designed
the course to meet these goals. Section 3 next describes two software architecture courses that we gave between September
2003 and February 2004, including some examples from both courses. Section 4 discusses the lessons we have learned and
section 5 the related work. Section 6 states our conclusions.
2 Global set-up of the Software Architecture Course
2.1 What’s Important in Software Architecture
A software architecture, or rather its description, reflects the major design decisions made. These decisions are made by
the architect, taking into account the concerns of the different stakeholders involved. The architect elicits the requirements,
both functional and non-functional, from the stakeholders, and devises a solution that accommodates these requirements in
a balanced way. Usually, not all requirements of all stakeholders can be met. Architecting then involves negotiations with
stakeholders to get a compromise.
In these discussions with stakeholders, the architect uses a description of the architecture which reflects the current set
of decisions made, and how these address the concerns of the stakeholders. One possibility is to devise a single description
2
of the system which addresses all concerns of all stakeholders. This however is likely to result in a very complex document
that no one understands. Like with building plans, it is better to make different ”drawings” each of which emphasizes certain
concerns of certain stakeholders. In software architecture, this idea is put forward in the IEEE recommended practice for
architecture description [9].
Central terms of reference in IEEE 1471 are ‘views’, ‘viewpoints’, ‘stakeholders’ and ‘concerns’. An ‘architectural
description’ consists of ‘views’ that are made according to a ‘viewpoint’. A viewpoint prescribes the contents and models
to be used in its views, and also indicates the intended ‘stakeholders’ and their ‘concerns’. Viewpoints can be reused in
other projects; these reusable viewpoints are termed ‘library viewpoints’. A stakeholder can have one or more concerns, and
concerns can be relevant to more than one stakeholder. Clements [4] gives many useful advices as to which views might
be appropriate in certain circumstances. An early example of the idea to have multiple views in architecture descriptions is
given in [12].
The architect tries to balance the requirements of the various stakeholders involved. In the end, though, the stakeholders
have to decide whether they are satisfied with the proposed architecture. A software architecture assessment is meant to do
exactly this: assess to what extent the architecture meets the various concerns of its stakeholders [5]. It is conducted by one
or a few assessors. Further participants are the architect(s) and the major stakeholders of the system. Very generally, the
structure of such an assessment is as follows:
The architect presents the architecture and its rationale to the stakeholders. He highlights the major design decisions
that led to the architecture. He may use different views of the architecture to illustrate his points.
The stakeholders next devise a series of scenarios that best express their concerns. A maintainer may devise scenarios
that describe possible changes or extensions to the system. A security officer may devise scenarios that describe
possible threats to the system. And so on.
For each of these scenarios, or a carefully selected subset if there are too many of them, the architect explains how the
architecture fares with the situation described, and what changes are needed, and against which cost, to accommodate
the situation described.
The assessment team writes a report describing the findings of the assessment.
2.2 Goals of the Software Architecture Course
With the above in mind, we decided on the following goals for our course:
The students should know how to develop different architectural views of an architecture, addressing specific concerns
of stakeholders. We used [9] as the model for doing so.
The students should know of the wicked nature of software architecture [2]. A software architecture is never right or
wrong, but at most better suited for certain situations. It involves making a large number of trade-offs between concerns
of different stakeholders. There may be different acceptable solutions, and the solution eventually chosen depends on
how the balancing between stakeholder concerns is made.
The students should know how to do an assessment of an architecture. This gives them the opportunity to learn
and appreciate a set of architectural decisions and trade-offs made. This provides insight into the boundaries of the
architectural solutions, the consequences for an architecture if another set of concerns had been chosen, as well as
an overall impression of the quality of the architectural description. Since an assessment involves explaining the
architecture and the decisions that led to the architecture to its stakeholders, this once again stresses the communication
aspect of software architecture.
The rethinking and examination of one’s own professional creations improves one’s performance in that profession [7].
Through the studio-like set-up of our course, with a weekly feedback on deliverables (architectural views, lists of scenarios,
etc), essential aspects of this reflective practitioner approach are applied.
By letting students develop their own architectural viewpoints and views, and letting them decide which concerns to
address, we obtain a series of different solutions to the same problem. This gives the students the opportunity to learn from
different solutions, and appreciate these differences in terms of quality priorities set. It emphasizes the very nature of the
intrinsic design-type problem.
3
3 The Software Architecture Courses
We gave the software architecture course twice in two quite different curricula. The first course (discussed in section 3.1)
was part of a one-year master program in professional software engineering. It was a very intensive course. It lasted eight
weeks, and the students had to spend 20 hours/week on the course (so they took only two courses in parallel). Most of the
work was done in the first six weeks. We had guest speakers in week 7, and exam preparation and exam in week 8. A total
of 19 students enrolled in the course. They worked in teams of three (and in one case four) people. They had all done a
bachelors program at a polytechnic institute before enrolling in the course. We used [1] as text book.
The second course (elaborated in section 3.2) was part of a regular masters program in both computer science and business
informatics. It had a duration of 12 weeks, with a Christmas break after week eight. The students had to spend 12 hours/week
on this course. A total of 50 students enrolled, approximately evenly divided between the (two-year) master program in
computer science and the (one-year) master program in business informatics. They worked in teams of four or five people.
Their background was quite varied. A large proportion had done a bachelors at our university. Quite a number of students
had done a bachelors at a polytechnic institute, while some students enrolled in the masters program after having done a
bachelors in another country. No text book was prescribed, though many students used [1].
None of the students had extensive previous experience with software architecture. For most, this was their first exposure
to the topic. Most students had previously followed a software engineering course of some sort.
3.1 The intensive architecture course
Since the work for the intensive course effectively had to be finished within six weeks, we decided not to have the students
develop an architecture from scratch. So we started with an existing pile of Java code (approx 75 KLOC). This existing system
implemented a car rental system. It used a typical 3-tier architecture that separated the user interface from the business logic
and the data layer. We gave the following tasks:
Reverse engineer the architecture from the (undocumented) source code. We gave no guidelines as to how to do
this, nor guidelines as to what the resulting description should look like. Most groups found and used JBuilder in
combination with some existing reverse engineering method, such as Dali [1, chapter 10]. In all cases, the architecture
was described in a view depicting the major functional elements; see figure 2 for an example. Quite a few of the box-
and-line diagrams delivered had unclear semantics. Boxes could denote a (Java) class, logical subsystem, or some other
static entity. Lines could denote a calling relationship, an is-contained-in relationship, an is-subordinate-to relationship,
etc.
Develop some (at least two) architectural views and the corresponding viewpoints. All groups developed an improved
version of the functional view developed in the previous step. This improved version usually made a more consistent
use of various types of boxes and lines. Almost all groups had difficulty in devising a second view. Some groups
came up with a rather shallow end-user view with a few icons depicting the user, the computer, and a LAN or WAN
connection. Some groups devised a process view [12] showing the dynamic structure of the system in terms of tasks,
processes, communications, and the allocation of functionality to run-time elements. The most interesting view we
encountered is (partly) depicted in figure 3. This view shows the relationship between business requirements, architec-
tural decisions, and quality aspects. It shows trade offs and supports ”what if” scenarios. In this example, a high level
of data integrity is chosen, and the impact on other qualities, the proposed architecture, and business requirements is
reflected in the coloring scheme.
Identify the styles and patterns used in the architecture, and discuss their benefits. All groups defined new viewpoints
showing how the patterns were used in the architecture: most viewpoints acted as catalogues, pointing out which
patterns were used in which subsystems; in these cases the pattern benefits could be discussed in general terms only.
Only one group defined viewpoints showing how elements inside subsystems were specializations of elements within
a certain pattern; in doing that they could discuss qualities more thoroughly, too.
Do an architecture assessment. We let half the groups act as architects, and the other half as stakeholders. We did not
assign specific assessor roles. We left it to the students to choose or devise a specific assessment method. All groups
chose a trimmed-down version of the Architecture Trade-Off Analysis Method (ATAM) [5], whose structure resembled
that sketched in section 2. All groups were enthusiastic about the insights they gained in the quality of their architectural
description. They also acknowledged now having a much deeper knowledge of the impact their particular set of
design decisions had on the architectural solution chosen. One group interestingly noticed the potentially manipulative
character of such an assessment. A very assertive architect may overwhelm stakeholders with an overload of confident
4
Figure 2. A 3-tier solution
statements, and effectively preclude a productive discussion. On the other hand, having a vision and being decisive are
required traits of a software architect [13], [6].
3.2 The regular architecture course
In the regular course, we asked the students to develop a software architecture from scratch. The students were asked
to develop an architecture for handling the paperwork in a courthouse; see figure 4 for this assignment. Two groups acted
as stakeholders, nine groups acted as architects. One stakeholder group interacted with four architect groups, while the
second stakeholder group interacted with five architect groups. The stakeholder groups could devise their own roles. Both
these groups decided on roles like IT manager, judge, lawyer, police. One group decided to have the press as one of the
stakeholders. Since this resulted in a lot of security problems in the architectures that had to comply with this stakeholder,
this role presented quite some problems to the architects that had to deal with it; more on this later on.
For this course, we chose the following tasks:
Develop an initial architecture. Again, we gave no guidelines as to how to do this, nor guidelines as to what the
resulting description should look like. Since most students had previously followed the software engineering course
at our department, they were familiar with the notion of MOSCOW: the separation of requirements into Must haves,
Should haves, Could haves, and Won’t haves. They applied these notions in the requirements elicitation discussions
with the stakeholder groups to prioritize requirements. The architect groups that had to deal with the press stakeholder,
tended to rate his requirements as low, probably because they had difficulty deciding how to handle them. This resulted
in a lot of heated discussions in some of those groups. Similar to the intensive course described earlier, the resulting
architecture was described in a functional view resembling the one in figure 2. And again, the semantics of the box-
and-lines diagrams was usually unclear.
Develop at least two architectural views and the corresponding viewpoints. To help the students do this, we presented
them with a method for defining IEEE Std 1471 viewpoints [11]. This method has four steps: (1) compile stakeholder
profiles, (2) summarize available design documentation, (3) relate this summary to the stakeholder concerns, and (4)
define viewpoints. This method forced them to consciously think of stakeholder concerns and how to relate them
5
Figure 3. A business view
to architectural decisions, something they were not accustomed to, and found difficult. Especially step 3 forced the
students to present their results in a concise way, a very necessary skill for a successful architect. We had to guide them
through this process, and give examples.
Do an architecture assessment. We let half the architect groups act as architects, and the other half as stakeholders. In
a second assessment round, we reversed these roles. This way, all architect groups played both roles. We asked the
two stakeholder groups to define a trimmed-down version of ATAM [5] to be used, and next act play the assessor role
during the assessment. In this case, many groups perceived the stakeholders as attacking their solution. As a result,
they vigorously defended their design decisions. This considerably improved in the second assessment round, though
the learning effect of this second assessment was less than hoped for. At the end though, the students were again
very positive about the assessment exercise, for the same reasons given by the students of the other course. In this
course, we observed a strong correlation between the quality of the assessment and the specificity of its inputs, viz. the
architecture description and the set of scenarios. More specific inputs resulted in a much better assessment.
4 Lessons learned
In discussions on software engineering courses, a recurring theme is whether or not these topics can be taught at all without
a ”real” case in the accompanying lab assignments. The same issues of course arises when discussing courses on software
architecture. In our course that used the Car Rental System, we had real code, but no stakeholders, and no concerns. The
architects had to follow lines of thought like ”if I were the owner of this car rental company, I might have a concern like ... ”.
In one respect, we fared slightly better in the course that featured the courthouse system, in that we assigned certain students
the role of stakeholder. But none of them was a real lawyer or judge. Interestingly, one of them had a brother who worked
for the police force, and had actual experience with requirements similar to ours. So he interviewed his brother, and came
back with a remarkably realistic set of concerns. However, we found that it is not so much the realism of the concerns that
matters, but the fact that they vary, and conflict, and need compromises. Especially in the course that featured the courthouse
example, this worked quite well. To further improve this, we intend to let a lab assistant participate as stakeholder in the next
releases of our course. Also, it is difficult to make the workload of architects and stakeholders equally high. To balance the
workload, we assigned the stakeholder groups some extra tasks, such as the preparation of the assessment procedure.
6
Court Online
The court in Blokker wants to get rid of the large amount of paper that gets produced in their cases. They want a
situation in which the record of a case, the hearings of witnesses, court reports, etc., are all stored electronically,
and are also available and used in electronic form in the courtroom. Judges and lawyers do not rummage through
a large pile of paper, but zap through an electronic file.
Software house VU-Arch is asked to develop an architecture for this system. Important functional requirements
for the system are:
Storage of all parts of a dossier
The possibility to add parts to a dossier, change parts by a more recent version, or annotate parts of a
dossier, if authorized to do so.
Protection against unauthorized access to (parts) of a dossier
Parts of a dossier can be in different formats: plain text, pictures, scanned handwritten documents, etc.
A function to search a dossier
Next to these functional requirements there are a number of additional things to be decided upon. One may think
of whether or not Open Source is required, and whether or not the court should continue its business with the
two-person company Salto which earlier provided the court in Blokker with a cheap scanner and accompanying
software.
Figure 4. Initial description of the requirements for Court Online
Students find it difficult to develop architectural views. In one respect, this need not come as a surprise, since it is a
quite common phenomenon in courses that have a design component [8]. Students often have difficulties in problem solving,
specifically in judging how ”close” to a final solution their design is. This is even more true if there is no single best solution,
as in software design, and especially software architecture. These are ‘wicked’ problems [2].
Our students mostly had a background in computer science/software development. So it should not come as a surprise that
they all developed a functional view first. This comes closest to the traditional global design representation they are familiar
with. After some tutoring, they could develop other technical views, along the lines of [12] or [1]. The development of a
more business-oriented view remains a challenge. In future courses, we will pay specific attention to this issue.
At first, many students saw the architecture assessment as threatening. This was especially true for the regular architecture
course, in which the students designed the architecture from scratch, and thus perceived a strong sense of ownership of
the results. This feeling persisted, even though we emphasized from the outset that their grades would not depend on the
number of scenarios their architecture could cope with, but only on the degree to which they could actually answer such
questions. Students apparently have to learn that not being able to cope with certain situations is the result of (hopefully)
explicit decisions and tradeoffs made, and not necessarily a negative statement.
One thing we had not explicitly considered at the beginning is that the quality of the result of an architecture assessment
very much depends on the quality of the architectural description. We knew the quality of the scenarios is important, and
stressed this point during the course. Scenarios have to be as explicit as possible. A scenario of the form ”What if we replace
the database system” is not good, while ”What if we replace Oracle by DB2” is. The latter allows for more concrete and in
depth investigations, and more specific answers. The importance of the quality of the architectural description did not really
surface during the course with the car rental system. The students always had the code available there, so if the architectural
description did not provide the answer, they could consult the code. This was not true in the course that used the courthouse
case. There, the architectural description was all they had. If this description was too global or vague, questions about the
impact of scenarios remain vague as well, resulting in quite a bit of handwaving in the argumentation.
5 Related work
There are very few papers that describe experiences with teaching software architecture courses.
Jaccheri [10] describes a course given at the Norwegian University of Science and Technology (NTNU) in 2001. The
goals for this course were similar to ours: generate architectural alternatives, describe an architecture accurately, evaluate
an architecture. The course emphasized the influence of quality considerations on the architecture (by making performance-
driven, maintenance-driven and usability-driven changes to the architecture), but did not emphasize the use of different
7
architectural views.
Muller [15] discusses his experiences with teaching systems architecting. The course objectives partly overlapped with
ours: raising awareness with the non-technical context in architecting, documenting and reviewing architectures. The course
has been given 23 times to experienced people within Philips.
6 Concluding remarks
We do not cover all aspects of software architecture in our course. Based on a careful analysis of the prevalent views of
essential aspects of software architecture, we selected topics to deal with these. We devised a set-up which allows us to teach
these topics in a university setting.
We achieved the goals set for the course. Though the students generally considered the workload quite high, they also
report a very large learning effect for this course. They gain confidence about how to document software architecture for
specific purposes and stakeholders, and are able to reason about architectural decisions. Also, they can cope with the fact that
alternative architectural strategies exist and that there is no single best solution. Our main challenge for the next iteration of
this course is to give the students more guidance in their design-type activities, at the same time retaining a sufficiently broad
spectrum of proposed solutions.
We consider the setup of the regular course more successful than that of the intensive course. The main reason is that
students there cannot backslide to the code, when the documented views do not suffice. They are forced to think more
carefully about the architecture documentation.
Acknowledgements
We thank the students of our courses Software Architecture for their participation and enthousiasm. We particularly thank
Hans Dekkers and Rik Farenhorst, for allowing us to use their views, and for giving feedback on an earlier version of this
paper.
References
[1] L. Bass, P. Clements, and R. Kazman. Software Architecture in Practice. Addison Wesley, second edition, 2003.
[2] D. Budgen. Software Design. Addison Wesley, second edition, 2003.
[3] F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal. A System of Patterns. John Wiley & Sons, 1996.
[4] P. Clements, F. Bachman, L. Bass, D. Garlan, J. Ivers, R. Little, R. Nord, and J. Stafford. Documenting Software
Architectures: Views and Beyond. Addison Wesley, 2003.
[5] P. Clements, R. Kazman, and M. Klein. Evaluating Software Architectures: Methods and Case Studies. Addison-
Wesley, 2002.
[6] D. Dikel, D. Kane, and J. Wilson. Software Architecture: Organizational Principles and Patterns. Prentice Hall, 2001.
[7] O. Hazzan. The reflective practitioner perspective in software engineering education. Journal of Systems and Software,
63(3):161–171, 2002.
[8] J. Hughes and S. Parkes. Impact of Verbalisation upon Students’ Software Design and Evaluation. In Proceedings 8th
International Conference on Empirical Assessment in Software Engineering (EASE 2004, pages 121–134. IEEE, 2004.
[9] IEEE Recommended Practice for Architecture Description. Technical report, IEEE Standard 1471, IEEE, 2000.
[10] M. Jaccheri. Tales from a Software Architecture Course Project. On-line at
http://www.idi.ntnu.no/ letizia/swarchi/eCourse.html, 2002.
[11] H. Koning and H. van Vliet. A Method for Defining IEEE Std 1471 Viewpoints, 2004. Submitted for publication.
[12] P. Kruchten. The 4+1 view model of architecture. IEEE Software, 12(6):42–50, 1995.
[13] R. Malveau and T. Mowbray. Software Architect BOOTCAMP. Prentice Hall, second edition, 2004.
[14] N. Medvidovic and R. Taylor. A Classification and Comparison Framework for Software Architecture Description
Languages. IEEE Transactions in Software Engineering, 26(1):70–93, 2000.
[15] G. Muller. Experiences of Teaching Systems Architecting. In INCOSE 2004, 2004.
[16] M. Shaw. Toward Higher Level Abstractions for Software Systems. In Proceedings Tercer Simposio Internacional del
Conocimiento y su Ingerieria, 1988.
[17] H. van Vliet. Software Engineering: Principles and Practice. Wiley, second edition, 2000.
8
... Their experience suggests that (i) students gain real-life experience when they work on open-source systems (ii) students strengthen their architectural knowledge by making code contributions to open-source projects, (iii) by working together on a joint book helps students look beyond their work and to study architectural descriptions produced by the other groups. Lago [31] presents a work that reports experiences with courses at the master's level in software architecture with a focus on communication aspects. It notes the significance of well-destined course content to teach the course effectively. ...
... Although universities conduct regular curriculum assessments, the time required to implement those revisions take time. It is challenging for universities to cope with the complex and rapid changes occurring in the industry [1,41,31]. ...
... Adopt Project-based Learning: Working with software projects, especially open-source projects, allows students to confront real complex systems, as well as practice the activities like architectural recovery, designing various architectural views, among others [31,35,56]. ...
Article
The activities of software design, documenting, and evaluating the structure of software systems, referred to as Software Architecture, have been increasingly getting significant attention in industries. This situation is because of the explicit and prominent role assigned to quality attributes while developing software systems. By considering the high relevance of Software Architecture to industry, many academic institutes have introduced a course on Software Architecture as a part of undergraduate programs in Software Engineering. However, teachers offering this course face numerous challenges. Some of these challenges stem from how software architecture is practised in industries and others from teaching them in an academic setting. This paper describes an experience of designing a software architecture course that aligns the competencies expected from professional software architects with teaching practices imparting those competencies. Such an alignment is necessary to improve the employability of graduate students, make their progression from academic institutes to industries an effortless one, and for better learning outcomes. In the absence of such alignment, fresh graduates need to re-train, leading to training costs and delayed recruitment of fresh graduates by their prospective employers. The experience reports recurring challenges observed by earlier researchers, strategies to address them and our experience in implementing those strategies. The teaching strategies suggested are potentially helpful and practical, especially to less-experienced instructors teaching a course on Software Architecture.
... Galster et al. [5], make the challenges of teaching software architecture clear. Lago and van Vliet in their pioneering work on teaching software architecture in an academic setting also refers to software architecture as being a wicked problem [6] partly due to the fact that there is no single best solution and that one must address the tradeoffs. DeBoer et al. similarly argue that since such wicked problems are not effectively addressed in more traditional active lecturer-passive student scenarios that a more collaborative learning approach that they describe in [7] is more effective. ...
Article
Full-text available
About 15 years ago, a role-based learning program aimed primarily at software architects was established. In the early days, we had extensive discussions to what extent to build on existing materials available outside of the company or to “grow our own” learning program. Due to the nature of our businesses, especially having many complex and cyber-physical systems with a strong focus on quality attributes, we established our own program. This architect-based learning program, known as the “Software Curriculum” has evolved over time and continues to be a key part of our company’s learning landscape. Especially as systems today and in future get more and more complex, the importance of learning, and especially in the software architecture area, has never been higher.
... En [8], otorgan a la asignatura un enfoque más industrial, centrándose en la resolución de problemas de diseño de arquitectura de software. En [6] detallan dos modalidades de asignatura, una con enfoque inverso y otra tradicional. ...
Conference Paper
Full-text available
La enseñanza de arquitectura del software supone todo un reto. Los conceptos teóricos son a menudo muy abstractos y los problemas arquitectónicos sólo son claramente visibles en aplicaciones de cierta envergadura. El reto es aún mayor cuando estos conceptos se enseñan en las primeras etapas del grado cuando los conocimientos de diseño y programación del alumnado aún son limitados. Para abordar este reto, inspirados por una propuesta llevada a cabo en la Delft University, decidimos adoptar un enfoque novedoso: enseñar arquitectura del software a través del análisis, evaluación y documentación de la arquitectura de proyectos existentes alojados en la plataforma GitHub. Para ello, fue necesario adaptar el método original, empleado a nivel de máster, a la asignatura objeto del estudio impartida durante el segundo curso de grado. Para evaluar este enfoque realizamos un total de 258 encuestas a estudiantes de dos cursos consecutivos. Los resultados del estudio, respaldados por un sólido análisis estadístico de los datos, demuestran la idoneidad de este método para la enseñanza de arquitectura del software en los primeros cursos de grado.
... Moreover, refs. [5,6] analyzed why teaching software architecture is challenging and contrasted it with teaching other software engineering subjects. As the first author has been teaching software architecture for five years, she has observed that students frequently simply study in order to prepare for exams, which rarely results in long-lasting learning. ...
Article
Full-text available
Project-based learning (PBL) promotes increased levels of learning, deepens student understanding of acquired knowledge, and improves learning motivation. Students develop their ability to think and learn independently through depending on themselves in searching for knowledge, planning, exploration, and looking for solutions to practical problems. Information availability, student engagement, and motivation to learn all increase with mobile learning. The teaching process may be enhanced by combining the two styles. This paper proposes and evaluates a teaching model called Mobile Project-Based Learning (Mobile-PBL) that combines the two learning styles. The paper investigates how significantly Mobile-PBL can benefit students. The traditional lecture method used to teach the software architecture module in the classroom is not sufficient to provide students with the necessary practical experience to earn a career as software architects in the future. Therefore, the first author tested the use of the model for teaching the software architecture module at Philadelphia University’s Software Engineering Department on 62 students who registered for a software architecture course over three semesters. She compared the results of using the model for teaching with those results that were obtained when using the project-based learning (PBL) approach alone. The students’ opinions regarding the approach, any problems they had, and any recommendations for improvement were collected through a focus group session after finishing each semester and by distributing a survey to students to evaluate the effectiveness of the used model. Comments from the students were positive, according to the findings. The projects were well-received by the students, who agreed that it gave them a good understanding of several course ideas and concepts, as well as providing them with the required practical experience. The students also mentioned a few difficulties encountered while working on the projects, including student distraction from social media and the skills that educators and learners in higher education institutions are expected to have.
... Moreover, refs. [5,6] analyzed why teaching software architecture is challenging and contrasted it with teaching other software engineering subjects. As the first author has been teaching software architecture for five years, she has observed that students frequently simply study in order to prepare for exams, which rarely results in long-lasting learning. ...
Article
Full-text available
Project-based learning (PBL) promotes increased levels of learning, deepens student understanding of acquired knowledge, and improves learning motivation. Students develop their ability to think and learn independently through depending on themselves in searching for knowledge, planning, exploration, and looking for solutions to practical problems. Information availability, student engagement, and motivation to learn all increase with mobile learning. The teaching process may be enhanced by combining the two styles. This paper proposes and evaluates a teaching model called Mobile Project-Based Learning (Mobile-PBL) that combines the two learning styles. The paper investigates how significantly Mobile-PBL can benefit students. The traditional lecture method used to teach the software architecture module in the classroom is not sufficient to provide students with the necessary practical experience to earn a career as software architects in the future. Therefore, the first author tested the use of the model for teaching the software architecture module at Philadelphia University’s Software Engineering Department on 62 students who registered for a software architecture course over three semesters. She compared the results of using the model for teaching with those results that were obtained when using the project-based learning (PBL) approach alone. The students’ opinions regarding the approach, any problems they had, and any recommendations for improvement were collected through a focus group session after finishing each semester and by distributing a survey to students to evaluate the effectiveness of the used model. Comments from the students were positive, according to the findings. The projects were well-received by the students, who agreed that it gave them a good understanding of several course ideas and concepts, as well as providing them with the required practical experience. The students also mentioned a few difficulties encountered while working on the projects, including student distraction from social media and the skills that educators and learners in higher education institutions are expected to have.
... These concepts require the development of correspondingly increased abilities of abstraction, being also often the first time issues like performance or security are addressed [4]. Last but not least, there are non-technical skills at play, such as communication [7] and decision-making [2], that need to be fostered, too [3]. ...
Preprint
Full-text available
Software Architecture, from definition to maintenance and evolution, is a complex aspect of software development and, consequently, a challenging subject when it comes to teaching it, and learning it. Many research efforts have been devoted to designing teaching approaches, strategies and tools. Most of them, however, focus on the knowledge itself and the ways to convey it to students, rather than on the different learning styles of students themselves. Teaching methods which predominantly rely on verbal and written communication, are very well aligned with some learning styles. However, students with learning styles that benefit more from physical activity or first-hand experience, need to defer to cognitive processes that are less natural to them. In this work, we propose an innovative use of role-playing as teaching strategy for architecture models of reference (i.e. layered, pipe and filter, client-server, etc.). This role-playing of different software architectures, in which students play the part of specific components in the system, intends to complement other classical teaching materials, such as in-person or recorded lectures, lab assignments, or development projects. Addressing all learning styles within a classroom is key to ensure that we favour and foster the students' different learning processes, and give everyone an even playfield in which to best develop their capabilities as Software Architects.
... The insights we garnered provide fertile ground for how students are educated in the topic of software architecture as well. Beyond the need to cover architecture as a separate topic (which many programs do only peripherally so, although exceptions exist [68], [69]), perhaps the most important factor is to teach the importance of architecture meetings at the whiteboard: what is typically discussed, how to conduct them, what kinds of perspectives should be brought to the discussion, the role of sketches in supporting the discussion taking place, and how to take those sketches into further development activities, and more. Given that the architecture forms the core of any system, and given that much of architecture design and refinement takes place at the whiteboard, the need for careful consideration how to teach these topics best is high. ...
Preprint
Full-text available
The whiteboard plays a crucial role in the day-to-day lives of software architects, as they frequently will organize meetings at the whiteboard to discuss a new architecture, some proposed changes to the architecture, a mismatch between the architecture and the code, and more. While much has been studied about software architects, the architectures they produce, and how they produce them, a detailed understanding of these whiteboards meetings is still lacking. In this paper, we contribute a mixed-methods study involving semi-structured interviews and a subsequent survey to understand the perceptions of software architects on whiteboard architecture meetings. We focus on five aspects: (1) why do they hold these meetings, what is the impact of the experience levels of the participants in these meetings, how do the architects document the meetings, what kinds of changes are made after the meetings have concluded and their results are moved to implementation, and what role do digital whiteboards plays? In studying these aspects, we identify 12 observations related to both technical aspects and social aspects of the meetings. These insights have implications for further research, offer concrete advice to practitioners, provide guidance for future tool design, and suggest ways of educating future software architects.
Article
The whiteboard plays a crucial role in the day-to-day lives of software architects, as they frequently will organize meetings at the whiteboard to discuss a new architecture, some proposed changes to an existing architecture, a mismatch between a prescribed architecture and its code, and more. While much has been studied about software architects, the architectures they produce, and how they produce them, a detailed understanding of these whiteboards meetings is still lacking. In this paper, we contribute a mixed-methods study involving semi-structured interviews and a subsequent survey to understand the perceptions of software architects on whiteboard architecture meetings. We focus on four aspects: (1) why do they hold these meetings, (2) what is the impact of the experience levels of the participants in these meetings, (3) how do the architects document the meetings, and (4) what kinds of changes are made in downstream activities to the work produced after the meetings have concluded? In studying these aspects, we identify eleven observations related to both technical aspects and social aspects of the meetings. These insights have implications for further research, offer concrete advice to practitioners, and suggest ways of educating future software architects.
Chapter
Software architecture education is a weak spot in many undergraduate programs in computer science and software engineering. While the concepts and practices used by software architects in industry are rich and varied, transferring this expertise into a university classroom has proved problematic. Bridging the gap between industry and academia requires ongoing, often heroic, effort. This is a “chicken and egg” problem: Because there is a lack of good teaching materials, architecture is seldom taught, and because it is seldom taught, there has been little incentive to create good materials. We would like to change that. Our goal is to establish guidelines for how software architecture practices should be taught—both technical and non-technical topics—and to suggest appropriate teaching methods to best prepare students to be software architects in practice.
Article
Full-text available
From the Book:For all but the most trivial software systems, you cannot hope to succeed without paying careful attention to its architecture: the way the system is decomposed into constituent parts and the ways those parts interact with each other. Without an architecture that is appropriate for the problem being solved the project will fail. Even with a superb architecture, if it is not well understood and well communicated—in other words, well documented—the project will fail. Not may fail. Will fail.Accordingly, software architecture is at the center of a frenzy of attention these days. A new book about it seems to pop out monthly. In response to industrial need, universities are adding software architecture to their software engineering curricula. It's now common for "software architect" to be a defined position in organizations, and professional practice groups for software architects are emerging. It has been the subject of major international conferences and workshops. The purveyors of the Unified Modeling Language promote their product by calling it "the standard notation for software architecture" (a claim that may say at least as much about the pervasiveness of architecture as about UML). The Software Engineering Institute maintains a bibliography of journal and conference papers about software architecture and its population is approaching 1000.Rather surprisingly, there is a dearth of practical guidance available that is independent of language or notation for how to capture an architecture. To be sure, piles of books exist about how to use a particular language—again, UML comes to mind—but what an architect really needs is guidancein which architecture is a first-class citizen and language is relegated more appropriately to a supporting role.First, let's agree on some basic context. The field has not anointed a single definition of software architecture, and so there are many, but we'll use this one: A software architecture for a system is the structure or structures of the system, which comprise elements, their externally-visible behavior, and the relationships among them. (Adapted from Bass 98.)Much of this book is about the meaning of elements and relationships, but for now we use this definition to emphasize the plurality of structures that exist in architectures. Each structure is characterized by different kinds of elements and relationships, and each structure provides a view of the architecture that imparts a particular kind of understanding.The architecture serves as the blueprint for both the system and the project developing it. It defines the work assignments that must be carried out by design and implementation teams. The architecture is the primary carrier of system qualities such as performance, modifiability, and security, none of which can be achieved without a unifying architectural vision. Architecture is an artifact for early analysis to make sure that the design approach will yield an acceptable system. And architecture holds the key to post-deployment system understand-ing, maintenance, and mining efforts. In short, architecture is the conceptual glue that holds every phase of the project together for all of its many stakeholders.And documenting the architecture is the crowning step to crafting it. The perfect architecture is useless if it has not been expressed understandably. If you go to the trouble of creating a strong architecture, you must go to the trouble of describing it in enough detail, without ambiguity, and organized so that others can quickly find needed information. Otherwise your effort will have been wasted, because the architecture will be unusable.The goal of this book is to help you decide what information about an architecture is important to capture and to provide guidelines and notations (and examples) for capturing it. We intend this book to be a practitioner- oriented guide to the different kinds of information that constitute an architecture. We wanted to give practical guidance for choosing what information should be documented, and show (with examples in various notations, including but not limited to UML) how to describe that information in writing so that others can use it to carry out their architecture-based work: implementation, analysis, recovery, etc. Therefore, we cover: Uses of software architecture documentation. How one documents depends on how one wishes to use the documentation. We lay out possible end goals for architecture documentation, and provide documentation strategies for each. Architectural views. We hold that documenting software architecture is primarily about documenting the relevant views, and then augmenting this information with relevant information that applies across views. The heart of the book is an introduction to the most relevant architectural views, grouped into three major families (which we call viewtypes) along with practical guidance about how to write them down. Examples are included for each. Packaging th information. Once the views have been understood, there is still the problem of choosing the relevant views, including information not contained in a view, and packaging all of the information as a coherent whole. has been created, We give practical advice for all of these facets.The audience for this book includes the people involved in the production and consumption of architectural documentation, which is to say the community of software developers. We believe strongly in the importance of architecture in building successful systems. But no architecture can achieve this if it is not effectively communicated, and documentation is the key to successful communication. We hope we have provided a useful handbook for practitioners in the field.PC—Austin, TexasFB, LB, DG, JI, RL, RN, JS—Pittsburgh, Pennsylvania
Article
The experiences of four years teaching systems architecting are described. The duration of the course systems architecting is 5 days. The target audience consists of (potential) architects and stakeholders that cooperate intensely with the architect, such as project leaders, product managers, and group leaders. The course has been given 23 times in the period November 1999 to January 2004. The maximum number of participants is 16. This paper discusses the course content and the course objectives, course materials, the course format, some course statistics, the expectations of the students up front and the evaluation at the end, the follow‐up and the longer term results, the derived course for managers, the lack of visibility of system architects, and the broader education context that is required for a systems architecting curriculum.
Article
From the Book:PREFACE: PrefaceSoftware architecture is an emerging discipline and an exciting career path for software professionals. We encourage both new and experienced practitioners to read this book as an aid to becoming better software architects. You may have noticed that most software books today do not say much about software architecture. Here, in this volume, we've concentrated the knowledge that you need to be the most effective architect possible.As co-authors, we have lived through the experience of graduating from "member of technical staff" developers to becoming practicing software architects at the most senior levels of our respective companies. We are technical people, not managers, and we enjoy the technical nature of our work. We enjoy parity of salary and benefits with the senior managers at our respective firms. In other words, we are none-the-worse-for-wear as a consequence of choosing a software architecture career. We think that many of our readers would like to gain from our experience. Hence this book.This is more than a book about software architecture. It is a field manual that can train you. We choose the pseudomilitary style, because it embodies an essential attitude. As a software architect, you need many survival skills—some technical, some political, some personal. While neither author has military experience, we have seen software architecture become a battleground in many ways. It is a battleground of ideas, as developers compete to forward their own comcepts. It is a battle ground for control of key design decisions that may be overruled by managers or developers, perhaps covertly. It is a battleground with manyrisks,since architects are responsible for a much wider range of technical and process risks than most managers or individual developers.If you are a practicing software architect, we know that you are a busy professional. After buying this book, we would suggest that you peruse the table of contents and the index for topics that are new to you. Focus on those sections first. When you have time, we suggest that you attempt a cover-to-cover read-through, to familiarize yourself with all of the covered topics and terminology.If you are new to architecture and want to become a software architect, we suggest that you do a cover-to-cover read-through beginning with the first chapter. Work the exercises provided, which will add an experiential learning element to your experience base.Raphael MalveauThomas J. Mowbray, Ph.D.McLean, Virginia, U.S.A.
Article
With the growing impact of information technology the proper understanding of IT-architecture designs is becoming ever more important. Much debate has been going on about how to describe them. In 2000, the IEEE Std 1471 proposed a model of an architecture description and its context.In this paper we propose a lightweight method for modeling architectural information after (part of) the conceptual model of IEEE Std 1471 and defining IEEE Std 1471 viewpoints. The method gives support by outlining in textual form and in diagram form the relation of the concerns of the stakeholders to the architectural information. The definition of viewpoints can then be done with insight from these relations. The method has four steps: (1) creating stakeholder profiles, (2) summarizing internal design documentation, (3) relating the summary to the concerns of the stakeholders, and (4) defining viewpoints.We have conducted a round of discussion and testing in practice in various settings. In this paper we present the feedback we received and propose improvements.
Article
Software now accounts for most of the cost of computer-based systems. Over the past thirty years, abstraction techniques such as high level programming languages and abstract data types have improved our ability to develop software. However, the increasing size and complexity of software systems have introduced new problems that are not solved by the current techniques. These new problems involve the system-level design of software, in which the important decisions are concerned with the kinds of modules and subsystems to use and the way these modules and subsystems are organized. This level of organization, the software architecture level, requires new kinds of abstractions. These new abstractions will capture essential properties of major subsystems and the ways they interact.