ඔබ TDD හි “තාත්වික” කේතය ලියන්නේ කවදාද?


150

පුහුණු වීඩියෝවල මා කියවා දැක ඇති සියලුම උදාහරණ වලට සරල උදාහරණ ඇත. නමුත් මා නොදකින දේ මම කොළ පැහැයට ගත් පසු "සැබෑ" කේතය කරන්නේ කෙසේදැයි. මෙය "Refactor" කොටසද?

මා සතුව තරමක් සංකීර්ණ වස්තුවක් තිබේ නම්, මම මගේ පරීක්ෂණය සහ එය සමත් වීමට අවම අවම වශයෙන් ලියමි (එය මුලින් අසමත් වූ පසු රතු). මම ආපසු ගොස් සැබෑ කේතය ලියන්නේ කවදාද? නැවත පරීක්ෂා කිරීමට පෙර මා කොපමණ සත්‍ය කේතයක් ලියන්නේද? මම හිතන්නේ අන්තිම එක වඩා බුද්ධිමත් බව.

සංස්කරණය කරන්න: පිළිතුරු දුන් සැමට ස්තූතියි. ඔබගේ සියලු පිළිතුරු මට ඉමහත් උපකාරයක් විය. මා අසන හෝ ව්‍යාකූල වූ දේ සම්බන්ධයෙන් විවිධ අදහස් ඇති බව පෙනේ, සමහර විට තිබේ, නමුත් මා ඉල්ලා සිටියේ පාසල ඉදිකිරීම සඳහා මට අයදුම්පතක් ඇති බව පවසන්න.

මගේ සැලසුම තුළ, මට ආරම්භ කිරීමට අවශ්‍ය ගෘහ නිර්මාණ ශිල්පයක් ඇත, පරිශීලක කතන්දර, යනාදිය. මෙතැන් සිට, මම එම පරිශීලක කතන්දර ගෙන, පරිශීලක කතාව පරීක්ෂා කිරීම සඳහා පරීක්ෂණයක් නිර්මාණය කරමි. පරිශීලකයා පවසන්නේ, අපට පුද්ගලයින් පාසලට ඇතුළත් කර ලියාපදිංචි ගාස්තු ගෙවා ඇත. ඉතින්, මම හිතන්නේ එය අසාර්ථක වීමට ක්‍රමයක්. එසේ කිරීමෙන් මම 10 වන පන්තිය සඳහා පරීක්ෂණ පන්තියක් සැලසුම් කරමි (සමහර විට ශිෂ්‍ය), එය අසාර්ථක වනු ඇත. මම පසුව "ශිෂ්‍ය" පන්තිය නිර්මාණය කරමි. සමහර විට "පාසල" මම නොදනිමි.

කෙසේ වෙතත්, කෙසේ වෙතත්, TD නිර්මාණය මට කතාව හරහා සිතීමට බල කරයි. මට පරීක්ෂණයක් අසමත් වීමට හැකි නම්, එය අසමත් වීමට හේතුව මම දනිමි, නමුත් මෙය පූර්ව නිගමනය කරන්නේ මට එය සමත් විය හැකි බවයි. එය සැලසුම් කිරීම ගැන ය.

මම මෙය පුනරාවර්තනය ගැන සිතීමට සමාන කරමි. පුනරාවර්තනය දෘඩ සංකල්පයක් නොවේ. එය ඇත්ත වශයෙන්ම ඔබේ හිසෙහි තබා ගැනීම දුෂ්කර විය හැකි නමුත් යථාර්ථයේ දී, අමාරුම කොටස දැන ගැනීම, පුනරාවර්තනය "කැඩී ගිය විට", නැවැත්විය යුත්තේ කවදාද (මගේ මතය, ඇත්ත වශයෙන්ම.) එබැවින් මට නැවැත්විය යුතු දේ ගැන සිතා බැලිය යුතුය. පළමුව පුනරාවර්තනය. එය අසම්පූර්ණ ප්‍රතිසමයක් පමණක් වන අතර, එය පුනරාවර්තන එක් එක් පුනරාවර්තනය "සමත්" යැයි උපකල්පනය කරයි. නැවතත්, මතයක් පමණි.

ක්‍රියාත්මක කිරීමේදී පාසල දැකීමට අපහසුය. ඔබට සරල අංක ගණිතය භාවිතා කළ හැකි අර්ථයෙන් සංඛ්‍යාත්මක හා බැංකු ලෙජර “පහසු” වේ. මට + b හා ආපසු 0 යනාදිය දැකිය හැකිය. මිනිසුන්ගේ පද්ධතියක නම්, එය ක්‍රියාත්මක කරන්නේ කෙසේද යන්න පිළිබඳව මා වඩාත් සිතිය යුතුය. අසමත් වීම, සමත් වීම, ප්‍රතික්‍රියාකාරකය පිළිබඳ සංකල්පය මා සතුව ඇත (බොහෝ දුරට අධ්‍යයනය සහ මෙම ප්‍රශ්නය නිසා ය.)

මා නොදන්නා දේ පදනම් වී ඇත්තේ අත්දැකීම් නොමැතිකම මත බව මගේ මතයයි. නව ශිෂ්‍යයෙකු ලියාපදිංචි වීම අසමත් වන්නේ කෙසේදැයි මම නොදනිමි. යමෙකු අවසාන නම ටයිප් කර එය දත්ත සමුදායකට සුරැකීම අසමත් වන්නේ කෙසේදැයි මම නොදනිමි. සරල ගණිතය සඳහා +1 කරන්නේ කෙසේදැයි මම දනිමි, නමුත් පුද්ගලයෙකු වැනි ආයතන සමඟ, මම දත්ත ගබඩාවක අද්විතීය හැඳුනුම්පතක් හෝ වෙනත් අයෙකු නමක් ඇතුළත් කළ විට එය නැවත ලබා ගන්නේදැයි බැලීමට පමණක් පරීක්ෂා කරන්නේ දැයි මම නොදනිමි. දත්ත සමුදාය හෝ දෙකම හෝ නැත.

නැතහොත්, සමහර විට මෙයින් පෙනී යන්නේ මා තවමත් ව්‍යාකූල වී ඇති බවයි.


194
TDD පසු මිනිසුන් රාත්‍රියට ගෙදර යයි.
හොබ්ස්

14
ඔබ ලියූ කේතය සත්‍ය නොවන බව ඔබ සිතන්නේ ඇයි?
මොනිකාට හානි කිරීම නවත්වන්න

2
Ub රබර් ඩක් අනෙක් පිළිතුරු වලට වඩා වැඩි ය. මට විශ්වාසයි මම ඉක්මනින් එය යොමු කරන බව. එය තවමත් විදේශීය ය, නමුත් මම එය අත් නොහරිමි. ඔබ කියූ දෙයින් තේරුමක් ඇති විය. මම උත්සාහ කරන්නේ මගේ සන්දර්භය තුළ හෝ සාමාන්‍ය ව්‍යාපාර යෙදුමකින් එය අර්ථවත් කිරීමට ය. සමහර විට ඉන්වෙන්ටරි පද්ධතියක් හෝ ඒ හා සමාන ය. මම එය සලකා බැලිය යුතුයි. ඔබගේ කාලය ගැන මම ස්තූතිවන්ත වෙමි. ස්තූතියි.
ජොනී

1
පිළිතුරු දැනටමත් හිසට නියපොතු වලට පහර දී ඇත, නමුත් ඔබේ සියලු පරීක්ෂණ සමත් වන තාක් කල්, ඔබට නව පරීක්ෂණ / ක්‍රියාකාරීත්වයක් අවශ්‍ය නොවන තාක් කල්, ඔබ සතුව ඇති කේතය අවසන් වී ඇති බව උපකල්පනය කළ හැකිය, බාර් ලින්ටින්.
ඊඑස්ආර්

