Introduction to Software Engineering
Introduction to Software Engineering
This chapter introduces fundamental concepts related to software engineering. It covers the definition of computers, the essence and importance of software engineering, the challenges involved in creating software products, and potential career paths in this field.
1.1 Introduction
Human civilization has greatly advanced through the understanding and application of science. Engineering, especially since the Industrial Revolution, has played a vital role in shaping modern infrastructure. The introduction of computers around the 1940s marked a new revolution, enabling rapid and complex calculations, transforming fields such as telecommunications, business, entertainment, technology, medicine, education, and research. Computers now drive or control many devices, including mobile phones, the Internet, and automobiles.
1.2 Components of a Computer
Hardware
Computers are composed of hardware and software. Hardware consists of physical components like input devices (e.g., keyboard), output devices (e.g., screen), processors (CPU), memory (RAM), storage devices (e.g., hard drive), and communication devices (e.g., modem).
Software
Software comprises instructions that dictate the tasks a computer performs. There are two main types of software:
Application Software: Designed for specific tasks such as database management, word processing, video editing, or web browsing.
System Software: Manages the computer's operations or maintains devices connected to it. It acts as an interface between the hardware, the user, and application software. System software includes operating systems (e.g., Microsoft Windows, Mac, UNIX) and utility software (e.g., antivirus programs, disk cleaning programs, screen savers).
Compatibility between the operating system and application software is crucial. Hardware engineers design hardware, while software engineers develop software products.
1.3 Building Software Products
Most software products are developed by teams due to their complexity. Large applications like word processors (e.g., Microsoft Word) and websites (e.g., ebay.com, amazon.com) require extensive teams for development and maintenance. While some smaller programs can be developed by a few individuals, this book defines a software product as a large program or set of programs requiring a team of developers working for several weeks or longer.
Analogy: Constructing an Apartment Building
The process of building a software product is compared to constructing an apartment building:
Initiation: An owner identifies a need or opportunity (e.g., rental income).
Design: An architect designs the building.
Construction: A construction company uses materials, machines, and manpower to build the apartment.
Project Management: A civil engineer manages the project, estimates resources and time, and ensures the project aligns with the plan.
Standards: The building must meet government standards for safety (e.g., earthquake resistance, fire safety).
Software Development
Similarly, software development involves:
Initiation: A company identifies a market need for a software product.
Planning: A software project manager creates a project plan, including time and resource allocation.
Requirements: Business analysts define product features.
Design: Software designers create the product architecture.
Development: Software developers write code (e.g., in C++).
Testing & Release: The product is tested and then released to the market.
Project Management: The software project manager oversees all activities.
Like building an apartment, software development requires considerations for security, performance, and reliability.
1.4 What Is Software Engineering?
Software engineering is the application of engineering principles to the design, development, and maintenance of software products. It involves both detailed design and a methodical approach to ensure the product meets desired qualities and can be used by many people.
A modular design, where a product is divided into easily assembled parts, is commonly used. Maintenance, including error correction, feature enhancement, and outdated feature removal, is also a critical aspect of software engineering.
1.5 Why Software Engineering?
Building large software products requires software engineering due to the complexities involved. As computers are integrated into more aspects of life, the demand for software products increases.
Software engineering helps manage:
Cost Economics: Avoiding excessive costs.
Time Factors: Meeting deadlines.
Quality Factors: Ensuring effective and reliable software.
Poor-quality software can lead to significant support costs and potential risks, such as faulty diagnoses in health-care settings.
1.5.1 Reduction of Development Costs
Software engineering methodologies help reduce costs by using productive processes, reducing waste, reusing existing code, and employing better tools and practices.
1.5.2 Reduction of Development Time
Improved development tools, mature programming languages with ready-made libraries, and the availability of software products and services that provide needed functionality immediately all contribute to faster development times.
1.5.3 Increasing the Quality
Software engineering is key to building high-quality software. Using better methodologies and tools, making quality assurance intrinsic, and creating awareness about quality all contribute to improving software products. Planning for future maintenance ensures that quality is maintained as features are changed or enhanced.
1.6 Challenges in Software Engineering
Converting user requirements into a software product can be challenging. Complexity increases with the size and scope of the requirements. For example, developing a program to count webpage hits is simple, but categorizing those hits by various criteria (e.g., country, browser, operating system) significantly increases the project's complexity.
1.7 Project Management and Software Engineering
Large and complex projects require a team of specialists, including requirement specifiers, software designers, coders, and testers. Project management is essential for maintaining a controlled and managed environment, ensuring cost-effectiveness and timeliness. Both project management and software engineering are necessary for developing and maintaining software products.
1.8 Costs Involved in Software Development
Software development is expensive due to the need for highly skilled professionals. Costs include salaries, office space, computers, and electricity. For instance, a project requiring six people at US\$5000 per month for seven months would cost:
Large projects with many people lasting years can cost millions of dollars. Maintenance costs, including customer support and software changes, are also significant.
1.9 Methodologies Used for Software Development
Software can be developed using various methodologies:
Big Project Planning (Waterfall Model): The entire product is developed under one project with extensive planning.
Incremental Model: The product is developed in increments, starting with minimal features and adding more based on market response. Agile methodologies like eXtreme Programming, Scrum, and Rational Unified Process are used.
The choice of model depends on the client's preferences and project requirements. More details on these models are in Chapter 2.
1.10 Some Careers in Software Engineering
Software engineering offers various career paths:
Software Testing: Finding defects and shortcomings.
Software Development: Writing source code.
Software Design/Architecture: Designing software.
Business/Technical Analysis: Collecting and classifying information.
Research: Discovering new things and analyzing systems.
Teaching: Educating others.
Software Project Management: Managing software projects.
Additional roles include web designers and database administrators.
1.11 Software Industry Size
The software industry is large and growing rapidly. According to Gartner, the global software industry was worth US\$427.3 billion in 2014, a 4.8% increase from 2013. Microsoft, Oracle, IBM, and SAP were the largest vendors. The U.S. software industry was valued at US\$131 billion in 2014 and employs over 2 million people across more than 100,000 companies.
1.12 Code of Ethics
Like medical practitioners, software engineers should adhere to a code of ethics to prevent misuse of their skills. Software can be used to harm people (e.g., malware, viruses), so it's essential to work for the betterment of humanity.
1.13 Book Organization
This book covers essential parts of software engineering, including methodologies, requirement specifications, architecture, implementation, testing, feasibility study, release considerations, configuration management, and project management. The book is organized into 13 chapters, with Chapter 2 covering Software Engineering Methodologies and subsequent chapters detailing various aspects of software development.
1.14 Chapter Summary
Software engineering is vital for building commercial-grade software products. It involves well-defined processes for collecting requirements, designing, building, testing, and maintaining software. The development process is similar to constructing an apartment building. Software projects are typically large and require teams of specialists.
Challenges include product complexity, technology learning curves, process immaturity, and product intangibility. Solutions include using object-oriented design and multilayered architecture. The software industry is large, employs millions, and offers well-paid careers.