Top Banner
Software Craftsmanship for Non-Developers Cincinnati Day of Agile July 27, 2018
73

Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Sep 16, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non-DevelopersCincinnati Day of AgileJuly 27, 2018

Page 2: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires
Page 3: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Who is Chad Green? Data & Solutions Architect at ProgressiveHealth

Previous Positions• Service Delivery Manager• Product Delivery Manager• Project Manager• .NET Solution Architect• Developer

Community InvolvementCode PaLOUsa Conference ChairLouisville .NET Meetup OrganizerLouisville Tech Leaders Meetup OrganizerLouisville Tech Ladies Co-Organizer

Contact [email protected]@ChadGreenChadwickEGreen

Page 4: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Why do we need to worry about software craftsmanship?

Page 5: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Because we all need to be a part of the solution.

Page 6: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

What is Software CraftsmanshipSoftware Craftsmanship for Non-Developers

Page 7: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

What Software Craftsmanship is not

page07

• Beautiful code

• Test-Driven Development

• Self-selected group of people

• Specific technologies or methodologies

• Certifications

• Religion

Page 8: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

What is Software Craftsmanship

page08

• Software developers have had hard time defining themselves:• Historically practitioners of well-defined statistical analysis and

mathematical rigor of a scientific approach with computational theory

• Changed to an engineering approach with connotations of precision, predictability, measurement, risk mitigation, and professionalism

• Agile Manifesto question some these assumptions

Page 9: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

What is Software Craftsmanship

page09

Agile Manifesto question some these assumptions

Individuals and interactions over processes and tools

Page 10: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Craft, Trade, Engineering, Science, or Art

page010

• Craft/Trade – Profession that requires particular skills and knowledge of skilled work

• Engineering – Creative application of science, mathematical methods, and empirical evidence to the innovation, design, construction, operation, and maintenance of structures, machines, materials, devices, systems, processes, and organizations

• Science – Systematic enterprise that builds and organizes knowledge in the form of testable explanations and predictions about the universe

• Art – Diverse range of human activities in creating visual, auditory, or performing artifacts, expressing the author’s imaginative, conceptual idea, or technical skill, intended to be appreciated for their beauty or emotional power

Page 11: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship is about professionalism in software development.

Page 12: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Software Craftsmanship History

page012

• 1992 – Jack W. Reeves publishes “What Is Software Design?” essay• 1997 – Andrew Hunt and David Thomas publish The Pragmatic Programmer• 2001 – Pete McBreen publishes Software Craftsmanship• 2002 – Software Apprenticeship Summit• 2006 – 8th Light Founded• 2008 – Bob Martin proposes fifth value for the Agile Manifesto:

Craftsmanship over Crap• 2008 – Bob Martin publishes Clean Code: A Handbook of Agile Software

Craftsmanship• 2008 – Software Craftsmanship Summit• 2009 – Manifesto for Software Craftsmanship• 2011 – Bob Martin publishes The Clean Coder: A Code of Conduct for

Professional Programmers

Page 13: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Manifesto for Software Craftsmanship

page013

Not only working software,but also well-crafted software

Not only responding to change,but also steadily adding value

Not only individuals and interactions,but also a community of professionals

Not only customer collaboration,but also productive partnerships

Page 14: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Manifesto for Software Craftsmanship

page014

Not only working software,but also well-crafted software

Page 15: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Manifesto for Software Craftsmanship

page015

Not only responding to change,but also steadily adding value

Page 16: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Try and leave this world a little better than you found it, and when you turn comes to die you can die happy in feeling that at any rate you have not wasted your time but have done your best.

Robert Stephenson Smyth Bader-Powell, founder of The Scout Association

Page 17: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Manifesto for Software Craftsmanship

page017

Not only individuals and interactions,but also a community of professionals

Page 18: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Manifesto for Software Craftsmanship

page018

Not only customer collaboration,but also productive partnerships

Page 19: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Technical DebtSoftware Craftsmanship for Non-Developers

Page 20: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

What is Technical Debt

page020

• Reflects the implied cost of additional rework caused by choosing an easy solution now instead of using a better approach that would take longer

• Technical debt can be compared to monetary debt – If not repaid, it can accumulate interest, making it hard to implement changes later on

Page 21: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Example of Technical Debt

page021

• Start writing an application and there is no need for user roles –everyone can do everything

• Requirement comes in for a permission for a specific requirement

• Some time later another things requires the differentiation of users, and then another and another

• The company has the opportunity to add five customers in a week –but really need another permission change in a couple of days

Page 22: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Example of Technical Debt – Decision Time

page022

• 4 now (the permission), 22 later (the refactoring, that now is a bit complicated)• Company has added 5 clients to the portfolio and the money

comes in early• 21 now (the refactoring), 0 later (the permission)

