Скачиваний:
0
Добавлен:
20.09.2026
Размер:
382 Кб
Скачать
☆
8-ámeliy jumıs. Programmalıq támiynat isenimliligin bahalaw
Jumıstıń maqseti: Programmalıq támiynattıń isenimlilik (Software
Reliability) xarakteristikasın teoriyalıq hám ámeliy jaqtan tereń úyreniw. Isenimliliktiń sanlı kórsetkishlerin (Metrikalar) esaplaw metodikasın ózlestiriw hám olardı real jaǵdaylarda qollanıw. Programmalıq kodtıń qátelerge shıdamlılıǵın (Fault Tolerance) hám turaqlılıǵın (Stability) arttırıw ushın Ayrıqsha jaǵdaylardı basqarıw (Exception Handling), Qorǵanıwshı programmalastırıw (Defensive Programming) hám Qayta tikleniw (Recovery) mexanizmlerin C++ tilinde implementaciyalaw. Studentlerde isenimli, qáwipsiz hám "qulap túspeytuǵın" (crash-free) kod jazıw mádeniyatın qáliplestiriw.
Teoriyalıq bólim: Programmalıq isenimlilik – bul programmalıq
támiynattıń belgili bir waqıt aralıǵında hám belgili bir shártlerde óz wazıypasın qátesiz (failure-free) orınlaw qábileti. Isenimlilik – sapanıń eń áhmiyetli atributlarınan biri, ásirese bank, medicina, aviaciya sıyaqlı kritik sistemalarda.
Isenimlilik metrikaları
Isenimlilikti ólshew ushın tómendegi tiykarǵı metrikalar qollanıladı:
1. Failure (Buzılıw): Programmanıń kútilgen nátiyjeni bermewi yamasa
jumıstı toqtatıwı.
2. Time (Waqıt): Programmanıń islew waqtı (CPU waqtı yamasa
kalendar waqtı).
3. MTBF (Mean Time Between Failures - Buzılıwlar arasındaǵı ortasha
waqıt): Sistema qansha waqıt qátesiz isleydi?
* MTBF = (Ulıwma islew waqtı - Ulıwma ońlaw waqtı) / Buzılıwlar
sanı;
4. MTTF (Mean Time To Failure - Buzılıwǵa shekemgi ortasha waqıt):
Qayta ońlanbaytuǵın sistemalar ushın (mısalı, HDD buzılsa) qollanıladı. Ońlanatuǵın sistemalar ushın MTBF hám MTTF derlik birdey boladı (eger ońlaw waqtı júdá az bolsa).
5. MTTR (Mean Time To Repair - Ońlawǵa ketken ortasha waqıt):
Buzılǵan sistemanı qayta iske túsiriw ushın qansha waqıt kerek?
* MTTR = Ulıwma ońlaw waqtı / Buzılıwlar sanı;
6. Availability (Qoljetimlilik / Tayarlıq koefficienti): Sistemanıń kerekli
waqıtta islep turıw itimallıǵı.
* Availability = (MTBF / (MTBF + MTTR)) * 100%
* "Úsh toǵız" (99.9%): Jılına shama menen 8.7 saat toqtap qalıw
(Downtime).
* "Bes toǵız" (99.999%): Jılına shama menen 5 minut toqtap qalıw
(Joqarı isenimlilik).
Isenimlilikti támiyinlew usılları
1. Fault Avoidance (Qátelerdiń aldın alıw): Sapalı dizayn, kod
standartları, testlew hám statikalıq analiz arqalı qátelerdi kodqa
kirgizbew.
2. Fault Tolerance (Qátelerge shıdamlılıq): Qáte júz berse de,
sistemanıń jumısın dawam ettiriwi. Mısalı, eger bir server isten shıqsa, ekinshi serverdiń (Backup) iske túsiwi (Redundancy). Kod dárejesinde: `try-catch` blokları.
3. Fault Detection (Qáteni anıqlaw): Qáteniń bolǵanın tez anıqlaw
hám xabar beriw (Monitoring, Logging).
4. Graceful Degradation (Jumsaq túsiw): Sistema tolıq islemese de,
tiykarǵı funkciyaların saqlap qalıwı. Mısalı, internet áste bolǵanda videonıń sapasın túsiriw, biraq kórsetiwdi toqtatpaw.
ÁMELIY BÓLIM
Bul bólimde biz isenimlilik metrikaların esaplawdı hám C++ tilinde
isenimli kod jazıw texnikaların keńeytilgen mısallar arqalı kórip shıǵamız.
Isenimlilik metrikaların esaplaw (Case Study)
Jaǵday (Scenario):
Bir internet-dúkannıń serveri bir ay (30 kún) dawamında monitoring etildi. * Bir aydaǵı ulıwma waqıt: 30 kún * 24 saat = 720 saat. * Server 4 ret toqtap qaldı (Failures). * Hárbir buzılıwdı ońlaw waqtı (Downtime):
1. 1-buzılıw: 30 minut (0.5 saat).
2. 2-buzılıw: 1.5 saat.
3. 3-buzılıw: 45 minut (0.75 saat).
4. 4-buzılıw: 1 saat 15 minut (1.25 saat).
Esaplaw:
1. Ulıwma ońlaw waqtı (Total Downtime):
0.5 + 1.5 + 0.75 + 1.25 = 4.0 saat.
2. Ulıwma islew waqtı (Uptime): 720 - 4 = 716 saat.
3. MTBF (Buzılıwlar arası): MTBF = 716 / 4 = 179 saat. (Yaǵnıy, server ortasha hár 179 saatta (7.5 kúnde) bir ret buzıladı).
4. MTTR (Ońlaw waqtı): MTTR = 4 / 4 = 1 saat. (Ortasha 1 saatta ońlanadı).
5. Availability (Qoljetimlilik): A = 179 / (179 + 1) = 179 / 180 = 0.9944 = 99.44%. Juwmaq: 99.44% - bul jaman kórsetkish emes, biraq bank yamasa medicina
sisteması ushın jetkiliksiz (olarǵa 99.99% kerek). Isenimlilikti arttırıw ushın MTBF-ti kóbeytiw (sapalı kod) yamasa MTTR-di azaytıw (tez ońlaw/avtomat tikleniw) kerek.
Ayrıqsha jaǵdaylardı basqarıw (Exception Handling)
Dástúrli "return code" usılınan góre, `try-catch` mexanizmi qátelerdi basqarıwdıń isenimli jolı.
Mısal: Fayldı qáwipsiz oqıw hám analizlew. Bul kodta bir neshe qáte bolıwı múmkin: fayl joq, fayl bos, format qáte.
Kod:
#include <iostream> #include <fstream> #include <string> #include <vector> #include <stdexcept> // std::exception
using namespace std;
 class FileFormatException : public runtime_error { public: FileFormatException(const string& msg) : runtime_error(msg) {} };
 vector<int> readNumbers(const string& filename) { ifstream file(filename);
-  if (!file.is_open()) {  }
vector<int> numbers; string line; int lineNum = 0;
while (getline(file, line)) { lineNum++; try {  int num = stoi(line); numbers.push_back(num); } catch (const invalid_argument& e) { -   -qatarda san  } }
file.close();
// 4. Fayl bos bolsa if (numbers.empty()) {  }
return numbers; }
int main() {
string fname = "data.txt";
try { vector<int> data = readNumbers(fname);  } catch (const FileFormatException& e) { -   endl; } catch (const runtime_error& e) { - fayl joq  } catch (...) {   endl; }
 return 0; }