3
"මට සංකීර්ණ ක්‍රමයක් සහිත තරමක් සංකීර්ණ වස්තුවක් තිබේ" යන ප්‍රශ්නයේ ඇති විය හැකි ප්‍රශ්නයේ උපකල්පනයක් තිබේ. TDD හි ඔබ මුලින්ම ඔබේ පරීක්ෂණ ලියන්නේ එවිට ඔබ තරමක් සරල කේතයකින් ආරම්භ කරන්න. මොඩියුලය විය යුතු පරීක්ෂණ-හිතකාමී ව්‍යුහයක් කේත කිරීමට මෙය ඔබට බල කරයි. එබැවින් සරල වස්තූන් ඒකාබද්ධ කිරීමෙන් සංකීර්ණ හැසිරීම් නිර්මාණය වනු ඇත. ඔබ තරමක් සංකීර්ණ වස්තුවකින් හෝ ක්‍රමයකින් අවසන් වන්නේ නම් ඔබ ප්‍රතික්‍රියාකාරක කරන විට
බෝර්ජාබ්

Answers:


242

මා සතුව තරමක් සංකීර්ණ වස්තුවක් තිබේ නම්, මම මගේ පරීක්ෂණය සහ එය සමත් වීමට අවම අවම වශයෙන් ලියමි (එය මුලින් අසමත් වූ පසු රතු). මම ආපසු ගොස් සැබෑ කේතය ලියන්නේ කවදාද? නැවත පරීක්ෂා කිරීමට පෙර මා කොපමණ සත්‍ය කේතයක් ලියන්නේද? මම හිතන්නේ අන්තිම එක වඩා බුද්ධිමත් බව.

ඔබ "ආපසු ගොස්" "සැබෑ කේතය" ලියන්න එපා. ඒ සියල්ල සැබෑ කේතය. ඔබ කරන්නේ නව පරීක්ෂණය සමත් වීම සඳහා ඔබේ කේතය වෙනස් කිරීමට බල කරන තවත් පරීක්ෂණයක් එකතු කිරීමයි.

ඔබ නැවත පරීක්ෂා කිරීමට පෙර කොපමණ කේතයක් ලියන්නේද? කිසිවක් නැත. අසාර්ථක පරීක්ෂණයකින් තොරව ඔබ ශුන්‍ය කේතය ලියන්නේ වැඩි කේතයක් ලිවීමට බල කරයි.

රටාව සැලකිල්ලට ගන්න?

එය උපකාරී වේ යැයි බලාපොරොත්තුවෙන් (තවත්) සරල උදාහරණයක් හරහා ගමන් කරමු.

Assert.Equal("1", FizzBuzz(1));

පහසු පීසි.

public String FizzBuzz(int n) {
    return 1.ToString();
}

ඔබ සැබෑ කේතය ලෙස හඳුන්වන දේ නොවේද? වෙනසක් සඳහා බල කරන පරීක්ෂණයක් එකතු කරමු.

Assert.Equal("2", FizzBuzz(2));

අපට මෝඩ දෙයක් කළ හැකිය if n == 1, නමුත් අපි නිවැරදි විසඳුම වෙත යමු.

public String FizzBuzz(int n) {
    return n.ToString();
}

සිසිල්. මෙය සියලු FizzBuzz නොවන අංක සඳහා ක්‍රියා කරනු ඇත. නිෂ්පාදන කේතය වෙනස් කිරීමට බල කරන ඊළඟ ආදානය කුමක්ද?

Assert.Equal("Fizz", FizzBuzz(3));

public String FizzBuzz(int n) {
    if (n == 3)
        return "Fizz";
    return n.ToString();
}

නැවතත්. තවම සමත් නොවන පරීක්ෂණයක් ලියන්න.

Assert.Equal("Fizz", FizzBuzz(6));

public String FizzBuzz(int n) {
    if (n % 3 == 0)
        return "Fizz";
    return n.ToString();
}

අපි දැන් තුනේ ගුණනය ආවරණය කර ඇත්තෙමු (ඒවා පහේ ගුණකයක් ද නොවේ, අපි එය සටහන් කර නැවත පැමිණෙමු).

අපි තවමත් "Buzz" සඳහා පරීක්ෂණයක් ලියා නැත, එබැවින් අපි එය ලියමු.

Assert.Equal("Buzz", FizzBuzz(5));

public String FizzBuzz(int n) {
    if (n % 3 == 0)
        return "Fizz";
    if (n == 5)
        return "Buzz"
    return n.ToString();
}

නැවතත්, අපි හැසිරවිය යුතු තවත් සිද්ධියක් ඇති බව අපි දනිමු.

Assert.Equal("Buzz", FizzBuzz(10));

public String FizzBuzz(int n) {
    if (n % 3 == 0)
        return "Fizz";
    if (n % 5 == 0)
        return "Buzz"
    return n.ToString();
}

දැන් අපට 3 න් ගුණ කළ නොහැකි 5 න් ගුණ කළ හැකිය.

මෙම අවස්ථාව දක්වා, අපි ප්‍රතිනිර්මාණය කිරීමේ පියවර නොසලකා හැර ඇත, නමුත් මට යම් අනුපිටපතක් පෙනේ. දැන් එය පිරිසිදු කරමු.

private bool isDivisibleBy(int divisor, int input) {
    return (input % divisor == 0);
}

public String FizzBuzz(int n) {
    if (isDivisibleBy(3, n))
        return "Fizz";
    if (isDivisibleBy(5, n))
        return "Buzz"
    return n.ToString();
}

සිසිල්. දැන් අපි අනුපිටපත ඉවත් කර හොඳින් නම් කරන ලද ශ්‍රිතයක් නිර්මාණය කර ඇත්තෙමු. කේතය වෙනස් කිරීමට අපට බල කරන ඊළඟ පරීක්ෂණය කුමක්ද? හොඳයි, අපි 3 සහ 5 යන දෙකින්ම බෙදිය හැකි නඩුවෙන් වැළකී සිටිමු. දැන් එය ලියමු.

Assert.Equal("FizzBuzz", FizzBuzz(15));

public String FizzBuzz(int n) {
    if (isDivisibleBy(3, n) && isDivisibleBy(5, n))
        return "FizzBuzz";
    if (isDivisibleBy(3, n))
        return "Fizz";
    if (isDivisibleBy(5, n))
        return "Buzz"
    return n.ToString();
}

පරීක්ෂණ සමත් වුවද අපට තවත් අනුපිටපත් ඇත. අපට විකල්ප ඇත, නමුත් මම නැවත ලිවීම වෙනුවට ප්‍රතිනිර්මාණය කිරීම සඳහා කිහිප වතාවක් “දේශීය විචල්‍යය උපුටා ගැනීම” යෙදීමට යන්නෙමි.

public String FizzBuzz(int n) {

    var isDivisibleBy3 = isDivisibleBy(3, n);
    var isDivisibleBy5 = isDivisibleBy(5, n);

    if ( isDivisibleBy3 && isDivisibleBy5 )
        return "FizzBuzz";
    if ( isDivisibleBy3 )
        return "Fizz";
    if ( isDivisibleBy5 )
        return "Buzz"
    return n.ToString();
}

අපි සෑම සාධාරණ ආදානයක්ම ආවරණය කර ඇත්තෙමු, නමුත් අසාධාරණ ආදානය ගැන කුමක් කිව හැකිද? අප 0 හෝ negative ණ සමත් වුවහොත් කුමක් සිදුවේද? එම පරීක්ෂණ අවස්ථා ලියන්න.

