A few more things about Agile and SE. Could help in interviews, but don t try to bluff your way through

Similar documents
Test Driven Development TDD

Test Driven Development (TDD)

Introduction to Programming

Chapter01.fm Page 1 Monday, August 23, :52 PM. Part I of Change. The Mechanics. of Change

Designing with patterns - Refactoring. What is Refactoring?

Analysis of the Test Driven Development by Example

1: Introduction to Object (1)

Test Driven Development. René Barto SES Agile Development - Test Driven Development

3 Continuous Integration 3. Automated system finding bugs is better than people

Test-driven development

BDD and Testing. User requirements and testing are tightly coupled

Reliable programming

Thread Safety. Review. Today o Confinement o Threadsafe datatypes Required reading. Concurrency Wrapper Collections

Building in Quality: The Beauty of Behavior Driven Development (BDD) Larry Apke - Agile Coach

Git Branching for Agile Teams

Introduction to Extreme Programming

Microservices Smaller is Better? Eberhard Wolff Freelance consultant & trainer

Black Box Testing. EEC 521: Software Engineering. Specification-Based Testing. No Source Code. Software Testing

Agile Manifesto & XP. Topics. Rapid software development. Agile methods. Chapter ) What is Agile trying to do?

Test-Driven Development (TDD)

Software Design and Analysis CSCI 2040

Test First Software Development

9 R1 Get another piece of paper. We re going to have fun keeping track of (inaudible). Um How much time do you have? Are you getting tired?

COURSE 11 DESIGN PATTERNS

Reengineering II. Transforming the System

Unit Testing as Hypothesis Testing

Unit Testing as Hypothesis Testing

What is version control? (discuss) Who has used version control? Favorite VCS? Uses of version control (read)

Client Code - the code that uses the classes under discussion. Coupling - code in one module depends on code in another module

No Source Code. EEC 521: Software Engineering. Specification-Based Testing. Advantages

Algorithms in Systems Engineering IE172. Midterm Review. Dr. Ted Ralphs

IDNA Protocol Status Review. John C Klensin 6 December 2006

LESSONS LEARNED: BEING AGILE IN THE WATERFALL SANDBOX

Subroutine to ILE Procedure

Agile Architecture. The Why, the What and the How

Construction: High quality code for programming in the large

Software Development Methodologies

The Power of Unit Testing and it s impact on your business. Ashish Kumar Vice President, Engineering

Language alone won t pay your bills. Alan Franzoni - EP 2012 twitter: franzeur website:

The name of our class will be Yo. Type that in where it says Class Name. Don t hit the OK button yet.

HOW TO WRITE USER STORIES (AND WHAT YOU SHOULD NOT DO) Stuart Ashman, QA Director at Mio Global Bob Cook, Senior Product Development Manager, Sophos

Object-Oriented Analysis and Design Prof. Partha Pratim Das Department of Computer Science and Engineering Indian Institute of Technology-Kharagpur

CSE 70 Final Exam Fall 2009

CS 370 The Pseudocode Programming Process D R. M I C H A E L J. R E A L E F A L L

Credit where Credit is Due. Lecture 29: Test-Driven Development. Test-Driven Development. Goals for this lecture

Software Architecture

Divisibility Rules and Their Explanations

18-642: Software Development Processes

Introduction. A Brief Description of Our Journey

Object Oriented Software Design - I

About the required reading. Construction: High quality code for programming in the large. What is high quality code?

LeakDAS Version 4 The Complete Guide

Chapter 2 Web Development Overview

Mock Objects and Distributed Testing

Lecture 20: SW Testing Presented by: Mohammad El-Ramly, PhD

Lecture Notes on Contracts

Story Refinement How to write and refine your stories so that your team can reach DONE by the end of your sprint!

Gathering Requirements. We even iterate on the requirements

Optimize tomorrow today.

Software Design Models, Tools & Processes. Lecture 6: Transition Phase Cecilia Mascolo

