[INF43] Lecture 2 What is software engineering

软件工程 SoftwareEngineering

   
   

@ZYX 写于2020年04月07日

What is software engineering?

1. Perspectives

1. Business perspective
    1. What matters most?
        1. Cost
        2. Time/market how fast make proft
        3. Profit
        Money
    2. How SE help?
        reduce cost and increase profits
2. Engineer perspective
    1. What matters most?
        1. software quality/design of software
    2. How does SE help?
        1. deal with high cohesion and modularity
3. User perspective
    1. What matters most
        1. external experience
    2. How SE
        1. give us technices for devloping usable softwares.
4. INF43 perspecitive
    1. the process of constructing software
    2. The p

2. Essential Ingredients

1. People + Processes + Tools
    1. People is more important

3. Principles of software engineering

4. Inf 43 Recurring, fundamental principles

1. rigor and formality
2. separation of concerns
    1. modularity
    2. divide and conquer -> assign different parts to different people
    3. abstraction -> showing certain details and omit others
3. Anticipation of change
4. Generality -> building things in most general way as possible
5. Incrementality -> building things little by little

5. No silver bullet

1. Essential properties of software make SE hard
    1. Complexity
        1. "... a construct of interlocking concepts: data structures and classes, algorithms, function calls"
        2. "No two parts are alike"
        3. Consequence
            1. hard to communicate
            2. hard to modify without side effects
            3. make software unreliable
            4. security issues
            5. any error is fatal
    2. Conformity
        1. Software must conform to human institutions and systems
    3. Changeablity
        1. "All successful software gets changed"
        2. Why
            1. easy to change
            2. people want new changes
            3. environment changes -> hardware changes
    4. Invisibility
        1. "The reality of software is not inherently embedded in space"
        2. Consequence:
            1. diffcult to understand -> we have to find ways to make it visible
            2. hard to communicate
2. False silver bullets
    1. High-level language
    2. Time-sharing
    3. Unified programming environments
    4. OOP
    5. AI
    6. expert systems
    7. Graphical programming
3. Potential silver bullet
    1. Buy vs. Build
        1. open-source software deal with mulitple issues
            1. easy to reuse
    2. Requirements refinement and rapid prototyping
    3. Incremental development
    4. Great designers:
        1. investing people, train well, treat well
        2. people are most important.