public String FizzBuzz(int n) {

    if (n < 1)
        throw new InvalidArgException("n must be >= 1);

    var isDivisibleBy3 = isDivisibleBy(3, n);
    var isDivisibleBy5 = isDivisibleBy(5, n);

    if ( isDivisibleBy3 && isDivisibleBy5 )
        return "FizzBuzz";
    if ( isDivisibleBy3 )
        return "Fizz";
    if ( isDivisibleBy5 )
        return "Buzz"
    return n.ToString();
}

මෙය තවමත් "තාත්වික කේතය" ලෙස පෙනෙන්නට පටන් ගෙන තිබේද? වැදගත්ම දෙය නම්, එය “යථාර්ථවාදී නොවන කේතය” වීම සහ “සැබෑ” බවට මාරුවීම නතර කළේ කුමන අවස්ථාවේදීද? එය මෙනෙහි කළ යුතු දෙයක් ...

ඒ නිසා, සෑම පියවරකදීම සමත් නොවන බව මා දන්නා පරීක්ෂණයක් සොයමින් මට මෙය සරලවම කිරීමට හැකි විය, නමුත් මට බොහෝ පුහුණුවීම් තිබේ. මම රැකියාවෙහි යෙදී සිටින විට, දේවල් මෙතරම් සරල නොවන අතර වෙනසක් කිරීමට බල කරන්නේ කුමන පරීක්ෂණයදැයි මම සැමවිටම නොදනිමි. සමහර විට මම පරීක්ෂණයක් ලියන අතර එය දැනටමත් සමත් වී ඇති බව දැක පුදුම වනු ඇත! ඔබ ආරම්භ කිරීමට පෙර "පරීක්ෂණ ලැයිස්තුවක්" නිර්මාණය කිරීමේ පුරුද්ද ඇති කර ගැනීමට මම තරයේ නිර්දේශ කරමි. මෙම පරීක්ෂණ ලැයිස්තුවේ ඔබට සිතිය හැකි සියලු "සිත්ගන්නා" යෙදවුම් අඩංගු විය යුතුය. ඔබ ඒවා සියල්ලම භාවිතා නොකරනු ඇති අතර ඔබ යන විට ඔබ අවස්ථා එකතු කරනු ඇත, නමුත් මෙම ලැයිස්තුව මාර්ග සිතියමක් ලෙස සේවය කරයි. FizzBuzz සඳහා මගේ පරීක්ෂණ ලැයිස්තුව මේ වගේ දෙයක් වනු ඇත.

  • සෘණ
  • බිංදුව
  • එක
  • දෙක
  • තුන්
  • සිව්
  • පහ
  • හය (සුළු නොවන 3 ගුණකය)
  • නවය (වර්ග 3)
  • දහය (සුළු නොවන බහු ගුණ 5)
  • 15 (3 සහ 5 න් ගුණ කිරීම)
  • 30 (3 සහ 5 හි සුළු නොවන ගුණකය)

3
අදහස් දීර් discussion සාකච්ඡාවක් සඳහා නොවේ; මෙම සංවාදය චැට් කිරීමට ගෙන ගොස් ඇත .
maple_shaft

47
මම මෙම පිළිතුර මුළුමනින්ම වරදවා වටහා නොගත්තොත්: "අපට n == 1 වැනි මෝඩ දෙයක් කළ හැකිය, නමුත් අපි නිවැරදි විසඳුම වෙත යමු." - ඔක්කොම මෝඩයි. ඔබ ඉදිරියෙන් දන්නවා නම් ඔබට <spec> කරන ශ්‍රිතයක් අවශ්‍ය නම්, <spec> සඳහා පරීක්ෂණ ලියන්න සහ ඔබ පැහැදිලිවම අසමත් වන අනුවාදයන් ලියන කොටස මඟ හරින්න <spec>. ඔබ <spec> හි දෝෂයක් සොයා ගන්නේ නම්, නිසැකවම: නිවැරදි කිරීමට පෙර ඔබට එය ව්‍යායාම කළ හැකි බව තහවුරු කර ගැනීම සඳහා පළමුව පරීක්ෂණයක් ලියන්න. නමුත් මේ සියලු අතරමැදි පියවර ව්‍යාජ කිරීමට අවශ්‍ය නැත.
GManNickG

16
මෙම පිළිතුරේ ඇති ප්‍රධාන අඩුපාඩු පෙන්වා දෙන අදහස් සහ පොදුවේ TDD කතාබස් කිරීමට යොමු කර ඇත. ඔබ TDD භාවිතා කිරීමට අදහස් කරන්නේ නම්, කරුණාකර 'චැට්' කියවන්න. අවාසනාවට, අනාගත සිසුන්ට කියවීම සඳහා 'ගුණාත්මක' අදහස් දැන් විශාල කතාබහක් අතර සැඟවී ඇත.
user3791372

2
@GManNickG මම විශ්වාස කරන්නේ කාරණය වන්නේ නිවැරදි පරීක්ෂණ ප්‍රමාණයක් ලබා ගැනීමයි. පරීක්ෂණ කල්තියා ලිවීමෙන් පරීක්‍ෂා කළ යුතු විශේෂ අවස්ථා අතපසු වීම පහසු වන අතර, එක්කෝ පරීක්‍ෂණ වලදී ප්‍රමාණවත් ලෙස ආවරණය නොවීම හෝ මූලික වශයෙන් එකම අවස්ථාව පරීක්‍ෂණයන්හිදී අර්ථ විරහිතව ආවරණය වන අවස්ථා වලට මග පාදයි. මෙම අතරමැදි පියවර නොමැතිව ඔබට එය කළ හැකි නම්, නියමයි! සෑම කෙනෙකුටම තවමත් එසේ කළ නොහැක, එය ප්‍රායෝගිකව ගත යුතු දෙයකි.
hvd

2
ප්‍රතිචක්‍රීකරණය පිළිබඳ කෙන්ට් බෙක්ගේ උපුටා දැක්වීමක් මෙන්න: "දැන් පරීක්ෂණය ක්‍රියාත්මක වන විට, අපට (" සැබෑ කරන්න "මෙන්) සාරාංශය () ක්‍රියාත්මක කිරීම අවබෝධ කර ගත හැකිය . ඉන්පසු ඔහු නියතයක් විචල්‍යයකට වෙනස් කරයි. මෙම උපුටා දැක්වීම ප්‍රශ්නයට හොඳින් ගැලපෙන බව මට හැඟුණි.
ක්‍රිස් වොලර්ට්

46

"සැබෑ" කේතය යනු ඔබේ පරීක්ෂණය සමත් වීමට ඔබ ලියන කේතයයි. ඇත්තටම . එය එතරම් සරල ය.

පරීක්ෂණය හරිත බවට පත් කිරීම සඳහා අවම වශයෙන් ලිවීම ගැන මිනිසුන් කතා කරන විට, එයින් අදහස් වන්නේ ඔබේ සැබෑ කේතය YAGNI මූලධර්මය අනුගමනය කළ යුතු බවයි .

ප්‍රතික්‍රියාකාරක පියවර පිළිබඳ අදහස නම්, ඔබ ලියා ඇති දේ අවශ්‍යතා සපුරාලීම ගැන සතුටු වූ පසු එය පිරිසිදු කිරීමයි.

ඔබ ලියන පරීක්ෂණ ඇත්ත වශයෙන්ම ඔබේ නිෂ්පාදන අවශ්‍යතා සපුරාලන තාක් කල්, ඒවා සමත් වූ පසු කේතය සම්පූර්ණයි. ඒ ගැන සිතා බලන්න, ඔබේ ව්‍යාපාර අවශ්‍යතා සියල්ලටම පරීක්ෂණයක් තිබේ නම් සහ එම පරීක්ෂණ සියල්ලම හරිත නම්, ලිවීමට තවත් කුමක් තිබේද? (හරි, සැබෑ ජීවිතයේ දී අපට සම්පූර්ණ පරීක්ෂණ ආවරණයක් නැඹුරු නොවේ, නමුත් න්‍යාය හොඳ ය.)


45
ඒකක පරීක්ෂණවලට ඔබේ නිෂ්පාදන අවශ්‍යතා සාපේක්ෂව සුළු අවශ්‍යතා සඳහා පවා ඇතුළත් කළ නොහැක. හොඳම දෙය නම්, ඔවුන් ආදාන-ප්‍රතිදාන අවකාශය නියැදි කරන අතර අදහස නම් ඔබ (නිවැරදිව) සම්පූර්ණ ආදාන-ප්‍රතිදාන අවකාශයට සාමාන්‍යකරණය කිරීමයි. ඇත්ත වශයෙන්ම, ඔබේ කේතය switchසෑම ඒකක පරීක්ෂණයකටම වඩා විශාල විය හැකි අතර එය සියලු පරීක්ෂණ සමත් වන අතර වෙනත් යෙදවුම් සඳහා අසමත් වේ.
ඩෙරෙක් එල්කින්ස් SE

9
EDerekElkins TDD මඟින් පරීක්ෂණ අසමත් වේ. ඒකක පරීක්ෂණ අසමත් නොවේ.
ටේමිර්

7
@ ඩෙරෙක් එල්කින්ස් ඔබ ඒකක පරීක්ෂණ පමණක් ලිවීමට අකමැති වන්නේ ඇයිද යන්නත්, සාමාන්‍ය දෙයක් උපකල්පනය කරන්නේ ඇයි ඔබ එය ව්‍යාජ එකක් නොවීමට උත්සාහ කරන බවටත්!
jonrsharpe

36
on ජෝන්ෂාර්ප් එම තර්කනය අනුව, මම කිසි විටෙකත් සුළු සුළු ක්‍රියාත්මක කිරීම් ලියන්නේ නැත. උදා: රබර්ඩක්ගේ පිළිතුරෙහි ඇති FizzBuzz උදාහරණයේ (ඒකකය භාවිතා කරන්නේ ඒකක පරීක්ෂණ පමණි), පළමු ක්‍රියාත්මක කිරීම පැහැදිලිවම “එය ව්‍යාජයි”. ප්‍රශ්නය පිළිබඳ මගේ අවබෝධය හරියටම අසම්පූර්ණ බව ඔබ දන්නා ලිවීමේ කේතය සහ මෙම අවශ්‍යතාවය “සැබෑ කේතය” ක්‍රියාත්මක කරනු ඇතැයි ඔබ අවංකවම විශ්වාස කරන කේතය අතර ඇති ද්විභාෂාවයි. මගේ "ලොකු switch" යන්නෙන් අදහස් කෙරුණේ "පරීක්ෂණ හරිත බවට පත් කිරීම සඳහා අවම අවම වශයෙන් ලිවීමේ" තාර්කික අන්තයකි. OP හි ප්‍රශ්නය ලෙස මම සලකන්නේ: TDD හි මෙම විශාලත්වය වළක්වන මූලධර්මය කොහිද switch?
ඩෙරෙක් එල්කින්ස් SE

2
En ජෙනරික් ජෝන් එය මගේ අත්දැකීම්වල තරමක් ශුභවාදී ය :) එකක් නම්, සිහිසුන්ව නැවත නැවත වැඩ කරන අය සිටිති. "සංකීර්ණ තීරණ ගැනීමකට" වඩා යෝධ ස්විච් ප්‍රකාශයකින් ඔවුන් සතුටු වනු ඇත. ඔවුන්ගේ රැකියාව අහිමි වීමට නම්, ඔවුන්ට තාක්‍ෂණය ගැන කතා කරන අයෙකු අවශ්‍ය වනු ඇත (තවද ඔවුන්ට හොඳ අවස්ථා තිබේ නම් එය ඇත්ත වශයෙන්ම සමාගමේ අවස්ථා / මුදල් අහිමි වන බව!), හෝ සුවිශේෂී ලෙස නරක ලෙස කරන්න. එවැනි බොහෝ ව්‍යාපෘතිවල නඩත්තු කටයුතු භාර ගැනීමෙන් පසු, පාරිභෝගිකයා සතුටු කරන (සහ ගෙවන) තාක් කල්, ඉතා අ ාන කේතයක් දශක ගණනාවක් තිස්සේ පැවතීම පහසු බව මට පැවසිය හැකිය.
ලුවාන්

