1 / 26

Software Engineering

Principles, Processes, and Architectural Design

COIT20258 - Professional Software Development

Software Engineering Definition

Software Engineering is an engineering discipline concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use.

It encompasses the application of systematic, disciplined, and quantifiable approaches to the development, operation, and maintenance of software systems.

Fundamental Software Process Activities

Software Specification
Software Development
Software Validation
Software Evolution

These activities represent the universal framework for software development, regardless of the specific methodology employed.

Software Specification

Requirements Elicitation
Requirements Analysis
Requirements Validation

The process of establishing the services that a customer requires from a system and the constraints under which it operates and is developed.

Software Process Models

Waterfall Model

Sequential development phases with distinct deliverables. Suitable for projects with well-understood, stable requirements and minimal expected changes.

Incremental Development

Iterative approach with frequent releases allowing rapid feedback incorporation and accommodation of changing customer requirements.

Integration & Configuration

Reuse-oriented methodology leveraging existing components and Commercial Off-The-Shelf (COTS) systems for rapid deployment.

Development Paradigm Comparison

Characteristic Plan-Driven Approach Agile Methodology
Planning Strategy Comprehensive upfront planning Incremental, adaptive planning
Documentation Focus Extensive documentation Working software prioritization
Change Management Controlled change processes Embracing iterative changes
Stakeholder Engagement Formal contract negotiations Collaborative partnerships

Agile Manifesto Core Values

Individuals and Interactions

Prioritizing human collaboration and communication over rigid processes and tooling frameworks

Working Software

Delivering functional software solutions rather than focusing exclusively on comprehensive documentation

Customer Collaboration

Establishing partnerships with stakeholders instead of adversarial contract negotiations

Responding to Change

Adapting to evolving requirements rather than rigidly adhering to predetermined plans

Fundamental Agile Principles

Customer Involvement

Continuous stakeholder participation throughout the development lifecycle for requirement prioritization and system evaluation

Incremental Delivery

Software development in manageable increments with customer specification of requirements for each iteration

People Not Process

Recognition and exploitation of team capabilities, enabling self-organization without prescriptive methodologies

Embrace Change

Anticipating requirement evolution and designing systems with inherent adaptability

Maintain Simplicity

Emphasis on simplicity in both software architecture and development processes

Scrum Methodology Framework

Product Backlog
Sprint Planning
Sprint Execution
Potentially Shippable Increment

An agile framework emphasizing iterative development with time-boxed sprints typically lasting 2-4 weeks, enabling rapid feedback and continuous improvement.

Scrum Role Definitions

Product Owner
Requirement Prioritization
Scrum Master
Process Facilitation
Development Team
Solution Implementation

Each role maintains distinct responsibilities within the collaborative framework, ensuring efficient project progression and stakeholder alignment.

Requirements Engineering Process

Requirements Elicitation
Requirements Analysis
Requirements Validation
Requirements Management

A systematic approach to discovering, analyzing, documenting, and managing system requirements throughout the development lifecycle.

Requirements Classification Framework

User Requirements

High-level statements in natural language describing services the system provides and operational constraints, written from the customer perspective.

System Requirements

Detailed technical specifications of system functions, services, and operational constraints that define implementation parameters.

Requirements Taxonomy

Requirement Category FURPS Classification Implementation Examples
Functional Functions Business logic, data processing, user interactions
Non-Functional Usability User interface design, accessibility standards
Reliability System availability, fault tolerance mechanisms
Performance Response time constraints, throughput specifications
Security Authentication protocols, data encryption standards

Architectural Design Principles

Architectural design is concerned with understanding how a software system should be organized and designing the overall structure that facilitates system functionality and quality attributes.

Requirements Engineering
Architectural Design
Detailed Design

Architectural Decision Factors

Performance Optimization

Localizing critical operations, minimizing inter-component communication, utilizing coarse-grained architectural components

Security Architecture

Implementing layered security models with critical assets positioned in protected inner architectural layers

Safety Considerations

Isolating safety-critical functionality within small, well-defined subsystems for enhanced reliability

Availability Design

Incorporating redundant components and fault tolerance mechanisms to ensure system resilience

Maintainability Factors

Utilizing fine-grained, modular components that facilitate system evolution and component replacement

4+1 Architectural View Model

Logical View

System abstractions represented as objects or classes, focusing on functional requirements and system behavior

Process View

Runtime system composition showing interacting processes and concurrency aspects

Development View

Software decomposition for development teams, showing module organization and dependencies

Physical View

Hardware mapping and software component distribution across processing nodes

The +1 represents Use Cases and Scenarios that integrate and validate all architectural perspectives.

Model-View-Controller Pattern

MODEL
Data Management
VIEW
Presentation Layer
CONTROLLER
Interaction Logic

Layered Architecture Pattern

User Interface Layer
Authentication and Authorization
Business Logic and Application Services
Data Access and Persistence
System Infrastructure and Operating System

Fundamental Principle: Each architectural layer provides services exclusively to the layer immediately above it, creating clear separation of concerns.

Repository Architecture Pattern

Component A
Component B
Component C
Centralized Repository

Client-Server Architecture

Client Instance A
Client Instance B
Client Instance C
Network Infrastructure
Service Provider A
Service Provider B
Service Provider C

Distributed computing model organizing functionality into discrete services delivered by autonomous server components across network infrastructure.

Pipe and Filter Architecture

Data Input
|
Transformation A
|
Transformation B
|
Transformation C
|
Final Output

Object-Oriented Design Methodology

Context Definition
Architectural Design
Object Identification
Model Development
Interface Specification

A systematic approach to software design emphasizing object abstraction and encapsulation principles for maintainable system architectures.

Object Class Identification Methodologies

Grammatical Analysis

Systematic examination of nouns and noun phrases within requirements documentation to identify potential object classes

Domain Entity Recognition

Identification of tangible real-world entities and concepts within the application domain

Behavioral Analysis

Object identification based on participation in system behaviors and interaction patterns

Scenario-Based Extraction

Derivation of objects, attributes, and methods from use case scenarios and interaction sequences

Software Design Model Classification

Structural Models

Static system architecture representation including class relationships, subsystem organization, and component dependencies

Dynamic Models

Runtime behavior representation showing object interactions, sequence diagrams, and state transition mechanisms

Class Diagrams
Sequence Diagrams
Use Case Models
State Machine Models

UML Class Diagram Components

ClassName
- privateAttribute: DataType
+ publicAttribute: DataType
# protectedAttribute: DataType
+ publicMethod(): ReturnType
- privateMethod(): ReturnType
# protectedMethod(): ReturnType

Software Engineering Integration

Requirements
System Specification
Architecture
Structural Design
Implementation
Technical Realization

Successful software engineering requires systematic integration of requirements analysis, architectural design principles, and implementation methodologies within appropriate process frameworks.