SlideShare uma empresa Scribd logo
1 de 26
Q U A L I T Y
Learning - Measurement - Awareness
Super Heroes…
CodeMan



• There is also a super
  hero inside you!

• Being as a…
 Code Man
• Because you can
  CODE!!!



                    Note: the idea of CodeMan is borrowed from one of my ex-colleagues, Hasan
CodeMan has Super Responsibility



                              But…
       Super natural power comes with
           Super responsibility!

                           Because…

             Power without control
                 hardly has any value.
Responsibilities of a CodeMan




 Learn             how to control power

 Measure                 the quality of work

 Awareness for quality work
What is QUALITY ?

                Oxford American Dictionary says -
       the standard of something
   as measured against other things of a
                          similar kind.
   It is NOT easy to define Quality.


   ―You may not know how to define it,
   but you know it when you see it.‖
                    - Erik Doernenburg, Head of Technology, ThoughtWorks Europe
CodeMan – Story 1

- Manager asks CodeMan to upload his profile picture in Wiki.


- The CodeMan quickly uploads one of his photos.




 - Now, imagine the immediate reaction of the manager!!!
CodeMan – Story 2

The CodeMan wrote a method and committed it to VCS as soon as he tested it successfully:




Few months later, a critical bug is found in this code.

While going through the code, the second CodeMan hardly gets any idea what this piece of
code block is doing.


And the immediate reaction that pops up in his mind:      WTF !!!
Measuring Code Quality – WTFs / minute
Measuring Code Quality




     It is very important to measure the QUALITY of your CODE.

     If you don’t know whether your code quality is GOOD or BAD,
      then you can never improve your code.
Why Quality Code ?


Single purpose

Changeability – keeping your code changeable


3 key factors

Readability: only easily readable code can easily be understood and therefore
changed

―Programs MUST be written for people to read, and only incidentally for machines to
execute.‖ - Abelson and Sussman

Simplicity: simple is always easier to change than complicated

Testability: only automatically tested code can be changed without fear of breaking
existing behavior.
How to Improve CODE Quality?




     How can we improve our CODE
             QUALITY?

            How can we minimize
             the number of WTFs
                 in our CODE?
How to Improve CODE Quality?


  1. Code conventions

  2. KISS - keeping it stupid simple

  3. No RUSH

  4. Code reviews

  5. Pair programming

  6. Automatic build and deployment

  7. Incorporating QA process

  8. Improve your own quality
Code Conventions

 Every programming language has some set of guidelines.

 Things you should strictly follow:
   - Naming conventions




     -   Coding style guidelines
     -   Exception handling guidelines
     -   Unit testing principles
     -   Principles of object oriented design
   Configure your IDE, use necessary plugins. These tools eliminate the need for
    reviews focusing on coding style and basic design. They allow us to put our
    energy into higher concepts of quality.
KISS - Keep it Stupid Simple

Don’t build Rube Goldberg Machines – something complex to do simple things
KISS - Keep it Stupid Simple

    There are two ways of constructing a software design.
    One way is to make it so simple that there are obviously no deficiencies. And
    the other way is to make it so complicated that there are no obvious deficiencies

             - Sir Charles Antony Richard Hoare AKA Tony Hoare

KISS principles:

    1. Split your task into smaller subtasks

    2. Break down a complex problem into many smaller and simple problems

    3. Keep your methods small, should not more than 30~40 lines

    4. Keep your classes small – same methodology as for methods.
       Follow OOP principles.

    5. Solve the problem first, then code it.
Don’t be too clever , No RUSH


 Be not Clever too Clever
Clear, Clear, not


 Don’t code in a Hurry — ‖Haste is Waste‖

 Take your time to read the code and see if it is what you meant

 Take your time to write tests — make sure the code does what
  you meant, not what you typed

 Code defensively



      Act in haste and repent at leisure…
      Code too soon and debug forever…
Code Reviews

Periodic inspection of selected parts of the code.

Normally, only critical code should be reviewed extensively

Compare the code at hand with the clean code guidelines and other quality goals.

Everyone writes bad code from time to time, but having code reviews eliminates a lot
of it.

 Always try to be nice to your colleagues, and never think that you know better.
  Be humble since it's actually easy to be wrong about stuff. :-)

 Constructively propose changes.
  Say positive things, what you really like.
  Instead of ―that’s lousy long method‖ say, ―why don’t you split that method...‖