Successful Test Automation without Coding. Marc J. Balcer Chief Architect Model Compilers

XP: Planning, coding and testing. Practice Planning game. Release Planning. User stories. Annika Silvervarg

Software Engineering I (02161)

Utilizing Fast Testing to Transform Java Development into an Agile, Quick Release, Low Risk Process

ERICH PRIMEHAMMER REFACTORING

PRINCIPLES OF SOFTWARE BIM209DESIGN AND DEVELOPMENT 00. WELCOME TO OBJECTVILLE. Speaking the Language of OO

Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #17. Loops: Break Statement

Software Design and Analysis for Engineers

Administrivia. Added 20 more so far. Software Process. Only one TA so far. CS169 Lecture 2. Start thinking about project proposal

Creating a Lattix Dependency Model The Process

Lab Exercise Test First using JUnit

Avancier Methods. Very basic design patterns. It is illegal to copy, share or show this document

These are notes for the third lecture; if statements and loops.

Heuristic Evaluation of [ Quest ]

Introduction to User Stories. CSCI 5828: Foundations of Software Engineering Lecture 05 09/09/2014

Rediscovering. Modularity. Stuttgart JUG November 20 th 2012

Monitoring Tool Made to Measure for SharePoint Admins. By Stacy Simpkins

Daniel Lynn Lukas Klose. Technical Practices Refresher

Heuristic Evaluation of Covalence

Practical Objects: Test Driven Software Development using JUnit

Software Engineering Chap.7 - Design and Implementation

(Refer Slide Time 3:31)

Turning a Marathon Runner into a Sprinter: Adopting Agile Testing Strategies and Practices at Microsoft

Project and Production Management Prof. Arun Kanda Department of Mechanical Engineering Indian Institute of Technology, Delhi

FROM A RELATIONAL TO A MULTI-DIMENSIONAL DATA BASE

Lab 1: Silver Dollar Game 1 CSCI 2101B Fall 2018

Computational Systems COMP1209

CS112 Lecture: Defining Classes. 1. To describe the process of defining an instantiable class

User-Centered Development

Rasterization and Graphics Hardware. Not just about fancy 3D! Rendering/Rasterization. The simplest case: Points. When do we care?

Automated Testing of Tableau Dashboards

Test-Driven Development

Story Writing Basics

Recap: Class Diagrams

CS 575: Software Design

Heuristic Evaluation of igetyou

Plan. Design principles: laughing in the face of change. What kind of change? What are we trying to achieve?

CS3205: Task Analysis and Techniques

Secure Agile How to make secure applications using Agile Methods Thomas Stiehm, CTO

Lecture 11: Testing and Design Statistical Computing, Wednesday October 21, 2015

Transcription:

A few more things about Agile and SE Could help in interviews, but don t try to bluff your way through 1

Refactoring How to do it, where it fits in http://www.cse.ohio-state.edu/~crawfis/cse3902/index.htm 2

Refactoring basics Systematically rewriting code to improve design Preserve input-output behavior (loosely speaking) Conceptualized as transformations to code Careful cut-and-paste editing by hand Automated transformations like those found in Eclipse A very large catalog of transformations Some generic (rename) some language specific (push down) Many common-sense refactorings are actually a composition of a few refactorings 3

Refactoring Steps 1. Identify the problem Violations of SRP, DRY, smells 2. Formulate a goal design Sometimes get more ideas while refactoring 3. Construct a refactoring plan Incremental don t attempt the whole thing at once Each major step should be meaning-preserving and testable Reduces risk of hard-to-find bug at the end 4. Apply refactoring transformations. For each: a. Verify preconditions (won t break the program, legal) b. Apply transformation(s) c. Test (regression tests) d. Repair and retest as necessary 4

Refactoring Integral to Agile/BDD Refactoring is the last step in BDD Initial design is minimalist & simple Often easier to see best design after implementation Basically, an on-going activity, as you learn about your code and design (write your tests) (write code to pass your tests) (yeah, refactor) Also more comprehensive refactorings between iterations or milestones (just like special testing iterations) 5