Analiz: Bul kod "Fault Tolerance" qásiyetine iye. Fayl joq bolsa da, ishinde hárip bolsa da, programma "qulap túspeydi" (crash bolmaydı), al qáteni uslap, paydalanıwshıǵa túsindiredi hám jumısın dawam ettiredi.
Qorǵanıwshı programmalastırıw (Defensive Programming)
Isenimliliktiń eń jaqsı jolı – qáteniń aldın alıw. Mısal: Bank tranzakciyası. Tranzakciya waqtında balans jetkilikli me, summa oń ba, esap nomeri durıs pa –
barlıǵın tekseriw kerek.
Kod:
#include <iostream> #include <cassert> // Assertions using namespace std;
class BankAccount { private: double balance; string accountNumber;
public: BankAccount(string accNum, double initBalance) {  if (accNum.empty()) throw invalid_argument("Esap nomeri bos!");  eris!");
accountNumber = accNum; balance = initBalance; }
void transfer(BankAccount& to, double amount) { // 1. Input Validation (Kirisiwdi tekseriw) if (amount <= 0) {  return; }
 if (balance < amount) {  return; }
// 3. Self- if (this == &to) { - return; }
// Operaciya balance -= amount; to.balance += amount;

// 4. Post-- Assert)  // Assert tek Debug rejiminde isleydi, sapan assert(balance >= 0); } };
int main() { try { BankAccount a1("UZ123", 1000.0);
BankAccount a2("UZ456", 500.0);
a1.transfer(a2, 200); // OK a1.transfer(a2, -  -
} catch (const exception& e) {  } return 0; }
Analiz: Funckiya basındaǵı `if` tekseriwleri ("Guard Clauses") logikanı qorǵaydı. `assert` bolsa programmisttiń óz qátelerin tabıwǵa járdem beredi.
Resurslardı basqarıw (RAII)
C++ te isenimliliktiń úlken bólegi – yadtıń aǵıp ketpewi (Memory Leak). RAII (Resource Acquisition Is Initialization) – resurs alıw hám bosatıwdı avtomatlastırıw.
Kod:
#include <iostream> #include <memory> // smart pointers using namespace std;
class Resource { public:   v };
void riskyFunction() {  // Resource* r = new Resource(); -> Memory Leak!
 unique_ptr<Resource> r = make_unique<Resource>(); r->use();
 
}
int main() { try { riskyFunction(); } catch (const exception& e) {  }  return 0; }
ÁMELIY TAPSÍRMALAR
Tómendegi tapsırmalardı C++ tilinde orınlań hám nátiyjelerin analizleń.
1-tapsırma: Isenimlilik Kalkulyatorı.
Paydalanıwshıdan tómendegi maǵlıwmatlardı kirgiziwdi soraytuǵın programma jazıń:
* Buzılıwlar sanı. * Ulıwma waqıt (saat). * Ulıwma ońlaw waqtı (saat). Programma `MTBF`, `MTTR` hám `Availability` (%) ni esaplap shıǵarsın. Qosımsha: Eger `Availability < 99.0` bolsa, "Sistema isenimsiz!" degen qızıl
(yamasa tiyisli) xabar shıǵarsın.
2-tapsırma: Safe Divider (Qáwipsiz Bóliwshi).
`double safe_divide(double a, double b)` funkciyasın jazıń. * Eger `b` nolge júdá jaqın bolsa (`abs(b) < 1e-9`), `overflow_error` ("Nolge
bóliw") qátesin ılaqtırıń (throw). * Main funkciyasında paydalanıwshıdan sanlar sorap, `try-catch` arqalı qáteni
uslań hám "San júdá kishi, bóliw múmkin emes" dep shıǵarıń.
3-tapsırma: Massiv Elementine Qáwipsiz Kiriw.
`SafeArray` klasın jaratıń. * Ishinde `int` massivi bolsın (mısalı 10 element). * `int get(int index)` metodın jazıń.
* Eger indeks 0 den kishi yamasa 9 dan úlken bolsa, `out_of_range` qátesin ılaqtırıń.
* Main-de for cikli menen `arr.get(-1)` hám `arr.get(10)` shaqırıp, programma qulamawın támiyinleń.
4-tapsırma: Retry Logic (Qayta urınıw).
Simulyaciya: `bool connectToServer()` funkciyası 80% itimallıq penen `false` (qáte), 20% itimallıq penen `true` (ok) qaytaradı (random qollanıń).
`void stableConnection()` funkciyasın jazıń. Ol `connectToServer()` di shaqıradı.
* Eger qáte bolsa, 1 sekund kútedi hám qayta urınadı. * Maksimal 5 ret urınadı.
* Eger 5 retten keyin de bolmasa, "Server qoljetimsiz" dep `runtime_error` ılaqtırıń.
5-tapsırma: "Graceful Degradation" (Jumsaq túsiw).
Veb-sayt sistemasın simulyaciya etiń. `showPage()` funkciyası úsh bólekten turadı:
1. `loadHeader()` (Dizayn) - Hár qashan isleydi.
2. `loadAds()` (Reklama) - 50% qáte beredi (throw).
3. `loadContent()` (Mazmun) - Hár qashan isleydi.
Wazıypa: `loadAds()` qáte berse de, bettiń basqa bólekleri (Header hám Content) ekranǵa shıǵıwı kerek. Reklama ornına "Reklama júklenbedi" dep jazılsın. `try-catch` ti durıs jaylastırıń.
Соседние файлы в папке Programmalıq támiynat sapasın támiyinlew