The Software Engineering: A Layered Technology, Computer Application Software Engineers, Software Engineering as Computing Discipline, Software Engineering as an Engineering Discipline and The Generic view of Software Engineering, Umbrella Activities
Introduction
Since the dawn of computing in the 1940s, the application and uses of computers have grown at a staggering rate. Software plays a central role in almost all aspects of daily life: in government, banking, and finance, education, transportation, entertainment, medicine, agriculture, and law. The number, size, and application domains of computer programs have grown dramatically; as a result, hundreds of billions are being spent on software development, and the livelihood and lives of most people depend on the effectiveness of this software development. Software products have helped us to be more efficient and productive. They make us more effective problem solvers, and safer, more flexible, and less confining. Despite these successes, there are serious problems in the cost, timeliness, and quality of many software products. The reasons for these problems are many and include the following.
{tocify} $title= {Table
of Contents}
Software Engineering: a Layered Technology
Although hundreds of authors have developed personal definitions
of software engineering, a definition of software engineering, a definition
proposed by Fritz Bauer [NAU69] at the seminal conference on the subject still
serves as a basis for discussion: [Software Engineering is] the establishment
and the use of Sound engineering principles in order to obtain economically
software that is reliable and works efficiency on real machines. Almost every
reader will be tempered to add to this definition. It says little about the
technical aspects of software quality; it does not directly address the need
for customer satisfaction or timely product delivery; it omits mention of the
importance of a mature process. And yet, Bauer’s definition provides us with a
baseline. What “Sound Engineering Principles” can be applied to computer
software development? How do we “economically” build software so that it is
“reliable”? what is required to create computer programs that work
“efficiently” on not one but many different “real machines”? These are the
questions that continue to challenge software engineers.
Process, Methods and Tools of a Layered Technology
Note: - Software engineering encompasses a
process, methods for managing and engineering software, and tools.
Software engineering is a layered technology. Referring to Figure, any engineering approach (including software engineering) must rest on an organizational commitment to quality. Total quality management, Six Sigma, and similar philosophies foster a continuous process improvement culture, and it is this culture that ultimately leads to the development of increasingly more effective approaches to software engineering. The bedrock that supports software engineering is a quality focus.
Figure
of Software engineering layers The foundation for software engineering is the process layer. The software engineering process is the glue that holds the technology layers together and enables rational and timely development of computer software. Process defines a framework that must be established for effective delivery of software engineering technology. The software process forms the basis for management control of software projects and establishes the context in which technical methods are applied, work products (models, documents, data, reports, forms, etc.) are produced, milestones are established, quality is ensured, and change is properly managed. Software engineering methods provide the technical how-to’s for building software. Methods encompass a broad array of tasks that include communication, requirements analysis, design modeling, program construction, testing, and support. Software engineering methods rely on a set of basic principles that govern each area of the technology and include modeling activities and other descriptive techniques. Software engineering tools provide automated or semi-automated support for the process and the methods. When tools are integrated so that information created by one tool can be used by another, a system for the support of software development, called computer-aided software engineering, is established. CASE combines software, hardware, and a software engineering database (a repository containing important information about analysis, design, and program construction, and testing) to create a software engineering environment analogous to CAD/CAE (computer-aided design) for hardware. Computer Applications Software EngineersComputer applications software engineers analyze users needs and design, construct, and maintain general computer applications software or specialized utility programs. These workers use different programming languages, depending on the purpose of the program. The programming Languages most often used are C, C++, and Java, with Fortran and COBOL used less commonly. Some engineers develop both packaged systems and systems software or create customized applications. Software Engineering as a Computing DisciplineA common misconception about software engineering is that it is primarily about process oriented activities (i.e., requirements, design, quality assurance, process improvement, and project management). In this view, competency in software engineering can be achieved by acquiring a strong engineering background, a familiarity with a software development process and a minimal computing background, including experience using one or more programming languages. Such a background is, in fact, quite insufficient; the misconception that leads to such thinking is based on an incomplete view of the nature and challenges of software engineering. In the historical development of computing, computer scientists produced software and electrical engineers produced the hardware on which the software runs. As the size, complexity, and critical importance of software grew, so did the need to ensure that software performs as indeeded. By the early 1970’s, it was apparent that proper software development practices required more than just the underlying principles of computer science; they need both the analytical and descriptive tools developed within computer science and the rigor that the engineering disciplines brings to the reliability and trustworthiness of the artifacts they engineer. Software engineering thus is different in character from other engineering disciplines, due to both the intangible nature of software and to the discrete nature of software operation. It seeks to integrate the principles of mathematics and computer science with the engineering practices developed to produce tangible, physical artifacts. Drawing on computing and mathematics as foundations, software engineering seeks to develop systematic models and reliable techniques. Software Engineering as an Engineering DisciplineThe study and practice of software engineering is influenced both by its roots in computer science and its emergence as an engineering discipline. A signified amount of current software engineering research is conducted within the context of computer science and computing departments or colleges. Similarly, software engineering degree programs are being developed by such academic units as well as within engineering colleges. Thus, the discipline of software engineering can be seen as an engineering field with a stronger connection to its underlying computer science discipline than the more traditional engineering fields. In the process of constructing this volume, particular attention has been paid to incorporating the practices of engineering into the development of software, so as to distinguish this curriculum from computer science curricula. To prepare for the more detailed development of these ideas, this tutorials examines the engineering methodology and it applies to software development. We must also point out that although there are a strong similarities between software engineering and more traditional engineering, there are also differences (not necessarily to the detriment of software engineering):
A Generic View of Software Engineering
|