Code reviews doesn't only eliminate poor code written by team members (and
yourself), but is a great way to learn new things from each other.

Tools: Crucible, Sonar etc.
Code Reviews - Crucible
Code Reviews - Sonar
Pair Programming

 Pair programming is a key practice to quality.

 Advantages:

     1. The code is already reviewed by a second developer.

     2. The code is built with the combined technical excellence of two developers. This
        includes the advantages that it is more likely that alternatives are discussed and a
        better solution results than in the case of a single developer working on the task.

     3. Know-how is transferred between the pairing developers. Know-how about the
        problem domain, technical excellence and even tool usage is shared
Continuous Build and Deployment

Early build and deploy => Early discover bugs => Early Fix

Whenever a developer commits/checks-in code into the VCS, the
continuous integration server starts checking the code.


A typical scenario consists of

1.   building the source code,

2.   running all automated unit and acceptance tests,

3.   checking coding guidelines automatically as far as possible

4.   creating an installer package

5.   finally deploying the installer package of the application on a test
     system for additional manual testing.
Incorporating the QA process

Traditional software development process:

1) finish most of the developments first

2) then QA engineers start testing

But this doesn’t work:

1) QA engineers doesn’t get enough time

2) software is released with lots of untested
functionality

What actually works:

1) Incorporate QA process with
development

2) QA process starts as soon as a very small
functionality implemented.
Improve your own Quality

 Improve yourself first.

 Minimize the number of bugs.

   well, this a not a critical bug.
    I can fix it within few minutes.

 Ask 3 questions before fixing
  your bug:

    1. Have I made this error
       anywhere else?

    2. What happens when I fix the
       bug?

    3. How can I change my ways to
       make this kind of bug
       impossible?
3 Simple Tips



QUALITY should be possessed in your MIND,
                not only in your CODE.


QUALITY has to be possessed in your MIND,
                not only in your CODE.


 QUALITY must be possessed in your MIND,
                not only in your CODE.
THANK YOU


Ferdous Mahmud Shaon
Senior Consultant,
Professional Services, Vizrt
Email: fmshaon@vizrt.com
twitter: @fmshaon

Mais conteúdo relacionado

Destaque

ISO Induction
ISO InductionISO Induction
ISO Induction
lpiper88
 
Effective Java - Override clone() method judiciously
Effective Java - Override clone() method judiciouslyEffective Java - Override clone() method judiciously
Effective Java - Override clone() method judiciously
Ferdous Mahmud Shaon
 
Effective Java - Always override toString() method
Effective Java - Always override toString() methodEffective Java - Always override toString() method
Effective Java - Always override toString() method
Ferdous Mahmud Shaon
 
Awareness of qms
Awareness of qmsAwareness of qms
Awareness of qms
alabs
 

Destaque (18)

Quality control
Quality controlQuality control
Quality control
 
The new ISO 9001:2015
The new ISO 9001:2015The new ISO 9001:2015
The new ISO 9001:2015
 
ISO Induction
ISO InductionISO Induction
ISO Induction
 
Introduction to ISO 9001:2015
Introduction to ISO 9001:2015Introduction to ISO 9001:2015
Introduction to ISO 9001:2015
 
Management of document control
Management of document controlManagement of document control
Management of document control
 
5s game
5s game5s game
5s game
 
Qms kick off meeting ppt
Qms kick off meeting pptQms kick off meeting ppt
Qms kick off meeting ppt
 
Presentasi pt awareness iso 9000 & ohsas 18001
Presentasi pt awareness iso 9000 & ohsas 18001Presentasi pt awareness iso 9000 & ohsas 18001
Presentasi pt awareness iso 9000 & ohsas 18001
 
Effective Java - Override clone() method judiciously
Effective Java - Override clone() method judiciouslyEffective Java - Override clone() method judiciously
Effective Java - Override clone() method judiciously
 
ISO 9001:2015 Awareness Training
ISO 9001:2015 Awareness TrainingISO 9001:2015 Awareness Training
ISO 9001:2015 Awareness Training
 
