380 C1

Chapter 1 - Introduction to Software Engineering

Topics Covered

  • Professional Software Development: Exploration of what software engineering means.

  • Software Engineering Ethics: An overview of ethical issues impacting software engineering practices.

  • Case Studies: Introduction to three real-world examples that are elaborated in later chapters of the book.

Software vs. Programs

  • Programs: Basic computer programs do not require learning techniques for operation.

  • Software: A comprehensive entity that can include:

    • Separate programs

    • Configuration files and data

    • Libraries

    • Support websites for updates

    • System documentation detailing the structure of the system

    • User documentation explaining system usage

Importance of Software Engineering

  • Economies of all developed nations hinge on software dependence.

  • Increasingly, systems are governed by software technologies.

  • Software engineering addresses theories, methods, and tools for professional software development.

  • Expenditure on software constitutes a sizable percentage of the Gross National Product (GNP) in developed countries.

Software Costs

  • Dominance of Software Costs:

    • Software expenses often exceed computer hardware costs.

    • Maintenance costs surpass initial development costs; in systems with extended lifecycles, maintenance may be multiple times higher.

  • Cost-effective Development: Software engineering emphasizes the need for cost-efficient development processes.

Software Project Failure

  • Reasons for Failure:

    • Increasing System Complexity: New methods allow for the creation of larger, complex systems, altering demands on delivery speed and capabilities.

    • Neglecting Engineering Methods: Many companies have inadvertently engaged in software development without applying sound software engineering methods, leading to outcomes that are expensive and unreliable.

Project-based Software Engineering

  • Overview of Process:

    • Development starts with a set of 'software requirements' from an external client, outlining operational needs.

    • Developed by a software company (contractor) with the mandate to fulfill client requirements.

    • Clients frequently alter requirements, necessitating adjustments to the software by the contractors.

    • Custom software typically possesses a long lifespan (10+ years), necessitating continuous support.

Product Software Engineering

  • Initial Steps:

    • Begins with recognizing a business opportunity which a company capitalizes on by developing a product.

    • Companies design and implement software features oriented towards maximizing utility for customers.

    • Companies bear the responsibility for development timelines and feature selection, necessitating quick product delivery to optimize market capture.

Professional Software Development

  • Definition of Software: Includes computer programs and related documentation. Products can be targeted at specific customers or a general market.

  • Attributes of Quality Software: Must deliver necessary functionality, performance, maintainability, dependability, and usability.

  • Software Engineering: Engineering discipline that encompasses all facets of software production.

    • Fundamental Activities: Software specification, development, validation, and evolution.

Differences in Engineering Fields

  • Computer Science vs. Software Engineering: Computer science emphasizes theoretical foundations, while software engineering deals directly with practical software development endeavors.

  • Software Engineering vs. System Engineering: System engineering encompasses all aspects of computer-based systems, covering hardware, software, and process dimensions. Software engineering is a subset within this larger framework.

Key Challenges in Software Engineering

  • Navigating increasing diversity and reduced delivery time demands.

  • The necessity for developing systems that are trustworthy.

Software Costs Breakdown

  • Approximately 60% of software costs relate to development, while testing costs represent 40%. In custom software, evolution costs often eclipse development expenses.

Software Engineering Techniques and Methods

  • Diverse methodologies are essential tailored to individual system types (e.g., game development often utilizes prototypes while safety-critical systems require rigorous specifications).

Impact of the Web on Software Engineering

  • Web technologies have revolutionized software services, facilitating the development of distributed systems and promoting software reuse.

Software Products

  • Generic Products: Utilize product software engineering for standalone systems available for any customer (e.g., graphics programs).

  • Customized Products: Involve project-based software engineering to meet specific client requirements (e.g., traffic monitoring systems).

Software Specification

  • Ownership:

    • Generic product specifications are owned by developers; changes are at their discretion.

    • Customized products have specifications dictated by customer requirements.

Essential Attributes of Good Software

  • Maintainability: Software should evolve with changing customer needs as change is inevitable.

  • Dependability and Security: Includes reliability, security, and safety; designs must consider potential damages from system failures.

  • Efficiency: Efficient use of system resources is critical, incorporating response times and memory utilization.

  • Acceptability: Must be user-friendly and compatible with existing tools and systems.

The Nature of Software Engineering

  • Discipline: Based on appropriate theories and methods addressing organizational and financial constraints.

  • Comprehensive Scope: Encompasses technical development processes and broader project management aspects.

Significance of Software Engineering

  • With society's growing reliance on sophisticated software, it is paramount to produce systems that are both reliable and economically developed.

  • Utilizing established engineering methods over mere program writing can lead to reduced long-term costs related to software changes.

Software Process Activities

  1. Software Specification: Joint definition of software requirements by clients and engineers.

  2. Software Development: Design and programming of the software.

  3. Software Validation: Ensures software meets customer requirements.

  4. Software Evolution: Modifying the software to align with new customer and market demands.