14

කෙටි පිළිතුර නම් “තාත්වික කේතය” යනු පරීක්ෂණය සමත් වන කේතයයි. සැබෑ කේතය හැර වෙනත් දෙයක් සමඟ ඔබේ පරීක්ෂණය සමත් කළ හැකි නම්, තවත් පරීක්ෂණ එකතු කරන්න!

TDD පිළිබඳ බොහෝ නිබන්ධන සරල බව මම එකඟ වෙමි. එය ඔවුන්ට එරෙහිව ක්‍රියාත්මක වේ. 3 + 8 ගණනය කරන ක්‍රමයක් සඳහා ඉතා සරල පරීක්ෂණයක් ඇත්ත වශයෙන්ම 3 + 8 ගණනය කර ප්‍රති .ලය සංසන්දනය කිරීම හැර වෙනත් විකල්පයක් නැත. එමඟින් ඔබ කේතය අනුපිටපත් කරන බවක් පෙනේ, එම පරීක්ෂණය තේරුමක් නැති, දෝෂ සහිත අමතර වැඩකි.

ඔබ පරීක්‍ෂා කිරීමට දක්ෂ වූ විට, එය ඔබගේ යෙදුම සැකසෙන ආකාරය සහ ඔබේ කේතය ලියන ආකාරය දැනුම් දෙනු ඇත. සංවේදී, ප්‍රයෝජනවත් පරීක්ෂණ ඉදිරිපත් කිරීමට ඔබට ගැටලුවක් තිබේ නම්, ඔබ බොහෝ විට ඔබේ සැලසුම ගැන නැවත සිතා බැලිය යුතුය. හොඳින් සැලසුම් කරන ලද පද්ධතියක් පරීක්ෂා කිරීම පහසුය - අර්ථවත් සංවේදී පරීක්ෂණ සිතීමට සහ ක්‍රියාත්මක කිරීමට පහසුය.

ඔබ පළමුව ඔබේ පරීක්ෂණ ලියන විට, ඒවා අසමත් වන ආකාරය බලා ඒවා සමත් වන කේතය ලියන්න, එය ඔබගේ සියලු කේත වලට අනුරූප පරීක්ෂණ ඇති බව සහතික කිරීම සඳහා වූ විනයකි. මම කේත කරන විට මම එම නීතිය වහල් ලෙස අනුගමනය නොකරමි; බොහෝ විට මම පරීක්ෂණ ලියන්නේ කාරණයෙන් පසුවය. නමුත් පළමුව පරීක්ෂණ කිරීමෙන් ඔබ අවංකව සිටීමට උපකාරී වේ. යම් අත්දැකීමක් සමඟ, ඔබ මුලින්ම පරීක්ෂණ ලියන්නේ නැති විට පවා, ඔබ කෙළවරකට කේත කරන විට ඔබ දැකීමට පටන් ගනී.


6
පුද්ගලිකව, මම ලියන පරීක්ෂණය වනු ඇත assertEqual(plus(3,8), 11), නැත assertEqual(plus(3,8), my_test_implementation_of_addition(3,8)). වඩාත් සංකීර්ණ අවස්ථාවන් සඳහා, ඔබ සෑම විටම පරීක්ෂණයේ නිවැරදි ප්‍රති result ලය ගතිකව ගණනය කිරීම සහ සමානාත්මතාවය පරීක්ෂා කිරීම හැර, ප්‍රති result ලය නිවැරදි බව ඔප්පු කිරීමේ මාධ්‍යයක් සොයයි .
ස්ටීව් ජෙසොප්

