Software Engineering
Software engineering from a project point of view embarks on software products that are both feasible technically and financially. Moreover, software projects must be completed on time and within budgets and are important challenges to software engineers. Research has shown that one-third of software projects are never completed, another third do not fulfill their promises. Software Engineering provides the software engineering fundamentals, principles and skills needed to develop and maintain high quality software products. The software engineering processes and techniques covered include requirements specification, design, implementation, testing and management of software projects. This up-to-date book is modeled on the recommendations and guidelines prescribed in the Guide to the Software Engineering Body of Knowledge (SWEBOK) published by the IEEE Computer Society, and the Software Engineering Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering published by the IEEE Computer Society and the Association for Computing Machinery Joint Task Force on Computing Curricula. At the end of each chapter, the reader will be able to perform tangible software engineering tasks by applying the learned techniques and methods, will be familiar with the terminology, the principles by mastering the subjects, and will be able to analyze existing task deliverables, compare and critique the different techniques. The book is designed as a text for an undergraduate first course in software engineering and graduate bridging courses in information technology. In addition, Software Engineering can be used by practitioners who need to refresh their knowledge with the latest in software engineering techniques and processes. The prerequisite to use this text is to have a background in an object-oriented programming language.
1101718949
Software Engineering
Software engineering from a project point of view embarks on software products that are both feasible technically and financially. Moreover, software projects must be completed on time and within budgets and are important challenges to software engineers. Research has shown that one-third of software projects are never completed, another third do not fulfill their promises. Software Engineering provides the software engineering fundamentals, principles and skills needed to develop and maintain high quality software products. The software engineering processes and techniques covered include requirements specification, design, implementation, testing and management of software projects. This up-to-date book is modeled on the recommendations and guidelines prescribed in the Guide to the Software Engineering Body of Knowledge (SWEBOK) published by the IEEE Computer Society, and the Software Engineering Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering published by the IEEE Computer Society and the Association for Computing Machinery Joint Task Force on Computing Curricula. At the end of each chapter, the reader will be able to perform tangible software engineering tasks by applying the learned techniques and methods, will be familiar with the terminology, the principles by mastering the subjects, and will be able to analyze existing task deliverables, compare and critique the different techniques. The book is designed as a text for an undergraduate first course in software engineering and graduate bridging courses in information technology. In addition, Software Engineering can be used by practitioners who need to refresh their knowledge with the latest in software engineering techniques and processes. The prerequisite to use this text is to have a background in an object-oriented programming language.
99.95 In Stock
Software Engineering

Software Engineering

by Kassem Saleh
Software Engineering

Software Engineering

by Kassem Saleh

Hardcover(New Edition)

$99.95 
  • SHIP THIS ITEM
    Qualifies for Free Shipping
  • PICK UP IN STORE
    Check Availability at Nearby Stores

Related collections and offers


Overview

Software engineering from a project point of view embarks on software products that are both feasible technically and financially. Moreover, software projects must be completed on time and within budgets and are important challenges to software engineers. Research has shown that one-third of software projects are never completed, another third do not fulfill their promises. Software Engineering provides the software engineering fundamentals, principles and skills needed to develop and maintain high quality software products. The software engineering processes and techniques covered include requirements specification, design, implementation, testing and management of software projects. This up-to-date book is modeled on the recommendations and guidelines prescribed in the Guide to the Software Engineering Body of Knowledge (SWEBOK) published by the IEEE Computer Society, and the Software Engineering Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering published by the IEEE Computer Society and the Association for Computing Machinery Joint Task Force on Computing Curricula. At the end of each chapter, the reader will be able to perform tangible software engineering tasks by applying the learned techniques and methods, will be familiar with the terminology, the principles by mastering the subjects, and will be able to analyze existing task deliverables, compare and critique the different techniques. The book is designed as a text for an undergraduate first course in software engineering and graduate bridging courses in information technology. In addition, Software Engineering can be used by practitioners who need to refresh their knowledge with the latest in software engineering techniques and processes. The prerequisite to use this text is to have a background in an object-oriented programming language.

Product Details

ISBN-13: 9781932159943
Publisher: Ross, J. Publishing, Incorporated
Publication date: 07/01/2009
Edition description: New Edition
Pages: 358
Product dimensions: 7.50(w) x 9.25(h) x 0.88(d)

About the Author