General Issues Affecting Software

  • Heterogeneity: The requirement for systems to function across diverse networks with various device types.

  • Business and Social Change: Rapid developments necessitate adaptable software solutions.

  • Security and Trust: Essential for users to trust the reliability of software across everyday activities.

  • Scale: Software must be developed to accommodate various deployment scales, from small embedded systems to large cloud-based applications.

Types of Application Systems

  • Stand-Alone Applications: Operate independently on local devices (e.g., PC software).

  • Interactive Transaction-Based Applications: Execute remotely and accessed via user devices (e.g., e-commerce applications).

  • Embedded Control Systems: Control specific hardware devices, prevalent in many technologies.

  • Batch Processing Systems: Designed for handling bulk data processing.

  • Entertainment Systems: Primarily developed for personal enjoyment.

  • Modeling and Simulation Systems: Used in scientific and engineering contexts to simulate physical processes.

  • Data Collection Systems: Using sensors for environmental data collection.

  • Systems of Systems: Composed of interconnected software systems.

Fundamental Software Engineering Principles

  • Managed Processes: Development processes should be systematically managed and tailored to software type.

  • Dependability and Performance: Essential qualities across all software systems.

  • Understanding Specifications: Clear comprehension and management of software requirements are critical.

  • Reuse of Existing Software: Encouraged to minimize redundancy and optimize efficiency.

Internet Software Engineering

  • The Web now serves as a crucial platform for applications, prioritizing web-based systems over local systems.

  • Cloud Computing: Users pay based on usage rather than purchasing software outright.

Web-Based Software Engineering Principles

  • Complexity management aligns with traditional software principles despite the distributed nature of web systems.

  • Software Reuse: Dominant approach in constructing web applications through existing software components.

  • Incremental Development: Web systems require phased development due to dynamic requirements.

Service-Oriented Systems

  • Software designed in a service-oriented manner allows components to be replaced independently.

  • Rich Interfaces: Advanced interface development technologies enrich user interactions within browsers.

Software Engineering Ethics

  • Involves broader responsibilities extending beyond technical capabilities.

  • Ethical conduct is founded on principles beyond legal compliance.

Issues of Professional Responsibility

  • Confidentiality: Upholding privacy in client and employer dealings.

  • Competence: Accurate representation of qualifications and abilities.

  • Intellectual Property Rights: Awareness and protection of intellectual property laws are pivotal.

  • Computer Misuse: Ethical guidelines discourage improper use of computing resources.

ACM/IEEE Code of Ethics

  • Cooperative Development: US professional societies collectively established a code of ethics.

  • Adherence to Principles: Members commit to these ethical standards upon joining.

  • Code Structure: The document contains aspirational clauses and practical definitions guiding professional conduct.

Ethical Principles in Software Engineering

  1. Public Interest: Acting in ways that align with the public good.

  2. Client/Employer Responsibility: Prioritizing the interests of clients and employers while respecting public welfare.

  3. Product Standards: Commitment to high-quality product standards.

  4. Professional Judgment: Maintaining integrity in decision-making.

  5. Management Ethics: Promoting ethical management practices within engineering.

  6. Integrity of Profession: Uphold and advance the profession’s standards.

  7. Collegial Support: Fairness towards colleagues.

  8. Self-Improvement: Engaging in lifelong educational pursuits.

Ethical Dilemmas in Software Engineering

  • Conflicts may arise over management policies or ethical concerns, especially with safety-critical systems or military applications.

Case Studies

  1. Personal Insulin Pump: An embedded system designed to manage insulin delivery for diabetic patients.

  2. Mental Health Case Management System (Mentcare): Manages patient data for those treated for mental health issues.

  3. Wilderness Weather Station: Collects data in remote areas to monitor environmental conditions.

  4. iLearn Digital Learning Environment: A learning framework supporting various educational tools and applications.

Insulin Pump Control System Features

  • Monitors blood sugar and calculates appropriate insulin delivery.

  • Critical for maintaining patient health due to the severe implications of blood sugar fluctuations.

Mentcare System Description

  • A patient information system that facilitates care for mental health patients by maintaining treatment records.

  • Ensures secure access and adaptability to different network conditions.

Wilderness Weather Station Overview

  • Deploys numerous weather stations in desolate areas to collect essential meteorological data.

iLearn Digital Learning Environment Overview

  • Comprises a framework integrating various learning tools, tailored by educators to meet teaching objectives.

iLearn Features and Services

  • Offers a suite of utility services, application-specific services, and configurative functionalities for customized learning experiences.

Key Points in Software Engineering

  • Discipline Overview: Encompasses all software production facets and is essential for developing reliable systems.

  • Attributes and Activities: Focus on maintainability, performance, and essential development processes.

  • Diversity of Systems: Each application type requires a unique approach to software engineering tools and techniques.

  • Professional Responsibility: Engineers must adhere to ethical standards beyond technical concerns, as endorsed by professional societies.