Կանխադրվածները կարող են ձեզ խորտակել
TL;DR. Անհայտ պատասխանները վերաբերվեք որպես չարտոնված, ոչ վավերական:
Խնդիրներ
- Անվտանգության ռիսկեր
- Անտեսելով անհայտ դեպքերը
- Սխալ Սխալ մեկնաբանում
- Կանխադրված է վավեր պետություններին
- Թույլտվությունների անհամապատասխանություն
- Չհաջողվեց գրանցել իրադարձությունները
- Շահագործման ներուժ
Լուծումներ
- Վավերացրեք բոլոր պատասխանները հայտնի կոդերի փակ փաթեթի նկատմամբ:
- Կանխադրված (և անհայտ) մինչև չլիազորված կամ Հեռացնել կանխադրվածները :
- Գրանցեք յուրաքանչյուր անհամապատասխան կամ անսպասելի դեպք վերլուծության համար:
- Փորձարկում եզրային սցենարներով:
- Պարբերաբար համաժամացրեք արձագանքման լողավազանները պրոցեսորների հետ՝ հնացած կոդերից խուսափելու համար:
- Կենտրոնացեք անվտանգության վրա՝ այն դարձնելով ձախից անցումային գործընթաց:
- Նախագծեք փոփոխությունների դիմացկուն համակարգեր՝ զարգացող սցենարները կարգավորելու համար:
Համատեքստ
Այսօր համակարգչային անվտանգության օրն է, և յուրաքանչյուր ծրագրավորող պետք է գիտակցի իր պատասխանատվությունը:
Պատկերացրեք մի հավելված, որը զբաղվում է վաճառքներով, որը հիմնված է վարկային քարտերի պրոցեսորների պատասխանների վրա՝ գործարքները կարգավորելու համար:
Յուրաքանչյուր կրեդիտ քարտի պրոցեսոր տրամադրում է նախապես սահմանված պատասխանի կոդեր տարբեր իրավիճակների համար, ինչպիսիք են անբավարար մնացորդը կամ ժամկետանց քարտերը:
Խնդիրը սկսվում է այն ժամանակ, երբ պրոցեսորն ավելացնում է պատասխանի նոր կոդ՝ մերժված գործարքների համար, բայց չի ծանուցում հարթակին:
Հավելվածը չի ճանաչում նոր կոդը, կանխադրված է համարում այն որպես «չգտնված» և թույլատրում է գնումը:
Օգտատերերը նկատում են այս թերությունը և օգտագործում այն չարտոնված գնումներ կատարելու համար:
Պլատֆորմի եկամուտները կտրուկ նվազում են, ինչը հանգեցնում է սնանկացման:
Նմուշ կոդ
Սխալ
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; default: // Authorize purchase break; }
Ճիշտ է
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "APPROVED": // Authorize purchase break; case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; case "DECLINED_NEW_REASON": // Handle new declined reason break; default: // Reject purchase (default case for unknown responses) break; }
Հայտնաբերում
- [x] Ձեռնարկ
Դուք կարող եք հայտնաբերել այս հոտը՝ վերանայելով սխալների հետ աշխատելու տրամաբանությունը:
Ստուգեք, արդյոք համակարգը գրանցում և հերքում է չճանաչված դեպքերը:
Ավտոմատացված թեստերը կարող են օգնել պարզել, թե արդյոք նոր կամ անսպասելի մուտքերը լռելյայն են վավեր գործողությունների համար:
Ստատիկ վերլուծության գործիքները կարող են օգնել՝ նշելով սխալների հնարավոր թերի մշակումը:
Պիտակներ
- Անվտանգություն
Մակարդակ
- [x] Միջանկյալ
Ինչու է Bijection-ը կարևոր
Կարևոր է պահպանել վճարային պրոցեսորի պատասխանների ձեր դիմումի ներքին ներկայացման և պրոցեսորի կողմից վերադարձված փաստացի կոդերի միջև մեկ առ մեկ համապատասխանություն:
Երբ դուք խախտում եք բիեկցիան , դուք անհամապատասխանություն եք ստեղծում:
Հավելվածը սխալ է մեկնաբանում անհայտ կոդերը՝ հանգեցնելով անսպասելի վարքագծի, անվտանգության անցքերի և բիզնեսի հնարավոր աղետալի հետևանքների:
AI սերունդ
AI գործիքները կարող են ստեղծել այս հոտը, եթե չնշեք, թե ինչպես վարվել անհայտ դեպքերի հետ:
Օրինակ, ընդհանուր սխալների մշակումը կարող է կանխադրված լինել բարենպաստ արդյունքների համար, ինչպիսիք են «չի գտնվել» կամ «հաջողությունը»:
AI հայտնաբերում
AI գեներատորները կարող են շտկել այս հոտը, երբ նրանց հանձնարարեք անհայտ դեպքերը վերաբերվել որպես չարտոնված և շեշտադրել գրանցումը և անսպասելի սցենարների փորձարկումը:
Փորձեք դրանք:
Հիշեք. AI օգնականները շատ սխալներ են թույլ տալիս
Առանց համապատասխան հրահանգների | Հատուկ հրահանգներով |
---|---|
Եզրակացություն
Միշտ զգույշ վարեք անհայտ դեպքերը:
«Չգտնված»-ի նման կանխադրվածները կարող են հանգեցնել անվտանգության լուրջ խնդիրների և ֆինանսական կորուստների:
Անհայտ պատասխանների գրանցումն ու մերժումը դարձրեք ձեր զարգացման պրակտիկայի մաս:
Ծրագրավորման ընթացքում անվտանգության հետ կապված որոշումներ կայացրեք ձախ կողմում:
Հարաբերություններ
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352
Հրաժարում պատասխանատվությունից
Code Smells-ը իմ կարծիքն է:
Վարկեր
Լուսանկարը՝ Նաթանա Ռեբուսասի Unsplash- ում
https://www.youtube.com/watch?v=J2QOejhA6ek
Ենթադրությունները բոլոր անհաջողությունների մայրն են։
Ասաց Ուիսալը
Ծրագրային ապահովման ճարտարագիտության հիանալի մեջբերումներ
Այս հոդվածը CodeSmell Series-ի մի մասն է: