Программирование методом подбора

Программирование методом подбора, которое иногда называют «случайным программированием», — это подход к разработке программного обеспечения, при котором программист решает проблему итеративно, делая небольшие изменения (перестановки) и тестирование каждого изменения, чтобы увидеть, ведёт ли оно себя, как хотелось бы. Такой подход иногда кажется привлекательным, когда программист не в полной мере понимает код и считает, что одно или несколько небольших изменений может привести к коду, который является правильным.

Пример

Например, следующий пример кода C (предназначен для поиска и копирования последовательности цифр из большой строки) имеет несколько проблем:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
    const char* buffer = "123abc";
    char destination[10];
    int i = 0;
    int j = 0;
    int l = strlen(buffer);

    while (i < l) {
        if (isdigit(buffer[i])) {
            destination[j++] = buffer[i++];
        }
        ++i;
    }

    destination[j] = '\0';
    printf("%s\n", destination);
}

Во-первых, он не даёт правильного результата. Для заданной начальной строки он печатает «13», в то время как правильным результатом является «123». Программист, не видящий структурной проблемы, может ухватиться за одну команду, сказав: «Ага, здесь лишнее увеличение на единицу». Он удаляет строку «++i», но при тестировании программа попадает в бесконечный цикл. «Ой, неправильный инкремент». Предыдущее выражение возвращается на место, а строкой выше удаляется постфиксный инкремент переменной i:

    if (isdigit(buffer[i])) {
        destination[j++] = buffer[i];
    }

В ходе тестирования код теперь выдаёт правильный ответ, «123». Программист удовлетворённо вздыхает: «Вот, вот и всё. Теперь всё готово». Дополнительное тестирование с другими входными строками подтверждает этот вывод.

Однако, поскольку программист не утруждает себя полным пониманием кода, остаются следующие проблемы:

  • Если ввод содержит несколько чисел, разделённых нецифровыми символами, например «123аб456», в целевой буфер попадут все цифры подряд.
  • Если ввод длиннее целевого буфера, то целевой буфер переполнится.
  • Если ввод длиннее INT_MAX, то поведение становится неопределённым, поскольку strlen() возвращает беззнаковое целочисленное значение типа size_t, в котором может храниться значение, большее максимума для знакового целочисленного (int).
  • Если на используемой платформе тип char — знаковый и ввод содержит символы не из диапазона от 0 до UCHAR_MAX после приведения к int, то вызов isdigit() приводит к неопределённому поведению.

Хотя решение окажется подходящим для определённого набора вводимых данных, оно не является корректным для всех таких наборов, и замечания к такому коду будут возникать в течение долгого времени.

Примечания

Read other articles:

قرية مالون   الإحداثيات 44°51′02″N 74°17′21″W / 44.8506°N 74.2892°W / 44.8506; -74.2892  [1] تاريخ التأسيس 1853  تقسيم إداري  البلد الولايات المتحدة[2]  التقسيم الأعلى مقاطعة فرانكلن  عاصمة لـ مقاطعة فرانكلن  خصائص جغرافية  المساحة 8.249789 كيلومتر مربع8.227337 كي�...

 

Valorphin Names IUPAC name L-Valyl-L-valyl-L-tyrosyl-L-prolyl-L-tryptophyl-L-threonyl-L-glutamine Identifiers CAS Number 144313-54-2 N[ChemSpider] 3D model (JSmol) Interactive image ChemSpider 27470960 PubChem CID 90470048 InChI InChI=1S/C44H60N8O12/c1-22(2)35(45)40(59)50-36(23(3)4)41(60)49-32(19-25-12-14-27(54)15-13-25)43(62)52-18-8-11-33(52)39(58)48-31(20-26-21-46-29-10-7-6-9-28(26)29)38(57)51-37(24(5)53)42(61)47-30(44(63)64)16-17-34(55)56/h6-7,9-10,12-15,21-24,30-33,35-37,46,...

 

Western swamp banksia Swamp Banksia, yang tertanam di Kings Park, Australia Barat Klasifikasi ilmiah Kerajaan: Plantae (tanpa takson): Angiosperms (tanpa takson): Eudicots Ordo: Proteales Famili: Proteaceae Genus: Banksia Subgenus: Banksia subg. Banksia Section: Banksia sect. Oncostylis Seri: Banksia ser. Spicigerae Spesies: B. littoralis Nama binomial Banksia littoralisR.Br. Banksia littoralis, yang lebih dikenal sebagai banksia rawa, oak rawa, pungura dan banksia rawa barat, adalah se...

