Slide 1

Slide 1 text

Refactoring & Testing 2016 Nat Pryce [email protected] @natpryce github.com/npryce speakerdeck.com/npryce

Slide 2

Slide 2 text

External & Internal Quality

Slide 3

Slide 3 text

It's about time!

Slide 4

Slide 4 text

The engineer's balancing act

Slide 5

Slide 5 text

System Test Automation How good is the system? test results = external quality feedback

Slide 6

Slide 6 text

changes = internal quality feedback Refactor & abstract Eliminate source of developer error Refactor & abstract test results = external quality feedback System Test Automation instrumentation, bugs = external quality feedback How good are the tests?

Slide 7

Slide 7 text

changes = internal quality feedback Refactor & abstract Eliminate source of developer error test results = external quality feedback instrumentation, bugs = external quality feedback difficulty testing = internal quality feedback Refactor & abstract System Test Automation How maintainable is the software?

Slide 8

Slide 8 text

Eliminate source of developer error test results = external quality feedback instrumentation, bugs = external quality feedback difficulty testing = internal quality feedback Refactor & abstract changes = internal quality feedback System Test Automation Refactor & abstract How maintainable are the tests?

Slide 9

Slide 9 text

changes = internal quality feedback instrumentation, bugs = external quality feedback difficulty testing = internal quality feedback Refactor & abstract Refactor & abstract test results = external quality feedback System Test Automation Eliminate source of developer error Can we eliminate the need for tests?

Slide 10

Slide 10 text

changes = internal quality feedback instrumentation, bugs = external quality feedback difficulty testing = internal quality feedback Refactor & abstract Refactor & abstract test results = external quality feedback System Test Automation Eliminate source of developer error Tests and the system-under-test form a system

Slide 11

Slide 11 text

Why are developers uncomfortable with design as continual, gradual, never-ending adaptation?

Slide 12

Slide 12 text

I will contend that conceptual integrity is the most important consideration in system design. –Fred Brooks The Mythical Man Month, 1975

Slide 13

Slide 13 text

It is better to have a system omit certain anomalous features and improvements, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas. –Fred Brooks The Mythical Man Month, 1975

Slide 14

Slide 14 text

Modernism Modernist [styles] shared certain underlying principles: a rejection of history and applied ornament; a preference for abstraction; and a belief that design and technology could transform society. http://www.vam.ac.uk/page/m/modernism/

Slide 15

Slide 15 text

1889, Carson, Pirie, Scott and Company Building

Slide 16

Slide 16 text

1938 Auto Union V16 Streamliner

Slide 17

Slide 17 text

1946 Eames Chair

Slide 18

Slide 18 text

The dynamic nature of [Taoist and Zen] philosophy laid more stress upon the process through which perfection was sought than upon perfection itself. True beauty could be discovered only by one who mentally completed the incomplete. The virility of life and art lay in its possibilities for growth. ... Uniformity of design was considered fatal to the freshness of imagination. –Kakuzo Okakura The Book of Tea, 1906

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

From http://vintageleatherjackets.blogspot.co.uk 1930s leather jacket

Slide 22

Slide 22 text

N. Nagappan, A. Zeller, T. Zimmermann, K. Herzig, and B. Murphy. Change Bursts as Defect Predictors. 2010 “What happens if code changes again and again in some period of time? … Such change bursts have the highest predictive power for defect-prone components [and] significantly improve upon earlier predictors such as complexity metrics, code churn, or organizational structure.”

Slide 23

Slide 23 text

Fin