Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Programmalıq támiynat sapasın támiyinlew / 8-ameliy_ST
.pdf
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
