SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
PESSIMISTIC DEVELOPMENT
YOU CAN'T WRITE PERFECT SOFTWARE
I write perfect code.
— Me
HOW WE DRIVE
> We like to think we are the best
> We drive defensively
> Anticipate the unexpected
WE CODE LIKE
WE DRIVE...
WE BELIEVE WE ARE THE
BEST DEVELOPER OUT
THERE.
THIS IS SHOWN THROUGH DEFENSIVE
CODING
> We validate
> Use Assertions
> Check for Consistency
BUT DON'T
TRUST
YOURSELF
BUILDING A PESSIMISTIC APPROACH
> Design By Contract
> Program for the Impossible
> Assertive Programming
> Alert Gracefully
DESIGN BY
CONTRACT
WHAT DOES A CONTRACT
LOOK LIKE IN REAL LIFE?
WHAT DOES A CONTRACT LOOK LIKE IN
CODE?
> Defines Your Rights
> Defines Responsibilities
DOCUMENT YOUR CONTACT KEY ELEMENTS
> Responsibility of your code
> Inputs
> Outputs
> Exceptions that can be thrown.
CONTRACTS IN CODE
public interface IRepository<TEntityType>
{
ApplicationUser CurrentUser { get; set; }
IQueryable<TEntityType> GetAll();
TEntityType Get(int id);
IQueryable<TEntityType> FindBy(Expression<Func<TEntityType, bool>> predicate);
TEntityType Add(TEntityType entity);
void Delete(TEntityType entity);
void Delete(int entity);
TEntityType Edit(TEntityType entity);
void Save();
}
PROGRAM DELIBERATELY
NOT BY COINCIDENCE
> Always be Aware of what you are doing - Stone Soup &
Boiled Frogs
> Don't Code Blindfolded
> Proceed from a plan
> Rely on reliable things -
PROGRAM FOR
THE
IMPOSSIBLENO ONE WOULD EVER DO THAT...
USERS AREN'T THE ONLY
ONE WHO CREATE
UNEXPECTED
THIS CODE WON'T BE USED 30 YEARS
FROM NOW, SO TWO-DIGIT DATES ARE
FINE
NO ONE WOULD PASS NULL TO US
SINCE IT COMES FROM THE DATABASE...
WE MAKE BIG
ASSUMPTIONS THAT CAN
LEAD TO TROUBLE.
EXPECT THE UNEXPECTED
DON'T
var something = obj.prop.name;
DO
var something;
if (obj && obj.prop && obj.prop.name)
{
something = obj.prop.name;
}
ASSERTIVE
PROGRAMMING
C# EXAMPLE
public ProductDto ConvertProductToDto(Product product)
{
if (product == null) throw new ArgumentNullException("product");
...
return productDto;
}
TESTING ASSERTIONS
[TestMethod]
[ExpectedException(typeof(ArgumentNullException),
"A product of null was inappropriately allowed.")]
public void NullProductInConversion()
{
var productDto = new ConvertProductToDto(null);
}
HANDLING ASSERTIONS WITH GRACE
> Alert User of Error
> When calling another component/service/module,
expect the unexpected
> Be proactive with assertions in your own code
PRACTICAL USES
> Always alert errors in promises error block
> Log API errors to services like BugSnag (and deal with
them)

Mais conteúdo relacionado

Destaque

Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Richard Banks
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample applicationAntoine Rey
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 

Destaque (9)

Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 

Semelhante a Write Perfect Code with Pessimistic Development

TechCrunch Early Stage 2020 - How to prioritize security at your startup
TechCrunch Early Stage 2020 - How to prioritize security at your startupTechCrunch Early Stage 2020 - How to prioritize security at your startup
TechCrunch Early Stage 2020 - How to prioritize security at your startupCasey Ellis
 
Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...
Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...
Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...MUG-Lyon Microsoft User Group
 
Debugging Javascript
Debugging JavascriptDebugging Javascript
Debugging JavascriptSolTech, Inc.
 
iOS Provisioning : Running your app in an iOS device
iOS Provisioning : Running your app in an iOS deviceiOS Provisioning : Running your app in an iOS device
iOS Provisioning : Running your app in an iOS deviceMadusha Perera
 
Practical security in a DevOps World
Practical security in a DevOps WorldPractical security in a DevOps World
Practical security in a DevOps WorldHinse ter Schuur
 
GWAB Lyon - Legacy code atelier
GWAB Lyon - Legacy code atelierGWAB Lyon - Legacy code atelier
GWAB Lyon - Legacy code atelierflorentpellet
 
Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?Bitbar
 