Kassem A. Saleh, Ph.D. is currently Professor of Information Sciences at Kuwait University. He received his B.Sc., M.Sc. and PhD in Computer Science from the University of Ottawa in Canada. Professor Saleh worked as a computer systems specialist at Mediatel, Bell Canada, from 1985 to 1991, and was on the faculty of Concordia University in 1991-1992, Kuwait University from 1992 to 2000, and American University of Sharjah from 2000 to 2007. He is also a Certified Information Systems Security Professional (CISSP) and is currently the Editor-in-Chief of the Journal of Software. The Journal of Systems and Software has ranked Professor Saleh among the top scholars in the field of systems and software engineering in seven of its annual assessments published from 1996 to 2003. Professor Saleh has published more than 120 journal and conference papers and has presented numerous tutorials and invited talks at international conferences and universities worldwide.

Read an Excerpt

CHAPTER 1

Software and Software Engineering

Software is omnipresent in the lives of billions of human beings around the globe. Today, humans rely heavily on software-intensive systems. Software runs many aspects of our daily life. It helps us communicate, socialize, and perform daily tasks at work and at home. Most importantly, software is a player in the emerging knowledge-based service economy. However, there are many concerns about the quality and reliability, and hence the trustworthiness, of the software we produce and consume. Existing software is plagued with thousands of defects. Some of the defects are known and have already been detected; others have not manifested and are yet to be uncovered. The defects have caused many disasters, leading to financial losses, physical harm to humans, and life threatening situations. The main reasons for the current state of software technology are the lack of adequately trained software professionals and the lack of tools and techniques that can scale up to the complexities of the needed software. In this chapter, we introduce the concepts of software, software engineering, and the stages in software development. We then present the types of software and their stakeholders. Education and training issues in software engineering and an existing code of ethics for software professionals are discussed. We also present the disciplines related to software engineering and analogies to other engineering disciplines. Finally, we present some pioneers in the field of software engineering and their main contributions.

Learning Outcomes

In this chapter you will learn:

• Historical origins of software, software engineering, and the related disciplines

• Types of software applications and system software

• Stakeholders in software products

• Three Ps in software engineering

• Software engineering as a discipline and its code of ethics and professional practice

• Recurring concepts in software engineering and the desirable software capabilities

• Pioneers in software engineering and their main contributions

1.1 SOFTWARE, SOFTWARE ENGINEERING, AND THE SOFTWARE CRISIS

Software is omnipresent in the lives of billions of human beings. It is an important component of the emerging knowledge-based service economy. Software or computer software consists of the computer program and its related documentation. The word software was coined by John Tukey in 1958. However, the theoretical foundations behind the concept of a computer program were established by Alan Turing in the 1930s. The concept of a program as a sequence of steps to solve a problem is a realization of the concept of algorithm, which was introduced by Muhammad Al-Khawarezmi, a 9th century mathematician. An algorithm became concrete when it was programmed by Ada Lovelace, the first computer programmer. A computer program consists of instructions that perform certain tasks on computer hardware. Instructions are written at different levels of closeness to the hardware, ranging from low level instructions written in machine or assembly language to high-level instructions written in high-level programming languages. Documentation plays a crucial role in the success of software and is of interest to the people using the software and to the people developing and maintaining it. User manuals, installation procedures, and operating manuals are written mainly for the software users. They are written in a user-friendly language appropriate to the competency levels of the target users. The documents are crucial for the usability of the software and, hence, are useful for achieving the economic viability and marketability of the software. However, internal developmental documents such as specification, design, and testing documents are written at a level that is appropriate to the people developing, reviewing, and maintaining the software. The timeliness and correctness of the documents are critical over the long term. Software development and maintenance activities form the basis of a steadily growing industry — worth more than $250 billion — and characterizes the emerging knowledge-based economy.

Software engineering is a term that was coined during the October 1968 NATO Software Engineering conference held in Garmisch, Germany. The term was introduced by Friedrich Bauer, the conference chairman. There are many definitions for software engineering. One definition refers to software engineering as the application of a disciplined approach for the development and maintenance of computer software. The Institute of Electrical and Electronics Engineers (IEEE) states that it is software engineering that deals with the establishment and use of sound engineering principles to economically obtain software that is reliable and works efficiently on real machines. This definition touches on both the technical and management aspects involved in software engineering. The technical aspect of this definition refers to the reliability and performance of the target software product, whereas the management aspect refers to the economic feasibility related to both time and money. Software engineering encompasses the use of tools, techniques, and methods that are useful during the execution of the steps needed for the development of the software and its future maintenance.

