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
Software Specification: Joint definition of software requirements by clients and engineers.
Software Development: Design and programming of the software.
Software Validation: Ensures software meets customer requirements.
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
Public Interest: Acting in ways that align with the public good.
Client/Employer Responsibility: Prioritizing the interests of clients and employers while respecting public welfare.
Product Standards: Commitment to high-quality product standards.
Professional Judgment: Maintaining integrity in decision-making.
Management Ethics: Promoting ethical management practices within engineering.
Integrity of Profession: Uphold and advance the profession’s standards.
Collegial Support: Fairness towards colleagues.
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
Personal Insulin Pump: An embedded system designed to manage insulin delivery for diabetic patients.
Mental Health Case Management System (Mentcare): Manages patient data for those treated for mental health issues.
Wilderness Weather Station: Collects data in remote areas to monitor environmental conditions.
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.