Art of unit testing: how to do it right
Art of unit testing: how to do it rightArt of unit testing: how to do it right
Art of unit testing: how to do it rightDmytro Patserkovskyi
 
Perfect product architecture in a non-stop start-up
Perfect product architecture in a non-stop start-upPerfect product architecture in a non-stop start-up
Perfect product architecture in a non-stop start-upDroidConTLV
 
Codemotion rome 2015 bluemix lab tutorial -- Codemotion Rome 2015
Codemotion rome 2015   bluemix lab tutorial -- Codemotion Rome 2015Codemotion rome 2015   bluemix lab tutorial -- Codemotion Rome 2015
Codemotion rome 2015 bluemix lab tutorial -- Codemotion Rome 2015Codemotion
 
Testing micro services using testkits
Testing micro services using testkitsTesting micro services using testkits
Testing micro services using testkitsMaxim Novak
 
Debugging Javascript - 0 to Heisenberg
Debugging Javascript - 0 to HeisenbergDebugging Javascript - 0 to Heisenberg
Debugging Javascript - 0 to HeisenbergChris Morrow
 
Code Quality Practice and Tools
Code Quality Practice and ToolsCode Quality Practice and Tools
Code Quality Practice and ToolsBob Paulin
 
Codemotion Rome 2015 Bluemix Lab Tutorial
Codemotion Rome 2015 Bluemix Lab TutorialCodemotion Rome 2015 Bluemix Lab Tutorial
Codemotion Rome 2015 Bluemix Lab Tutorialgjuljo
 

Semelhante a Write Perfect Code with Pessimistic Development (20)

Code contract
Code contractCode contract
Code contract
 
TechCrunch Early Stage 2020 - How to prioritize security at your startup
TechCrunch Early Stage 2020 - How to prioritize security at your startupTechCrunch Early Stage 2020 - How to prioritize security at your startup
TechCrunch Early Stage 2020 - How to prioritize security at your startup
 
Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...
Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...
Global Windows Azure Bootcamp : Samuel et Emilien Pécoul, Florent Pelet Legac...
 
Debugging Javascript
Debugging JavascriptDebugging Javascript
Debugging Javascript
 
iOS Provisioning : Running your app in an iOS device
iOS Provisioning : Running your app in an iOS deviceiOS Provisioning : Running your app in an iOS device
iOS Provisioning : Running your app in an iOS device
 
Tdd is not about testing
Tdd is not about testingTdd is not about testing
Tdd is not about testing
 
Practical security in a DevOps World
Practical security in a DevOps WorldPractical security in a DevOps World
Practical security in a DevOps World
 
GWAB Lyon - Legacy code atelier
GWAB Lyon - Legacy code atelierGWAB Lyon - Legacy code atelier
GWAB Lyon - Legacy code atelier
 
Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?
 
Art of unit testing: how to do it right
Art of unit testing: how to do it rightArt of unit testing: how to do it right
Art of unit testing: how to do it right
 
Perfect product architecture in a non-stop start-up
Perfect product architecture in a non-stop start-upPerfect product architecture in a non-stop start-up
Perfect product architecture in a non-stop start-up
 
Code Contracts
Code ContractsCode Contracts
Code Contracts
 
Coding Naked 2023
Coding Naked 2023Coding Naked 2023
Coding Naked 2023
 
Codemotion rome 2015 bluemix lab tutorial -- Codemotion Rome 2015
Codemotion rome 2015   bluemix lab tutorial -- Codemotion Rome 2015Codemotion rome 2015   bluemix lab tutorial -- Codemotion Rome 2015
Codemotion rome 2015 bluemix lab tutorial -- Codemotion Rome 2015
 
Testing micro services using testkits
Testing micro services using testkitsTesting micro services using testkits
Testing micro services using testkits
 
Good code
Good codeGood code
Good code
 
Debugging Javascript - 0 to Heisenberg
Debugging Javascript - 0 to HeisenbergDebugging Javascript - 0 to Heisenberg
Debugging Javascript - 0 to Heisenberg
 
Appium_set_up
Appium_set_upAppium_set_up
Appium_set_up
 
Code Quality Practice and Tools
Code Quality Practice and ToolsCode Quality Practice and Tools
Code Quality Practice and Tools
 
Codemotion Rome 2015 Bluemix Lab Tutorial
Codemotion Rome 2015 Bluemix Lab TutorialCodemotion Rome 2015 Bluemix Lab Tutorial
Codemotion Rome 2015 Bluemix Lab Tutorial
 

Write Perfect Code with Pessimistic Development