The NATO conference discussed the software crisis and was characterized by the inability of existing techniques, tools, and processes to deal with the increasing complexity of the needed software. It was identified that the main reasons for the crisis were due to the complexity of the software, changing and misunderstanding of requirements, and the lack of tools and skilled professionals. Consequently, the produced software is of low quality, is not maintainable, and does not meet the stakeholder's requirements. In addition, software projects were frequently running over budget and over time, and many did not deliver a functioning product.

Unfortunately, many of the symptoms of the software crisis are still present. According to the Standish Group, a software market research firm, 17 percent of software projects were complete failures in 2002. Moreover, 50 percent of projects were not completed within the planned schedule, ran over budget, or were missing some of the required features. There are many concerns about the quality and reliability of the software we use. Existing software is plagued with millions of defects. Some of the defects are known and have already been detected; others are yet to be uncovered. The defects have caused many disasters, leading to financial losses, physical harm to humans, and life threatening situations. The software engineering profession is still in its infancy, therefore tools, techniques, standards, and appropriate software engineering education programs at all levels are needed. In the United States alone, it was reported in 2004 that approximately 750 thousand software engineers are employed compared to an estimated 1.5 million practitioners in all other engineering disciplines. It was also reported that most software practitioners do not hold degrees in software engineering. Currently, most people working as software engineers hold either a degree in computer science or computer engineering. It is worth mentioning that the first bachelor program in software engineering was established in the United States as recently as 1996.

1.2 TYPES OF SOFTWARE

There are two categories of software that are currently in use: system software and applications software. Systems software typically deals with interfacing with hardware and provides services to applications software. Examples of system software include operating systems, language compilers, assemblers, device drivers, debuggers, and networking tools and software. Application software, also referred to as end user software, allows users to perform their tasks. In the following, we list some of the main applications software categories:

• Games and entertainment: Software games for handheld devices, including mobile phones, PC or stand-alone games, and distributed collaborative games.

• Intelligent: Applications that include specialized domain-specific expert systems, mobile agent systems, learning systems, robot vision software, business decision and intelligence software, and mining software.

• Modeling and simulation: Applications that include domain-specific modeling and simulation packages for military, financial, medical, educational, and training uses.

• Real-time: Applications that include industrial plant monitoring and control systems, missile control systems, air traffic control systems, telephony software, and network security software such as firewalls and intrusion detection systems.

• Embedded: Applications that include home appliance controllers, mobile phone software, and vehicle controllers.

• Productivity: Applications that include tools that implement proven methods and techniques to help specific types of users execute their tasks with ease and maximum productivity. For example, AutoCAD software facilitates architects and engineers, Rational Rose aids software developers in performing their tasks, project management software packages allow project managers to perform their tasks efficiently, and word processing tools help users produce thorough and accurate documentation. Other types of software in this category, also known as information worker software, are time and resource management software, data management software, and distributed collaborative software.

• Enterprise: Applications that include business workflow management software, customer relation management software, and supply chain management software.

• Web-based: Applications that include content management software, web publishing software, electronic commerce software, web services, web portal software, and web browsers.

• Educational: Applications that include school and university management, online and distance learning, training management, and educational software for children.

• Multimedia: Applications that include software for video, image and sound editing and management, 3D and animation, and virtual reality.

• Domain-specific: Applications that include domain-specific software systems such as banking, finance and stocks, accounting, medical, airline reservation, hospital management, and human resource management.

It is considered that systems software provides the proper interface through which applications software makes use of the information and other hardware resources to provide services or functions to respective application users. Figure 1.1 illustrates the layering of hardware and the two types of software products.

1.3 GENERIC STAGES IN SOFTWARE DEVELOPMENT

As stated earlier, software engineering encompasses the use of a disciplined and systematic approach for the development and maintenance of computer software. The goals of software engineering are to deal with the software complexities, increase the reliability, and enhance the quality of the produced software.

One of the main features of a disciplined approach is to deal with complexity in a staged manner. In the initial stages, the software is tackled in different phases and at higher levels of abstraction. In the subsequent phases, the software is tackled at lower levels of abstraction by providing more details so that a proper implementation is obtained in the second stage. This process is also called top-down and stepwise refinement.