එබැවින් මෙම උදාහරණය සඳහා එය ඉතා මෝඩ ක්‍රමයක් සඳහා, එයින් plus(3,8)3 ක් අඩු කිරීමෙන්, එයින් 8 ක් අඩු කිරීමෙන් සහ 0 ට එරෙහිව ප්‍රති result ලය පරික්ෂා කිරීමෙන් නිවැරදි ප්‍රති result ලය ලැබී ඇති බව ඔබට ඔප්පු කළ හැකිය. මෙය පැහැදිලිවම assertEqual(plus(3,8), 3+8)a ට සමාන වේ ටිකක් විකාරයකි, නමුත් පරීක්ෂණයට ලක්ව ඇති කේතය පූර්ණ සංඛ්‍යාවකට වඩා සංකීර්ණ යමක් ගොඩනගන්නේ නම්, ප්‍රති result ලය ලබාගෙන සෑම කොටසක්ම නිවැරදි බව පරීක්ෂා කිරීම බොහෝ විට නිවැරදි ප්‍රවේශය වේ. විකල්පයක් ලෙස, වගේ දෙයක්for (i=0, j=10; i < 10; ++i, ++j) assertEqual(plus(i, 10), j)
ස්ටීව් Jessop

... එමඟින් විශාල බිය මඟහරවා ගත හැකි අතර, එනම්, පරීක්ෂණය ලිවීමේදී අපි සජීවී කේතයේ සිදු කළ "10 එකතු කරන්නේ කෙසේද" යන මාතෘකාව සම්බන්ධයෙන් එකම වැරැද්ද සිදු කරනු ඇත. එබැවින් පරීක්ෂණයට ඕනෑම දෙයකට 10 ක් එකතු කරන ඕනෑම කේතයක් ලිවීමෙන් වැළකී plus()සිටියි. ඇත්ත වශයෙන්ම අපි තවමත් ක්‍රමලේඛක-සත්‍යාපිත intial loop අගයන් මත රඳා සිටිමු.
ස්ටීව් ජෙසොප්

4
පෙන්වා දීමට අවශ්‍ය වන්නේ ඔබ සත්‍යයෙන් පසුව පරීක්ෂණ ලිවුවද, ඒවා අසාර්ථක වීම නැරඹීම තවමත් හොඳ අදහසකි; ඔබ වැඩ කරන ඕනෑම දෙයකට තීරණාත්මක යැයි පෙනෙන කේතයේ යම් කොටසක් සොයා ගන්න, එය ටිකක් කරකවන්න (උදා: a + වෙනුවට a -, හෝ වෙනත් දෙයක් ආදේශ කරන්න), පරීක්ෂණ ධාවනය කර ඒවා අසමත් වීම, වෙනස අහෝසි කර ඒවා පසුකර යන ආකාරය බලන්න. බොහෝ විට මම මෙය සිදු කර ඇති අතර එය ඇත්ත වශයෙන්ම අසමත් නොවන අතර එය නිෂ් less ලකමට වඩා නරක කරයි: එය කිසිවක් පරීක්ෂා නොකිරීම පමණක් නොව, යමක් පරීක්ෂා කරනු ලබන බවට එය මට වැරදි විශ්වාසයක් ලබා දෙයි!
වෝර්බෝ

6

සමහර විට TDD පිළිබඳ සමහර උදාහරණ නොමඟ යවන සුළු විය හැකිය. වෙනත් පුද්ගලයින් කලින් පෙන්වා දී ඇති පරිදි, පරීක්ෂණ සමත් වීමට ඔබ ලියන කේතය සැබෑ කේතය වේ.

නමුත් සැබෑ කේතය මැජික් මෙන් පෙනේ යැයි සිතන්න එපා - එය වැරදියි. ඔබට සාක්ෂාත් කර ගැනීමට අවශ්‍ය දේ පිළිබඳ වඩා හොඳ අවබෝධයක් ඔබට අවශ්‍ය වන අතර ඒ අනුව ඔබ ඒ අනුව පරීක්ෂණය තෝරා ගත යුතුය.

නිදසුනක් ලෙස, ඔබට ලෙක්සර් එකක් ලිවීමට අවශ්‍ය නම්, ඔබ ආරම්භ කරන්නේ හිස් නූලකින්, පසුව සුදු පැහැති පොකුරකින්, පසුව අංකයකින්, පසුව සුදු පැහැති අවකාශ වලින් වට වූ සංඛ්‍යාවක් සමඟ, පසුව වැරදි අංකයක් යනාදියෙනි. මෙම කුඩා පරිවර්තනයන් ඔබව යොමු කරයි නිවැරදි ඇල්ගොරිතම, නමුත් සැබෑ කේතය ලබා ගැනීම සඳහා ඔබ ඉතා පහසු නඩුවේ සිට ඉතා සංකීර්ණ නඩුවකට ගොළු ලෙස තෝරා නොගනී.

බොබ් මාටින් එය මෙහි පරිපූර්ණ ලෙස පැහැදිලි කරයි .


5

ඔබ වෙහෙසට පත්ව නිවසට යාමට අවශ්‍ය වූ විට ප්‍රතික්‍රියාකාරක කොටස පිරිසිදු වේ.

ඔබ අංගයක් එක් කිරීමට සූදානම් වන විට ඊළඟ පරීක්ෂණයට පෙර ඔබ වෙනස් කරන්නේ ප්‍රතික්‍රියාකාරක කොටසයි. නව අංගයට ඉඩක් ලබා දීම සඳහා ඔබ කේතය නැවත සකස් කරන්න. ඔබ මෙය කරන්නේ එම නව අංගය කුමක් දැයි ඔබ දැනගත් විට ය. ඔබ එය මවා ගන්නා විට නොවේ.

"හායි අම්මා" මුද්‍රණය කරන අංගයක් එක් කිරීම GreetImplසඳහා GreetWorldඔබ GreetMomපන්තියක් නිර්මාණය කිරීමට පෙර (පරීක්ෂණයක් එකතු කිරීමෙන් පසුව) නම් කිරීම තරම් මෙය සරල විය හැකිය .


1

නමුත් සත්‍ය කේතය TDD අවධියේ ප්‍රතික්‍රියාකාරක අවධියේදී දිස්වනු ඇත. අවසාන නිකුතුවේ කොටසක් විය යුතු කේතය.

ඔබ වෙනසක් සිදු කරන සෑම අවස්ථාවකම පරීක්ෂණ ක්‍රියාත්මක කළ යුතුය.

TDD ජීවන චක්‍රයේ ආදර්ශ පා be ය වනුයේ: රතු හරිත ප්‍රතික්‍රියාකාරකය

රතු : පරීක්ෂණ ලියන්න

හරිත : හැකි ඉක්මණින් පරීක්ෂණ සමත් වන ක්‍රියාකාරී කේත ලබා ගැනීමට අවංක උත්සාහයක් ගන්න: අනුපිටපත් කේතය, අපැහැදිලි ලෙස නම් කරන ලද විචල්‍යයන් ඉහළම අනුපිළිවෙලෙහි හැක්ස් යනාදිය.

REFACTOR : කේතය පිරිසිදු කරන්න, විචල්‍යයන් නිසි ලෙස නම් කරන්න. කේතය වියළන්න .


6
"හරිත" අවධිය ගැන ඔබ කියන්නේ කුමක්දැයි මම දනිමි, නමුත් එයින් ගම්‍ය වන්නේ පරීක්ෂණ සමත් වීම සඳහා දෘ-වයර් ප්‍රතිලාභ අගයන් සුදුසු විය හැකි බවයි. මගේ අත්දැකීම් අනුව "හරිත" යනු අවශ්‍යතා සපුරාලීම සඳහා වැඩ කිරීමේ කේතයක් සෑදීමේ අවංක උත්සාහයක් විය යුතුය, එය පරිපූර්ණ නොවිය හැකි නමුත් එය පළමු වරට සංවර්ධකයාට කළමනාකරණය කළ හැකි තරම් සම්පූර්ණ හා "නැව්ගත කළ හැකි" විය යුතුය. ප්‍රතිනිර්මාණය කිරීම බොහෝ විට සිදු කරනුයේ ඔබ වැඩි දියුණුවක් සිදු කිරීමෙන් පසුව සහ පළමු සාමාර්ථයේ ඇති ගැටලු වඩාත් පැහැදිලිව පෙනෙන අතර ඩ්‍රයි සඳහා අවස්ථා මතු වේ.
mcottle

