Upgrade to Pro — share decks privately, control downloads, hide ads and more …

動作するきれいなコード / Clean code that works - SeleniumConf Tokyo 2019

動作するきれいなコード / Clean code that works - SeleniumConf Tokyo 2019

SeleniumConf Tokyo 2019 基調講演

Clean code that works - How can we go there? - Takuto Wada | SeleniumConf Tokyo
https://youtube.com/watch?v=TEOqzl-dK38

"Clean code that works" means the sense of value and the goal of programmers. It is not easy to implement it from the beginning. In this speech, you will get to know how obstacles appear on the way to "Clean code that works" and how to resolve them. Also, I will reconfirm role and value of automation testing and refactoring.

Takuto Wada
PRO

April 18, 2019
Tweet

More Decks by Takuto Wada

Other Decks in Programming

Transcript

  1. ςετۦಈ։ൃ ͷ
    5BLVUP8BEB [email protected]

    "QS !4FMFOJVN$POG5PLZP
    $MFBODPEFUIBUXPSLT
    )PXDBOXFHPUIFSF

    View Slide

  2. #SeConfTokyo
    $BNFSBTBMMPXFE
    .BUFSJBMTBSFUPCFQVCMJTIFE
    5XFFUJOHXFMDPNFE
    )FMMP

    View Slide

  3. UXBEB
    [email protected]
    UXBEB
    5BLVUP8BEB

    View Slide

  4. 5BLVUP8BEB
    - Consultant
    - Programmer guided by tests
    - Loves FLOSS
    - Creator of power-assert-js

    View Slide

  5. 5IF#PPLT*XPSLFEPO

    View Slide

  6. l5IF8JME4BWBOOBI-JPOz.FNF

    View Slide

  7. View Slide

  8. assert(typeof item.id === 'strong')
    | | | |
    | | | false
    | | "foo"
    | Item{id:"foo",name:"bar"}
    "string"
    --- [string] 'strong'
    +++ [string] typeof item.id
    @@ -1,6 +1,6 @@
    str
    -o
    +i
    ng
    Representative work: power-assert-js
    IUUQTHJUIVCDPNQPXFSBTTFSUKTQPXFSBTTFSU

    View Slide

  9. -FUTHFUTUBSUFE

    View Slide

  10. View Slide

  11. l$MFBODPEFUIBUXPSLT JO3PO+F⒎SJFT
    QJUIZQISBTF JTUIFHPBMPG5FTU%SJWFO
    %FWFMPQNFOU 5%%
    $MFBODPEFUIBU
    XPSLTJTBXPSUIXIJMFHPBMGPSBXIPMF
    CVODIPGSFBTPOTz
    ᴷ,FOU#FDL
    5FTU%SJWFO%FWFMPQNFOUCZ&YBNQMF

    View Slide

  12. l$MFBODPEFUIBUXPSLTJTPVUPGUIF
    SFBDIPGFWFOUIFCFTUQSPHSBNNFST
    TPNFPGUIFUJNF BOEPVUPGUIFSFBDI
    PGNPTUQSPHSBNNFST MJLFNF
    NPTUPG
    UIFUJNF%JWJEFBOEDPORVFS CBCZz
    ᴷ,FOU#FDL
    5FTU%SJWFO%FWFMPQNFOUCZ&YBNQMF

    View Slide

  13. $MFBODPEFUIBUXPSLT
    $MFBODPEFUIBUXPSLT
    $MFBODPEFUIBUXPSLT

    View Slide

  14. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT

    View Slide

  15. Clean
    Dirty
    Doesn’t work Works
    Two Ways
    $MFBODPEFUIBUXPSLT

    View Slide

  16. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT

    View Slide

  17. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT

    View Slide

  18. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog

    View Slide

  19. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog
    Shame

    View Slide

  20. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog
    Vanity
    Shame

    View Slide

  21. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog
    Vanity
    Shame
    Perfectionism

    View Slide

  22. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog
    Vanity
    Shame
    Perfectionism
    Analysis
    Paralysis

    View Slide

  23. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT

    View Slide

  24. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT

    View Slide

  25. l%JWJEFBOEDPORVFS CBCZ
    'JSTUXFMMTPMWFUIFlUIBUXPSLTzQBSUPG
    UIFQSPCMFN
    5IFOXFMMTPMWFUIFlDMFBODPEFzQBSUz
    ᴷ,FOU#FDL
    5FTU%SJWFO%FWFMPQNFOUCZ&YBNQMF

    View Slide

  26. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT

    View Slide

  27. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog

    View Slide

  28. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog
    Laziness

    View Slide

  29. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog
    Laziness
    Impatience

    View Slide

  30. Clean
    Dirty
    Doesn’t work Works
    $MFBODPEFUIBUXPSLT
    Bog
    Laziness
    Impatience
    Fear

    View Slide

  31. l*GJUJTXPSLJOH EPO`UDIBOHFz
    IUUQTXXXqJDLSDPNQIPUPT!/

    View Slide

  32. &EJUBOE1SBZ

    View Slide

  33. $PWFSBOE.PEJGZ

    View Slide

  34. 7FSTJPO
    $POUSPM
    5FTUJOH
    "VUPNBUJPO
    5IF5ISFF1JMMBST

    View Slide

  35. 7FSTJPO$POUSPM

    View Slide

  36. 7FSTJPO$POUSPM

    View Slide

  37. 5FTUJOH

    View Slide

  38. $POUJOVPVT
    *OUFHSBUJPO
    9'%
    "VUPNBUJPO ࣗಈԽ
    "VUPOPNBUJPO ࣗಇԽ

    View Slide

  39. 5ISFFMFHHFETUPPM
    NFUBQIPS
    ©Artek ( http://www.artek.fi/ )

    View Slide

  40. Clean
    Dirty
    Doesn’t work Works
    The way we work
    $MFBODPEFUIBUXPSLT

    View Slide

  41. 3FGBDUPSJOH
    Refactoring (noun): a change made to the internal structure of
    software to make it easier to understand and cheaper to modify
    without changing its observable behavior.

    View Slide

  42. 5IF&OE

    View Slide

  43. Clean
    Dirty
    Doesn’t work Works
    l$ZDMFzNBUUFSTNPTU
    The way we work

    View Slide

  44. Red. Write a little test that doesn't
    work, and perhaps doesn't even
    compile at first.
    Green. Make the test work quickly,
    committing whatever sins necessary in
    the process.
    Refactor. Eliminate all of the
    duplication created in merely getting
    the test to work.

    View Slide

  45. Clean
    Dirty
    Doesn’t work Works
    5IF(PMEFODZDMFPG5%%
    Red
    Green
    Refactoring

    View Slide

  46. Clean
    Dirty
    Doesn’t work Works
    5IF(PMEFODZDMFPG5%%
    Red
    Green
    Refactoring
    Impatience

    View Slide

  47. "DVSTFPOUIFXPSElSFGBDUPSJOHz

    View Slide

  48. #JH3FGBDUPSJOH"DDPVOUBCJMJUZ

    View Slide

  49. Clean
    Dirty
    Doesn’t work Works
    %FWXJUIPVU3FGBDUPSJOH
    %FWXJUIPVU$MFBO$PEF
    Red
    Green

    View Slide

  50. Clean
    Dirty
    Doesn’t work Works
    %PO`UMFUSFGBDUPSJOHBMPOF
    Red
    Green
    Refactoring

    View Slide

  51. "HBJO$ZDMFNBUUFSTNPTU

    View Slide

  52. View Slide

  53. View Slide

  54. 8IZ 8IBU 8IP
    8IBUTIPVME
    JUCF
    )PXUPNBLF
    BOELFFQ
    UIFNDMFBO
    $POUJOVPVT
    %FMJWFSZ
    "DDFQUBODF
    5FTU
    6OJU5FTU
    #Z&JKJ*FOBHB

    View Slide

  55. 8IZ
    6OJU5FTUT

    View Slide

  56. Unit Integration E2E
    Scale
    Amount of
    Feedback
    Internal
    Quality
    External
    Quality

    View Slide

  57. External Quality:
    Correctness, Usability, Efficiency,
    Reliability, Integrity, Adaptability,
    Accuracy, Robustness
    Internal Quality:
    Maintainability, Flexibility, Portability,
    Re-usability, Readability, Testability,
    Understandability

    View Slide

  58. l"VUPNBUFE5FTU1ZSBNJEzCZ.JLF$PIO

    View Slide

  59. l5FTU4J[FTzBU(PPHMF
    IUUQTUFTUJOHHPPHMFCMPHDPNUFTUTJ[FTIUNM

    View Slide

  60. medium
    small
    large
    Define SML on your own

    View Slide

  61. l'*345z
    'JWFSVMFTPGDMFBOUFTUT

    View Slide

  62. 'BTU
    *OEFQFOEFOU
    3FQFBUBCMF
    4FMG7BMJEBUJOH
    5JNFMZ

    View Slide

  63. l"53*1z
    1SPQFSUJFTPG(PPE5FTUT

    View Slide

  64. "VUPNBUFE
    5IPSPVHI
    3FQFBUBCMF
    *OEFQFOEFOU
    1SPGFTTJPOBM

    View Slide

  65. *OUFSTFDUJPOPG
    '*345
    BOE
    "53*1

    View Slide

  66. 'BTU
    *OEFQFOEFOU
    3FQFBUBCMF
    4FMG7BMJEBUJOH
    5JNFMZ
    "VUPNBUFE
    5IPSPVHI
    3FQFBUBCMF
    *OEFQFOEFOU
    1SPGFTTJPOBM

    View Slide

  67. 'BTU
    *OEFQFOEFOU
    3FQFBUBCMF
    4FMG7BMJEBUJOH
    5JNFMZ
    "VUPNBUFE
    5IPSPVHI
    3FQFBUBCMF
    *OEFQFOEFOU
    1SPGFTTJPOBM

    View Slide

  68. ʰY6OJU5FTU1BUUFSOTʱ
    .BJOUFOBODF$PTU
    PG5FTUDPEF
    *EFBM
    3FBMJUZ

    View Slide

  69. The code you write for a unit test
    is real; some may argue it's even
    more real than the code you ship to
    customers.
    This means that it must be written
    and maintained to the same
    professional standards as your
    production code.
    Test code is real code.

    View Slide

  70. Clean
    Dirty
    Doesn’t work Works
    3FDBQ5IF(PMEFODZDMFPG5%%
    Red
    Green
    Refactoring

    View Slide

  71. TDD can't guarantee that we will have
    flashes of insight at the right
    moment.
    However, confidence-giving tests and
    carefully factored code give us
    preparation for insight, and
    preparation for applying that insight
    when it comes.
    ─ Kent Beck

    View Slide

  72. 5IBOLZPV
    [email protected]@QSPGFTTJPOBM

    View Slide