This presentation is a part of the COP2271C college level course taught at the Florida Polytechnic University located in Lakeland Florida. The purpose of this course is to introduce Freshmen students to both the process of software development and to the Python language.
The course is one semester in length and meets for 2 hours twice a week. The Instructor is Dr. Jim Anderson.
A video of Dr. Anderson using these slides is available on YouTube at:https://www.youtube.com/watch?feature=player_embedded&v=_gjBvrotoYg
An Introduction To Software Development - Software Design Methodologies
1. An Introduction To Software
Development Using Python
Spring Semester, 2015
Class #2:
Software Design
Methodologies
2. Creating A Software Program
• Customer requirement:
Get out of bed and go to
school.
• Software requirements:
1. Get out of bed
2. Go to the bathroom
3. Go to the kitchen
4. Get cereal bowl, get cereal, get milk, get
O.J., get spoon, get banana
5. Place cereal in bowl, pour milk on it,
peel banana
6. Sit at table
7. Eat cereal in bowl using spoon, eat
banana
8. Go to room
9. Take shower, brush teeth, comb hair
10. Get dressed: shirt, pants, belt, socks,
shoes, watch, jewelry,
11. Grab backpack, laptop, cell phone
12. Shut and lock the door
Image Credit: tec_estromberg
3. 2 Main Concerns Of Any
Software Project
• How much will it cost?
• How long will it take?
Note: there is often a
due date for the software!
Image Credit: Richard Smith
12. Big Bang Software Development
Get requirements from customer
Magical Coding Happens
Exactly what the customer wanted is produced
Image Credit: www.acclaimclipart.com, Matt
13. Why Doesn’t The Big Bang Work?
• You did do a lot of work
• However, you didn’t show
your customer your work
until you were done
• You thought that you were
building what the customer
wanted with no feedback
• Now you will have to do
rework
Image Credit: John Thurm
14. Examples Of Customer Requests
• Designing an intersection:
1. There should be 3-color lights
that indicate if a car should be
able to go or stop.
2. Only one direction should be
able to go at a time
3. Pedestrians should be able to
cross safely
4. If there is a system fault, drivers
should be told
5. Don’t delay other drivers if
nobody wants to turn a given
direction.
Image Credit: John Meckley
15. Customer’s Who Don’t Know
What They Want
• Ask the customer what they mean
• Ask them for more detail
• Ask them for options on how you can
implement their ideas
Image Credit: Daniel
16. What Do Customers Want?
Image Credit: http://ccechildren.wordpress.com/2010/04/15/learning-objectives-and-goals/
17. Iteration Is The Key To
Software Success
Start Finish
Big Bang Software Project
What
The
Customer
Really
Wants
Software
Development
With
Iteration
Customer Changed Their Minds
The secret to developing software correctly is iteration. you need to ask
"how am I doing" at each step in the software development process…
18. Questions About Iteration
• Think of iteration as being a "checkup"
for your software. You'll always know
how you are doing.
• Questions:
– Do you ever know exactly what your customer
wants? No.
– If the project is short, do you still need to iterate?
Yes.
– Why not just nail down requirements before you
start? Customer does not know what they want.
– Who should gather requirements? Tricky question.
– When should iterations start? Every 20 days – one
calendar month.
– What happens if I've screwed up? You fix it starting
now.
Image Credit: BEV Norton
19. How Do We Handle “BIG”
Software Projects?
Instead of trying to build the complete software solution, you need to
break it up into "chunks" that you can then separately show to the
customer.
Image Credit: Don Brubacher
20. How Do We Work With
The Customer?
• You can think of each iteration as being almost a "mini-project" which
includes requirements, design, coding, testing, etc. You will actually be
showing your customer well developed pieces of software that you will
eventually all fit together.
• When you've checked the software at the end of each iteration, you have
a much better chance that this is the software that the customer wants.
Get
Requirements
Design
Solution
Code
Solution
Test
Solution
One mini-project
Talk With
Customer
21. How To Manage Requirements
• Write each requirement on a card
• Give each requirement a name
• Create an estimate for how long it will take to
design / code this requirement
• Determine the customer’s priority for this
requirement (1=High, 5=Low).
Image Credit: London Permaculture
22. Our Intersection Example (Again)
Title: Red/Yellow/Green Light
Estimate: 12 days
Customer Priority: 1
Title: Right Turn Arrow
Estimate: 3 days
Customer Priority: 4
Title: Left Turn Arrow
Estimate: 3 days
Customer Priority: 4
Title: Traffic Based Scheduling
Estimate: 20 days
Customer Priority: 2
Title: Flashing Yellow Fault
Estimate: 2 days
Customer Priority: 3
Title: Multiple Lights Same Direction
Estimate: 4 days
Customer Priority: 2
Title: Right / Left Green Light
Estimate: 6 days
Customer Priority: 1
23. Scheduling The Work
20 Days
Title: Traffic Based Scheduling
Estimate: 20 days
Customer Priority: 2
Title: Red/Yellow/Green Light
Estimate: 12 days
Customer Priority: 1
Title: Right / Left Green Light
Estimate: 6 days
Customer Priority: 1
Title: Flashing Yellow Fault
Estimate: 2 days
Customer Priority: 3
Image Credit: Clipart Panda
24. How Much Iteration Is Too Much?
• The goal of iterations is to catch yourself early when you are
deviating from a goal; however, you don't want to end up
spending all of your time preparing for another discussion
with the customer.
• It is always better to deliver some of the customer's features
working perfectly instead of all of the customer's features not
working properly.
• Customers change their minds. This will end up changing your
project.
Image Credit: Creative Tools
25. What We Covered Today
1. Different ways to create
software code.
2. Why “The Big Bang”
doesn’t work.
3. Why iteration is what is
needed to stay on track.
4. How to manage
requirements.
Image Credit: http://www.tswdj.com/blog/2011/05/17/the-grooms-checklist/
26. What We’ll Be Covering Next Time
1. What to do when a
customer adds new
requirements
2. What is a software
development process?
3. When is a software
development project
done?
Image Credit: http://merchantblog.thefind.com/2011/01/merchant-newsletter/resolve-to-take-advantage-of-these-5-e-commerce-trends/attachment/crystal-ball-fullsize/
Editor's Notes
New name for the class
I know what this means
Technical professionals are who get hired
This means much more than just having a narrow vertical knowledge of some subject area.
It means that you know how to produce an outcome that I value.
I’m willing to pay you to do that.
Example: software engineering
Waterfall model
Development proceeds linearly from the first step
Works well for well-defined and moderately complex S/W applications
Fails as the complexity increases due to the inability to move between phases
Good when you need a fixed outcome
You build up a “design debt” over time which then gets brought down.
You build up a “debt of ideas”, a backlog of ideas
Testing your ideas gives you an opportunity to refine your design
During this process you always come up with some great ideas that just aren’t going to make it into the final product.
You know what your goals are
You are managing against a budget and an expected timeframe
You have an expected outcome
It’s acceptable that in this process you will have some waste of good ideas
Agile is derived from the waterfall process
You do iterations of design / build, design / build
You will start to move through your backlog of ideas
You can change direction as needed
Personal example: trying to get rid of squirrels (rat poison, traps, exterminator)
Build up that same backlog of ideas in iteration 0.
Because you are doing design / build, you can start to move through your backlog of ideas.
You will be able to get to your best ideas
You are reducing your design waste over time
Great process when you are facing “critical uncertainty”.
You are trying to do something that is new
Don’t do long periods of research and concept development
Do a consistent iterative approach: build, measure, learn
Example: how I do wood work
Only build up enough ideas so that you can build something and get it out
Then go to your next cycle
Never really build up a backlog of ideas
Only creating enough ideas to move forward
Waterfall design is going to have less of an innovative impact on the world.
With waterfall, you are pretty sure that you’ll get what you need
With waterfall you’re going to get it when you need it.
During the waterfall process, some good ideas are going to go by the wayside
Agile is going to help when your outcomes are not completely spelled out
The design is going to be better validated by your customer – they will have seen previous versions and offered change suggestions.
You will move through your backlog of good ideas.
Lean allows you to get a lot of good ideas worked into your product
Very few ideas won’t make it into your design – very little spoilage