What is Software Engineering? The discipline of designing, creating, and maintaining software by...

Preview:

Citation preview

What is Software Engineering?What is Software Engineering?

The discipline of designing, creating, and maintaining software

by applying technologies and practices from computer science, project management, engineering,

application domains and other fields. (Wikipedia)

Software Engineering GoalSoftware Engineering Goal

To produce solutions incorporating high-quality software.

Why we Need Software Engineering?Why we Need Software Engineering?

Easy problems (like building a one-story house) may not required

engineering approach, but large projects and difficult problems (like building a skyscraper) cannot be

effectively solved without it.

Why we Need Software?Why we Need Software?

1. To boost productivity and reduce costs due to process automation.

2. To perform calculations that are unfeasible (if not impossible) to execute manually.

What’s in Our Way?What’s in Our Way?

1. BugsHuman Error -> Fault -> Failure

Safety-Critical Systems: 109 up hours

2. Complexity

3. Interdependence

4. Unpredictability

5. Uncontrollability

Process AutomationProcess Automation

1. First there has to be a process that is worked out in ALL detail and IS efficient!

2. Then and only then we can find a way to automate the process with the help of computers and software.

3. Analyze first than synthesize (not the other way around).

Practical ConsiderationsPractical Considerations

1. The direct or indirect cost of executing the process manually must be greater than the cost of developing, maintaining and supporting the system automating the process!

2. Software generates revenue when sold, hence development and support costs must be lower than the sale price times number of copies sold.

Major Issues with SoftwareMajor Issues with Software

1. BugsHuman error may lead to software fault that may

lead to system failure.

2. SupportUsers always make mistakes or do not know

something.

3. Maintenance• software bug fixes• feature changes• hardware (including communication) failures• software conflicts• incorrect data• upgrades

Software Costs Money!Software Costs Money!

Depending on the project the cost of software development can be only 10% of the total project cost.

Maintenance and support could account for the lion share of all expenses.

Return on Investment (ROI) is a dynamic measure.

What is Good Software?What is Good Software?

The answer depends on requirements:

1. Safety Critical Systems (e.g. medical, public transportation)

2. Fault Tolerant Systems (e.g. military, space, communications)

3. Available Systems (e.g. communications, embedded)

4. User-Friendly (e.g. vending, information kiosks)

5. Affordable (for mass market)

What is Quality Software?What is Quality Software?

1. Correct

2. Reliable

3. Efficient

4. Usable

5. Maintainable

6. Re-usable

7. Testable

8. Scalable

9. Portable

10. Interoperable

11. Simple

12. Expandable

What is Quality Process?What is Quality Process?

Good (and simple!) process leads to good software

Process modeling allows:• Optimize / simplify the process• Identify fault-prone locations• Choose the easiest development

process• Develop ideas for fault-tolerant

operation

Return on Investment (ROI)Return on Investment (ROI)

Software Quality:

Up vs. Down time

Customer View:

Dollars spent vs. Dollars Saved

Industry / Developer View:

Effort saved rather than cost

Who is Involved?Who is Involved?

Who is Involved in Development?Who is Involved in Development?

What is a System?What is a System?

System is an assemblage of entities/objects, real or abstract, comprising a whole with each and every component/element interacting or related to another one. Any object which has no relationship with any other element of the system is not a component of that system.A subsystem is then a set of elements which is a system itself and a part of the whole system. -- Wikipedia

Systems ApproachSystems Approach

OBJECTS

ACTIVITIESEVENTS

Boundary ENVIRONMENTTHE

SYSTEM

System SpecificsSystem Specifics

•Systems are always interrelated

•Environment may be uncontrollable

•System boundary needs to be defined

•Defining subsystems within your system is the first level of abstraction

System Design ConsiderationsSystem Design Considerations

•Selecting proper technology (not necessarily the newest or the “coolest”)

–Finding developers for the selected technology

•Selecting right products and tools (do not use a cannon to kill a mosquito)

–Getting support for the products used

•Staying within budget (compromises inevitable)

Software ArchitectureSoftware Architecture

•Modular

•Data-oriented

•Event-driven

•Object-oriented

•Service-based

Software ArchitectureSoftware Architecture

PrototypingPrototyping

•Helps customer identify requirements

•Demonstrated feasibility of the design approach

Dynamic WorldDynamic World

•Get used to change – it is the only thing constant.

•Time-to-market is important!

•Efficiency IS important: Efficiency=Power~Support Cost

•Upgrades Inevitable

•Technologies Change: Migration Inevitable

ExerciseExercise

Think of a process or product that YOU think is important to automate or implement in software AND think of a way of doing it.

Recommended