Software EngineeringUnit 17 min read
Software Engineering: Definitions, Challenges & Evolution
Unit 1 of Software Engineering introduces the discipline’s core concepts—what software engineering is, its history, key challenges, and why it differs from traditional programming. It covers definitions, the software crisis, and the evolution of methodologies, with real-world examples from Nepali and global tech.
What is Software Engineering?
Software engineering is the systematic application of engineering principles to the design, development, maintenance, testing, and evaluation of software. It bridges the gap between raw programming and large-scale, reliable software systems.
Why is it called "engineering"?
- Disciplined approach: Like civil or mechanical engineering, it follows structured processes (requirements → design → implementation → testing).
- Scalability: Manages complexity in large projects (e.g., eSewa’s payment system or WhatsApp’s end-to-end encryption).
- Reliability: Ensures software meets quality standards (e.g., Ncell’s network uptime).
The Software Crisis: Why Traditional Programming Fails
Before software engineering, projects often failed due to:
- Unclear requirements (e.g., NEPSE’s trading platform crashes during high volatility).
- Poor documentation (e.g., legacy bank systems with undocumented code).
- Late testing (e.g., Daraz’s website bugs appearing only after launch).
Key Problems:
| Problem | Example | Impact |
|---|---|---|
| Uncontrolled complexity | WhatsApp’s early codebase | Bugs, security flaws |
| Lack of standards | Nepali government IT projects | Incompatible systems |
| No maintenance planning | Old NTC billing software | Frequent crashes |
Evolution of Software Development
1. Programming Era (1940s–1960s)
- Focus: Writing code manually (e.g., early bank transaction scripts).
- Problem: No structure → "spaghetti code" (hard to debug).
2. Software Crisis (1968–1970s)
- NATO Conference (1968): First use of the term "software engineering."
- Solution: Introduced structured methodologies (e.g., waterfall model).
3. Modern Era (1980s–Present)
- Agile, DevOps, AI-driven tools: Used by Google (TensorFlow), Pathao (real-time ride matching).
- Outcome: Faster iterations, better collaboration.
timeline
title Evolution of Software Development
1940s : Programming Era (Manual Coding)
1968 : Software Crisis (NATO Conference)
1970s : Structured Methods (Waterfall)
1990s : Agile & Iterative Models
2010s : DevOps & AI IntegrationCore Characteristics of Software Engineering
| Characteristic | Explanation | Example |
|---|---|---|
| Process-oriented | Follows lifecycle models (e.g., waterfall, spiral). | Khalti’s app development phases. |
| Quality-focused | Uses metrics (e.g., defect density). | Ncell’s 99.9% network reliability. |
| Team-based | Requires roles (analysts, testers, developers). | Google’s cross-functional teams. |
| Adaptive | Evolves with new tools (e.g., cloud computing). | Daraz’s shift to microservices. |
Software vs. Programming: Key Differences
| Aspect | Software Engineering | Programming |
|---|---|---|
| Scope | Entire lifecycle (design to retirement). | Writing and debugging code. |
| Tools | UML, CASE tools, version control (Git). | IDEs (VS Code, PyCharm). |
| Goal | Deliver reliable, scalable systems. | Solve specific computational problems. |
| Example | Developing eSewa’s payment gateway. | Writing a Python script for data analysis. |
Real-World Applications
1. eSewa (Nepal)
- Idea Used: Modular design (separate payment, user, and admin modules).
- How: Ensures updates to one module (e.g., tax rules) don’t break others.
2. WhatsApp (Global)
- Idea Used: End-to-end encryption (security-focused design).
- How: Uses signal protocol to encrypt messages before sending.
3. NTC’s Network Management
- Idea Used: Fault tolerance (redundant servers).
- How: If one data center fails, traffic reroutes automatically.
Worked Example: Khalti’s Loan Interest Calculation
- Problem: Calculate monthly interest for a ₹10,000 loan at 12% annual rate.
- Software Engineering Approach:
- Requirement: Define formula: .
- Design: Create a
LoanCalculatorclass with input validation. - Implementation:
class LoanCalculator: def calculate_monthly_interest(self, principal, annual_rate): return (principal * annual_rate) / 12 - Testing: Verify with edge cases (e.g., ₹0 principal).
Challenges in Software Engineering
Changing Requirements
- Example: NEPSE’s platform must adapt to new trading rules.
- Solution: Agile methodologies (iterative development).
Scalability
- Example: Pathao’s app must handle 100K+ users during Dashain.
- Solution: Cloud-based microservices (AWS, Google Cloud).
Security
- Example: Daraz’s database breaches.
- Solution: Encryption (TLS), regular audits.
Maintenance
- Example: Old bank ATMs with outdated software.
- Solution: Version control (Git), documentation.
Software Engineering Principles
- Abstraction: Hide complexity (e.g., Google Maps API hides GPS math).
- Modularity: Break into components (e.g., WhatsApp’s messaging vs. calls modules).
- Reusability: Use libraries (e.g., Python’s
requestsfor HTTP calls). - Verification & Validation:
- Verification: Are we building it right? (Testing).
- Validation: Are we building the right thing? (User feedback).
stateDiagram-v2
[*] --> Development
Development --> Testing : Verify
Testing --> Deployment : Validate
Deployment --> Maintenance : Monitor
Maintenance --> [*]Exam Tip
- Define Key Terms Clearly:
- Example: "Software engineering is the application of systematic, disciplined approaches to software development." (2 marks).
- Compare Models:
- Contrast waterfall vs. agile in a table (3 marks).
- Real-World Links:
- Relate concepts to Nepali apps (e.g., "Khalti uses modular design for its payment system").
- Diagrams:
- Draw a software lifecycle model (e.g., spiral model) for 4 marks.
- Short Answers:
- "What is the software crisis?" → Briefly explain with an example (e.g., Ariane 5).
Visual Summary:
Based on the PU BE Computer (PU) syllabus for Software Engineering (CMP348), unit 1.
Discussion
Loading…