ใ‚ณใ‚คใƒณใฎ่ฃๅดใ€ใพใŸใฏๅ˜ไฝ“ใƒ†ใ‚นใƒˆใฎๆฌ ็‚นใซใคใ„ใฆ

ๅ‰ๆ›ธใ

ใ“ใ“ใจ Web ใฎไป–ใฎๅ ดๆ‰€ใฎไธกๆ–นใงใ€ไธ€่ˆฌ็š„ใช่‡ชๅ‹•ใƒ†ใ‚นใƒˆใ€็‰นใซๅ˜ไฝ“ใƒ†ใ‚นใƒˆใ‚’ไฟƒ้€ฒใ™ใ‚‹่จ˜ไบ‹ใŒใŸใใ•ใ‚“ใ‚ใ‚Šใพใ™ใ€‚ใ“ใฎ่จ˜ไบ‹ใงใฏใ€ใƒ†ใ‚นใƒˆใ‚’ไฝฟ็”จใ—ใฆ่„†ๅผฑใชใ‚ณใƒผใƒ‰ใ‚’ๅ‰Š้™คใ—ใ€ๅ“่ณชใ‚’ๅ‘ไธŠใ•ใ›ใ€ๅคใ„ใ‚ทใ‚นใƒ†ใƒ ใ‹ใ‚‰ๆ–ฐใ—ใ„ใ‚ทใ‚นใƒ†ใƒ ใซ็งป่กŒใ—ใ€ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใ™ใ‚‹ใ“ใจใฎๅˆฉ็‚นใซใคใ„ใฆ่ชฌๆ˜Žใ—ใฆใ„ใพใ™ใ€‚ใใ—ใฆๅŒๆ™‚ใซใ€ใใ‚Œใ‚‰ใฎๆฌ ็‚นใซใคใ„ใฆใฏใฉใ“ใซใ‚‚ใปใจใ‚“ใฉ่จ€ๅŠใ•ใ‚ŒใฆใŠใ‚‰ใšใ€ใ‚จใƒณใ‚ธใƒ‹ใ‚ขใƒชใƒณใ‚ฐใซใ€Œ้Š€ใฎๅผพไธธใ€ใฏใ‚ใ‚Šใพใ›ใ‚“!





ๅฎŸ้š›ใ€ใ€Œ้Š€ใฎๅผพไธธใ€ใŒใ‚ใ‚Šใพใ™ใŒใ€ใใ‚Œใ‚‰ใฏๆœ€ๅˆใฎใ‚จใƒณใ‚ธใƒ‹ใ‚ขใซใ‚ˆใฃใฆ็™บๆ˜Žใ•ใ‚Œใ€ใ€Œ้ฃŸในใ‚‹ๅ‰ใซๆ‰‹ใ‚’ๆด—ใ†ใ€ใ€ใ€Œ่ถณใ‚’ๆ‹ญใใ€ใ€ใ€Œใ‚ณใƒผใƒ‰ใ‚’ๆง‹้€ ๅŒ–ใ™ใ‚‹ใ€ใ€ใ€Œใ‚คใƒณใƒ‡ใƒณใƒˆใชใ—ใงๆ›ธใใชใ€ใ€ใ€Œใƒญใƒผใ‚ซใƒฉใ‚คใ‚บ็Šถๆ…‹ใ€ใชใฉใ€‚ใใ‚Œใซใ‚‚ใ‹ใ‹ใ‚ใ‚‰ใšใ€ใƒ†ใ‚นใƒˆใฏใ€Œ็‰นๅŠน่–ฌใ€ใงใฏใชใใ€ๆœ€ใ‚‚ๅŠนๆžœ็š„ใงๅบƒใไฝฟ็”จใ•ใ‚Œใฆใ„ใ‚‹ใƒ„ใƒผใƒซใฎ 1 ใคใงใ‚ใ‚Šใ€ๆฌ ็‚นใŒใ‚ใ‚‹ใ“ใจใ‚’ๆ„ๅ‘ณใ—ใพใ™ใ€‚





ใ“ใฎๆŠ•็จฟใงใฏใ€ใƒ†ใ‚นใƒˆใ€ไธปใซๅ˜ไฝ“ใƒ†ใ‚นใƒˆใฎๆฌ ็‚นใ‚’ๆง‹้€ ๅŒ–ใ—ใ€ๆญฃ็ขบใซๆ›ธใ็•™ใ‚ใ‚ˆใ†ใจใ—ใพใ™ใ€‚ใ“ใ‚Œใซใคใ„ใฆใฏใ™ใงใซๅคšใใฎ่ณ‡ๆ–™ใŒใ‚ใ‚‹ใŸใ‚ใ€ใƒกใƒชใƒƒใƒˆใซใคใ„ใฆใฏๆ›ธใ‹ใชใ„ใ‚ˆใ†ใซใ—ใพใ™ใ€‚ๆ‰‹ใ‚’ๅทฎใ—ไผธในใฆใใ ใ•ใ„ใ€‚ใ‚‚ใกใ‚ใ‚“ใ€ใฉใ“ใ‹ใงใฉใ†ใ—ใฆใ‚‚ๅคงไบ‹ใชใ“ใจใ‚’ๅฟ˜ใ‚Œใฆใ—ใพใ„ใพใ™ใ—ใ€ใฉใ“ใ‹ใงๅคงใ’ใ•ใซ่จ€ใ„้ŽใŽใฆใ—ใพใ„ใพใ™ใ€‚ใ—ใŸใŒใฃใฆใ€ใ“ใฎ่จ˜ไบ‹ใฏใ€ไฝ•ใ‹ใŒ็ต‚ใ‚ใฃใŸใจใ„ใ†ใ‚ˆใ‚Šใ‚‚ใ€่ฌ›ๆผ”ใธใฎๆ‹›ๅพ…็Šถใจ่€ƒใˆใฆใใ ใ•ใ„ใ€‚็งใฎ่ฆณ็‚นใ‹ใ‚‰ใฏใ€ใ“ใฎใƒˆใƒ”ใƒƒใ‚ฏใฏใ‹ใชใ‚Š็†Ÿใ—ใฆใ„ใ‚‹ใฎใงใ€่ฉณ็ดฐใซ่ญฐ่ซ–ใ—ใŸใ„ใจๆ€ใ„ใพใ™ใ€‚





