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

 

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 Engineers

Computer 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 Discipline

A 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 Discipline

The 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):

  •          Foundations are primarily in computer science, not in natural sciences.
  •          The focus is on discrete rather than continuous mathematics.
  •          The concentration is on abstract / logical entities instead of concrete / physical artifacts.
  •          There is no “manufacturing” phase in the traditional sense.
  •          Software “maintenance” primarily refers to continued development, or evolution, and not to conventional wear and tear.

A Generic View of Software Engineering

             Figure of Generic View of Software Engineering

Engineering is the analysis, design, construction, verification, and management of technical (or social) entities. Regardless of the entity to be engineered, the following questions must be asked and answered:

  •          What is the problem to be solved?
  •          What characteristics of the entity are used to solve the problem?
  •          How will the entity be constructed?
  •          What approach will be used to uncover errors that were made in the design and construction of the entity?
  •          How will the entity be supported over the long term, when corrections, adaptations, and enhancements are requested by users of the entity?

Throughout this tutorial, we focus on a single entity-computer software. To engineer software adequately, a software adequately, a software engineering process must be defined. The work associated with software engineering can be categorized into three generic phases, regardless of application area, project size, or complexity. 


Each phase addresses one or more of the questions noted previously. Four types of change are encountered during the support phase:

Correction:

Even with the best quality assurance activities, it is likely that the customer will uncover defects in the software. Corrective maintenance changes the software to correct defects.

Adaptation:

Over time, the original environment (e.g., CPU, operating System, business rules, external product characteristics) for which the software was developed is likely change. Adaptive maintenance results in modification to the software to accommodate changes to its external environment.

Enhancement:

As software is used, the customer/ user will recognize additional functions that will provide benefit. Perfective maintenance extends the software beyond its original functional requirements.

Prevention:

Computer software deteriorates due to change, and because of this, preventive maintenance, often called software reengineering, must be conducted to enable the software to serve the needs of its end users. In essence, preventive maintenance makes changes to computer programs so that they can be more easily corrected, adapted, and enhanced.

Umbrella Activities:-

In addition to these support activities, the users of software require continuing support. In –house technical assistants, telephone-help desks, and application-specific Web sites are often implemented as part of the support phase. Today, a growing population of legacy programs is forcing many companies to pursue software reengineering strategies. In a global sense, software reengineering is often considered as part of business process reengineering. Typical activities in this category include:

Note: - Umbrella activities occur throughout the software process and focus primarily on project management, tracking, and control. 


Software engineering process framework activities are complemented by a number of umbrella activities. In general, umbrella activities are applied throughout a software project and help a software team manage and control progress, quality, change, and risk. 


Typical umbrella activities include:

Software project tracking and control—allows the software team to assess progress against the project plan and take any necessary action to maintain the schedule.

Risk management—assesses risks that may affect the outcome of the project or the quality of the product.

Software quality assurance—defines and conducts the activities required to ensure software quality.

Technical reviews— Assess software engineering work products in an effort to uncover and remove errors before they are propagated to the next activity.

Measurement—defines and collects process, project, and product measures that assist the team in delivering software that meets stakeholders’ needs; can be used in conjunction with all other framework and umbrella activities.

Software configuration management—manages the effects of change throughout the software process.

Reusability management—defines criteria for work product reuse (including software components) and establishes mechanisms to achieve reusable components.

Work product preparation and production—encompass the activities required to create work products such as models, documents, logs, forms, and lists.

Summary:-

Software engineering encompasses process, methods, and tools that enable complex computer-based systems to be built in a timely manner with quality. The software process incorporates five framework activities—communication, planning, modeling, construction, and deployment—that are applicable to all software projects.

Umbrella activities are following:









Post a Comment (0)
Previous Post Next Post