Software & Software Engineering Study Notes
Chapter 1: Software & Software Engineering
Overview
Adapted slides from:
- Software Engineering: A Practitioner’s Approach, 7/e by Roger Pressman
- Software Engineering 9/e by Ian SommervilleCourse: CS152: Introduction to Software Engineering
What is Software?
Key Questions Addressed:
- What is it?
- Who does it?
- Why is it important?
- What are the steps?
- What is the work product?
- How do I ensure that I have done right?Software’s Dual Role:
- Software as a product.
- Software as a vehicle for delivering a product.Common Challenges in Software Development:
- Duration problems in finishing projects.
- High development costs.
- Inability to find all errors prior to customer delivery.
- Extensive time and effort spent on software maintenance.
- Difficulty in measuring progress during development and maintenance.
What is Software?
Definition:
- The product that software professionals build and support over time.Encompasses:
1. Instructions (computer programs) that provide desired features, function, and performance.
2. Data structures that enable adequate information storage and manipulation.
3. Documentation detailing the operation and use of the programs.
Software Products
Types of Software Products:
- Generic Products:
- Stand-alone systems marketed and sold to any customer.
- Examples:
- PC software (editing, graphics, project management tools).
- CAD software.
- Specific markets (e.g., appointment systems for dentists).
- Customized Products:
- Commissioned specifically for a customer.
- Examples:
- Embedded control systems.
- Air traffic control software.
- Traffic monitoring systems.
Importance of Software
Economic Dependency:
- All developed nations rely on software.
- Systems increasingly controlled by software (transportation, medical, telecommunications, etc.).Expenditure:
- Significant fraction of GNP in developed countries.
Software Costs
Cost Dynamics:
- Software often dominates overall computer system costs.
- Maintenance costs can far exceed development costs for long-lived systems.Objective:
- Focus on cost-effective software development.
Features of Software
Distinct characteristics that set it apart from other engineered products:
- Developed, not manufactured (avoids traditional quality issues).
- Doesn't "wear out," but deteriorates due to changes.
- Component-based construction is growing, yet custom-built software remains prominent.
- Modern reusable components encapsulate data and processing (e.g., user interface components).
Software Applications
Categories of software applications include:
1. System Software:
- Compilers, editors, file management utilities.
2. Application Software:
- Stand-alone programs addressing specific needs.
3. Engineering/Scientific Software:
- Involves algorithms for tasks like stress analysis.
4. Embedded Software:
- Resides within products (e.g., microwave controls).
5. Product-Line Software:
- Targets mass consumer markets (word processing, graphics).
6. WebApps:
- Network-centric software as part of Web 2.0.
7. AI Software:
- Utilizes non-numerical algorithms for complex problem-solving.
New Software Categories
Open World Computing:
- Involves pervasive and distributed computing across networks.Netsourcing:
- Referring to the use of the Web as a computing engine.Open Source:
- “Free” source code available to the community (with pros and cons).
Engineering in Software
Definition of Engineering:
- The practice utilizing natural science, mathematics, and design processes to solve technical problems and enhance systems.
Software Engineering Definitions
IEEE Definition:
- Systematic, disciplined, and quantifiable approach in software development, operation, and maintenance.Seminal Definition:
- Use of sound engineering principles to produce reliable, efficient software economically.
Importance of Software Engineering
Essentials for producing reliable and quick software systems grow with societal dependency.
Cost-effectiveness is a key advantage of employing software engineering techniques.
Change after deployment typically constitutes a major portion of total costs.
FAQ about Software Engineering
What is Software?
- Computer programs, data structures, and documentation.Attributes of Good Software:
- Functionality, maintainability, dependability, and usability.Software Engineering vs. Computer Science:
- CS is theoretical; SE focuses on practical software production.Software Engineering vs. System Engineering:
- SE is a subset of system engineering, which includes all components of a computer-based system.
Essential Attributes of Good Software
Maintainability:
- Evolution to meet changing customer needs.Dependability and Security:
- Includes reliability and safety with protections against system failures.Efficiency:
- Minimizing waste of system resources.Acceptability:
- Must be user-friendly and compatible with existing systems.
Legacy Software
The necessity for change includes adaptation to new environments, enhancements for new business requirements, and interoperability with modern systems.
Software Myths
Erroneous beliefs affecting stakeholders leading to poor decisions.
Common Myths:
- Comprehensive documentation suffices for software competency.
- More programmers can simply catch up on delays.
- Outsourced projects require no oversight.
A Layered Technology Model
Establishes continuous improvement and quality focus.
Process Layer: Foundation for effective software delivery.
Method Layer: Technical tasks in software building, including requirements analysis and testing.
Tool Layer: Provides automated support.
Software Process
Definition: A process is a collection of activities and tasks for product creation; adaptable rather than rigid.
Purpose: Deliver quality software in a timely manner.
Five Activities of a Generic Process Framework
Communication: Understanding objectives and requirements.
Planning: Define work scope, tasks, risks, resources, and schedule.
Modeling: Sketch system architecture and characteristics.
Construction: Code generation and documentation, including testing.
Deployment: Deliver products for evaluation and feedback.
Software Development Life Cycle (SDLC) Phases
Planning and Requirements Analysis
Defining Requirements
Designing the Software
Building/Developing the Software
Testing the Software
Deployment and Maintenance
Iterative Application of Framework Activities
Adaptable based on project type, size, and complexity; iterative approaches can yield software increments with features and functionality.
Umbrella Activities
Complement the primary activities to manage risk, quality, and project tracking.
Include:
- Tracking and control
- Risk management
- Quality assurance
- Technical reviews
- Measurement
- Configuration management
- Reusability management
- Work product preparation
Adapting a Process Model
Agility and adaptability are essential; processes should differ based on project-specific needs and organizational culture.
Prescriptive vs. Agile Process Models
Prescriptive Models:
- Stresses detailed definitions and structured workflows.Agile Models:
- Emphasizes flexibility and adaptability, suited for dynamic environments like web applications.
The Essence of Software Engineering Practice
Problem-Solving Steps as per George Polya:
Understand the problem (communication and analysis).
Plan a solution (modeling and design).
Carry out the plan (code generation).
Examine the result for accuracy (testing and quality assurance).
Understand the Problem
Identify stakeholders, define unknowns related to data and functions, compartmentalize the problem, and create graphical representation/model.
Plan the Solution
Reflect on similar past problems, seek reusability in elements, identify subproblems, and conceptualize implementation designs.
Carry Out the Plan
Ensure solution fidelity to the initial plan, review components for correctness, and apply validation mechanisms.
Examine the Result
Test each component systematically, apply reasonable testing strategies, and verify alignment with requirements.
Hooker's General Principles for Software Engineering Practice
The Reason It All Exists: Provide value to users.
KISS: Keep it simple.
Maintain the Vision: Prevent design incompatibilities.
Consider Consumer Needs: Think of future maintainers.
Stay Open to Future Adaptations: Avoid design constraints.
Plan for Reuse.
Think First: Plan details before execution for better outcomes.
How It All Starts
Initiated by business needs: fixing defects, adapting legacy systems, extending existing applications, or developing new solutions.
Case Studies Examples
Personal Insulin Pump:
- An embedded control system for glucose management in diabetics.Mental Health Care Patient Management System:
- Maintains patient records and treatment history, facilitating regular clinic visits.Wilderness Weather Station:
- Deploys remote weather stations for data collection in remote areas.
Insulin Pump Control System
Collects sensor data, calculates required insulin doses, and maintains safety-critical standards for patient health.
Insulin Pump Hardware Architecture
Key components: needle assembly, insulin reservoir, pump, clock, sensor, controller, display, power supply.
Activity Model of the Insulin Pump
Workflow includes analyzing sensor readings, computing insulin doses, controlling pump operations, and logging data.
Essential High-Level Requirements for Insulin Pump
Availability and reliability for insulin delivery; rigorous adherence to design for operational safety.
Mental Health Care Patient Management System (MHC-PMS)
Supports information management for mental healthcare, running on secure servers, and facilitating local access during disconnections.
Goals of MHC-PMS
Generate management info for performance assessment and provide timely data for medical staff.
Key Features of MHC-PMS
Care Management: Record creation, editing, monitoring history, etc.
Patient Monitoring: Tracks treatment progress and issues alerts where needed.
Administrative Reporting: Summarizes treatment data and costs monthly.
Concerns for MHC-PMS
Privacy: Ensures confidentiality of patient data.
Safety: Monitors for high-risk patients.
Availability: Critical for treatment and medication prescriptions.
Wilderness Weather Station
Government initiative for data collection in remote locations, encompassing various weather parameters via controlled software systems.
Weather Station System Components
Collects, processes, and transmits weather data to a central management system; maintains station health via satellite communication.