ใชใœ้–ขๆ•ฐๅž‹ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใชใฎใ‹? ใใฎใŸใ‚ใ€ใปใผๆŽ’ไป–็š„ใซ้–ขๆ•ฐใ‚’ใƒ†ใ‚นใƒˆใ—ใพใ™ใ€‚





ๅนปๆƒณใ‚„33ใฎๆฑบใพใ‚Šๆ–‡ๅฅใซๅˆฅใ‚Œใ‚’ๅ‘Šใ’ใ‚‹

ไธ€่ˆฌใซใ€100% ใฎใƒ†ใ‚นใƒˆ ใ‚ซใƒใƒฌใƒƒใ‚ธใงใ•ใˆใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๆญฃใ—ใ„ๅ‹•ไฝœใŒไฟ่จผใ•ใ‚Œใชใ„ใ“ใจใฏๅ‘จ็Ÿฅใฎไบ‹ๅฎŸใงใ™ใ€‚ใŸใจใˆใฐใ€ๆฌกใฎใ‚ณใƒผใƒ‰ใ‚’่ฆ‹ใฆใฟใพใ—ใ‚‡ใ†ใ€‚





def f( a, b):
    x = 0
    if a:
        x += 2
    else:
        x += 0
    
    if b:
        x += 2
    else:
        x += 0

    return x

#   

assert f(True, False) == 2
assert f(False, True) == 2

      
      



ใ™ในใฆใฎใƒ–ใƒฉใƒณใƒใ‚’่ชฟในใพใ—ใŸใŒใ€ใ™ในใฆๅ•้กŒใ‚ใ‚Šใพใ›ใ‚“ใงใ—ใŸใŒใ€้–ขๆ•ฐ f ใฏๅธธใซ 2 ใ‚’่ฟ”ใ™ใ“ใจใ‚’่จผๆ˜Žใ—ใพใ—ใŸใ‹?





, , 100% , , , , , . - - . - , "" .





property-base testing: QuickCheck Haskell, GAST Clean, Kotlintest, QCheck Ocaml, Hypothesis Python' . . , : , .





, -, , . Geant4 "" (), " " ( ) ( 5 , ).





, , - - . , 20 000 , , โ€” 50 000 . , .





, property-based testing โ€” , , . QuickCheck John Hughes โ€” Building on developers' intuitions (...) | Lambda Days 19. , ...





, โ€” : , , . , .





, , : ?





propertyDoubleEq :: Double -> bool
propertyDoubleEq x = (x == x)
      
      



, - - , , , .





2 + 2 = 5? ?

, , , . Jef239.





, - , , . - , , , copy-paste:





string monthName(unsigned int n) {
    static vector<string> months = {"", "", ... };

    return months[n % months.size()];
}

void testMonthNames() {
    assert( monthName(0) == "");
    ...
}
      
      



, , "" . , , : , .





, - " ". , , , . , .





, , , . , , - !





, โ€” , .





- โ€”

, โ€” , . , โ€” , - , :





  1. - . , - , "" , , .





  2. - . , . , , , , .





  3. - , , (. 1). , , . , !





, , , , . . , , , . , , .





  1. - . , . , . -, , , .





โ€” , .





, , - โ€” , , .





- โ€”

, , . , , .





- , , , . , , , , - . :





  1. . , , โ€” , .. . write-check-correct loop โ€” , .



    , Ocaml โ€” , , - "" โ€” () . -, , .





  2. . - , - .





  3. CI - - CI , - , . , , , PR .





, - -. , .





- โ€”

, -, - , . , , , , . , , , , . - WindowMaker, Quake I, Heroes 2 , , . , TeX, , .





, -. , . , โ€” " , ".





, - , , . , , - . This does not add business value, right?





, โ€” , - - , , : . โ€” , , Python 2 Python 3 Boost, . , !





: , , - . .





, "" โ€” , , .





, . , . , , mutation testing, - .





, , - , , โ€” , , , . , , . , , , - .





, - โ€” , , . " โ€“ , , ".





" ", , , IDE , . , , - , . , , , , , . , , - , .





, , . , , . !








All Articles