Software Engineering
eBook - ePub

Software Engineering

Kassem Saleh

Share book
  1. 360 pages
  2. English
  3. ePUB (mobile friendly)
  4. Available on iOS & Android
eBook - ePub

Software Engineering

Kassem Saleh

Book details
Book preview
Table of contents
Citations

About This Book

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.

Frequently asked questions

How do I cancel my subscription?
Simply head over to the account section in settings and click on “Cancel Subscription” - it’s as simple as that. After you cancel, your membership will stay active for the remainder of the time you’ve paid for. Learn more here.
Can/how do I download books?
At the moment all of our mobile-responsive ePub books are available to download via the app. Most of our PDFs are also available to download and we're working on making the final remaining ones downloadable now. Learn more here.
What is the difference between the pricing plans?
Both plans give you full access to the library and all of Perlego’s features. The only differences are the price and subscription period: With the annual plan you’ll save around 30% compared to 12 months on the monthly plan.
What is Perlego?
We are an online textbook subscription service, where you can get access to an entire online library for less than the price of a single book per month. With over 1 million books across 1000+ topics, we’ve got you covered! Learn more here.
Do you support text-to-speech?
Look out for the read-aloud symbol on your next book to see if you can listen to it. The read-aloud tool reads text aloud for you, highlighting the text as it is being read. You can pause it, speed it up and slow it down. Learn more here.
Is Software Engineering an online PDF/ePUB?
Yes, you can access Software Engineering by Kassem Saleh in PDF and/or ePUB format, as well as other popular books in Informatica & Sviluppo software. We have over one million books available in our catalogue for you to explore.

Information

Year
2009
ISBN
9781604276749
Edition
1

CHAPTER
Software and Software Engineering
1

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 ma...

Table of contents