دورة الألعاب الآسيوية السابعة 1974 طهران، ايران ، إيران  دورة الألعاب الآسيوية 1974 1970 1978 الدول المشاركة 25 الرياضيون المشاركون 3010 المسابقات 200، في 16 رياضة انطلاق الألعاب 1 سبتمبر، 1974 المفتتح الرسمي الشاه محمد رضا بهلوي الملعب ملعب آزادي الاختتام 16 سبتمبر، 1974 الشعلة الأولمب�...

 

Vous lisez un « bon article » labellisé en 2020. Pour les articles homonymes, voir Foudre (homonymie). FoudreSymbole sur les cartes météorologiques.PrésentationType ÉlectrométéorePartie de OrageMatériau Décharge électriquemodifier - modifier le code - modifier Wikidata La foudre est un phénomène naturel de décharge électrostatique disruptive de grande intensité qui se produit dans l'atmosphère, entre des régions chargées électriquement, et peut se produire soit...

 

Assault rifle 9A-91 9A-91 compact assault rifle with a sound suppressor attached and the stock unfoldedTypeAssault riflePlace of originRussiaService historyIn service1993–presentUsed byRussia (police and Federal Security Service)Production historyDesignerKBP Instrument Design BureauDesigned1991ManufacturerKBP Instrument Design BureauProduced1994-presentVariantsVSK-94SpecificationsMass1.8 kg (empty) 2.5 kg (loaded with 20-round magazine)Length594 mm (stock extended) 373 m...

«Fu Camillo valoroso in battaglia, ma cauto e lento ne’ consigli, dando maggior lode ai prudenti che agli arditi: odiatore acerrimo dell’indisciplina, punì nel capo moltissimi soldati suoi in Dalmazia, ed a tal ordine li ridusse che dicevasi che un soldato dell’Orsino pareva un monaco di Francia: fece grande professione di onore, ed in quell’età di tradimenti, il nome suo è fra i pochissimi che passassero incolpati.» (Domenico Promis parlando di Camillo Orsini) Camillo OrsiniSta...

 