2
cmcottle: ලබා ගත හැකි-පමණක් ගබඩාවක් ක්‍රියාත්මක කිරීම කොපමණ ප්‍රමාණයක් කේත පදනමේ දෘ c කේත අගයන් විය හැකිදැයි ඔබ පුදුමයට පත් විය හැකිය. :)
බ්‍රයන් බොට්චර්

6
මට හොඳ, නිෂ්පාදන ගුණාත්මක කේතයක් ටයිප් කළ හැකි තරම් වේගයෙන් ඉවත් කළ හැකි විට, මම කවදා හෝ කූට කේතයක් ලියා එය පිරිසිදු කරන්නේ ඇයි? :)
Kaz

1
AzKaz මේ ආකාරයෙන් ඔබ පරීක්ෂා නොකළ හැසිරීම් එකතු කිරීමට අවදානමක් ඇති බැවිනි. අපේක්ෂිත සෑම හැසිරීමක් සඳහාම පරීක්‍ෂණයක් පැවැත්වීම සහතික කිරීමට ඇති එකම ක්‍රමය නම්, එය කෙතරම් කපටි වුවත්, කළ හැකි සරල වෙනසක් කිරීමයි. සමහර විට පහත සඳහන් ප්‍රතිනිර්මාණය මඟින් ඔබ කල්තියා නොසිතූ නව ප්‍රවේශයක් ගෙන එනු ඇත ...
තිමෝති ට්‍රක් රථ

1
ImTimothyTruckle හැකි සරලම වෙනස සොයා ගැනීමට මිනිත්තු 50 ක් ගත වුවද, දෙවන සරලම වෙනස සොයා ගැනීමට ඇත්තේ 5 ක් නම් කුමක් කළ යුතුද? අපි දෙවන සරලම දේ සමඟ යනවාද නැත්නම් සරලම දේ සොයමින් සිටිනවාද?
Kaz

1

ඔබ TDD හි “තාත්වික” කේතය ලියන්නේ කවදාද?

මෙම රතු කොහෙද ඔබ අදියර වේ ලියන්න කේතය.

තුළ refactoring අදියර ප්රාථමික අරමුණ වන්නේ delete කේතය.

තුළ රතු අදියර ඔබ පරීක්ෂණ සමත් කිරීමට ඕනෑම දෙයක් කළ හැකි මෙන් ඉක්මන් ලෙස හා කිසිදු වියදමින් . හොඳ කේතීකරණ පිළිවෙත් හෝ මෝස්තර රටාව ගැන ඔබ අසා ඇති දේ ඔබ සම්පූර්ණයෙන්ම නොසලකා හරියි. පරීක්ෂණය හරිත බවට පත් කිරීම වැදගත් ය.

තුළ refactoring අදියර ඔබ ඔබ කරන ලද අවුල නිදොස්කර. දැන් ඔබ මුලින්ම බැලූවේ ඔබ විසින් සිදුකරන ලද වෙනස පරිවර්තන ප්‍රමුඛතා ලැයිස්තුවේ ඉහළින්ම ඇති වර්ගයද යන්න සහ කේත අනුපිටපතක් තිබේ නම් ඔබට බොහෝ විට නිර්මාණ පත්‍රිකාවක් යෙදීමෙන් ඉවත් කළ හැකිය.

අවසාන වශයෙන් ඔබ හඳුනාගැනීම් නැවත නම් කිරීමෙන් කියවීමේ හැකියාව වැඩි දියුණු කරන අතර මැජික් අංක සහ / හෝ වචනාර්ථයෙන් නියතයන් උපුටා ගනී .


එය රතු-ප්‍රතික්‍රියාකාරකය නොවේ, එය රතු-කොළ-ප්‍රතික්‍රියාකාරකය වේ. - රොබ් කින්යොන්

මෙය පෙන්වා දීමට ස්තූතියි.

එබැවින් ඔබ සැබෑ කේතය ලියන හරිත අවධිය එයයි

තුළ රතු අදියර ඔබ ලිවීමට ක්රියාත්මක පිරිවිතර ...


එය රතු-ප්‍රතික්‍රියාකාරකය නොවේ, එය රතු-කොළ-ප්‍රතික්‍රියාකාරකය වේ. "රතු" යනු ඔබ ඔබේ පරීක්ෂණ කට්ටලය කොළ පැහැයෙන් (සියලුම පරීක්ෂණ සමත්) රතු පැහැයට ගෙන යාමයි (එක් පරීක්ෂණයක් අසමත් වේ). "කොළ" යනු ඔබ ඔබේ පරීක්ෂණ කට්ටලය රතු පැහැයෙන් (එක් පරීක්ෂණයක් අසමත්) සිට කොළ පාටට ගෙන යාමයි (සියලු පරීක්ෂණ සමත් වේ). "ප්‍රතික්‍රියාකාරකය" යනු ඔබ ඔබේ කේතය ගෙන සියලු පරීක්ෂණ සමත් වන අතරතුර එය ලස්සන කර ගැනීමයි.
රොබ් කිනියන්

1

ඔබ මුළු කාලයම රියල් කේතය ලියයි .

සෑම පියවරකදීම ඔබ කේත ලියන්නේ ඔබගේ කේතයේ අනාගත අමතන්නන් සඳහා ඔබේ කේතය තෘප්තිමත් වන කොන්දේසි සපුරාලීම සඳහා ය (එය ඔබ හෝ නොවිය හැකිය ...).

ඔබ සිතන්නේ ඔබ ප්‍රයෝජනවත් ( තාත්වික ) කේතයක් ලියන්නේ නැති බවයි , මන්ද මොහොතකින් ඔබට එය ප්‍රතිචක්‍රීකරණය කළ හැකිය.

කේත-ප්‍රතිනිර්මාණය යනු පවත්නා පරිගණක කේතය එහි බාහිර හැසිරීම වෙනස් නොකර සාධක සාධක වෙනස් කිරීම - ප්‍රතිව්‍යුහගත කිරීමේ ක්‍රියාවලියයි.

මෙයින් අදහස් කරන්නේ ඔබ කේතය වෙනස් කළත්, කේතය සෑහීමකට පත්වන කොන්දේසි නොවෙනස්ව පවතින බවයි. සහ චෙක්පත් ( පරීක්ෂණඔබේ කේතය සත්‍යාපනය සඳහා ඔබ විසින් ක්‍රියාත්මක කරන ) ඔබගේ වෙනස් කිරීම් කිසිවක් වෙනස් කර ඇත්දැයි තහවුරු කර ගැනීම සඳහා දැනටමත් එහි ඇත. එබැවින් ඔබ මුළු කාලයම ලියූ කේතය වෙනත් ආකාරයකින් ඇත.

එය සැබෑ කේතයක් නොවන බව ඔබ සිතිය හැකි තවත් හේතුවක් නම්, අවසාන වැඩසටහන ඔබ විසින් දැනටමත් අත්හැර දැමිය හැකි උදාහරණ ඔබ කිරීමයි. එය ඔබ ගැන දැනුම ඇති බව පෙන්වයි මෙම ඉතා හොඳ වසම ඔබ වැඩසටහන්ගත කර ඇත.
එහෙත් බොහෝ වතාවක් වැඩසටහන්කරුවන් දී සිටින්නේ වසම වන නව , නොදන්නා ඔවුන්ට. අවසාන ප්‍රති result ලය කුමක් වේදැයි ඔවුන් නොදන්නා අතර TDD යනු අපගේ දැනුම ලේඛනගත කරමින් පියවරෙන් පියවර වැඩසටහන් ලිවීමේ තාක්‍ෂණයකි ප්‍රති result ලය මෙම ක්‍රමය ක්‍රියාත්මක විය යුතු ආකාරය කිරීම සහ අපගේ කේතය ඒ ආකාරයෙන් ක්‍රියාත්මක වන බව තහවුරු කිරීම.