Dasar k3
Dasar k3Dasar k3
Dasar k3
 
Effective Java - Always override toString() method
Effective Java - Always override toString() methodEffective Java - Always override toString() method
Effective Java - Always override toString() method
 
Iso 9001 qms implementation steps sterling rev00-240914
Iso 9001 qms  implementation steps sterling rev00-240914Iso 9001 qms  implementation steps sterling rev00-240914
Iso 9001 qms implementation steps sterling rev00-240914
 
Business Communcation
Business CommuncationBusiness Communcation
Business Communcation
 
Quality Matters: Staff induction presentation 2013-2014
Quality Matters: Staff induction presentation 2013-2014Quality Matters: Staff induction presentation 2013-2014
Quality Matters: Staff induction presentation 2013-2014
 
Awareness of qms
Awareness of qmsAwareness of qms
Awareness of qms
 
ISO Awareness Training
ISO Awareness TrainingISO Awareness Training
ISO Awareness Training
 
Quality Programs: Hurdles and Milestones for Health Systems and Their Employe...
Quality Programs: Hurdles and Milestones for Health Systems and Their Employe...Quality Programs: Hurdles and Milestones for Health Systems and Their Employe...
Quality Programs: Hurdles and Milestones for Health Systems and Their Employe...
 

Último

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
panagenda
 

Último (20)

1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 