• Company has not added the 5 clients to the portfolio, so the money comes later

• 4 now (the permission), no refactoring at all, and then 5 for the next permission, and then 6, 7…• The money comes earlier, but the next time it’s required to do

something it will take way more time

Page 23: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Common Causes of Technical Debt

page023

• Insufficient up-front definition

• Business pressures

• Lack of process or understanding

• Tightly-coupled components

• Lack of a test suite

• Lack of documentation

• Lack of collaboration

• Parallel development

• Delayed refactoring

• Lack of alignment to standards

• Lack of knowledge

• Lack of ownership

• Poor technological leadership• Last minute specification

changes

Page 24: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

SOLID PrinciplesSoftware Craftsmanship for Non-Developers

Page 25: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

S.O.L.I.D.

page025

• First five object-oriented design principles• S – Single-responsibility principle• O – Open-closed principle• L – Liskov substitution principle • I – Interface segregation principle• D – Dependency Inversion Principle

Page 26: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Single Responsibility Principle (SRP)

page026

• A module should have one, and only one, reason to change• A module should be responsible to one, and only one, actor

Page 27: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Single Responsibility Principle (SRP)

page027

• A module should be responsible to one, and only one, actor

CFO

COO

CTO

Employee

+ Caculate Pay+ ReportHours+ Save

Class violates the SRB because the three methods are responsible to different actors

• The CalculatePay method is specified by the accounting department, which reports to the CFO

• The ReportHours method is specified and used by the human resources department, which reports to the COO

• The Save method is specified b the database administrators, who report to the CTO

Page 28: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Open-Closed Principle (OCP)

page028

• A software artifact should be open for extension but closed for modification

Page 29: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Liskov Substitution Principle (LSP)

page029

• Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type y where S is a subtype of T

• Every subclass/derived class should be substitutable for their base/parent class

Billing License

+ CalculateFee()

Personal License

+ CalculateFee()

Business License

+ CalculateFee()

Page 30: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Interface Segregation Principle (ISP)

page030

• A client should never be forced to implement an interface that it does not use or clients should not be forced to depend on methods they do not use

Page 31: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Dependency Inversion Principle (DIP)

page031

• Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they should depend on abstractions.

Page 32: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Other Key PrinciplesSoftware Craftsmanship for Non-Developers

Page 33: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

DRY – Don’t Repeat Yourself

page033

• Every piece of knowledge must have a single, unambiguous, authoritative representation within a system

• Alternative is to have the same thing expressed in two or more place. If you change one, you have to remember to change the others.

• It isn’t a question of whether you will remember: it’s a question of when you will forget

Page 34: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

If you write it once, think about encapsulating it. If you write it twice, you have to encapsulate it. If you write it three times, programming isn’t for you.

Phil Japikse, Microsoft MVP, ASPInsider, MCSD, MCDBA, PSM II, PSD, CSM, Consultant, Coach, Author, Trainer

Page 35: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

KISS – Keep it Simple Stupid

page035

• The simplest explanation tends to be the right one

Page 36: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

YAGNI – You Aren’t Going to Need It

page036

• Always implement things when you actually need them, never when you just foresee that you need them

• Principle behind XP practice of “do the simplest thing that could possibly work”

Page 37: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Key PracticesSoftware Craftsmanship for Non-Developers

Page 38: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

TDD – Test Driven Development

page038

• Software development process that relies on the repetition of very short development cycle: requirements are turned into very specific test cases, then the software is improved to pass the new tests, only

• Three Laws of TDD1. You are not allowed to write any production code until you

have first written a failing unit test.2. You are not allowed to write more of a unit test than is

sufficient to fail – and not compiling is failing3. You are not allowed to write more production code that is

sufficient to pass the currently failing unit test

Page 39: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Pair Programming

page039

• Technique in which two programmers work together at one workstation• The driver writes code while the observer reviews each line of

code as it is typed

Page 40: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Practicing/Coding Dojos

page040

• Technique in which two programmers work together at one workstation• The driver writes code while the observer reviews each line of

code as it is typed

Page 41: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Code SmellsSoftware Craftsmanship for Non-Developers

Page 42: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Comments

page042

• Inappropriate Information• Obsolete Comment• Redundant Comment• Poorly Written Comment• Commented-Out-Code

Page 43: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Comments

page043

• Inappropriate Information• Obsolete Comment• Redundant Comment• Poorly Written Comment• Commented-Out-Code

Page 44: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Comments

page044

• Inappropriate Information• Obsolete Comment• Redundant Comment• Poorly Written Comment• Commented-Out-Code

Page 45: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Comments

page045

• Inappropriate Information• Obsolete Comment• Redundant Comment• Poorly Written Comment• Commented-Out-Code