මම ටීඩීඩී හි පොත (*) කියවන විට, මට කැපී පෙනෙන වැදගත්ම ලක්ෂණය වූයේ: ටෝඩෝ ලැයිස්තුවයි. එය මට පෙන්වා දුන්නේ, ටීඩීඩී යනු සංවර්ධකයින්ට වරකට එක් දෙයක් කෙරෙහි අවධානය යොමු කිරීමට උපකාරී වන තාක්‍ෂණයකි. ඉතින් මෙයද ඔබගේ ප්‍රශ්නයට පිළිතුරකි ඇත්ත ලිපිගොනු කොපමණ ලිවිය යුතුද? වරකට 1 ක් කෙරෙහි අවධානය යොමු කිරීමට ප්‍රමාණවත් කේතයක් මම කියමි.

(*) කෙන්ට් බෙක් විසින් "ටෙස්ට් ඩ්‍රයිවින් ඩිවලොප්මන්ට්: උදාහරණයෙන්"


2
කෙන්ට් බෙක් විසින් "ටෙස්ට් ඩ්‍රයිවින් ඩිවලොප්මන්ට්:
උදාහරණයෙන්

1

ඔබගේ පරීක්ෂණ අසාර්ථක වීමට ඔබ කේත ලියන්නේ නැත.

සාර්ථකත්වය කෙබඳු විය යුතුද යන්න නිර්වචනය කිරීම සඳහා ඔබ ඔබේ පරීක්ෂණ ලියයි, ඒ සියල්ල මුලින් අසමත් විය යුත්තේ ඔබ තවමත් සමත් වන කේතය ලියා නොමැති නිසාය.

මුලින් අසමත් වූ පරීක්ෂණ ලිවීම පිළිබඳ සමස්ත කරුණ නම් කරුණු දෙකක් කිරීමයි.

  1. සියලුම නඩු ආවරණය කරන්න - සියලු නාමික නඩු, සියලු දාර නඩු ආදිය.
  2. ඔබගේ පරීක්ෂණ වලංගු කරන්න. ඒවා සමත් වී ඇති බව ඔබ කවදා හෝ දුටුවහොත්, එය සිදු වූ විට ඔවුන් අසාර්ථකත්වයක් විශ්වාසදායක ලෙස වාර්තා කරනු ඇතැයි ඔබට සහතික විය හැක්කේ කෙසේද?

රතු-කොළ-ප්‍රතික්‍රියාකාරකයේ ඇති කාරණය නම්, නිවැරදි පරීක්ෂණ ලිවීමෙන් පළමුව ඔබ විභාග සමත් වීමට ලියූ කේතය නිවැරදි බව දැන ගැනීමට ඔබට විශ්වාසයක් ලබා දෙන අතර ඔබේ පරීක්ෂණ ඉක්මනින් ඔබට දැනුම් දෙනු ඇතැයි යන විශ්වාසයෙන් ප්‍රතික්‍රියා කිරීමට ඔබට ඉඩ සලසයි. යමක් කැඩී යයි, එවිට ඔබට වහාම ආපසු ගොස් එය නිවැරදි කළ හැකිය.