Proclamation decree of Canada Thomas Ridout survey of 1821 The Haldimand Proclamation was a decree that granted land to the Mohawk (or Kanien'kehà:ka) (Mohawk nation) who had served on the British side during the American Revolution. The decree was issued by the Governor of the Province of Quebec, Frederick Haldimand, on October 25, 1784, three days after the Treaty of Fort Stanwix was signed between others of the Six Nations and the American government. The granted land had to be purchased ...

 

Class of drug This article is about serotonin reuptake inhibitors. For SSRIs, see selective serotonin reuptake inhibitor. Serotonin A serotonin reuptake inhibitor (SRI) is a type of drug which acts as a reuptake inhibitor of the neurotransmitter serotonin (5-hydroxytryptamine, or 5-HT) by blocking the action of the serotonin transporter (SERT). This in turn leads to increased extracellular concentrations of serotonin and, therefore, an increase in serotonergic neurotransmission. It is a type ...

Mathematical symbols (+ and −) For the ± symbol, see Plus-minus sign. Positive and negative signs redirects here. Not to be confused with Astrological sign polarity. + −Plus and minus signsIn UnicodeU+002B + PLUS SIGN (&plus;) U+2212 − MINUS SIGN (&minus;)Different fromDifferent fromU+002D - HYPHEN-MINUS U+2010 ‐ HYPHEN (many)  - DashRelatedSee alsoU+00B1 ± PLUS-MINUS SIGN U+2213 ∓ MINUS-OR-PLUS...

 

بيئة المناظر الطبيعية (بالإنجليزية: Landscape ecology)‏، هي الدراسة التي تشمل الجيومورفولوجيا والبيئة ويتم تطبيقها على تصميم وهندسة المناظر الطبيعية، بما في ذلك الزراعة والمباني. من الناحية النظرية، تعتبر بيئة المناظر الطبيعية هي تطوير وصيانة للتنوع المكاني عند العمليات الحيوي...

 

1984 single by INXS Burn for YouSingle by INXSfrom the album The Swing B-sideJohnson's AeroplaneReleased16 July 1984[1]Recorded1983Length4:59 (album version)4:26 (single edit)6:09 (12 extended version)LabelWEASongwriter(s)Michael Hutchence, Andrew FarrissProducer(s)Nick LaunayINXS singles chronology I Send a Message (1984) Burn for You (1984) Dancing on the Jetty (1984) Burn for You is a song by Australian rock band INXS that features on the band's fourth album The Swing.[2] I...

Disambiguazione – Se stai cercando l'omonimo direttore di coro e compositore italiano, vedi Domenico Innominato. InnominatoFrancesco Hayez, Ritratto dell'Innominato UniversoI promessi sposi Lingua orig.Italiano AutoreAlessandro Manzoni 1ª app. inFermo e Lucia, tomo II, cap. VIII: colloquio con don Rodrigo;I promessi sposi, cap. XIX: sull'ingresso del suo castello Ultima app. incap. XXIV Editore it.1827 Vincenzo Ferrario, Milano; 1840 Redaelli e Guglielmini, Milano Caratteristiche...

 

Town in New Hampshire, United StatesMeredith, New HampshireTownBird's-eye view of Meredith village SealLocation in Belknap County, New HampshireCoordinates: 43°39′28″N 71°30′02″W / 43.65778°N 71.50056°W / 43.65778; -71.50056CountryUnited StatesStateNew HampshireCountyBelknapIncorporated1768VillagesMeredithMeredith CenterGovernment • Board of SelectmenSteven AikenJeanie ForresterLynn LeightonJonathan JamesMichael Pelczar • Town Manag...

 

Kızıldağ—  Xã  — KızıldağVị trí ở Thổ Nhĩ KỳQuốc gia Thổ Nhĩ KỳTỉnhAntalyaHuyệnManavgatDân số (2011) • Tổng cộng950 ngườiMúi giờEET (UTC+2) • Mùa hè (DST)EEST (UTC+3) Kızıldağ là một xã thuộc huyện Manavgat, tỉnh Antalya, Thổ Nhĩ Kỳ. Dân số thời điểm năm 2011 là 950 người.[1] Chú thích ^ “Cities, towns and villages in Antalya”...

The Aleppo roomArabic: القاعة الحلبيةWooden wall paneling of the Aleppo RoomArtistHalab Shah ibn IsaYearHegira 1009 or 1012 / AD 1600–01 or 1603)MovementOttoman SyriaSubjectSyrian Heritage: Christian and Islamic iconography on a Syrian room panelingDimensions295 cm × 750 cm × 1100 cm (116 in × 300 in × 430 in)LocationMuseum of Islamic Art, Berlin, GermanyWebsiteAleppo-Zimmer The Aleppo Room (Arabic: ال�...

 

2003 book by Chuck Palahniuk Fugitives and Refugees: A Walk in Portland, Oregon AuthorChuck PalahniukLanguageEnglishSubjectTravelGenreNon-fictionPublisherCrownPublication dateJuly 8, 2003Publication placeUnited StatesMedia typePrint (hardcover & paperback)Pages176 pagesISBN1-4000-4783-8 (hardcover)OCLC51058952Dewey Decimal917.95/490444 21LC ClassF884.P83 P35 2003 Fugitives and Refugees: A Walk in Portland, Oregon is a travelogue by novelist Chuck Palahniuk.[1] The book a...

 

Voce principale: Associazione Calcio Milan. Milan ACStagione 1994-1995 Sport calcio Squadra Milan Allenatore Fabio Capello All. in seconda Italo Galbiati Presidente Silvio Berlusconi Serie A4º (in Coppa UEFA) Coppa ItaliaTerzo turno Champions LeagueFinalista Supercoppa italianaVincitore Coppa IntercontinentaleFinalista Supercoppa UEFAVincitore Maggiori presenzeCampionato: Rossi (34)Totale: Rossi (49) Miglior marcatoreCampionato: Simone (17)Totale: Simone (21) StadioGiuseppe Meazza Abbo...

Dewan Nasional Turkmenistan Türkmenistanyň Milli Geňeşicode: tk is deprecated   (Turkmen)JenisJenisBikameral Majelis Tinggi: Halk Maslahaty Rendah: Mejlis SejarahDidirikan 24 Oktober 2020 (dibentuk) 1 Januari 2021 (mulai berjalan) Dibubarkan21 Januari 2023Didahului olehMajelis Nasional Turkmenistan unikameral, 1991–2020Digantikan olehMajelis Nasional Turkmenistan unikameral, 21 Januari 2023PimpinanKetua Halk MaslahatyGurbanguly Berdimuhamedow (Independen), sejak ...

 

Opera company in Munich, Bavaria, Germany Bayerische StaatsoperBavarian State OperaNationaltheater MünchenFormation1653LocationMunich, Bavaria, GermanyIntendantSerge DornyWebsitewww.bayerische.staatsoper.de The Bavarian State Opera (‹See Tfd›German: Bayerische Staatsoper) is a German opera company based in Munich. Its main venue is the Nationaltheater München, and its orchestra the Bavarian State Orchestra. History Nationaltheater München, interior The parent ensemble of the company wa...