The three generic stages of software development and maintenance activities consist of the (1) definition stage, (2) implementation stage, and (3) maintenance stage. The definition stage is comprised of the requirements phase and the specifications phase in which user requirements are collected and analyzed to obtain a formal software specification. During the implementation stage, at a lower level of abstraction, the design phase refines the specifications to obtain a basis for a concrete implementation of the software. Coding of the design is performed and then tested for conformance to the specifications. The maintenance stage deals with software change requests to correct software errors, adapt, or expand the software. The software changes could involve a rework of the requirements, specifications, design, and implementation followed by a complete or regression testing to ensure the proper implementation of the needed software changes. The details of the generic stages are discussed in Chapter 2 in the context of specific industry-proven software development life cycle models. Figure

1.4 SOFTWARE ERRORS

Existing software is plagued with a significant number of errors. Some of the errors are known because they have been discovered by the software developers or reported by users. However, there are errors that are yet to be discovered. The errors have eluded discovery during testing and will probably manifest only after the software is deployed. The exact number and severity of the errors is unknown. Reported software failures reveal that the unidentified errors can be safety-critical, affecting the physical well being of individuals, and business-critical, affecting the financial well being of individuals and institutions. Moreover, many software companies, to avoid embarrassment and a negative reputation, do not publicize the errors. In an article on software risks published in 2000, Peter Neumann states that risks have monotonically become worse both relative to increased vulnerabilities and threats and their consequent domestic and worldwide social implications with respect to national stability, electronic commerce, personal well-being, and many other factors.

Software errors can be traced back to the various phases of the software development process. In a taxonomy of software errors reported by Beizer in 1990, approximately 25% of the errors are requirements and specifications, 25% are design, 10% are implementation, 10% are integration, 25% are data-related, and 3% are testing. The remaining are unspecified errors. It has also been reported that, as a general rule of thumb, if it takes $1 to fix a bug during the development phases, it will cost $100 or more to fix the same error after the software has been deployed. In a recent study published by the National Institute of Standards and Technology in 2002, it is estimated that if it costs $1 to fix a defect during the requirements phase, it will cost $90 to fix it during testing and $440 to fix it during operations.

Requirements and specifications errors include incorrectly captured or missing requirements, incomplete functions or features, and input/output domain specifications. If the errors are not discovered early in the development process, they lead to expensive maintenance or, possibly, even project failures. Moreover, missing functionality in a safety-critical system could lead to human harm and other serious problems. For example, a specification error in a flight simulator for pilot training led to a crash and the death of the pilot when he was faced with a situation that was overlooked in the training simulator.

Design errors include errors in the specification of the algorithms and their related data structures. A design error in a banking software application led to the duplication of transfer instructions, resulting in the transfer of billions of dollars and a substantial cost incurred to recover the transferred amounts.

Coding errors include memory access violation, buffer overflows, arithmetic overflow or underflow, loss of precision, typographical errors, or data flow-related errors. A coding error in AT&T telephony switch software in 1990 led to a breakdown in long distance communications in many states and resulted in the loss of hundreds of millions of dollars. Another coding error led to the self-destruction of Ariane-5, a satellite carrier rocket, resulting in the loss of $7billion. More dramatic is the Scud missile failure, during the Gulf War, due to an arithmetic instruction coding error, resulting in the loss of 28 lives and the injury of hundreds.

Integration errors include parameter mismatches, runtime stack errors, compatibility errors, interoperability problems, and timing and synchronization problems. For example, it was reported that many space shuttle missions were delayed due to software/hardware interfacing problems. Data-related errors include errors in data definition, input file data, and data access and handling. Finally, testing errors involve erroneous test cases leading to the wrongful flagging of an error or the misinterpretation of the test results and, thus, reaching an incorrect test verdict.

(Continues…)


Excerpted from "Software Engineering"
by .
Copyright © 2009 J. Ross Publishing, Inc..
Excerpted by permission of J. Ross Publishing, Inc..
All rights reserved. No part of this excerpt may be reproduced or reprinted without permission in writing from the publisher.
Excerpts are provided by Dial-A-Book Inc. solely for the personal use of visitors to this web site.

Table of Contents

Acknowledgments,
Foreword,
Preface,
About the Author,
WAV,
Chapter 1 Software and Software Engineering,
Chapter 2 Software Development Life Cycle Models,
Chapter 3 Software Requirements,
Chapter 4 Software Specification,
Chapter 5 Software Design,
Chapter 6 Object-Oriented Design,
Chapter 7 Software Implementation,
Chapter 8 Software Testing and Quality Assurance,
Chapter 9 Software Maintenance,
Chapter 10 Software Project Management,

From the B&N Reads Blog

Customer Reviews