Quality - Learning, Measurement & Awareness

  • 1. Q U A L I T Y Learning - Measurement - Awareness
  • 3. CodeMan • There is also a super hero inside you! • Being as a… Code Man • Because you can CODE!!! Note: the idea of CodeMan is borrowed from one of my ex-colleagues, Hasan
  • 4. CodeMan has Super Responsibility But… Super natural power comes with Super responsibility! Because… Power without control hardly has any value.
  • 5. Responsibilities of a CodeMan  Learn how to control power  Measure the quality of work  Awareness for quality work
  • 6. What is QUALITY ? Oxford American Dictionary says - the standard of something as measured against other things of a similar kind. It is NOT easy to define Quality. ―You may not know how to define it, but you know it when you see it.‖ - Erik Doernenburg, Head of Technology, ThoughtWorks Europe
  • 7. CodeMan – Story 1 - Manager asks CodeMan to upload his profile picture in Wiki. - The CodeMan quickly uploads one of his photos. - Now, imagine the immediate reaction of the manager!!!
  • 8. CodeMan – Story 2 The CodeMan wrote a method and committed it to VCS as soon as he tested it successfully: Few months later, a critical bug is found in this code. While going through the code, the second CodeMan hardly gets any idea what this piece of code block is doing. And the immediate reaction that pops up in his mind: WTF !!!
  • 9. Measuring Code Quality – WTFs / minute
  • 10. Measuring Code Quality  It is very important to measure the QUALITY of your CODE.  If you don’t know whether your code quality is GOOD or BAD, then you can never improve your code.
  • 11. Why Quality Code ? Single purpose Changeability – keeping your code changeable 3 key factors Readability: only easily readable code can easily be understood and therefore changed ―Programs MUST be written for people to read, and only incidentally for machines to execute.‖ - Abelson and Sussman Simplicity: simple is always easier to change than complicated Testability: only automatically tested code can be changed without fear of breaking existing behavior.
  • 12. How to Improve CODE Quality? How can we improve our CODE QUALITY? How can we minimize the number of WTFs in our CODE?
  • 13. How to Improve CODE Quality? 1. Code conventions 2. KISS - keeping it stupid simple 3. No RUSH 4. Code reviews 5. Pair programming 6. Automatic build and deployment 7. Incorporating QA process 8. Improve your own quality
  • 14. Code Conventions  Every programming language has some set of guidelines.  Things you should strictly follow: - Naming conventions - Coding style guidelines - Exception handling guidelines - Unit testing principles - Principles of object oriented design  Configure your IDE, use necessary plugins. These tools eliminate the need for reviews focusing on coding style and basic design. They allow us to put our energy into higher concepts of quality.
  • 15. KISS - Keep it Stupid Simple Don’t build Rube Goldberg Machines – something complex to do simple things
  • 16. KISS - Keep it Stupid Simple There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies - Sir Charles Antony Richard Hoare AKA Tony Hoare KISS principles: 1. Split your task into smaller subtasks 2. Break down a complex problem into many smaller and simple problems 3. Keep your methods small, should not more than 30~40 lines 4. Keep your classes small – same methodology as for methods. Follow OOP principles. 5. Solve the problem first, then code it.
  • 17. Don’t be too clever , No RUSH  Be not Clever too Clever Clear, Clear, not  Don’t code in a Hurry — ‖Haste is Waste‖  Take your time to read the code and see if it is what you meant  Take your time to write tests — make sure the code does what you meant, not what you typed  Code defensively Act in haste and repent at leisure… Code too soon and debug forever…
  • 18. Code Reviews Periodic inspection of selected parts of the code. Normally, only critical code should be reviewed extensively Compare the code at hand with the clean code guidelines and other quality goals. Everyone writes bad code from time to time, but having code reviews eliminates a lot of it.  Always try to be nice to your colleagues, and never think that you know better. Be humble since it's actually easy to be wrong about stuff. :-)  Constructively propose changes. Say positive things, what you really like. Instead of ―that’s lousy long method‖ say, ―why don’t you split that method...‖ Code reviews doesn't only eliminate poor code written by team members (and yourself), but is a great way to learn new things from each other. Tools: Crucible, Sonar etc.
  • 19. Code Reviews - Crucible
  • 20. Code Reviews - Sonar
  • 21. Pair Programming  Pair programming is a key practice to quality.  Advantages: 1. The code is already reviewed by a second developer. 2. The code is built with the combined technical excellence of two developers. This includes the advantages that it is more likely that alternatives are discussed and a better solution results than in the case of a single developer working on the task. 3. Know-how is transferred between the pairing developers. Know-how about the problem domain, technical excellence and even tool usage is shared
  • 22. Continuous Build and Deployment Early build and deploy => Early discover bugs => Early Fix Whenever a developer commits/checks-in code into the VCS, the continuous integration server starts checking the code. A typical scenario consists of 1. building the source code, 2. running all automated unit and acceptance tests, 3. checking coding guidelines automatically as far as possible 4. creating an installer package 5. finally deploying the installer package of the application on a test system for additional manual testing.
  • 23. Incorporating the QA process Traditional software development process: 1) finish most of the developments first 2) then QA engineers start testing But this doesn’t work: 1) QA engineers doesn’t get enough time 2) software is released with lots of untested functionality What actually works: 1) Incorporate QA process with development 2) QA process starts as soon as a very small functionality implemented.
  • 24. Improve your own Quality  Improve yourself first.  Minimize the number of bugs.  well, this a not a critical bug. I can fix it within few minutes.  Ask 3 questions before fixing your bug: 1. Have I made this error anywhere else? 2. What happens when I fix the bug? 3. How can I change my ways to make this kind of bug impossible?
  • 25. 3 Simple Tips QUALITY should be possessed in your MIND, not only in your CODE. QUALITY has to be possessed in your MIND, not only in your CODE. QUALITY must be possessed in your MIND, not only in your CODE.
  • 26. THANK YOU Ferdous Mahmud Shaon Senior Consultant, Professional Services, Vizrt Email: fmshaon@vizrt.com twitter: @fmshaon

Notas do Editor

  1. As you can see, this presentation is all about QUALITY.In this presentation, we will learn about quality,we will learn how to measure qualityfinally, we will try to grow our awareness on quality
  2. Tony Hoare is a British computer scientist best known for the development of Quicksort algorithm, one of the world's most widely used sorting algorithms.KISS strategies:Break down your tasks into sub tasks, that you think should take no longer than 4-12 hours to codeBreak down your problems into many small problems. Each problem should be able to be solved within one or a very few classesKeep your methods small, each method should never be more than 30-40 lines. Each method should only solve one little problem, not many uses cases. If you have a lot of conditions in your method, break these out into smaller methods.Keep your classes small, same methodology applies here as we described for methods.Solve the problem, then code it. Not the other way around. Many developers solve their problem while they are coding, and there is nothing wrong doing that. But I personally prefer the first option.If you follow these principles, then not only will this be easier to read and maintain, but you will find bugs a lot faster.
  3. 1. Don’t be clever, instead be clear