0% found this document useful (0 votes)
79 views8 pages

Software Engineering I: Key Concepts & Notes

Uploaded by

chwahabg22
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
79 views8 pages

Software Engineering I: Key Concepts & Notes

Uploaded by

chwahabg22
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

📘 CS504 – Software Engineering I (Short Notes: Lectures 1–45)

Lecture 1: Introduction to Software Engineering

Software = Program + Data + Documentation.

Importance: Used in business, science, embedded systems, games, education.

Difference from hardware: Software doesn’t wear out, but bugs exist.

Software Crisis: 1960s → Large software, late delivery, over-budget, unreliable.

IEEE Definition: Systematic, disciplined, quantifiable approach to development.

Well-engineered software: Reliable, maintainable, efficient, user-friendly, cost-effective.

Balancing act: Trade-offs among cost, reliability, efficiency, UI.

Law of Diminishing Returns: Quality improvement beyond a point = costly, less benefit.

Lecture 2: Introduction to Software Development

Activities:

Construction: Requirements, design, coding, testing.

Management: Planning, quality assurance, configuration mgmt.


Framework: Quality focus → Process → Methods → Tools.

Development Loop: Problem definition → Technical development → Integration → Status quo →


Repeat.

Phases: Vision → Definition → Development → Maintenance.

Maintenance cost often > development cost.

Lecture 3–5: Requirement Engineering

Definition: Process of defining system services & constraints (focus on what, not how).

Importance: 40–60% defects due to poor requirements.

Levels of Requirements:

Business (high-level goals).

User (tasks users must perform).

Functional (system functionality).

Non-functional (performance, security, constraints).

Risks: Insufficient user input, creeping requirements, ambiguity, gold plating, minimal specs.

Good Requirements: Complete, correct, feasible, necessary, prioritized, unambiguous, verifiable.


Documents: Requirement Statement (user) & Specification (functional).

Context Diagram: Shows boundary between system and external entities.

Lecture 6–7: Use Case Modeling & Source/Sink

Use Case Model: Actors + Use cases (system as black box).

Relations: <<uses>> and <<extends>>.

Elaborated Use Case: Name, actors, summary, pre/post conditions, normal/alternate flow.

Activity Diagram: Flow of use case.

Limitation: Non-functional reqs not covered.

Source/Sink Analysis:

Source: Input origin.

Sink: Where output is consumed.

Ensures requirements completeness.

Lecture 8–11: Modeling & Design


State Transition Diagrams: System states & events.

Process Models: Waterfall, Incremental, Spiral, Prototyping.

Prototyping: Quick mock-up to validate requirements.

GUI Design Principles: Consistency, feedback, simplicity, error handling.

Software Design: Converts requirements into solution. Must ensure modularity, cohesion, coupling.

Lecture 12–18: OOA/D & Case Study

Cohesion: Degree module elements belong together (High = good).

Coupling: Degree of interdependence (Low = good).

OO Analysis & Design: Objects, classes, encapsulation, inheritance, polymorphism.

UML Object Model Notations: Class diagrams, associations, generalization.

Coad Methodology: Deriving object model step-by-step.

Case Study: Connie’s Convenience Store → practical UML/object model application.

Lecture 19–21: Structure & Interaction Diagrams

Relationships: Generalization, aggregation, association, multiplicity, navigation.


Class Diagram: Shows static structure.

Interaction Diagrams:

Sequence Diagram → Time focus.

Collaboration Diagram → Structure focus.

Sequence Elements: Lifeline, messages, activations, loops/conditions.

Lecture 22–25: Architecture

Software Architecture = High-level structure, components, relations.

Views: Logical, Process, Development, Physical, Use-case.

Models:

Client-Server: Clients request, server responds.

Two-tier: Client (UI+logic), Server (DB).

Three-tier: UI + Logic + Data layers.

Layered: Separated into presentation, business, data, etc.


Pipes & Filters: Data passes through filters (e.g., compiler).

Repository: Central shared DB, modules interact.

Lecture 26–27: Design Patterns

Definition: Reusable solution to common design problem.

Types: Creational (Factory, Singleton), Structural (Adapter, Decorator), Behavioral (Observer, Strategy).

Observer Pattern: Subject notifies observers automatically → loose coupling.

Lecture 28–35: Coding Practices

Good Practices: Meaningful names, indentation, comments, modularity.

File Handling:

C++ → <fstream>, ifstream, ofstream.

Java → FileReader, BufferedReader.

Coding Style:

Classes → PascalCase, Variables → camelCase.

Consistent layout, avoid long lines.


Modularity: Improves clarity, testing, reuse.

Common Mistakes: Syntax, logic, runtime errors.

Portability: Use standard libs, avoid OS-dependent code.

Exception Handling: try-catch, throw, finally. Catch specific exceptions.

Lecture 36–40: Testing

Verification: Build product right.

Validation: Build right product.

Testing Types:

Black Box: Tests functionality without seeing code.

White Box: Tests internal logic.

Techniques:

Equivalence Partitioning: Divide inputs into valid/invalid sets.

Statement Coverage: Test every statement.


Branch Coverage: Test true/false outcomes.

Path Coverage: Test all possible paths.

Unit Testing: Tests smallest components independently.

Lecture 41–44: Quality & Debugging

Inspections: Manual review (design/code).

Testing: Executing code.

Debugging Process: Reproduce bug → Identify cause → Fix → Retest.

Bug Types: Syntax, logic, runtime, semantic.

Holistic Approach: All phases (requirements, design, coding, testing, maintenance) are linked and must
be managed together.

Lecture 45: Summary

Software engineering = Systematic, disciplined approach.

Covers requirements, design, coding, testing, maintenance.

Quality software = balance between cost, reliability, performance, UI.

Emphasis: Discipline, documentation, modularity, clarity, testing.

You might also like