ๅๆธใ
ใใใจ 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). , , . , !
, , , , . . , , , . , , .
- . , . , . -, , , .
โ , .
, , - โ , , .
- โ
, , . , , .
- , , , . , , , , - . :
. , , โ , .. . write-check-correct loop โ , .
, Ocaml โ , , - "" โ () . -, , .
. - , - .
CI - - CI , - , . , , , PR .
, - -. , .
- โ
, -, - , . , , , , . , , , , . - WindowMaker, Quake I, Heroes 2 , , . , TeX, , .
, -. , . , โ " , ".
, - , , . , , - . This does not add business value, right?
, โ , - - , , : . โ , , Python 2 Python 3 Boost, . , !
: , , - . .
, "" โ , , .
, . , . , , mutation testing, - .
, , - , , โ , , , . , , . , , , - .
, - โ , , . " โ , , ".
" ", , , IDE , . , , - , . , , , , , . , , - , .
, , . , , . !