TDD: Test-Driven Development A predecessor of BDD (Behavior-Driven Development) Key ideas, captured by a process 1. Test first write tests before writing code 2. Write the simplest code possible to pass tests Go from red to green in JUnit 3. Refactor as necessary to achieve good design Shortcomings (addressed by BDD) Focus on class impl s (the unit in unit testing ) Yet little guidance on how to design classes BDD Expands Stories to include Scenarios Scenarios clarify behavior and also fuel OOD (nouns/verbs) Easier to test features (match the story) than classes (what part of story does class achieve???) If you get interview question on TDD, say I learned and used BDD, a successor to TDD, so I m more prepared to talk about BDD. 6

CI: Continuous Integration Basic idea: Integrating your code into the build several times a way 1. Develop in small units (e.g., Stories/features or portions of stories that realize useful part of a feature) 2. Submit your code to repository through CI tool 3. Code is automatically compiled into build and tested 4. If tests pass, code is checked in (else not) Typical tools are Bamboo and CruiseControl Advantages - avoids broken builds Keeps bad code out of repository Keeps build current and working It is basically automated always runnable Always runnable is ten-cent CI. ;) 7

Software Architecture - Why Helps you identify the essence of your app Helps you locate code/features in your system Helps make your system extensible and says how to extend it Tells you what you can t do Pipe-and-Filter Architecture 8

Software Architecture: OO Style Risk-Oriented Look at Feature List Recall that a risk-oriented approach has you take on your biggest risks first Looking at the feature list, pick out if any of these resonate: 1. It s the essence of the system (if you get this wrong, you re toast) 2. I don t know what it means (if you don t understand it, you re toast) 3. I don t know how to achieve it (if you don t know how to build it, you re toast) Step 19

Biggest Risks Essence and Uncertainty I picked these just for ESSENCE It s not a game if it doesn t have a board,, pieces, and moves Step 110

Abstract to a Diagram Step 511

A Take-Away on Architecture Software Architecture is your design structure, and highlights the most important parts of your system, and the relationships between those parts. It s about structure: components & relationships Easily visualized with boxes and arrows It s the whole: summarizes whole system It s macro: a small number of boxes and edges See & talk about key decisions in whole system Its rules govern evolution: way things are done Not just a pretty picture, and the whole system 12

What are the architectural rules? Board has to be 2D (x,y) Coordinates integer values Space in a coordinate shall be represented by a Tile Units are held by Tiles on Board Interactions between Units on separates Tiles have to go through Board Board is a Façade for Tile (not precisely captured in this diagram) Unit can t be on multiple Tiles (is it really a rule? I believe it) Ability add/remove Units from Tiles 13

The Software Architecture Paradox An architectural decision is a decision to make something shared: not modular, unmodular Helps make other things modular Helps make other things easy to do Trick is to make the right thing shared/global It shouldn t change in the future A wise trade-off What s global is articulated in the rules Thou shalt X means you can freely do X repeatedly (violate DRY) and you re not creating a change nightmare A lot of interfaces, which are supposed to be stable anyway, but now need to be really stable 14

Customers Variation 15

Commonality versus Variation 16

Architectural Styles and Patterns Design Patterns are microarchitectures Not enforced system-wide Different arch. styles solve different problems Can take a patterns approach (leverage experience) Pipe-and-Filter Layered Blackboard 17

A journey comes to an end 18

Where we started We knew how to write code Knew how to use data structures Could write a small program for yourself 19

Where you are today Know the importance of risks, tradeoffs, and iteration Acquire requirements from a customer Refine to remove assumptions Assemble an agile plan Stories, scenarios, tasks Iterations and Milestones Design your code for the long haul So each iteration can build on the next Deliver to your customer frequently Adjust to changing conditions Build on frameworks to realize amazing functionality Schedule, test, and deliver with confidence It works, and its on-time OK to cut lower priority features! Work in a team, not just alone 20

21