134x Filetype PDF File size 0.30 MB Source: www.inf.usi.ch
The Education of a Software Engineer Mehdi Jazayeri Technical University of Vienna mehdi.jazayeri@tuwien.ac.at Abstract A successful software engineer must possess a wide often using UML as a standard notation. Software range of skills and talents. Project managers know how architecture has become a standard topic, providing a difficult it is to find, motivate, and retain such people. bridge from requirements to design. Still, most of the Educators face a complementary, and perhaps more emphasis is on these forward engineering development challenging, problem: how to prepare such engineers. steps. Some courses also cover management aspects, but The challenge of what to teach software engineers mostly in a theoretical sense. These treatments leave out evolves over time as technologies, applications, and the entire “experience” aspect: it is one thing to read requirements change. As software technology has about how to design a module and quite a different thing rapidly spread through every aspect of modern societies, to design a specific module that is supposed to meet the challenge of educating software engineers has taken specific requirements and fit in with modules designed on new form and become more complex and urgent. In by others. To provide some level of experience with the this talk, I present the broad outline of an educational techniques that are taught in textbooks, many courses program for a complete software engineer. A new include, or are complemented by, a project component curriculum for computer science has been developed in which the students, usually in small teams, develop a based on these ideas and will start in October 2004 at medium-sized software application. While the aim of the University of Lugano in Switzerland. the project is to show the student what the “real world” of development is like, and often these projects are the 1. Introduction most time-consuming projects that students undertake in their studies, by necessity the project must be Over the years, the teaching of software engineering has constrained to ensure that it can be completed within the changed only slightly and most textbooks of software semester with a reasonable amount of work. Sometimes engineering follow rather traditional and similar lines. the instructor specifies the requirements, hiding the This might give the impression that there is general most difficult aspect of the real world, in which the consensus on what must be taught to software engineers. requirements are never really known. Usually the On the other hand, listening to discussions between infrastructure and the development environment are pre- academics and practitioners at conferences reveals deep determined and are ones that the students are familiar disagreements. Many practitioners believe that with, the schedule is fixed and the project has already universities are not doing a good job and many been trimmed to an appropriate size by the instructor, academics argue that industry does not use the latest, and there are no compatibility or legacy requirements. best technology. None of these constraints reflect the real world of There are deep, underlying, reasons why universities software projects but they are necessary for practical have difficulties in educating software engineers. A reasons to respect the academic calendar in which software engineer must combine formal knowledge, semesters come to a quiescent end, with no possibility good judgment and taste, experience, and ability to of lawsuits or contract disputes! interact with and understand the needs of clients. It is The solution to these challenges is to design a whole not easy to teach all of this, certainly not in one or two new curriculum of computer science that integrates the courses on software engineering! different topics that we teach and addresses the new The typical courses on software engineering concentrate realities in the application world. Because of the on the phases of the development process: requirements importance of software, its engineering, and how we analysis, specification, design, implementation, and teach it, is a core component of such a curriculum. In testing. In recent years, some of these issues have been this paper, I will attempt to outline the challenges of enhanced because of new research results. For example, teaching software engineering today, the emerging requirements is now treated much more systematically, requirements that software engineers must satisfy, and propose a modern curriculum to address these development-oriented. One could teach about how to challenges. A curriculum of this type has been designed form teams and establish proper communication in the last two years and will start for the first class of channels or one could teach about module design. One students in October 2004 at the University of Lugano. could teach about making the quality assurance team independent from the development team or one could 2. Traditional challenges of Teaching teach about testing techniques. In reality, the Software Engineering differences are not so sharp and the most important problems cross the boundaries of development and Teaching software engineering has never been easy and management. For example, as Parnas [6] has pointed no consensus has emerged from the many debates about out, the essential concept of modularity that guides how best to do it. At the base of the problem lies the fact module design can be used as the basis for work that the complexity of software engineering comes from assignment in a project. An architectural approach to the complexity of problems and it is impossible to development supports better management practices. construct complexity in a classroom setting. Indeed, the -Product versus process. Should we teach about the purpose of classroom teaching is to peel enough software object and its constituents or about how we complexity away that the problems become doable by construct the software object? In the former approach students. In software engineering, unfortunately, if you we emphasize the programming and other languages peel away complexity, you are left with unrealistic and in the latter we emphasize at what step we should (sometimes called toy) problems. use those languages. In the product-based approach we Another difficulty of teaching software engineering is emphasize more design issues and in the process-based that it is a multi-faceted discipline. As a result, there are approach we emphasize the problems that occur in the many tradeoffs that an instructor must make, thus process. This tradeoff has always been the focus of limiting the experience of the student. Some of the software quality improvement approaches. Capability common tradeoffs are: Maturity Model (CMM) is the well-known assessment -Practice versus theory. How much should we teach approach that measures the software production quality about current state of the practice and how much about of an organization solely based on process-related an idealized approach that our theories cover? The issues. theoretical approach emphasizes the importance of -Formal versus empirical. This tradeoff is between formal specifications, program verification, and in learning by studying versus learning by doing. The two general a disciplined and systematic approach to schools of thought view software engineering as a software development. In the practical approach, one mathematical science or as an empirical science. emphasizes the difficulties that arise in the real world, Empirical software engineering emphasizes experiments despite taking a systematic approach to software and statistics to characterize the results of those development. These problems range from unreasonable experiments. A laboratory approach to some degree customers who can’t make up their minds to difficult supports the empirical approach colleagues who refuse to change their interface to accommodate new requirements to incompatible Of course, most textbooks and most courses try to cover versions of the version control system. This tradeoff is a all of the above aspects, making more or less conscious manifestation of what Fred Brooks [1] has described as choices about the tradeoffs. If we were sure what the essential versus accidental complexity of software. The graduate of the course would end up doing, it would be theoretical approach deals with the essential complexity easier to decide on the tradeoffs but we usually do not while the practice-oriented approach deals with the know that. A textbook, in particular, tries to address a accidental complexity. The usual solution to this general audience and for software engineering the tradeoff is to combine a lecture course, dealing with the general audience is not very homogeneous. In any case, theory, with a laboratory course, in which the students the necessity of making choices among these tradeoffs face practical issues. With the caveat that one cannot re- has made the teaching of software engineering a create the real world in a classroom, close challenging task. approximations to the real world are possible. -Development versus management. From the birth of 3. New realities software engineering, some have viewed the problems The traditional challenges of software engineering have as being primarily managerial and others as primarily been exacerbated in recent years by the growing importance of software and by new technological leave the environment at arbitrary times. Software developments. In this section, I discuss what I consider services and applications must be created dynamically to be the trends with the most significant impact on the out of these computing elements. This dynamic world is teaching of software engineering. at odds with traditional software engineering in which -Distribution. The change of computing platform from we try to fix (bind) as much as we can as early in the mainframe computing to distributed computing requires process as possible. Traditional software engineering a fundamental reconsideration in the way we view the favors static decisions and pervasive computing forces structure of software and the basic notion of modularity. most decisions to be made dynamically. Historically, software engineering practice, and software -The Internet. Of course, the Internet has changed engineering textbooks too, have dealt with centralized everything and software engineering is no exception. (mainframe) software systems. The often-maligned The Internet has had several different effects on metric of lines of code to measure the complexity of software engineering. First, it is used as an execution software or the productivity of programmers is an platform. Second, it is used as a development platform. indication of this mainframe bias. Today’s world, Third, it is used as a delivery vehicle for software. Each however, is distributed by default. This means that we of these engenders its own version of software must begin with distribution as a starting point rather engineering issues. For example, using the Internet as an than as a special case of software engineering. To what execution platform can be based on various Internet degree must we teach about communication, protocols and security mechanisms and infrastructure. synchronization, caching, security, fault-tolerance, and We are beginning to see book titles such as Software other such concepts that are traditionally the domain of Engineering for the Internet. There are even degrees distributed systems? In fact, no software engineer can offered on Web Informatics. ignore these issues and they are complex enough that A more direct impact of the Internet on education in they must be engineered if they are to be included in any general, not only in software engineering education, is system. This argues for a closer coupling of software the availability of an unlimited reservoir of information. engineering and distributed systems. But if we already For example, the open courseware library offered by had too much to teach in a software engineering course, MIT on the Internet (ocw.mit.edu) is a wonderful source how are we going to include the new distribution of material for instructors and students alike. It is not considerations? clear, however, how best to exploit this information in a Another aspect of distribution involves the people and traditional course setting. processes in software engineering. Increasingly, -Proliferation of software tools and environments. software is being developed by teams of engineers that Practitioners and educators alike have always are geographically, and often also organizationally, recognized the importance of tools and environments to distributed. While this does not change the formal or support software. The state of practice, however, has theoretical aspects of software engineering, it does have changed considerably over time. At some point in time, a fundamental impact on the processes, tools, and tools were used to enforce certain methodologies or practices that can and should be used. There are company policies. The adoption of such tools by interesting ways that traditional formal concepts are companies is a major decision with large impact on the affected by such practical realities. For example, the processes and future decisions of the company. The practice of outsourcing makes some traditional concepts assumption is that the experience of the company’s such as module decomposition and program engineers in the use of the tools is so valuable that the specification more important than ever before. tools must be used over a long period of time. Adopting -Pervasive computing. Pervasive computing seems to a different toolset or environment discards the hard- be the technological trend of distribution extended to its earned employees’ experience. Furthermore, a extreme. There are several different views of pervasive company’s software engineering processes build around computing but the common one refers to the availability the set of tools being used. Changing tools requires of unlimited computing and communication elements in changing processes, which is also an expensive the environment, where every object can communicate undertaking. As a result, the state of tool adoption in with other objects. Pervasive computing requires us industry is rather static and conservative. On the other once again to question our assumptions about the hand, over the last decade, there have been tremendous structure of software. The most important difference is developments in the area of software tools, spurred in the introduction of dynamicity. The software must be part by the very active research on software able to deal with computing elements that enter and environments in the 1970s, in part by the open source movement, and in part by the existence of the Internet quality issues. Software engineers must learn that “time- platform for execution and delivery. The pace of to-market” is not the only measure of project success. technology development and supporting tools has They must learn tradeoffs that take into account quality picked up so considerably that the conservative factors as well as more concrete factors. This area needs approach of earlier times is no longer viable. A software much more research but educational needs are rather engineer must now be able to pick up a new tool and an acute and cannot wait for research results. The only way associated process quickly, regardless of his or her I know to emphasize this subject is to teach the vested experience in a previous tool. Internet-time has responsibilities of a professional software engineer. This certainly affected tools and processes and requires has to be a critical part of a software engineer’s agility on the part of the software engineer. On the one education. There is not a wealth of material on this hand, this implies that the choice of, and emphasis on, subject but a good starting point is [2]. tools in a software engineering class is not as important -Computing platform. With a distributed computing because almost certainly the students will use very environment providing the hardware platform, different tools in their profession. On the other hand, it middleware provides the software platform, something implies that the student must gain the skills to be able to analogous to operating systems of the past in centralized switch among tools. Where and how is this skill to be systems. Most middleware systems offer similar acquired? facilities but they also have significant differences. -Software evolution. It is now generally accepted that Software engineering on top of different middleware the initial focus of software engineering on development systems could be based on different approaches and ignored the importance of software evolution. We now techniques. Should a middleware platform be part of the acknowledge that we have problems with legacy study of a software engineer? While we would like to software that must be maintained by software engineers. believe that the concepts and principles are independent There is significant research currently going on in the of the actual middleware, a skilled software engineer area of software evolution, from theories to tools to needs detailed knowledge of the middleware principles processes. It is more likely that a software engineer will and the gap between general concepts and concrete be employed in software evolution than new software middleware practices is growing rather large. The development. Should this new reality shift the emphasis choice of which middleware platform to use in we place in software engineering courses from software classroom teaching involves similar considerations as development to software evolution? More likely, we the choice of what programming language to use. have to seriously consider evolution alongside Should we choose a platform for its teaching value or development. But we face the same problems of for its current popularity? A disturbing trend is the creating a realistic evolution experience in the mixing of marketing and technical considerations. The classroom. What makes evolution difficult is the size argument that one platform is better because it has more and complexity of the software, company organizational users is not a valid argument for educational choices. issues, and the necessity of parallel development. Regardless of how fast technology develops, we in Recreating these issues in the classroom makes the class universities must prepare engineers who will cope with unmanageable and restricting them to make the class the technologies of at least the coming decade. manageable defeats the learning objectives. -Interdisciplinary informatics. Pervasive computing -Software quality. Complaints about software quality refers to a branch of (distributed) computing that are commonplace. Most of us acknowledge the considers abundant computing power embedded in shortcomings in today’s software but few of us do everyday environments. The field lies at the intersection anything about it. As software pervades society’s of embedded and distributed systems. We can, however, infrastructures and runs most of its services, software interpret “pervasive” computing in a more general quality cannot be ignored. With emerging pervasive sense, in the sense that computing is now pervasive in computing applications and services, software quality all aspects of society, ranging from business, to becomes even more challenging. Software engineers government, to education and science. No profession must have tools and techniques to build high-quality can function or advance without computing. New drug software. Where do they get these tools and techniques? discoveries, new material inventions, new business Most software engineering courses and textbooks go products and processes, are all based on heavy use of little beyond testing techniques in this area. The computing and software. This means that software is problem here is a lack of concrete techniques. The best being developed to address the needs of many diverse that can be done today is to impart a sensitivity to disciplines. Indeed, we once taught informatics as if
no reviews yet
Please Login to review.