Page 46: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Comments

page046

• Inappropriate Information• Obsolete Comment• Redundant Comment• Poorly Written Comment• Commented-Out-Code

Page 47: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Environment

page047

• Build Requires More Than One Step• Tests Require More Than One Step

Page 48: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Environment

page048

• Build Requires More Than One Step• Tests Require More Than One Step

Page 49: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Functions

page049

• Dead Function

Page 50: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page050

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 51: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page051

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 52: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page052

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 53: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page053

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication (DRY – Don’t Repeat Yourself)• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 54: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page054

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 55: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page055

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 56: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page056

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 57: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page057

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 58: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page058

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

DateTime newDate = date.add(5)DateTime newDate = date.AddDays(5)

Page 59: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page059

• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions

Page 60: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page060

• Replace Magic Numbers with Named Constants• Functions Should Do One Thing 3.141592653589793

3.1415927535897933.141592753589793

Page 61: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - General

page061

• Replace Magic Numbers with Named Constants• Functions Should Do One Thing

Page 62: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Names

page062

• Chose Descriptive Names• Avoid Encodings• Names Should Describe Side-Effects

Page 63: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells – Names: Choose Descriptive Names

page063

CREATE PROCEDURE dbo.HII_Mobile_Cond_Workout_Activities_Log_View

@ID INT = 0,

@cond_workout_ID INT = 0

AS

BEGIN

SELECT al.ID,

al.cond_workout_ID,

al.activity,

al.mins,

al.cal_burn,

a.Category,

ai.ID AS intensity_id,

ai.Intensity

FROM HII_Mobile_Cond_Workout_Activities_Log al

INNER JOIN HII_Cond_Activities a ON a.ID = al.activity

LEFT JOIN HII_Cond_Activities_Intensity ai ON ai.Activity_ID = a.ID AND ai.ID=al.intensity

WHERE al.active=1

AND (cond_workout_ID = @cond_workout_ID OR al.Id = @ID)

ORDER BY al.created_date

END

CREATE PROCEDURE dbo.HII_Mobile_Cond_Workout_Activities_Log_View

@ID INT = 0,

@cond_workout_ID INT = 0

AS

BEGIN

SELECT al.ID,

al.cond_workout_ID,

al.activity,

al.mins,

al.cal_burn,

a.Category,

ai.ID AS intensity_id,

ai.Intensity

FROM HII_Mobile_Cond_Workout_Activities_Log al

INNER JOIN HII_Cond_Activities a ON a.ID = al.activity

LEFT JOIN HII_Cond_Activities_Intensity ai ON ai.Activity_ID = a.ID AND ai.ID=al.intensity

WHERE al.active=1

AND (cond_workout_ID = @cond_workout_ID OR al.Id = @ID)

ORDER BY al.created_date

END

CREATE PROCEDURE dbo.GetWorkActivitiesLog

@Id INT = 0,

@WorkoutId INT = 0

AS

BEGIN

SELECT ActivityLog.ID,

ActivityLog.cond_workout_ID,

ActivityLog.activity,

ActivityLog.mins,

ActivityLog.cal_burn,

Activities.Category,

Intensity.ID AS intensity_id,

Intensity.Intensity

FROM HII_Mobile_Cond_Workout_Activities_Log AS ActivityLog

INNER JOIN HII_Cond_Activities AS Activities ON a.ID = ActivityLog.activity

LEFT JOIN HII_Cond_Activities_Intensity Intensity ON Intensity.Activity_ID = a.ID AND ai.ID=ActivityLog.intensity

WHERE ActivityLog.active=1

AND (ActivityLog.cond_workout_ID = @WorkoutId OR ActivtyLog.Id = @ID)

ORDER BY ActivityLog.created_date

END

Page 64: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Names

page064

• Chose Descriptive Names• Avoid Encodings• Names Should Describe Side-Effects

Page 65: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Names

page065

• Chose Descriptive Names• Avoid Encodings• Names Should Describe Side-Effects

Page 66: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Tests

page066

• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs• Tests Should Be Fast

Page 67: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Tests

page067

• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs• Tests Should Be Fast

Page 68: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Tests

page068

• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs• Tests Should Be Fast

Page 69: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Tests

page069

• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs• Tests Should Be Fast

Page 70: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Tests

page070

• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs• Tests Should Be Fast

Page 71: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

Software Craftsmanship for Non Developers

Code Smells - Tests

page071

• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs• Tests Should Be Fast

Page 72: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

[email protected]@ChadGreenChadwickEGreen

bit.ly/DOACraft

Page 73: Software Craftsmanship for Non-Developers · Software Craftsmanship for Non Developers Craft, Trade, Engineering, Science, or Art page 010 •Craft/Trade –Profession that requires

thank you.