මගේ අත්දැකීම් අනුව (C # /. NET), පිරිසිදු පරීක්ෂණය-පළමුව ලබා ගත නොහැකි පරමාදර්ශයකි, මන්ද ඔබට තවමත් නොපවතින ක්‍රමයකට ඇමතුමක් සම්පාදනය කළ නොහැකි බැවිනි. එබැවින් "පළමුව පරීක්‍ෂා කිරීම" යනු මුලින්ම අතුරුමුහුණත් කේතනය කිරීම සහ ක්‍රියාවට නැංවීමයි. පසුව මුරණ්ඩු නිසි ලෙස පිටතට ගන්නා තෙක් කඳන් වලට එරෙහිව පරීක්ෂණ ලිවීම (මුලින් අසමත් වනු ඇත). මම කවදාවත් "අසමත් කේතය" ලියන්නේ නැත.


0

මම හිතන්නේ ඔබ ඒකක පරීක්ෂණ සහ ඒකාබද්ධ පරීක්ෂණ අතර ව්‍යාකූල විය හැකිය. පිළිගැනීමේ පරීක්ෂණ ද තිබිය හැකි යැයි මම විශ්වාස කරමි, නමුත් එය ඔබගේ ක්‍රියාවලිය මත රඳා පවතී.

ඔබ කුඩා "ඒකක" සියල්ලම පරීක්‍ෂා කළ පසු, ඔබ ඒවා සියල්ලම එකලස් කර ඇති හෝ "ඒකාබද්ධ" ලෙස පරීක්ෂා කරන්න. එය සාමාන්‍යයෙන් සම්පූර්ණ වැඩසටහනක් හෝ පුස්තකාලයකි.

මම ලියා ඇති කේතයෙන් දත්ත කියවා පුස්තකාලයට පෝෂණය කරන විවිධ පරීක්ෂණ වැඩසටහන් සහිත පුස්තකාලයක් පරීක්ෂා කරයි, ඉන්පසු ප්‍රති .ල පරීක්ෂා කරන්න. එවිට මම එය නූල් වලින් කරන්නෙමි. ඊට පස්සේ මම ඒක කරන්නේ නූල් සහ දෙබලක () මැද. තත්පර 2 කට පසු මම එය ධාවනය කර -9 මරා දමමි, පසුව මම එය ආරම්භ කර එහි ප්‍රතිසාධන මාදිලිය පරීක්ෂා කරමි. මම එය ව්‍යාකූල කරමි. මම එය සෑම ආකාරයකින්ම වද දෙමි.

ඒ සියල්ලම වෙනත් පරීක්ෂාවකි, නමුත් ප්‍රති .ල සඳහා මට රතු / කොළ සංදර්ශකයක් නොමැත. එක්කෝ එය සාර්ථක වේ, නැතහොත් වැරදි කේත පේළි දහස් ගණනක් හාරා එයට හේතුව සොයා ගැනීමට.

එතැනදී ඔබ "තාත්වික කේතය" පරීක්ෂා කරයි.

මම මේ ගැන සිතුවෙමි, නමුත් සමහර විට ඔබ ඒකක පරීක්ෂණ ලිවිය යුත්තේ කවදාදැයි ඔබ නොදනී. ඔබගේ පරීක්ෂණ මඟින් ඔබ විසින් කළ යුතු සියල්ල නියම කරන විට ඔබ ඒකක පරීක්ෂණ ලිවීම සිදු කරයි. සමහර විට ඔබට සියලු දෝෂ හැසිරවීම් සහ අද්දර සිදුවීම් අතර මග හැරී යා හැක, එබැවින් ඔබට පිරිවිතරයන් හරහා කෙළින්ම යන ප්‍රීතිමත් මාර්ග පරීක්ෂණවල හොඳ පරීක්ෂණ කණ්ඩායමක් සෑදීමට අවශ්‍ය විය හැකිය.


(එහි = හිමිකාරීත්වය, එය = "එය" හෝ "එය ඇත". උදාහරණයක් ලෙස එය භාවිතා කරන්නේ කෙසේද සහ එය භාවිතා කරන්නේ කෙසේද යන්න බලන්න .)
පීටර් මෝර්ටෙන්සන්

-6

ප්‍රශ්නයේ මාතෘකාවට පිළිතුරු වශයෙන්: “ඔබ“ සැබෑ ”කේතය ටීඩීඩී හි ලියන්නේ කවදාද?”, පිළිතුර: 'කිසිසේත්ම' හෝ 'ඉතා සෙමින්'.

ඔබ හරියට ශිෂ්‍යයෙක් වගේ, ඒ නිසා මම පිළිතුරු දෙන්නේ ශිෂ්‍යයෙකුට උපදෙස් දෙන ආකාරයටයි.

ඔබ 'න්‍යායන්' සහ 'ශිල්පක්‍රම' කේතීකරණ ගොඩක් ඉගෙන ගැනීමට යන්නේ ය. ඔවුන් මිල අධික ශිෂ්‍ය පා courses මාලා සඳහා කාලය ගත කිරීම සඳහා විශිෂ්ටයි, නමුත් ඔබට අඩක්වත් පොතක කියවීමට නොහැකි වීම ඔබට ඇති අල්ප ප්‍රයෝජනයකි.

කෝඩරයක කාර්යය වන්නේ කේතය නිපදවීම පමණි. කේතය ඇත්තෙන්ම හොඳින් ක්‍රියාත්මක වේ. ඔබ, කෝඩරය ඔබේ මනසෙහි, කඩදාසි මත, සුදුසු යෙදුමක යනාදිය කේතය සැලසුම් කරන්නේ ඒ නිසාය. කේතීකරණයට පෙර තර්කානුකූලව හා පාර්ශ්වීයව සිතීමෙන් කල්තියාම සිදුවිය හැකි අඩුපාඩු / සිදුරු වටා වැඩ කිරීමට ඔබ සැලසුම් කරයි.

නමුත් හොඳ කේතයක් සැලසුම් කිරීමට හැකිවන පරිදි ඔබේ යෙදුම බිඳ දැමිය යුතු ආකාරය ඔබ දැනගත යුතුය. උදාහරණයක් ලෙස, ඔබ කුඩා බොබී වගුව ගැන නොදැන සිටියේ නම් (xkcd 327) නම්, ඔබ බොහෝ විට දත්ත සමුදාය සමඟ වැඩ කිරීමට පෙර ඔබේ යෙදවුම් සනීපාරක්ෂක නොවනු ඇත, එබැවින් එම සංකල්පය වටා ඔබේ දත්ත සුරක්ෂිත කිරීමට ඔබට නොහැකි වනු ඇත.

TDD යනු ඔබේ යෙදුම කේත කිරීමට පෙර වැරදියට සිදුවිය හැකි දේ පිළිබඳ පරීක්ෂණ නිර්මාණය කිරීමෙන් ඔබේ කේතයේ ඇති දෝෂ අවම කිරීම සඳහා නිර්මාණය කරන ලද කාර්ය ප්‍රවාහයකි, මන්ද කේතීකරණය මඟින් ඔබ හඳුන්වා දෙන තවත් කේතය on ාතීය ලෙස දුෂ්කර වන අතර ඔබ වරක් සිතූ දෝෂ ඔබට අමතක වේ. ඔබ ඔබේ යෙදුම අවසන් කර ඇතැයි සිතූ පසු ඔබ පරීක්ෂණ සහ උත්පාතය ක්‍රියාත්මක කරයි, ඔබේ පරීක්ෂණ සමඟ දෝෂ හසු වේ.

TDD නොවේ - සමහර අය විශ්වාස කරන පරිදි - පරීක්ෂණයක් ලියන්න, අවම කේතයකින් සමත් වන්න, තවත් පරීක්ෂණයක් ලියන්න, අවම කේතයකින් සමත් වීම යනාදිය. ඒ වෙනුවට, එය ඔබට විශ්වාසයෙන් කේත කිරීමට උදව් කිරීමේ ක්‍රමයකි. පරීක්ෂණ සමඟ වැඩ කිරීම සඳහා අඛණ්ඩ ප්‍රතිනිර්මාණ කේතයේ මෙම පරමාදර්ශය මෝඩ ය, නමුත් එය සිසුන් අතර කදිම සංකල්පයකි, මන්ද ඔවුන් නව අංගයක් එකතු කරන විට එය ඔවුන්ට මහත් හැඟීමක් ඇති කරන අතර ඔවුන් තවමත් කේත කරන්නේ කෙසේදැයි ඉගෙන ගනී ...

කරුණාකර මෙම උගුලට හසු නොවී එය කේතනය කිරීමේ කාර්යභාරය කුමක්දැයි බලන්න - කෝඩරයක කාර්යය වන්නේ කේතය නිපදවීම පමණි. කේතය ඇත්තෙන්ම හොඳින් ක්‍රියාත්මක වේ. දැන්, ඔබ වෘත්තීය කෝඩරයක් ලෙස ඔරලෝසුවේ සිටින බව මතක තබා ගන්න, ඔබ ප්‍රකාශ 100,000 ක් හෝ 0 ක් ලියා ඇත්දැයි ඔබේ සේවාදායකයා ගණන් ගන්නේ නැත. ඔවුන්ට අවශ්‍ය කේත වැඩ කිරීම පමණි. ඇත්තෙන්ම හොඳයි.


3
මම ශිෂ්‍යයෙකුට පවා සමීප නැත, නමුත් මම කියවා හොඳ ක්‍රමවේදයන් අනුගමනය කර වෘත්තීය විය යුතුය. ඉතින් ඒ අර්ථයෙන් මම "ශිෂ්‍යයෙක්" වෙමි. මම ඉතා මූලික ප්‍රශ්න අසන්නේ මා එසේ වන බැවිනි. මම කරන්නේ කුමක්දැයි හරියටම දැන ගැනීමට මම කැමතියි. කාරණයේ හදවත. මට එය නොලැබුනේ නම්, මම එයට කැමති නැති අතර ප්‍රශ්න ඇසීමට පටන් ගනිමි. මම එය භාවිතා කිරීමට යන්නේ නම් එයට හේතුව දැන ගැනීමට අවශ්‍යයි. ඔබ නිර්මාණය කළ යුතු දේ දැන ගැනීම සහ ඒවා හරහා සිතීම වැනි සමහර ආකාරවලින් TDD හොඳට පෙනෙන බව පෙනේ, නමුත් ක්‍රියාත්මක කිරීම තේරුම් ගැනීමට අපහසු විය. මම හිතන්නේ මට දැන් වඩා හොඳ ග්‍රහණයක් තිබේ.
ජොනී


4
ඒවා TDD හි නීති වේ. ඔබට අවශ්‍ය පරිදි කේත ලිවීමට ඔබට නිදහස ඇත, නමුත් ඔබ එම නීති තුන අනුගමනය නොකරන්නේ නම් ඔබ TDD කරන්නේ නැත.
ෂෝන් බර්ටන්

2
එක් පුද්ගලයෙකුගේ "නීති"? TDD යනු ඔබට කේත කිරීමට උදව් කිරීම මිස ආගමක් නොවේ. බොහෝ අය අදහසක් පිළිපැදීම කනගාටුවට කරුණකි. TDD හි ආරම්භය පවා මතභේදාත්මක ය.
user3791372

2
37 user3791372 TDD යනු ඉතා දැඩි හා පැහැදිලිව අර්ථ දක්වා ඇති ක්‍රියාවලියකි. බොහෝ අය එය "ඔබ ක්‍රමලේඛනය කරන විට යම් පරීක්ෂණයක් කරන්න" යනුවෙන් අදහස් කළත් එය එසේ නොවේ. මෙහි කොන්දේසි මිශ්‍ර නොකිරීමට උත්සාහ කරමු, මෙම ප්‍රශ්නය TDD ක්‍රියාවලිය ගැන මිස සාමාන්‍ය පරීක්ෂණ නොවේ.
ඇලෙක්ස්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.