1 Design and Integration: Part 2 Going Agile on Design…

Slides:



Advertisements
Similar presentations
Design, prototyping and construction
Advertisements

Extreme Programming Alexander Kanavin Lappeenranta University of Technology.
Agile Planning Dealing with Reality. Reality Basic agile principle – don’t expect static plans to hold, be flexible and expect changes.
May 2, May 2, 2015May 2, 2015May 2, 2015 Azusa, CA Sheldon X. Liang Ph. D. Software Engineering in CS at APU Azusa Pacific University, Azusa, CA.
Alternate Software Development Methodologies
Agile Planning. The problem with documentation Argument: “Heavy” documentation too much for most business-style projects.
© conchango Agile Architecture Microsoft Architect Insight Conference Howard van Rooijen
1 Design and Integration: Part 1. 2 What’s a metaphor? Ward Cunningham cites George Lakoff’s book, Metaphors We Live By: Lakoff argues that the assumptions.
1 CSSE 477: Swre Arch – This year’s course… Steve Chenoweth Tuesday, 11/8/11 Week 10, Day 2 Right – Sunset at the Louvre, in Paris From
Software Engineering. How many lines of code? Average CS1004 assignment: 200 lines Average CS4115 project: 5000 lines Corporate e-commerce project: 80,000.
Software Engineering.
EXtreme Programming Quick Introduction Daniel Arraes Pereira Eduardo Lourenço Apolinário Ricardo de Oliveira Cavalcanti.
Transitioning to XP or The Fanciful Opinions of Don Wells.
Software development process: Problem decomposition and analysis.
Xtreme Programming. Software Life Cycle The activities that take place between the time software program is first conceived and the time it is finally.
12-Jul-15 Refactoring. 2 Refactoring is: restructuring (rearranging) code......in a series of small, semantics-preserving transformations (i.e. the code.
SM3121 Software Technology Mark Green School of Creative Media.
Software Development Models: Waterfall and Spiral Sung Hee Park Department of Mathematics and Computer Science Virginia State University August 21, 2012.
Software Development Methods And Some Other Stuff.
1 KAN’S INTRO AND OVERVIEW MODELS Ch1 & 2 in his book Steve Chenoweth, CSSE.
Mixed-level English classrooms What my paper is about: Basically my paper is about confirming with my research that the use of technology in the classroom.
CIS 321—IS Analysis & Design
Chapter 2: Approaches to System Development
1 Design and Integration: Part 1 Nuggets about Design vs Project Management.
Abstraction IS 101Y/CMSC 101 Computational Thinking and Design Tuesday, September 17, 2013 Carolyn Seaman University of Maryland, Baltimore County.
1 Integration and Design: Part 4 Is Design continuing to be Dead? Gutsy opening image, and I apologize if it’s too strong: The issue is how much early.
Chapter 3 – Agile Software Development 1Chapter 3 Agile software development.
SWE 316: Software Design and Architecture – Dr. Khalid Aljasser Objectives Lecture 11 : Frameworks SWE 316: Software Design and Architecture  To understand.
Agile Modeling Theory. 2 Agile Modeling (AM) AM is a chaordic, practices-based process for modeling and documentation AM is a collection of practices.
Business Analysis and Essential Competencies
1 Chapter 5 Practice: A Generic View Software Engineering: A Practitioner’s Approach, 6th edition by Roger S. Pressman.
1 ISA&D7‏/8‏/ ISA&D7‏/8‏/2013 Systems Development Life Cycle Phases and Activities in the SDLC Variations of the SDLC models.
1 Integration and Design – Part 5 Bonus at the end of the hour – how to invent a foam football… using the “spiral” process.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 7 Slide 1 Requirements Engineering Processes.
Requirements Engineering Requirements Elicitation Process Lecture-8.
1 Chapter 5 Software Engineering Practice. 2 What is “Practice”? Practice is a broad array of concepts, principles, methods, and tools that you must consider.
© 2007 by Prentice Hall 1 Introduction to databases.
Abstraction IS 101Y/CMSC 101 Computational Thinking and Design Tuesday, September 17, 2013 Marie desJardins University of Maryland, Baltimore County.
1 Systems Analysis and Design in a Changing World, Thursday, January 18, 2007.
13-January-2003cse LifeCycle © 2003 University of Washington1 Lifecycle CSE 403, Winter 2003 Software Engineering
IT Job Roles & Responsibilities Shannon Ciriaco Unit 2:
1 Planning – Agile Style Highsmith, Ch 7 All kinds of iterations! CSSE579 Session 3 Part 1.
Requirement Handling
Systems Analysis and Design in a Changing World, Fourth Edition
Use Cases Use Cases are employed to describe the functionality or behavior of a system. Each use case describes a different capability that the system.
1 Design and Integration: Part 2. 2 Plus Delta Feedback Reading and lecture repeat Ambiguous questions on quizzes Attendance quizzes Boring white lecture.
Extreme Programming (XP) XP is an agile methodology: –aims to be responsive to change Theme running through XP is the importance of communication –amongst.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Introduction to Software Architecture.
AP-1 4. Agile Processes. AP-2 Agile Processes Focus on creating a working system Different attitude on measuring progress XP Scrum.
1 Design and Integration: Part 3 To prepare for today’s class, visit Cookie Clicker and plan with it for a few minutes:
Systems Development Life Cycle
Use Cases CS 6961 – Lecture 4 Nathan Dykman. Neumont UniversityCS Lecture 102 Administration Homework 1 is due –Still reviewing the proposal, but.
Lecture 4 – XP and Agile 17/9/15. Plan-driven and agile development Plan-driven development A plan-driven approach to software engineering is based around.
Software Engineering Principles Practical Advice and Steps for Managing Your Project.
Extreme Programming. Extreme Programming (XP) Formulated in 1999 by Kent Beck, Ward Cunningham and Ron Jeffries Agile software development methodology.
Chapter 10 Information Systems Development. Learning Objectives Upon successful completion of this chapter, you will be able to: Explain the overall process.
The problem that needs to be solved is if a computer career is for me.
1 The Software Development Process ► Systems analysis ► Systems design ► Implementation ► Testing ► Documentation ► Evaluation ► Maintenance.
From the customer’s perspective the SRS is: How smart people are going to solve the problem that was stated in the System Spec. A “contract”, more or less.
CSCI N201 Programming Concepts and Database 2 - STAIR Lingma Acheson Department of Computer and Information Science, IUPUI.
Continuous Improvement. Start Simple and Continually Improve E.g., Gmail Labels 1.
CSCI 383 Object-Oriented Programming & Design Lecture 7 Martin van Bommel.
Design, prototyping and construction(Chapter 11).
1 Introduction to eXtreme Programming Remko Popma Azzurri Ltd.
Extreme programming (XP) Advanced Software Engineering Dr Nuha El-Khalili.
CMPE 280 Web UI Design and Development August 29 Class Meeting
Extreme Programming.
Software Testing and Maintenance Maintenance and Evolution Overview
Applied Software Project Management
Agile Development – a new way of software development?
Presentation transcript:

1 Design and Integration: Part 2 Going Agile on Design…

2 Why would you want to design? …when you could start coding today!

3 Design is dead? Fowler’s contentions: “In common usage, evolutionary design is a disaster.” You can’t build a skyscraper like a doghouse. You can’t hand-off work without a plan. Once you’ve got this in Sprint 1, can you just evolve it?

4 But why is upfront design bad? Tension between designers and developers Requirements change – Good design can accommodate that change! But it must correctly anticipate the KIND of change. – Maybe because you didn’t understand them at first – better requirements! – But also requirements change due to business changes – can’t easily plan.

5 How do you do design? A series of at least 3 steps, maybe more. – What are those steps? Do this on a Computer so you can easily add/modify steps. Remember this is a “loose artifact” later! – You need to remember to keep it up to date. – Fowler’s “changing requirements.”

6 Always involves… Iteration – Because you can’t get it right the first time. Abstraction – At various levels. – The very abstract is very tricky. – What if the designers don’t code? High-level architecture for an Event Processor

7 Fowler on XP How do you avoid the “exponential curve” of costs as you change things to a delivered system? Kent Beck’s version! But you have to do the “enabling practices”!

8 Some of this is economics If the customer is doing “pay as you go,” then they’ll balk at paying for a lot of design up front. And you could get it wrong… and eat those costs. A simple system: – Runs all the tests – Reveals all the intention – No duplication – Fewest number of classes or methods

9 Some of it is social Someone has to explain design to someone else. Like all the stakeholders.

10 Frameworks Common question! A great enabler Also dangerous – Takes time to get up to speed Takes time No value is delivered What if you are wrong? A huge gold plating operation – “Every class decorates some other class!”

11 Reuse? Good idea? What would Highsmith think? – Adaptation over anticipation (p 217) But – depends on “maleability of the medium.” Architectural decisions are often expensive. The overall goal is “low cost.”

12 Recall the standard design sequence In all of engineering, it goes like this. 1.You at least need a good problem statement. – It should cover functional and non-functional requirements in generality. 2.You do the high-level design from that. – Top-down, with lots of alternatives. – Then pick from those, based on lots of criteria. – This is Phillips’ “Abstraction” (p 262) 3.Then you use the detailed requirements to fill-in the detailed design. – Bottom-up. – Do you need to express this, beyond coding? Like? Why?

13 High-level design looks like good brainstorming Try not to mix these two: – Coming up with new ideas. – Picking one, and focusing on how to do it well. But, – For everything beyond coding, you have to maintain it forever! – So – Is it throwaway? Start with 1 problem End with 1 solution Get lots of ideas!

14 One way to deal with changing requirements is to build flexibility into the design so that you can easily change it as the requirements change. However this requires insight into what kind of changes you expect. A design can be planned to deal with areas of volatility, while that will help for foreseen requirements changes, it won't help (and can hurt) for unforeseen changes. So you have to understand the requirements well enough to separate the volatile areas, and Our observation is that this is very hard. Fowler and Fowler… Can the egg know how the chicken is going to turn out?

15 Does Refactoring Violate YAGNI No, because we have a more complex definition of “simplicity” Simple = the easiest to work with code, overall. If the product lives for 10 years, better-written code really pays off. E.g., living with a big, messy case statement, versus a set of subclasses that do those cases. Pocket knife, after 10 years

16 Design Patterns? Knowing them is good, Fowler thinks (we agree) But just the slightest bit dangerous Using design patterns always has a cost – Good in that everyone knows them. – Maybe not so good if coding to them takes a lot of effort.

17 Design Patterns? And here they are… Lots more in other courses we teach.

18 Can Refactoring Lead You To Patterns? Maybe – More often, programmers refactor to patterns. Like, To get rid of a talking to some interface that keeps changing, I consolidate where I have to do that, into an “interface” class. Or, To get make a bunch of little variations on a class, I “decorate” it with these separate additions as wrappers. Lots more on refactoring is also on the web!

19 Design also should be more than English language statements! Add diagrams: – First keep in mind what you're drawing the diagrams for. The primary value is communication. – Effective communication means selecting important things and neglecting the less important… – Don't draw sequence diagrams for all use cases and scenarios – only [the important ones].. A common problem with the common use of diagrams is that people try to make them comprehensive. – The code is the best source of comprehensive information, as the code is the easiest thing to keep in sync with the code. – For diagrams, comprehensiveness is the enemy of comprehensibility.

20 Are there things worth “planning in”? Desires of the customer Technical Risk Ability to get it right “up front”

21 Personalities weigh in What role does an architecture play when you are using evolutionary design? XPs critics state that XP ignores architecture, that XP's route is to go to code fast and trust that refactoring that will solve all design issues. Interesting if they are right! Certainly the most aggressive XPers - Kent Beck, Ron Jeffries, and Bob Martin - are putting more and more energy into avoiding any up front architectural design. E.g., Don't put in a database until you really know you'll need it. Work with files first and refactor the database in during a later iteration. “Uncle Bob” Martin

22 Revisiting the tension In general, [an architect] conveys a certain gravitas, as in "I'm not just a mere programmer - I'm an architect". This may translate into "I'm an architect now - I'm too important to do any programming". The question then becomes one of whether separating yourself from the mundane programming effort is something you should do when you want to exercise technical leadership. This question generates an enormous amount of emotion.

23 Any time you distinguish roles, you have similar problems…

24 What’s an architect have to do? - 1 Desired qualities for a software architect include the following:, 1.The artistic skill to make seemingly simple designs that are easy to grasp and yet which solve complex problems. 2.Analytical skills, such as an ability to find root causes for high-level problems in existing designs, like why a system runs too slowly or is not secure. 3.A systems engineer's understanding of the business, social, and operational environment in which a system needs to operate. An understanding of the domain in which a system will live, as well as technical knowledge. 4.Ability to relate to a wide range of stakeholders, including the client, users, system administrators and suppliers. 5.Communication skills - explaining to a design to the people who need to implement it. 6.A working knowledge of the capabilities of the development organization, and of how to explain to them what to do. This normally includes a high- level of adeptness at using the required technologies. The architect often writes a framework, which is developed further by others on the team.

25 What’s an architect have to do? - 2 And, 7.Knowledge of multiple technologies, from which to choose the right ones for the next job. 8.Ability to conceptualize the strategic requirements for a project, which translate into needed design features. 9.Negotiation skills, so as to stand up for technical decisions that require change by developers and stakeholders. 10.Teamwork skills, such as listening to opinions of other developers and testers. 11.Technical leadership skills, during development and delivery of a system. These include also the selling skills used to convince stakeholders and developers of the soundness of a technical approach. Lots more about this in our software architecture course!

26 Living in Flatland The fundamental assumption underlying XP is that it is possible to flatten the change curve enough to make evolutionary design work. This flattening is both enabled by XP and exploited by XP. This is part of the coupling of the XP practices: specifically you can't do those parts of XP that exploit the flattened curve without doing those things that enable the flattening.

27 Flat is a state of mind? In his XP 2000 paper, Josh Kerievsky points out a good example of this. He looks at possibly the most public XP code of all - JUnit.JUnit – JUnit uses decorators to add optional functionality to test cases, such things as concurrency synchronization and batch set up code. – By separating out this code into decorators it allows the general code to be clearer than it otherwise would be. – But you have to ask yourself if the resulting code is really simple. For me it is, but then I'm familiar with the Decorator pattern. But for many that aren't it's quite complicated.

28 Design at IDEO See Chris Milne’s TEDx video at qlE1kQ qlE1kQ How is this like Agile? How is it like “Old school”? How is it like Spiral?

29 Summary for requirements and design “Old school” 1.Trust people in charge of: – Requirements gathering – Design creation 2.Trust things you hand off using documents: – People sign-off on these. 3.Don’t trust the code, unless verified vs documents. 4.Hierarchies of people coordinate the info flows. – Delegate responsibilities. 5.Get it right the first time. Agile 1.Trust nobody, unless: – They are standing right in front of you! And, – They are the right person. 2.Don’t trust your own documents: – People guess on those, and – You’re stuck with updating! 3.Except for the code, which is always before the customer. 4.Flatten the hierarchies. – Empowered teammates move fast. 5.Get it right eventually.