what is software engineering? the discipline of designing, creating, and maintaining software by...
TRANSCRIPT
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.