Pagpapatunay ng sertipikadong software. Paraan ng Malinis na Kwarto ng Pag-verify ng Software

Pagpapatunay at Pagpapatunay ( pagpapatunay at pagpapatunay-V& V) ay nilayon para sa pagsusuri, pagpapatunay ng tamang pagpapatupad at pagsunod ng software sa mga detalye at mga kinakailangan ng customer. Ang mga pamamaraang ito para sa pagsuri sa kawastuhan ng mga programa at system ay nangangahulugang:

  • ang pag-verify ay pagsuri na ang system ay binuo nang tama alinsunod sa mga detalye nito;
  • Ang pagpapatunay ay isang pagsusuri ng tamang katuparan ng mga tinukoy na kinakailangan ng system.

Nakakatulong ang pag-verify upang makagawa ng konklusyon tungkol sa kawastuhan ng nilikhang sistema pagkatapos makumpleto ang disenyo at pag-unlad nito. Binibigyang-daan ka ng pagpapatunay na matukoy ang pagiging posible ng mga tinukoy na kinakailangan at may kasamang ilang mga aksyon upang makakuha ng mga tamang programa at system, katulad ng:

  • mga pamamaraan sa pagpaplano para sa pagsusuri at pagsubaybay sa mga desisyon at kinakailangan sa disenyo;
  • tinitiyak ang antas ng automation ng disenyo ng programa gamit ang mga tool ng CASE;
  • pagsuri sa tamang paggana ng mga programa gamit ang mga pamamaraan ng pagsubok sa mga hanay ng mga target na pagsubok;
  • pagbagay ng produkto sa operating environment, atbp.

Nagagawa ng pagpapatunay ang mga aktibidad na ito sa pamamagitan ng pagsusuri at pag-inspeksyon sa mga detalye at mga resulta ng disenyo ng mga yugto ng ikot ng buhay upang kumpirmahin na mayroong tamang pagpapatupad ng mga paunang kinakailangan at ang mga tinukoy na kundisyon at mga hadlang ay natutugunan. Kasama sa mga gawain ng pag-verify at pagpapatunay ang pagsuri sa pagkakumpleto, pagkakapare-pareho at hindi malabo ng mga detalye ng mga kinakailangan at ang tamang pagganap ng mga function ng system.

Ang pagpapatunay at pagpapatunay ay napapailalim sa:

  • pangunahing bahagi ng system;
  • mga interface ng mga bahagi (software, teknikal at impormasyon) at mga pakikipag-ugnayan ng mga bagay (mga protocol at mensahe) na tinitiyak ang pagpapatupad ng system sa mga distributed na kapaligiran;
  • paraan ng pag-access sa database at mga file (mga transaksyon at mensahe) at pagsuri sa mga paraan ng proteksyon laban sa hindi awtorisadong pag-access sa data ng iba't ibang mga gumagamit;
  • dokumentasyon para sa software at ang sistema sa kabuuan;
  • mga pagsubok, mga pamamaraan ng pagsubok at data ng pag-input.

Sa madaling salita, ang mga pangunahing sistematikong pamamaraan para sa kawastuhan ng programa ay:

  • pagpapatunay mga bahagi ng software at pagpapatunay ng pagtutukoy ng mga kinakailangan;
  • Pag-inspeksyon ng PS upang maitaguyod ang pagsunod ng programa sa ibinigay na mga pagtutukoy;
  • pagsubok output code ng software sa data ng pagsubok sa isang partikular na operating environment upang matukoy ang mga error at depekto na dulot ng iba't ibang mga depekto, maanomalyang sitwasyon, pagkabigo ng kagamitan o emergency na pagwawakas ng system (tingnan ang Kabanata 9).

Kasama sa mga pamantayang ISO/IEC 3918-99 at 12207 ang mga proseso ng pagpapatunay at pagpapatunay. Para sa kanila, ang mga layunin, layunin at aksyon ay tinukoy upang i-verify ang kawastuhan ng nilikhang produkto (kabilang ang mga gumagana at intermediate na produkto) sa mga yugto ng ikot ng buhay at pagsunod sa mga kinakailangan nito.

Ang pangunahing layunin ng mga proseso ng pagpapatunay at pagpapatunay ay upang suriin at kumpirmahin na ang panghuling software ay angkop para sa layunin at nakakatugon sa mga kinakailangan ng customer. Ginagawang posible ng mga prosesong ito na matukoy ang mga error sa mga produkto ng trabaho ng mga yugto ng ikot ng buhay, nang hindi tinutukoy ang mga dahilan para sa kanilang paglitaw, at upang maitaguyod din ang kawastuhan ng software na may kaugnayan sa pagtutukoy nito.

Ang mga prosesong ito ay magkakaugnay at binibigyang-kahulugan ng isang termino - "pagpatunay at pagpapatunay" (V&V 7).

Sa panahon ng pag-verify, ang mga sumusunod ay isinasagawa:

  • pagsuri sa kawastuhan ng pagsasalin ng mga indibidwal na bahagi sa output code, pati na rin ang mga paglalarawan ng interface sa pamamagitan ng pagsubaybay sa mga pagkakaugnay ng mga bahagi alinsunod sa tinukoy na mga kinakailangan ng customer;
  • pagsusuri ng kawastuhan ng pag-access sa mga file o database, na isinasaalang-alang ang mga pamamaraan para sa pagmamanipula ng data at paglilipat ng mga resulta na pinagtibay sa mga tool ng system na ginamit;
  • sinusuri ang mga kagamitan sa proteksyon ng bahagi para sa pagsunod sa mga kinakailangan ng customer at pagsasagawa ng kanilang pagsubaybay.

Matapos suriin ang mga indibidwal na bahagi ng system, ang kanilang pagsasama ay isinasagawa, pati na rin ang pagpapatunay at pagpapatunay ng pinagsamang sistema. Sinusubukan ang system laban sa iba't ibang test suite upang matukoy ang kasapatan at kasapatan ng mga suite na ito upang makumpleto ang pagsubok at maitatag ang kawastuhan ng system.

Ang ideya ng ​​paglikha ng isang pang-internasyonal na proyekto sa pormal na pag-verify ay iminungkahi ni T. Hoar, ito ay tinalakay sa isang symposium sa na-verify na software noong Pebrero 2005 sa California. Pagkatapos noong Oktubre ng parehong taon, sa kumperensya ng IFIP sa Zurich, isang internasyonal na proyekto sa loob ng 15 taon ang pinagtibay upang bumuo ng "isang komprehensibong awtomatikong hanay ng mga tool para sa pagsuri sa kawastuhan ng software."

Binubuo nito ang mga sumusunod na pangunahing gawain:

  • pagbuo ng isang pinag-isang teorya ng pagbuo at pagsusuri ng programa;
  • pagbuo ng isang komprehensibo, pinagsama-samang hanay ng mga tool sa pag-verify para sa lahat ng mga yugto ng produksyon, kabilang ang pagbuo at pag-verify ng detalye, pagbuo ng test case, pagpipino ng programa, pagsusuri at pag-verify;
  • paglikha ng isang repositoryo ng mga pormal na detalye at na-verify na mga bagay ng software ng iba't ibang uri at uri.

Ipinapalagay ng proyektong ito na sasaklawin ng pag-verify ang lahat ng aspeto ng paglikha at pagsuri sa kawastuhan ng software at magiging isang panlunas sa lahat ng mga sakit na nauugnay sa patuloy na paglitaw ng mga error sa mga nilikhang programa.

Maraming pormal na pamamaraan para sa pagpapatunay at pagpapatunay ng mga tinukoy na programa ang sumailalim sa praktikal na pagsubok. Maraming gawain ang ginawa ng internasyonal na komite na ISO/IEC sa loob ng balangkas ng pamantayang ISO/IEC 12207:2002 para i-standardize ang mga proseso ng pagpapatunay at pagpapatunay ng software. Ang pagsuri sa kawastuhan ng iba't ibang mga bagay sa programming gamit ang mga pormal na pamamaraan ay maaasahan.

Ang repositoryo ay isang imbakan ng mga programa, mga detalye at mga tool na ginagamit sa pagbuo at pagsubok, pagsusuri ng mga natapos na bahagi, mga tool at paghahanda ng pamamaraan. Siya ay itinalaga sa mga sumusunod na pangkalahatang gawain:

  • akumulasyon ng mga na-verify na detalye, mga pamamaraan ng patunay, mga bagay ng software at mga pagpapatupad ng code para sa mga kumplikadong aplikasyon;
  • akumulasyon ng iba't ibang mga pamamaraan ng pag-verify, ang kanilang disenyo sa isang form na angkop para sa paghahanap at pagpili ng isang ipinatupad na teoretikal na ideya para sa karagdagang aplikasyon;
  • pagbuo ng mga karaniwang form para sa pagtukoy at pagpapalitan ng mga pormal na pagtutukoy ng iba't ibang mga bagay sa programming, pati na rin ang mga tool at handa na mga sistema;
  • pagbuo ng interoperability at mga mekanismo ng pakikipag-ugnayan para sa paglipat ng mga natapos na na-verify na produkto mula sa imbakan patungo sa mga bagong ipinamamahagi at network na kapaligiran upang lumikha ng bagong software.

Ang proyektong ito ay inaasahang mabubuo sa loob ng 50 taon. Ang mga naunang proyekto ay nagtatakda ng mga katulad na layunin: pagpapabuti ng kalidad ng software, pagpormal ng mga modelo ng serbisyo, pagbabawas ng pagiging kumplikado sa pamamagitan ng paggamit ng PIC, paglikha ng mga tool sa pag-debug para sa visual na pag-diagnose ng mga error at pag-aalis ng mga ito, atbp. Gayunpaman, walang pangunahing pagbabago sa programming alinman sa mga tuntunin ng visual na pag-debug o pagkamit ng mataas na kalidad ng software. Patuloy ang proseso ng pag-unlad.

Ang isang bagong internasyonal na proyekto ng pag-verify ng software ay nangangailangan mula sa mga kalahok nito hindi lamang ng kaalaman sa mga teoretikal na aspeto ng mga detalye ng programa, kundi pati na rin ng mga mataas na kwalipikadong programmer para sa pagpapatupad nito sa mga darating na taon.

Ang isang pangkat ay kinabibilangan ng higit sa dalawang tao, ang tanong ay hindi maiiwasang lumitaw tungkol sa pamamahagi ng mga tungkulin, karapatan at responsibilidad sa koponan. Ang tiyak na hanay ng mga tungkulin ay tinutukoy ng maraming mga kadahilanan - ang bilang ng mga kalahok sa pag-unlad at ang kanilang mga personal na kagustuhan, ang pinagtibay na pamamaraan ng pag-unlad, mga tampok ng proyekto at iba pang mga kadahilanan. Sa halos anumang development team, ang mga tungkuling nakalista sa ibaba ay maaaring makilala. Ang ilan sa mga ito ay maaaring ganap na wala, habang ang mga indibidwal ay maaaring gumanap ng ilang mga tungkulin nang sabay-sabay, ngunit ang pangkalahatang komposisyon ay bahagyang nagbabago.

Customer (aplikante). Ang tungkuling ito ay pag-aari ng isang kinatawan ng organisasyon na nag-utos sa pagbuo ng system. Kadalasan ang aplikante ay limitado sa kanyang pakikipag-ugnayan at nakikipag-ugnayan lamang sa mga tagapamahala ng proyekto at sa espesyalista sa sertipikasyon o pagpapatupad. Karaniwan, ang customer ay may karapatan na baguhin ang mga kinakailangan para sa produkto (lamang sa pakikipag-ugnayan sa mga tagapamahala), basahin ang disenyo at dokumentasyon ng sertipikasyon na nakakaapekto sa mga hindi teknikal na tampok ng system na binuo.

Tagapamahala ng proyekto. Ang tungkuling ito ay nagbibigay ng channel ng komunikasyon sa pagitan ng kliyente at ng pangkat ng proyekto. Pinamamahalaan ng tagapamahala ng produkto ang mga inaasahan ng customer at bubuo at pinapanatili ang konteksto ng negosyo ng proyekto. Ang kanyang trabaho ay hindi direktang nauugnay sa mga benta, siya ay nakatuon sa produkto, ang kanyang gawain ay upang matukoy at magbigay kinakailangan ng customer. Ang tagapamahala ng proyekto ay may karapatan na baguhin ang mga kinakailangan ng produkto at panghuling dokumentasyon ng produkto.

Tagapamahala ng Programa. Ang tungkuling ito ay namamahala sa mga komunikasyon at ugnayan sa loob ng pangkat ng proyekto, nagsisilbing coordinator, bubuo at namamahala sa mga pagtutukoy sa pagganap, pinapanatili ang iskedyul ng proyekto at mga ulat sa katayuan ng proyekto, at nagpapasimula ng mga desisyong kritikal sa pag-unlad ng proyekto.

Pagsubok- ang proseso ng pagpapatupad ng isang programa upang makita ang isang error.

Data ng pagsubok- mga input na ginagamit upang subukan ang system.

Test case- mga input para sa pagsubok sa system at inaasahang mga output depende sa mga input kung ang system ay gumagana ayon sa mga kinakailangan na detalye.

Magandang sitwasyon sa pagsubok- isang sitwasyon na may mataas na posibilidad na makakita ng hindi pa natukoy na error.

Matagumpay na pagsubok- isang pagsubok na nakakakita ng hindi pa natukoy na error.

Error- isang aksyon ng programmer sa yugto ng pag-unlad, na humahantong sa katotohanan na ang software ay naglalaman ng isang panloob na depekto, na sa panahon ng pagpapatakbo ng programa ay maaaring humantong sa isang hindi tamang resulta.

Pagtanggi- hindi inaasahang pag-uugali ng system, na humahantong sa isang hindi inaasahang resulta, na maaaring sanhi ng mga depekto na nakapaloob dito.

Kaya, sa panahon ng proseso ng pagsubok ng software, ang mga sumusunod ay karaniwang sinusuri.

Ang mga sistema ng software ay nasa lahat ng dako: halos anumang elektronikong aparato ay naglalaman ng software ng isang uri o iba pa. Kung walang naaangkop na software sa modernong mundo, imposibleng isipin ang industriyal na produksyon, mga paaralan at unibersidad, ang sistema ng pangangalagang pangkalusugan, mga institusyong pinansyal at pamahalaan. Maraming user ang gumagamit ng software para sa self-education, entertainment, atbp. Ang paglikha ng isang detalye ng mga kinakailangan, pagbuo, pagbabago at pagpapanatili ng mga naturang software system ay ang esensya ng teknikal na disiplina. software engineering(software engineering, SE).

Kahit na ang mga simpleng sistema ng software ay may mataas na antas ng pagiging kumplikado, kaya ang kanilang pag-unlad ay nangangailangan ng paggamit ng buong arsenal ng mga pamamaraan ng teknikal at engineering. Samakatuwid, ang software engineering ay engineering isang disiplina kung saan ginagamit ng mga espesyalista ang teorya at pamamaraan ng computer science upang matagumpay na malutas ang iba't ibang uri ng hindi karaniwang mga problema. Ngunit, siyempre, hindi lahat ng proyekto ng software ay matagumpay na nakumpleto dahil sa iba't ibang mga kadahilanan. Kapansin-pansin ang pag-unlad: sa nakalipas na 30 taon, ang software ay naging napakakumplikado, lumitaw ang mga program na nag-aalok ng mga user ng napakalaking kakayahan sa serbisyo para sa pakikipagtulungan sa kanila.

Dapat tandaan na ang software engineering ay pangunahing umuunlad bilang tugon sa mga bagong hamon sa pagbuo ng malalaking custom software system para sa industriya, gobyerno, at depensa. Sa kabilang banda, sa kasalukuyan ang saklaw ng software ay napakalawak: mula sa mga laro sa mga dalubhasang game console, pati na rin ang mga produkto ng software para sa mga personal na computer hanggang sa napakalaking scalable distributed system.

Kapag lumilikha ng isang produkto ng software, ang isang engineer ay nahaharap sa maraming mga katanungan ng iba't ibang uri, tulad ng, halimbawa, mga kinakailangan sa software, mga modelo ng system, mga detalye ng software, pagiging maaasahan ng nilikha na produkto, atbp. Tinatalakay ng papel na ito ang isa sa pinakamahirap na hakbang sa paglikha ng anumang produkto ng software – pag-verify at sertipikasyon. Ang gawain ay nagbibigay ng isang pangkalahatang ideya ng pag-verify at sertipikasyon ng software; nakikilala ng mambabasa ang mga pamamaraan ng static na pag-verify, dynamic na pag-verify, at mga pamamaraan ng sertipikasyon ng mga kritikal na sistema.

1. Pangkalahatang impormasyon tungkol sa pag-verify at sertipikasyon ng software.

1.1. Panimula sa Pagpapatunay at Kwalipikasyon

Ang pag-verify at kwalipikasyon ay ang mga proseso ng pagsubok at pagsusuri na nagpapatunay na ang software ay nakakatugon sa mga pagtutukoy nito at mga kinakailangan ng customer. Ang pagpapatunay at sertipikasyon ay sumasaklaw sa buong ikot ng buhay ng software - nagsisimula sila sa yugto ng pagsusuri ng mga kinakailangan at nagtatapos sa pagpapatunay ng code ng programa sa yugto ng pagsubok sa sistema ng software.

Ang pag-verify at sertipikasyon ay ganap na magkakaibang mga konsepto, ngunit madalas silang nalilito. Upang makilala ang mga ito, kukunin natin ang pangunahing pagkakaiba sa pagitan ng mga terminong ito. Sinasagot ng pag-verify ang tanong kung tama ito nilikha system, at sinasagot ng sertipikasyon ang tanong kung tama ito gumagana sistema. Kasunod nito na sinusuri ng pag-verify ang pagsunod ng software sa mga detalye ng system, sa partikular na mga kinakailangan sa functional at non-functional. Ang sertipikasyon ay isang mas pangkalahatang proseso. Sa panahon ng sertipikasyon, ang layunin ng inhinyero ay patunayan sa customer na natutugunan ng produkto ang mga inaasahan ng huli. Isinasagawa ang sertipikasyon pagkatapos pagpapatunay.

Sa mga unang yugto ng pagbuo ng software, ang sertipikasyon ng mga kinakailangan ng system ay napakahalaga. Kadalasan mayroong mga error, pagkukulang, at pagkukulang sa mga kinakailangan, na maaaring humantong sa hindi natutugunan ng produkto ang mga plano ng customer. Dapat harapin ng engineer ang problemang ito. Gayunpaman, tulad ng alam natin, mahirap alisin ang lahat ng mga error sa mga kinakailangan. Ang mga indibidwal na error ay maaari lamang matuklasan kapag ang produkto ng software ay ipinatupad.

Ang mga proseso ng pag-verify at sertipikasyon ay gumagamit ng dalawang pangunahing pamamaraan para sa pagsuri at pagsusuri ng mga sistema: inspeksyon ng software at pagsubok ng software. Kasama sa inspeksyon ng software ang pagsusuri at pagsuri sa iba't ibang representasyon ng system, tulad ng dokumentasyon. Ang inspeksyon ay nangyayari sa lahat ng yugto ng software system development. Kaayon ng inspeksyon, maaaring isagawa ang awtomatikong pagsusuri ng source code ng mga programa at mga kaugnay na dokumento. Ang inspeksyon at awtomatikong pagsusuri ay mga static na paraan ng pag-verify at pagpapatunay dahil hindi sila nangangailangan ng isang executable system. Ang pagsubok ng software ay ang pagsusuri ng data ng output at mga katangian ng pagganap ng isang produkto ng software upang i-verify ang tamang operasyon ng system. Ang pagsubok ay isang dynamic na paraan ng pag-verify at sertipikasyon, dahil inilalapat ito sa isang executable system.

Sa Fig. Ipinapakita ng Figure 1.1 ang lugar ng inspeksyon at pagsubok sa proseso ng pagbuo ng software. Ang mga arrow ay nagpapahiwatig ng mga yugto ng proseso ng pag-unlad kung saan maaaring ilapat ang mga pamamaraang ito.


kanin. 1.1. Static at dynamic na pag-verify at sertipikasyon

Ayon sa scheme na ito, ang inspeksyon ay maaaring isagawa sa lahat ng mga yugto ng pag-unlad ng system, at ang pagsubok ay maaaring isagawa sa mga kaso kung saan ang isang prototype o executable na programa ay nilikha. Kasama sa mga paraan ng inspeksyon ang: inspeksyon ng programa, awtomatikong pagsusuri ng source code, at pormal na pag-verify. Gayunpaman, sa mga static na pamamaraan posible na suriin lamang ang pagsunod sa mga programa na may mga pagtutukoy; sa kanilang tulong imposibleng matukoy ang tamang paggana ng system. Bilang karagdagan, ang mga hindi gumaganang katangian tulad ng pagganap at pagiging maaasahan ay hindi mabe-verify gamit ang mga static na pamamaraan. Samakatuwid, ang pagsubok ng system ay dapat isagawa upang pag-aralan ang mga hindi gumaganang katangian. Sa kasalukuyan, sa kabila ng malawakang paggamit ng software inspeksyon, pagsubok pa rin ang nangingibabaw na paraan ng pagpapatunay at sertipikasyon. Ang pagsubok ay isang pagsubok sa pagpapatakbo ng mga programa na may data na katulad ng totoong data na ipoproseso sa panahon ng pagpapatakbo ng system. Ang mga problema sa pagpapatakbo ng software ay natutukoy sa pamamagitan ng pagsusuri sa output data, kung saan ang mga maanomalyang natukoy at sinisiyasat.

Ang iba't ibang uri ng pagsubok ay ginagamit sa iba't ibang yugto ng proseso ng pagbuo ng software. Pagsusuri ng depekto isinagawa upang matukoy ang mga hindi pagkakapare-pareho sa pagitan ng isang produkto ng software at detalye nito, na sanhi ng mga error sa code ng programa. Ang ganitong mga pagsubok ay idinisenyo upang matukoy ang mga error sa system, at hindi upang gayahin ang operasyon nito. Pagsusulit sa istatistika sinusuri ang pagganap at pagiging maaasahan ng mga programa, pati na rin ang pagpapatakbo ng programa kapag gumagamit ng iba't ibang mga mode ng pagpapatakbo nito. Ang mga pagsubok ay idinisenyo para sa layunin ng simulation, na ginagaya ang aktwal na operasyon ng system na may totoong output data. Ang pagiging maaasahan ng system ay tinutukoy ng bilang ng mga pagkabigo na nabanggit sa pagpapatakbo ng mga programa. Ang pagganap ay tinatasa sa pamamagitan ng pagsukat sa kabuuang oras ng pagpapatupad ng mga operasyon at ang oras ng pagtugon ng system kapag nagpoproseso ng data ng pagsubok.

Siyempre, walang malinaw na mga hangganan sa pagitan ng dalawang pamamaraan ng pagsubok na ito. Sa panahon ng pagsubok, ang tester ay maaaring makakuha ng isang intuitive na pag-unawa sa pagiging maaasahan ng software, at sa panahon ng statistical testing, posibleng matukoy ang mga depekto sa software.

Ang pangunahing layunin ng pag-verify at kwalipikasyon ay upang matiyak na ang sistema ay "akma para sa layunin". Ang pagsunod ng isang software system sa layunin nito ay hindi nagpapahiwatig na dapat itong ganap na walang error. Sa halip, ang sistema ay dapat magsilbi nang maayos sa mga layunin kung saan ito idinisenyo. Antas ng kinakailangan pagiging maaasahan ng pagsunod depende sa layunin ng system, mga inaasahan ng user at kundisyon sa merkado ng software.

Layunin ng software. Ang antas ng pagiging maaasahan ng pagsunod ay nakasalalay sa kahalagahan (kritikal) ng produktong software na binuo ayon sa ilang pamantayan. Halimbawa, ang software para sa medikal na pag-install na "Heart-lung device" ay sobrang kritikal, dahil ang buhay ng tao ay nakasalalay sa kalidad ng pagpapatakbo ng system. Maaari tayong magbigay ng halimbawa ng mga low-criticality system. Ito ay, sa partikular, mga prototype ng software system na binuo upang ipakita ang ilang mga bagong ideya.

Sa panahon ng pag-verify at sertipikasyon sa system, bilang panuntunan, ang mga error ay natuklasan na dapat itama. Pagkatapos iwasto ang mga error, kailangan mong suriin muli ang programa. Upang gawin ito, maaari mong suriin muli ang programa o ulitin ang pagsubok. Dapat malaman ng developer na walang mga simpleng pamamaraan para sa pagwawasto ng mga error sa mga programa. Ang muling pagsusuri ay dapat gawin upang matiyak na ang mga pagbabagong ginawa sa programa ay hindi nagpasok ng mga bagong error sa system, dahil sa pagsasagawa, ang isang mataas na porsyento ng "pag-aayos ng bug" ay hindi ganap na nakumpleto o nagpapakilala ng mga bagong error sa programa. Kapag bumubuo ng malalaking sistema, ang bawat retest ng buong sistema ay napakamahal; sa parehong oras, upang makatipid ng pera, ang mga koneksyon at dependency sa pagitan ng mga bahagi ng system ay tinutukoy at ang pagsubok sa mga indibidwal na bahagi ay isinasagawa.

2. Pag-verify at sertipikasyon ng software

2.1. Pagpaplano para sa Pagpapatunay at Kwalipikasyon

Ang pagpapatunay at sertipikasyon ay mamahaling proseso. Para sa mga kumplikadong sistema, halimbawa, ang sumusunod na ratio ay tipikal: kalahati ng kabuuang badyet na inilaan para sa pagpapatupad ng system ay ginugugol sa pag-verify at sertipikasyon. Samakatuwid, ang pangangailangan para sa maingat na pagpaplano ng pagpapatunay at kwalipikasyon ay halata.

Ang pagpaplano para sa pagpapatunay at kwalipikasyon ay dapat magsimula nang maaga hangga't maaari. Ang Figure 2.1 ay nagpapakita ng modelo ng software development na isinasaalang-alang ang proseso ng pagpaplano ng pagsubok.


kanin. 2.1. Pagpaplano ng pagsubok sa panahon ng pag-unlad at pagsubok,

Spesipikasyong kinakailangan

Detalye ng system - detalye ng system

Disenyo ng system - disenyo ng sistema

Detalyadong Disenyo - detalyadong disenyo

Plano ng pagsubok sa pagtanggap - pagpaplano ng mga pagsusulit sa pagtanggap

System integration test plan – pagpaplano para sa system assembly testing

Sub-system integration test plan – pagpaplano para sa pagsubok sa subsystem assembly

Module at unit code at tess – coding at pagsubok ng mga module at mga bahagi

Sub-system integration test – pagsubok sa pagpupulong ng mga subsystem

Pagsubok sa pagsasama ng system - pagsubok sa pagpupulong ng system

Pagsubok sa pagtanggap - mga pagsusulit sa pagtanggap

Ang serbisyo ay isang produkto ng software.

Ipinapakita ng figure na ang proseso ng pag-verify at sertipikasyon ay nahahati sa ilang mga yugto, at sa bawat yugto ay isinasagawa ang isang tiyak na pagsubok.

Sa proseso ng pagpaplano ng pag-verify at sertipikasyon, kinakailangan upang matukoy ang kaugnayan sa pagitan ng static at dynamic na mga pamamaraan ng pag-verify ng system, matukoy ang mga pamantayan at mga pamamaraan ng inspeksyon, at gumuhit ng isang plano sa pagsubok ng programa. Ang uri ng system na binuo ay tumutukoy kung ang higit na pansin ay dapat bayaran sa inspeksyon o pagsubok. Kung mas kritikal ang system, mas dapat bigyang pansin ang mga static na paraan ng pag-verify.

Ang plano sa pagsubok ng software ay dapat kasama ang: isang paglalarawan ng mga pangunahing yugto ng proseso ng pagsubok, ang kakayahang mag-trace ng mga kinakailangan (dapat planuhin ang pagsubok upang masubukan ang lahat ng mga kinakailangan nang hiwalay), mga elemento na susuriin (lahat ng "mga output" ng pagbuo ng software proseso na kailangang masuri ay dapat matukoy), iskedyul ng pagsubok (isang iskedyul ng oras para sa pagsubok ay iginuhit at ang paglalaan ng mapagkukunan ay isinasagawa ayon sa iskedyul na ito, na ang iskedyul ng pagsusulit ay nakatali sa mas pangkalahatang iskedyul ng pagbuo ng proyekto), mga pamamaraan sa pagrekord ng pagsubok (upang i-verify ang tamang pagpapatupad ng mga pagsubok), hardware at software na kinakailangan, mga limitasyon (subukang asahan ang lahat ng hindi kanais-nais na mga kadahilanan na nakakaapekto sa mga proseso ng pagsubok, halimbawa, kakulangan ng pondo, mga tauhan...).

Tulad ng ibang mga plano, ang isang test plan ay hindi isang nakapirming dokumento. Dapat itong regular na suriin dahil ang pagsubok ay nakasalalay sa proseso ng pagpapatupad ng system. Halimbawa, kung ang pagpapatupad ng anumang bahagi ng mga system ay hindi nakumpleto, kung gayon imposibleng subukan ang pagpupulong ng system. Ang pagbabago ng plano ay nagpapahintulot sa mga empleyado (hindi kasalukuyang nagtatrabaho) na magamit sa ibang mga trabaho.

2.2. Inspeksyon ng mga sistema ng software

Ang pagsubok sa system ng mga programa ay nangangailangan ng pagbuo ng isang malaking bilang ng mga pagsubok, ang kanilang pagpapatupad at pagpapatunay. Nangangahulugan ito na ang prosesong ito ay medyo labor-intensive at mahal. Ang bawat pagsubok ay may kakayahang makakita ng isa, o mas madalas na ilang, mga error sa programa. Ang dahilan nito ay ang mga pagkabigo dahil sa mga error sa system ay kadalasang humahantong sa pagkasira ng data. Samakatuwid, mahirap sabihin kung gaano karaming mga error ang "responsable" para sa isang pagkabigo ng system.

Ang pag-inspeksyon ng mga programa ay hindi nangangailangan ng mga ito upang makumpleto, kaya ang inspeksyon ay maaaring gawin kahit na sa mga unang yugto ng pag-unlad. Sa panahon ng inspeksyon, sinusuri ang orihinal na representasyon ng system. Ito ay maaaring isang modelo ng system, isang detalye, o isang program na nakasulat sa isang mataas na antas ng wika. Ang pagtuklas ng error ay nakakamit sa pamamagitan ng paggamit ng kaalaman sa system na isinasaalang-alang at ang semantika ng orihinal na representasyon nito. Ang bawat error ay maaaring isaalang-alang nang hiwalay, nang hindi binibigyang pansin kung paano ito nakakaapekto sa pag-uugali ng system.

Ang inspeksyon ay napatunayang isang epektibong paraan para sa pag-detect ng mga error at mas mura kaysa sa malawak na pagsubok. Sa pamamagitan ng inspeksyon, higit sa 60% ng lahat ng mga error ay maaaring makita, at sa isang mas pormal na diskarte (gamit ang mga pamamaraan ng matematika) - higit sa 90%. Ang proseso ng inspeksyon ay maaari ding suriin ang iba pang mga katangian ng kalidad ng mga system: pagsunod sa mga pamantayan, portability, at maintainability.

Sa mga bahagi ng system, ang pagtukoy ng mga error sa pamamagitan ng inspeksyon ay mas epektibo kaysa sa pamamagitan ng pagsubok. Una, sa isang sesyon ng inspeksyon maaari kang makakita ng maraming mga depekto sa software code; Kapag ginamit ang pagsubok, isang error lang ang karaniwang nakikita sa isang session, dahil ang mga error ay maaaring humantong sa kumpletong paghinto (pagkabigo) ng system, at ang mga epekto ng mga error ay maaaring mag-overlap sa isa't isa. Pangalawa, ang inspeksyon ay gumagamit ng kaalaman tungkol sa subject area at programming language. Dapat malaman ng espesyalista sa inspeksyon ang mga uri ng mga pagkakamali, na ginagawang posible na tumuon sa mga partikular na uri ng mga depekto.

Malinaw na hindi mapapalitan ng inspeksyon ang pagsubok. Ang inspeksyon ay pinakamahusay na ginagamit sa mga unang yugto upang matukoy ang pinakamalaking bilang ng mga error. Ang inspeksyon ay nagpapatunay na ang software ay sumusunod sa mga pagtutukoy nito, ngunit sa ganitong paraan, halimbawa, imposibleng masuri ang dynamic na pag-uugali ng system. Bukod dito, hindi makatwiran na siyasatin ang mga kumpletong system na binuo mula sa ilang mga subsystem. Sa antas na ito, pagsubok lamang ang posible.

Isang pagkakamali na paniwalaan na ang pagsubok at inspeksyon ay nakikipagkumpitensyang paraan ng pagpapatunay at sertipikasyon. Ang bawat isa sa kanila ay may sariling mga pakinabang at disadvantages. Samakatuwid, ang inspeksyon at pagsubok ay dapat gamitin nang magkasama sa proseso ng pag-verify at kwalipikasyon.

Minsan ang mga paghihirap ay lumitaw sa panahon ng mga inspeksyon sa isang organisasyon. Ang mga eksperto na may malawak na karanasan sa pagsubok ng software ay nag-aatubili na sumang-ayon na ang inspeksyon ay isang mas epektibong paraan ng pag-aalis ng mga depekto sa system kaysa sa pagsubok. Ang mga tagapamahala ay nag-iingat sa mga teknolohiyang ito dahil ang pagpapatupad ng inspeksyon ay nangangailangan ng mga karagdagang gastos. Ang tunay na pagtitipid sa gastos kapag gumagamit ng inspeksyon ay nakakamit lamang sa pamamagitan ng karanasan ng mga espesyalista na nagsasagawa nito.

2.3. Pagsusuri ng Programa

Ang inspeksyon ng programa ay ang pagtingin at pagsusuri ng mga programa upang makita ang mga error sa mga ito. Ang ideya ng isang pormal na proseso ng pag-verify ng programa ay binuo ng IBM noong 1970s. Sa kasalukuyan, malawakang ginagamit ang paraan ng pag-verify na ito. Maraming iba pang mga pamamaraan ang binuo sa batayan nito, ngunit lahat sila ay batay sa pangunahing ideya ng paraan ng inspeksyon, ayon sa kung saan ang isang pangkat ng mga espesyalista ay nagsasagawa ng isang masusing pagsusuri at pagsusuri ng source code ng linya-by-line. programa. Ang pangunahing pagkakaiba sa pagitan ng inspeksyon at iba pang mga paraan ng pagtatasa ng kalidad ng mga programa ay ang layunin nito ay tuklasin ang mga depekto, at hindi upang siyasatin ang mga pangkalahatang problema ng proyekto. Ang mga depekto ay alinman sa mga error sa source code o hindi pagsunod ng programa sa mga pamantayan.

Pormal na ang proseso ng inspeksyon. Ang isang maliit na grupo ng mga tao (karaniwang hindi hihigit sa apat na tao) ay nakikibahagi dito. Bawat isa sa grupo ay may kanya-kanyang tungkulin. Ang mga sumusunod ay dapat naroroon: may-akda, tagasuri, inspektor, tagapag-ugnay. Ang tagasuri ay "binibigkas" ang code ng programa, sinusuri ito ng inspektor, at ang coordinator ay may pananagutan sa pag-aayos ng proseso. Habang ang mga organisasyon ay nakakakuha ng higit na karanasan sa mga inspeksyon, maaaring lumabas ang iba pang mga panukala para sa pagtatalaga ng mga tungkulin sa koponan (halimbawa, maaaring magkaroon ng maraming tungkulin ang isang tao, kaya maaaring mag-iba ang bilang ng mga miyembro sa pangkat ng inspeksyon).

Upang simulan ang proseso ng inspeksyon ng programa, ang mga sumusunod na kondisyon ay kinakailangan: ang pagkakaroon ng isang tumpak na detalye ng code (nang walang kumpletong detalye, imposibleng makakita ng mga depekto sa bahagi ng software na sinisiyasat); ang mga miyembro ng pangkat ng inspeksyon ay dapat magkaroon ng masusing kaalaman sa mga pamantayan ng pag-unlad; Ang grupo ay dapat magkaroon ng pinakabagong syntactically correct na bersyon ng programa sa pagtatapon nito (walang saysay na suriin ang code na "halos kumpleto").


kanin. 2.2. Proseso ng Inspeksyon

Sa Fig. Ipinapakita ng Figure 2.2 ang pangkalahatang proseso ng inspeksyon. Ito ay iniangkop sa mga kinakailangan ng mga organisasyon na gumagamit ng inspeksyon ng programa.

Ang mismong proseso ng inspeksyon ay dapat na medyo maikli (hindi hihigit sa dalawang oras) at nakatuon lamang sa pagtukoy ng mga depekto, anomalya at hindi pagsunod sa mga pamantayan. Ang pangkat ng inspeksyon ay hindi dapat magmungkahi ng mga paraan upang itama ang mga depekto o magrekomenda ng anumang mga pagbabago sa iba pang bahagi ng software.

Pagkatapos ng inspeksyon, binago ng may-akda ang programa, itinatama ang mga nakitang error. Sa yugto ng rebisyon, magpapasya ang coordinator kung kailangan ang muling pagsisiyasat. Kung hindi kinakailangan ang muling pagsisiyasat, lahat ng nakitang mga depekto ay nakadokumento.

Sa pamamagitan ng proseso ng inspeksyon, ang organisasyon ay nakakakuha ng karanasan upang ang mga resulta ng inspeksyon ay magagamit upang mapabuti ang buong proseso ng pagbuo ng software. Sa panahon ng inspeksyon, ang pagsusuri ng mga nakitang depekto ay isinasagawa. Tinutukoy ng pangkat ng inspeksyon at ng mga may-akda ng inspeksyon na code ang mga sanhi ng mga depekto. Upang maiwasang mangyari ang mga katulad na depekto sa mga system sa hinaharap, kinakailangan na alisin ang mga sanhi ng mga depekto hangga't maaari, na nangangahulugan ng paggawa ng mga pagbabago sa proseso ng pagbuo ng mga software system.

Ang pagtiyak sa inspeksyon ng software ay nangangailangan ng kwalipikadong pamamahala at tamang saloobin sa mga resulta ng pagpapatupad nito. Ang inspeksyon ay isang bukas na proseso ng pagtuklas ng error, kung saan ang mga error na ginawa ng isang indibidwal na programmer ay nalalaman ng buong grupo ng mga programmer. Dapat na malinaw na makilala ng mga tagapamahala ang pagitan ng inspeksyon ng code at pagsusuri ng tauhan. Kapag tinatasa ang mga propesyonal na katangian, sa anumang pagkakataon ay hindi dapat isaalang-alang ang mga pagkakamali na natuklasan sa panahon ng inspeksyon. Ang mga pinuno ng pangkat ng inspeksyon ay kailangang lubusang sanayin upang pamahalaan ang proseso nang maayos at bumuo ng isang kultura ng mga relasyon na nagsisiguro na ang mga pagkakamali ay sinusuportahan at ang mga pagkakamali ay hindi sinisisi.

2.4. Awtomatikong static na pagsusuri ng mga programa

Ang mga static na program analyzer ay mga tool sa software na nag-scan sa source code ng isang program at tumutukoy sa mga posibleng error at hindi pagkakapare-pareho. Ang mga analyzer ay hindi nangangailangan ng isang executable na programa. Pina-parse nila ang teksto ng programa at kinikilala ang iba't ibang uri ng mga pahayag. Maaaring suriin ng mga analyzer kung ang mga pahayag ay naisulat nang tama, gumawa ng mga hinuha tungkol sa kontrol ng daloy ng isang programa, at, sa maraming mga kaso, kalkulahin ang hanay ng mga halaga ng data na ginagamit ng programa. Ang mga analyzer ay umaakma sa mga tool sa pagtuklas ng error na ibinigay ng taga-compile ng wika.

Ang layunin ng automated static analysis ay upang maakit ang atensyon ng tagasuri sa mga anomalya sa programa, tulad ng mga variable na ginagamit nang walang inisyal o nasimulan ngunit hindi ginagamit sa programa.

Ang static na pagsusuri ay binubuo ng ilang yugto.

1. Pagsusuri ng daloy ng kontrol. Pagkilala at pagpili ng mga cycle, ang kanilang mga entry at exit point, pagkilala sa hindi nagamit na code.

2. Pagsusuri sa paggamit ng data. Sinusuri ang mga variable sa programa. Sa yugtong ito, maaari mo ring tukuyin ang mga kondisyonal na pahayag na may mga kalabisan na kundisyon.

3. Pagsusuri ng interface. Sinusuri ang pagkakapare-pareho ng iba't ibang bahagi ng programa, ang kawastuhan ng deklarasyon ng mga pamamaraan at ang kanilang paggamit. Lumalabas na hindi kailangan ang hakbang na ito kung gagamitin ang isang wika na may mahigpit na pagsusuri sa uri.

4. Pagsusuri ng daloy ng data. Ang mga dependency sa pagitan ng input at output variable ay tinutukoy. Bagaman ang pagsusuri na ito ay hindi tumutukoy sa mga partikular na error, nagbibigay ito ng kumpletong listahan ng mga halagang ginamit sa programa. Samakatuwid, ang maling output ng data ay madaling matukoy.

5. Pagsusuri ng mga sangay ng programa. Sa yugtong ito ng semantic analysis, ang lahat ng sangay ng programa ay tinutukoy at ang mga pahayag na isinagawa sa bawat sangay ay na-highlight. Ang pagsusuri sa mga sangay ng programa ay makabuluhang nakakatulong upang maunawaan ang pamamahala ng programa at nagbibigay-daan sa iyong pag-aralan ang bawat sangay nang hiwalay.

Dapat tandaan na ang pagsusuri ng daloy ng data at pagsusuri ng sangay ng programa ay bumubuo ng malaking halaga ng impormasyon. Ang impormasyong ito ay hindi tumutukoy sa mga partikular na error, sa halip ay nagpapakita ng programa sa iba't ibang aspeto. Dahil sa napakalaking dami ng impormasyong nabuo, ang mga hakbang na ito ay minsan ay hindi kasama sa proseso ng pagsusuri at ginagamit lamang sa mga unang yugto upang makita ang mga anomalya sa programang binuo. Ang mga static na analyzer ay lalong kapaki-pakinabang kapag gumagamit ng mga programming language tulad ng C. Ang C ay walang malakas na pagsuri sa uri, at samakatuwid ang pagsuri na ginagawa ng C compiler ay limitado. Sa kasong ito, ang isang malawak na hanay ng mga error ay natukoy gamit ang static na pagsusuri, na lalong mahalaga kapag bumubuo ng mga kritikal na sistema.

Ang pagsusuri na nakabatay sa tool ay hindi kapalit ng inspeksyon dahil may mga uri ng mga error na hindi matukoy ng static na pagsusuri. Halimbawa, ang mga parser ay maaaring makakita ng mga hindi idineklara na variable, ngunit hindi nila magagawang makakita ng mga maling pagtatalaga. Siyempre, para sa mga wika tulad ng C, ang static na pagsusuri ay isang epektibong paraan para sa pag-detect ng mga error. Ngunit sa mga modernong wika (tulad ng Java), ang mga konstruksyon na nag-aambag sa paglitaw ng maraming mga error ay inalis. Ang lahat ng mga variable ay dapat ipahayag, walang mga unconditional jump statement, kaya ang hindi nagamit na code ay malamang na hindi sinasadyang malikha, at ang pamamahala ng memorya ay awtomatiko.

2.5 Paraan ng malinis na silid.

Gumagamit ang pagpapaunlad ng software ng malinis na silid ng isang mahigpit na proseso ng inspeksyon upang maalis ang mga depekto. Ang layunin ng pamamaraang ito ay lumikha ng software na walang mga depekto. Ang pangalan na "malinis na silid" ay kinuha sa pamamagitan ng pagkakatulad sa paggawa ng mga semiconductor na kristal, kung saan ang paglaki ng mga kristal na walang depekto ay nangyayari sa isang ultra-malinis na kapaligiran (malinis na mga silid).

Mayroong limang pangunahing punto sa pagbuo ng software gamit ang pamamaraan ng malinis na silid:

1. Pormal na detalye. Ang isang pormal na detalye ay binuo. Upang itala ang detalye, isang modelo ng estado ang ginagamit, na nagpapakita ng mga tugon ng system.

2. Hakbang-hakbang na pag-unlad. Ang pag-unlad ng software ay nahahati sa maraming yugto, na sinusuri gamit ang pamamaraang "malinis na silid" nang nakapag-iisa sa bawat isa.

3. Nakabalangkas na programming. Ang isang limitadong bilang ng mga istruktura ng kontrol ay ginagamit. Ang proseso ng pagbuo ng programa ay isang pamamaraan para sa unti-unting pagdedetalye ng detalye.

4. Static na pag-verify. Pag-verify gamit ang isang static na paraan ng mahigpit na inspeksyon ng software. Ang pagsubok ng code ay hindi isinasagawa para sa mga indibidwal na elemento.

5. Static na pagsubok ng system. Sa bawat hakbang, ang pagsubok ay isinasagawa gamit ang mga static na pamamaraan upang masuri ang pagiging maaasahan ng software system.

Sa mga unang yugto ng pag-unlad ng software, ang pinaka-kritikal na mga function ng system para sa customer ay ipinatupad gamit ang "malinis na silid" na paraan. Ang hindi gaanong mahalagang mga function ng system ay idinaragdag sa mga susunod na yugto. Kaya, ang customer ay may pagkakataon na subukan ang system bago ang buong pagpapatupad nito.

Ang proseso ng pagbuo ng software ng malinis na silid ay idinisenyo upang matiyak ang mahigpit na inspeksyon ng programa, na sinamahan ng mahigpit na patunay sa matematika ng pagkakapare-pareho at kawastuhan ng mga pagbabago.

Karaniwan, ang pagbuo ng malalaking sistema gamit ang pamamaraang "malinis na silid" ay isinasagawa ng tatlong grupo ng mga developer: ang pangkat ng pagtutukoy, ang pangkat ng pag-unlad (bumubuo at sumusubok sa software), at ang pangkat ng sertipikasyon (nagbubuo ng mga pagsubok sa kontrol).

Bilang resulta ng paggamit ng pamamaraang "malinis na silid", ang produkto ng software ay naglalaman ng napakakaunting mga error, at ang gastos nito ay mas mababa kaysa sa ginawa ng mga tradisyonal na pamamaraan. Sa panahon ng proseso ng pag-develop, ang static na pag-check ay makikita na cost-effective gamit ang paraang ito. Ang isang malaking bilang ng mga depekto ay natuklasan bago ang programa ay naisakatuparan at naitama sa panahon ng proseso ng pagbuo ng software.

3. Pagsubok ng software

3.1. Pagpaplano ng pagsubok

Kapag nagpaplano ng pag-verify ng software at proseso ng kwalipikasyon, dapat matukoy ng mga tagapamahala ng proyekto kung sino ang mananagot para sa iba't ibang yugto ng pagsubok. Sa maraming mga kaso, ang mga programmer ay may pananagutan sa pagsubok ng kanilang mga programa, module, o mga bagay. Ang susunod na yugto ay ang responsibilidad ng system integration (assembly) group, na nagsasama ng mga indibidwal na software modules sa iisang sistema at sumusubok sa system na ito sa kabuuan.

Para sa mga kritikal na sistema, ang proseso ng pagsubok ay dapat na mas pormal. Ipinapalagay ng pormalisasyong ito na ang mga independyenteng tagasubok ay may pananagutan para sa lahat ng mga yugto ng pagsubok, ang lahat ng mga pagsubok ay binuo nang hiwalay, at ang mga detalyadong tala ay pinananatili sa panahon ng pagsubok. Upang subukan ang mga kritikal na sistema, ang isang independiyenteng koponan ay bubuo ng mga pagsubok batay sa mga detalye ng bawat bahagi. Kapag bumubuo ng mga hindi kritikal na sistema, ang mga detalyadong pagtutukoy para sa bawat bahagi ay hindi nilikha. Kaya, ang pagsubok sa bahagi ay karaniwang nakabatay lamang sa pag-unawa ng mga developer sa kung ano ang dapat gawin ng bahagi.

Ang pagsubok sa build ay dapat na nakabatay sa umiiral na detalye ng system.

Sa konteksto ng pagsubok, may ilang pagkakaiba sa pagitan ng object-oriented system (OOS) at function-oriented (FOS) system. Sa FOS mayroong isang malinaw na pagkakaiba sa pagitan ng mga pangunahing elemento ng programa at ang kabuuan ng mga elementong ito. Hindi ito ang kaso sa OOS. Samakatuwid, sa OOS walang malinaw na mga hangganan sa pagitan ng pagsubok ng bahagi at pagsubok sa pagpupulong. Sa ganitong mga sistema, ang proseso ng pagsubok ay isang pagpapatuloy ng proseso ng pag-unlad.

3.2. Pagsusuri ng depekto

Ang layunin ng pagsubok sa depekto ay upang matukoy ang mga nakatagong depekto sa isang software system bago ito maihatid sa customer. Ang pagsubok sa depekto ay ang kabaligtaran ng kwalipikasyon, na nagpapatunay na natutugunan ng isang sistema ang detalye nito. Sa panahon ng sertipikasyon, dapat gumana nang tama ang system sa lahat ng tinukoy na data ng pagsubok. Kapag nagsusuri ng mga depekto, isang pagsubok ang nagpapatakbo na nagiging sanhi ng hindi wastong pagpapatakbo ng programa, at samakatuwid ay kinikilala ang isang depekto. Nagpapakita ang pagsubok ng depekto Availability, hindi ang kawalan ng mga depekto sa programa.

Ang buong pagsubok, kapag ang lahat ng posibleng pagkakasunud-sunod ng pagpapatupad ng programa ay nasuri, ay imposible. Samakatuwid, ang pagsubok ay dapat na nakabatay sa isang partikular na subset ng lahat ng posibleng mga sitwasyon ng pagsubok.

Mula sa karanasan sa pagsubok ng malalaking produkto ng software, ang mga hindi pangkaraniwang kumbinasyon ng mga function ay maaaring maging sanhi ng mga error kung minsan, ngunit ang pinakakaraniwang ginagamit na mga function ay palaging gumagana nang tama.

Mayroong ilang mga paraan para sa pagsubok ng mga depekto.

Pagsubok sa black box ay ang buong sistema ay kinakatawan bilang isang "itim na kahon", ang pag-uugali nito ay maaari lamang matukoy sa pamamagitan ng pag-aaral ng input data at ang kaukulang output data. Ang isa pang pangalan para sa pamamaraang ito ay functional testing, dahil ang mga function na ginanap lamang ang sinusuri.

Pagsubok sa istruktura. Ang structural testing method ay nagsasangkot ng paglikha ng mga pagsubok batay sa istruktura ng system at sa pagpapatupad nito. Ang diskarteng ito ay tinatawag minsan na "white box", "clear box", o "glass box" na pagsubok upang makilala ito sa black box testing. Karaniwan, ang pagsubok sa istruktura ay inilalapat sa medyo maliliit na elemento ng software. Sa diskarteng ito, sinusuri ng tester ang code at gumagamit ng kaalaman tungkol sa istruktura ng bahagi upang makakuha ng data ng pagsubok. Halimbawa, mula sa pagsusuri ng code, matutukoy mo kung gaano karaming mga pagsubok sa kontrol ang kailangang isagawa upang ang lahat ng mga pahayag ay maisakatuparan nang hindi bababa sa isang beses sa panahon ng pagsubok.

Mga sangay ng pagsubok. Ito ay isang structural testing method na sumusubok sa lahat ng independiyenteng executable na sangay ng isang component o program. Kung ang lahat ng mga independiyenteng sangay ay naisakatuparan, ang lahat ng mga pahayag ay dapat na maisakatuparan nang hindi bababa sa isang beses. Bukod dito, ang lahat ng mga conditional na pahayag ay sinusubok na may parehong totoo at maling mga halaga ng kundisyon. Sa OOS, ginagamit ang pagsubok sa sangay upang subukan ang mga pamamaraan na nauugnay sa mga bagay. Ang bilang ng mga sangay sa isang programa ay karaniwang proporsyonal sa laki nito. Kapag naisama na ang mga module ng software sa system, hindi na magagawa ang mga paraan ng pagsubok sa istruktura. Samakatuwid, ang mga pamamaraan ng pagsubok sa sangay ay karaniwang ginagamit kapag sinusubukan ang mga indibidwal na elemento ng programa at mga module. Kapag sinusuri ang mga sangay, ang lahat ng posibleng kumbinasyon ng mga sangay ng programa ay hindi sinusuri. Bukod sa pinakawalang halaga na mga bahagi ng software na walang mga loop, ang gayong kumpletong pagsusuri ng isang bahagi ay lumalabas na hindi makatotohanan, dahil sa mga programa na may mga loop mayroong isang walang katapusang bilang ng mga posibleng kumbinasyon ng mga sanga. Maaaring may mga depekto sa isang programa na lumilitaw lamang sa isang partikular na kumbinasyon ng mga sangay, kahit na ang lahat ng mga pahayag ay sinubukan nang hindi bababa sa isang beses.

3.3. Pagsubok sa build

Kapag ang lahat ng indibidwal na bahagi ng software ay nasubok, ang system ay binuo, na nagreresulta sa isang bahagyang o kumpletong sistema. Ang proseso ng pagsasama ng system ay nagsasangkot ng pag-assemble at pagsubok sa nagresultang sistema, kung saan natukoy ang mga problema na lumitaw kapag nakikipag-ugnayan ang mga bahagi. Ang mga pagsubok na nagpapatunay sa pagpupulong ng system ay dapat gawin batay sa detalye ng system. Ang pagsubok sa pagpupulong ay dapat magsimula kaagad pagkatapos lumikha ng mga gumaganang bersyon ng mga bahagi ng system.

Sa panahon ng pagsubok sa pagpupulong, lumitaw ang problema sa pag-localize ng mga nakitang error. May mga kumplikadong ugnayan sa pagitan ng mga bahagi ng system, at kapag may nakitang mga maanomalyang output sa pagitan ng mga ito, maaaring mahirap matukoy ang pinagmulan ng error. Upang gawing mas madaling ihiwalay ang mga error, dapat kang gumamit ng sunud-sunod na paraan para sa pagbuo at pagsubok sa system. Una, dapat kang lumikha ng kaunting configuration ng system at subukan ito. Pagkatapos ay kailangang idagdag ang mga bagong bahagi sa minimal na pagsasaayos at muling subukan, at iba pa hanggang sa ganap na mabuo ang system.

Pababa at paitaas na pagsubok. Ang mga diskarte sa top-down (TT) at bottom-up testing (BT) ay sumasalamin sa iba't ibang diskarte sa pagsasama ng system. Sa top-down na pagsasama, ang mga high-level na bahagi ay isinama at sinusuri bago sila idisenyo at ipatupad. Sa bottom-up integration, ang mas mababang antas na mga bahagi ay unang isinama at sinusuri bago ang mga mas mataas na antas na bahagi ay binuo.

Ang NT ay isang mahalagang bahagi ng proseso ng pagbuo ng mga top-down na system, kung saan ang mga nangungunang bahagi ay unang binuo, na sinusundan ng mga bahagi sa mas mababang antas ng hierarchy. Ang programa ay kinakatawan bilang isang abstract na bahagi na may mga subcomponents na mga stub. Ang mga stub ay may parehong interface bilang isang bahagi, ngunit may limitadong pag-andar. Kapag ang isang top-level na bahagi ay na-program at nasubok, ang mga subcomponents nito ay ipinapatupad at nasubok sa parehong paraan. Nagpapatuloy ang proseso hanggang sa maipatupad ang pinakamababang antas ng mga bahagi. Pagkatapos ang buong sistema ay nasubok.

Sa VT, sa kabaligtaran, ang mga module na matatagpuan sa mas mababang antas ng hierarchy ay unang isinama at nasubok. Pagkatapos ang mga module sa itaas ay binuo at nasubok, at iba pa hanggang sa ang huling module ay nasubok. Ang diskarte na ito ay hindi nangangailangan ng kumpletong disenyo ng arkitektura ng system at samakatuwid ay maaaring magsimula nang maaga sa proseso ng pagbuo.

Pagsubok sa interface. Ang pagsubok sa interface (IT) ay isinasagawa sa mga kaso kung saan ang mga module o subsystem ay isinama sa mas malalaking sistema. Ang bawat module o subsystem ay may tinukoy na interface na tinatawag ng iba pang mga bahagi ng system. Ang layunin ng TI ay kilalanin ang mga depekto na lumitaw sa system dahil sa mga error sa mga interface o dahil sa mga maling pagpapalagay tungkol sa mga interface.

Ang ganitong uri ng pagsubok ay lalong mahalaga sa object-oriented programming. Ang mga bagay ay higit na tinutukoy gamit ang mga interface at maaaring magamit muli sa iba't ibang kumbinasyon na may iba't ibang mga bagay sa iba't ibang mga system. Kapag sinusuri ang mga indibidwal na bagay, hindi posibleng matukoy ang mga error sa interface dahil ang mga ito ay resulta ng mga pakikipag-ugnayan sa pagitan ng mga bagay kaysa sa nakahiwalay na pag-uugali ng isang bagay.

Maaaring may iba't ibang uri ng mga interface sa pagitan ng mga bahagi ng programa at, nang naaayon, iba't ibang uri ng mga error sa interface.


kanin. 3.1. Pagsubok sa interface

Ang TI ay isang kumplikadong proseso dahil ang ilang mga error ay maaaring mangyari lamang sa ilalim ng hindi pangkaraniwang mga kondisyon. Ang isa pang problema ay maaaring lumitaw mula sa mga pakikipag-ugnayan sa pagitan ng mga error sa iba't ibang mga module ng software o mga bagay. Ang mga error sa isang bagay ay makikita lamang kapag ang pag-uugali ng isa pang bagay ay naging hindi mahuhulaan.

Karaniwan, ang mga pamamaraan ng static na pagsubok ay mas matipid kaysa sa nakalaang pagsubok. Sa mga wikang may mahigpit na kontrol sa uri, tinutulungan ng compiler na makita ang mga error sa interface, habang sa mga wikang may mahinang kontrol sa uri, ang isang static na analyzer ay maaaring makakita ng mga error. Bilang karagdagan, kapag nag-inspeksyon ng mga programa, maaari kang tumuon partikular sa pagsuri sa mga interface ng mga bahagi.

Pagsubok sa pag-load. Kapag ang system ay ganap nang naisama, ang mga katangian ng pagsasama ng system tulad ng pagganap at pagiging maaasahan ay maaaring masuri. Upang matiyak na kakayanin ng system ang isang naibigay na load, ang mga pagsubok ay binuo upang sukatin ang pagganap. Karaniwan, ang isang serye ng mga pagsubok ay isinasagawa na may unti-unting pagtaas ng pagkarga hanggang sa magsimulang bumaba ang pagganap ng system.

3.4. Mga Tool sa Pagsubok

Ang pagsubok ay isang mahal at matagal na yugto sa pagbuo ng mga software system. Samakatuwid, ang isang malawak na hanay ng mga tool ay nilikha upang suportahan ang proseso ng pagsubok, na makabuluhang binabawasan ang mga gastos sa pagsubok. Sa Fig. Ipinapakita ng Figure 3.2 ang mga posibleng tool sa pagsubok at ang mga ugnayan sa pagitan ng mga ito.


kanin. 3.2. Mga Tool sa Pagsubok

Sa litratong ito:

Organizer ng pagsubok namamahala sa pagsasagawa ng mga pagsubok, generator ng data ng pagsubok bumubuo ng data ng pagsubok para sa programang nasa ilalim ng pagsubok (pumipili ng data ng pagsubok mula sa isang database o gumagamit ng mga template upang makabuo ng random na data), orakulo bumubuo ng inaasahang resulta ng pagsubok, paghahambing ng file inihahambing ang mga resulta ng kasalukuyang pagsubok sa mga resulta ng nakaraang pagsubok at mga ulat sa mga pagkakaiba na natagpuan, generator ng ulat bumubuo ng mga ulat ng pagsubok, dynamic na analyzer nagdaragdag ng code sa programa para sa pagbibilang ng bilang ng beses na ang bawat pahayag ay naisakatuparan, simulator ginagaya ang pagpapatupad ng programa.

4. Sertipikasyon ng mga kritikal na sistema

Ang pag-verify at sertipikasyon ng mga kritikal na sistema ay magkapareho sa mga katulad na proseso na ginagawa sa anumang iba pang software system. Gayunpaman, ang likas na katangian ng mga kritikal na sistema (CS) ay tulad na bilang karagdagan sa karaniwang pagsusuri at pagsubok ng system, ang mga proseso para sa pagpapatunay ng pagiging maaasahan nito ay kinakailangan din. Ito ay kinakailangan para sa dalawang kadahilanan. Ang unang dahilan ay halaga ng pagkabigo ng CS. Sa CS, ang halaga ng pagkabigo ay mas mataas kaysa sa iba pa. Samakatuwid, ito ay mas kumikita sa ekonomiya na mamuhunan ng mas maraming pera sa pagpapatunay at sertipikasyon kaysa sa magdusa ng mga pagkalugi mula sa mga pagkabigo. Ang pangalawang dahilan - sertipikasyon ng mga katangian ng pagiging maaasahan ng pagganap. Ang mga customer ng CS ay dapat magtiwala na ang system ay nakakatugon sa ilang mga functional reliability indicators. Para sa mga kadahilanang ito, ang halaga ng pag-verify at sertipikasyon ng CS ay mas mataas kaysa sa iba pang mga system.

4.1. Sertipikasyon ng pagiging maaasahan

Upang matiyak na ang isang system ay nakakatugon sa mga kinakailangan, ang oras ng pag-andar nito ay dapat na sukatin kumpara sa isang karaniwang pagganap ng user. Ang proseso ng pagsukat ng mga tagapagpahiwatig ng pagiging maaasahan ay binubuo ng apat na yugto: una, ang mga katulad na umiiral na mga sistema ay pinag-aralan (natutukoy ang profile ng pagpapatakbo), pagkatapos ay inihanda ang data ng pagsubok, ang susunod na yugto ay ang pagsubok mismo, at ang huling hakbang ay ang pagkalkula ng mga tagapagpahiwatig ng pagiging maaasahan. Ang pamamaraang ito ay kung minsan ay tinatawag na static na pagsubok, ang layunin nito ay suriin ang pagiging maaasahan ng system. Ang static na pagsubok ay ang kabaligtaran ng pagsubok sa depekto, na ginagawa upang makita ang mga error sa isang system. Gayunpaman, ang pamamaraang ito ay hindi napakadaling ilapat sa pagsasanay. Ang mga paghihirap ay lumitaw para sa ilang mga kadahilanan:

Kawalang-katiyakan ng operational profile (maaaring hindi tumpak na ipakita ng mga profile ang aktwal na paggamit ng system)

Mataas na halaga ng pagbuo ng data ng pagsubok (kung hindi posible na awtomatikong bumuo ng data ng pagsubok, kung gayon ang paggawa ng malaking halaga ng data ng pagsubok ay nangangailangan ng maraming oras at, nang naaayon, pera)

Kawalang-katiyakan sa istatistika sa kaso ng mataas na pagiging maaasahan (upang tumpak na masukat ang mga tagapagpahiwatig ng pagiging maaasahan, kinakailangan upang makabuo ng isang makabuluhang bilang ng mga pagkabigo sa istatistika).

Ang operational profile (OP) ay sumasalamin sa kasanayan ng paggamit ng system. Binubuo ito ng isang detalye ng mga klase ng data ng pag-input at ang posibilidad ng kanilang paglitaw. Kung ang isang software system ay makabago, mahirap hulaan kung paano ito gagamitin. Ang system ay ginagamit ng iba't ibang grupo ng mga user na may iba't ibang inaasahan, kaalaman at karanasan. Ang mga bagong system ay walang kasaysayan ng paggamit, at upang gumana sa kanila, ang mga gumagamit ay madalas na gumagamit ng mga pamamaraan na hindi nilayon ng mga developer. Ang isa pang problema ay maaaring magbago ang OP habang ginagamit ang system. Ang lahat ng mga kadahilanang ito ay madalas na pumipigil sa pagbuo ng isang maaasahang OP. Sa ganitong mga sitwasyon, mahirap masuri ang antas ng kawalan ng katiyakan sa pagsukat ng mga tagapagpahiwatig ng pagiging maaasahan ng system.

Sa panahon ng sertipikasyon ng software, dapat tumuon ang mga tagapamahala sa pagsubok ng system. Dahil ang pagsubok ay isang napakamahal na proseso, mahalagang kumpletuhin ito nang maaga hangga't maaari, at upang ang system ay hindi na kailangang muling subukan sa ibang pagkakataon. Nakumpleto ang pagsubok kung ang kinakailangang antas ng operasyon na walang kabiguan ay nakamit. Ngunit kung minsan lumalabas na ang kinakailangang antas ng pagiging maaasahan ay hindi kailanman makakamit. Sa kasong ito, ang manager ay dapat gumawa ng mahirap na desisyon na muling idisenyo ang ilang bahagi ng system o muling pag-usapan ang kontrata sa customer.

4.2. Mga garantiya ng seguridad

Iba't ibang proseso ang pagkuha ng mga garantiya para sa seguridad ng isang system at pagpapatunay sa pagiging maaasahan nito. Ang pagiging maaasahan ay maaaring ma-quantified gamit ang iba't ibang mga numerical indicator. Ang seguridad ay hindi mapagkakatiwalaang mabibilang at samakatuwid ay hindi masusukat sa panahon ng pagsubok ng system.

Samakatuwid, tinutukoy ng sertipikasyon sa kaligtasan ang antas ng pagiging maaasahan ng system, na maaaring mula sa "napakababa" hanggang sa "napakataas". Nangangailangan ito ng propesyonal na pagtatasa sa kaligtasan. Sa maraming mga kaso, ang kahulugan ng seguridad ay batay sa karanasan ng organisasyon na bumubuo ng system. Kung ang isang organisasyon ay mayroon nang paunang binuo, mapagkakatiwalaang gumaganang secure na mga system, makatuwirang ipagpalagay na ang mga katulad na secure na system ay bubuo sa organisasyong iyon. Sa kabilang banda, ang pagtatasa ng seguridad ay dapat na nakabatay sa aktwal na arkitektura ng system, ang mga resulta ng pag-verify at kwalipikasyon, at ang mga proseso na ginamit upang bumuo ng system.

4.3. Pagpapatunay at sertipikasyon

Ang pag-verify at sertipikasyon ng mga sistemang kritikal sa kaligtasan ay magkapareho sa pagsubok ng anumang mga system na may mataas na kinakailangan sa pagiging maaasahan. Upang makita ang pinakamaraming bilang ng mga error, dapat kang gumamit ng komprehensibong pagsubok at gumamit ng mga static na pamamaraan ng pagsubok kapag tinatasa ang seguridad. Gayunpaman, dahil sa napakababang rate ng pagkabigo na likas sa maraming CS, ang paggamit ng static na pagsubok ay hindi palaging posible na tumyak ng dami ng operasyon na walang kabiguan, dahil nangangailangan ito ng napakalaking bilang ng mga pagsubok. Ang mga pagsubok na ito ay nagbibigay lamang ng mga batayan upang isaalang-alang ito o ang CS na iyon na ligtas.

Kapag lumilikha ng isang CS, ang isang komprehensibong pagsusuri ng system na binuo ay mahalaga. Mayroong limang uri ng pagsusuri ng system na kinakailangan para sa CS:

1. Pagsusuri ng tamang paggana ng system

2. Pagsusuri ng posibilidad ng pagbabago at pagkakaunawaan ng arkitektura ng system

3. Pagsusuri ng pagsunod ng algorithm sa pagpoproseso at istraktura ng data sa gawi ng system na tinukoy sa detalye

4. Pagsusuri ng pagkakapare-pareho ng code ng programa, mga algorithm at istruktura ng data.

5. Pagsusuri ng kasapatan ng mga senaryo ng pagsubok sa mga kinakailangan ng system.

Ang lahat ng ebidensya ng kaligtasan ng system ay batay sa sumusunod na palagay: ang bilang ng mga error sa system na humahantong sa mga sitwasyong pang-emergency ay mas mababa kaysa sa kabuuang bilang ng mga error sa system. Ang mga pagsisikap sa seguridad ay dapat tumuon sa pagtukoy ng mga potensyal na mapanganib na bug. Kung lumalabas na ang mga error na ito ay hindi lilitaw o lumilitaw ngunit hindi humantong sa malubhang kahihinatnan, kung gayon ang system ay itinuturing na maaasahan. Ang mga patunay ng katumpakan ng programa ay iminungkahi bilang mga pamamaraan ng pag-verify ng software mahigit 25 taon na ang nakalipas. Gayunpaman, ang mga pamamaraang ito ay pangunahing ginagamit lamang sa mga laboratoryo. Ang mga praktikal na problema sa pagbuo ng isang patunay ng kawastuhan ng software ay napakasalimuot na ang ilang mga organisasyon ay itinuturing na ang paggamit ng mga pamamaraang ito sa pagbuo ng mga kumbensyonal na sistema ay hindi makatwirang mahal. Ngunit, tulad ng nabanggit kanina, para sa isang bilang ng mga CS ay kapaki-pakinabang sa ekonomiya na gumamit ng ebidensya ng kawastuhan ng sistema sa halip na alisin ang mga kahihinatnan ng mga pagkabigo.

Bagama't hindi cost-effective na bumuo ng mga patunay ng kawastuhan para sa karamihan ng mga system, kung minsan ay kinakailangan na bumuo ng mga patunay sa kaligtasan na nagpapakita na ang isang partikular na programa ay nakakatugon sa mga kinakailangan sa seguridad. Kapag nagpapatunay ng kaligtasan, hindi kinakailangang patunayan na ang programa ay sumusunod sa detalye. Kinakailangan lamang na ipakita na ang pagpapatupad ng programa ay hindi humahantong sa mga pagkabigo na may mapanganib na mga kahihinatnan.

Konklusyon

Sa gawaing ito, isinaalang-alang ang mga isyu ng pag-verify ng software at sertipikasyon. Napatunayan na ang mga ito ay napakasalimuot na mga hakbang sa pagbuo ng anumang produkto, na nangangailangan ng atensyon, pinakamataas na kwalipikasyon, pasensya mula sa mga inhinyero, at malalaking pamumuhunan mula sa organisasyon. Gayunpaman, gaano man kamahal ang mga prosesong ito, ang mga benepisyo sa ekonomiya ng kanilang paggamit ay halata, dahil ang isang sistema na walang mga pagkabigo ay hindi nagiging sanhi ng mga pagkalugi. Dapat tandaan na ang mga sitwasyong pang-emergency ay bihirang mga kaganapan (lalo na sa isang istasyon ng compressor), kaya halos imposible na gayahin ang mga ito sa panahon ng pagsubok ng system. Napagtibay na ang mga kinakailangan sa seguridad ay hindi kailanman nagbubukod ng hindi mapagkakatiwalaang gawi ng system. Ang pagsubok at iba pang mga proseso ng kwalipikasyon ay hindi maaaring ganap na patunayan ang pagsunod ng isang sistema sa mga kinakailangan sa kaligtasan.

Sa kasalukuyan, ang pagtatasa sa seguridad ng mga system ay nagiging mas mahalaga, dahil ang mga system ay lalong konektado sa pamamagitan ng Internet. Ang mga kinakailangan sa seguridad sa ilang aspeto ay katulad ng mga kinakailangan sa seguridad. Sa partikular, tinukoy nila ang abnormal na pag-uugali ng system, sa halip na "operational" na pag-uugali nito. Gayunpaman, sa pangkalahatan ay hindi posible na tukuyin ang pag-uugaling ito sa mga tuntunin ng simpleng mga hadlang na kinokontrol ng system.

Napakahirap para sa mga end user na i-verify ang seguridad ng isang system. Samakatuwid, sa Europa, ang mga sistema ng pamantayan sa pagtatasa ng seguridad ay binuo, na kinokontrol ng mga espesyal na sinanay na eksperto. Ang mga supplier ng handa na software ay maaaring magsumite ng kanilang mga huling produkto para sa pagsusuri at sertipikasyon ayon sa iba't ibang pamantayan sa seguridad.

Ang pag-verify at sertipikasyon ay dapat maging mandatoryong hakbang sa pagbuo ng software, kahit na ang pinakasimpleng mga hakbang. Ang bawat kumpanya na gumagawa ng software ay dapat lumikha ng isang kawani ng mga empleyado na haharap lamang sa pagpapatunay at sertipikasyon: ito ay mga inhinyero ng pagsubok, inspeksyon ng mga inhinyero, atbp. nabanggit na ang mga pangangailangan ng mga gumagamit para sa Ang software ay lumalaki).

Kung susundin natin ang lahat ng mga kinakailangang ito, kung gayon, malamang, darating ang araw na mapapaligiran tayo ng mga sistemang gumagana nang walang pagkabigo.

Panitikan.

1. Sommerville I. Software Engineering, ika-6 na edisyon: Transl. mula sa Ingles – M.: Publishing house. Bahay. "Williams", 2002. - 624 pp.: may sakit.

2. A.G. Gein, V.G. Zhitomirsky. Mga Batayan ng agham ng computer at teknolohiya ng computer: mga sample. Teksbuk Para sa 10-11 baitang. avg. paaralan – 3rd ed. – M.: Edukasyon, 1993. – 254 p.: ill.

3. Yu. G. Karpov. Teorya ng Automata. – St. Petersburg: Peter, 2002 – 224 p.: ill.

4. Electronic Archive para sa mga software engineer. http://www.cs.queensu.ca/Software-Engineering/

5. Mga Tanong at Sagot sa Software Engineering. http://www.cs.queensu.ca/Software-Engineering/questions.html

6. Mga mapagkukunan ng server ng Carnegie Mellon Software Engineering Institute. http://www.sei.cmu.edu/

7. SybaseDevel.Ru – portal ng Russia para sa mga developer. http://www.sybasedevel.ru


Ang mga tuntunin sa pagpapatunay at pagpapatunay ay nauugnay sa pagsuri sa kalidad ng software. Ginagamit namin ang mga terminong ito sa aming mga artikulo at ulat. Paulit-ulit naming narinig ang iba't ibang komento at argumento tungkol sa kung ang static na pagsusuri ng source code ng program ay dapat na uriin bilang pagpapatunay at pagpapatunay at kung ano ang pagkakaiba sa pagitan ng mga konseptong ito. Sa pangkalahatan, ang isa ay nakakakuha ng impresyon na ang bawat isa ay naglalagay ng kanilang sariling mga konsepto sa mga terminong ito, at ito ay humahantong sa kapwa hindi pagkakaunawaan.

Nagpasya kaming unawain ang terminolohiya upang makasunod sa pinakatamang interpretasyon ng mga konseptong ito. Sa panahon ng pananaliksik, natagpuan namin ang gawain ng V.V. Kulyamin "Mga paraan ng pag-verify ng software". Nagbibigay ito ng detalyadong paglalarawan ng mga terminong ito, at nagpasya kaming higit pang umasa sa mga kahulugang ibinigay sa gawaing ito. Narito ang ilang mga sipi mula sa gawaing ito na may kaugnayan sa pagpapatunay at pagpapatunay.

Pagpapatunay at Pagpapatunay ay mga aktibidad na naglalayong subaybayan ang kalidad ng software at makita ang mga error dito. Ang pagkakaroon ng isang karaniwang layunin, naiiba sila sa mga mapagkukunan ng mga pag-aari, mga patakaran at mga paghihigpit na nasubok sa panahon ng kanilang kurso, na ang paglabag ay itinuturing na isang pagkakamali.

Para sa karagdagang paglalahad, kailangan nating ipakilala ang terminong “software life cycle artifact”. Ang mga artifact ng life cycle ng software ay iba't ibang entity ng impormasyon, dokumento at modelo na ginawa o ginamit sa panahon ng pagbuo at pagpapanatili ng software. Kaya, ang mga artifact ay isang teknikal na detalye, isang paglalarawan ng arkitektura, isang modelo ng lugar ng paksa sa ilang graphical na wika, source code, dokumentasyon ng user, atbp. Ang iba't ibang modelong ginagamit ng mga indibidwal na developer kapag lumilikha at nagsusuri ng software, ngunit hindi naitala sa anyo ng mga dokumentong naa-access ng ibang tao, ay hindi maituturing na mga artifact.

Sinusuri ng pag-verify ang pagsunod ng ilang artifact na ginawa sa panahon ng pag-develop at pagpapanatili ng software sa iba na dati nang ginawa o ginamit bilang input data, pati na rin ang pagsunod sa mga artifact na ito at ang mga proseso ng pagbuo ng mga ito sa mga panuntunan at pamantayan. Sa partikular, sinusuri ng pag-verify ang pagsunod sa pagitan ng mga pamantayan, mga paglalarawan ng mga kinakailangan (mga teknikal na detalye) para sa software, mga solusyon sa disenyo, source code, dokumentasyon ng user at ang paggana ng software mismo. Bilang karagdagan, napatunayan na ang mga kinakailangan, mga solusyon sa disenyo, dokumentasyon at code ay iginuhit alinsunod sa mga pamantayan at pamantayan na pinagtibay sa isang partikular na bansa, industriya at organisasyon kapag bumubuo ng software, at gayundin na sa panahon ng kanilang paglikha ng lahat ng mga operasyon na tinukoy sa ang mga pamantayan ay isinagawa sa kinakailangang mga pagkakasunud-sunod na paraan. Ang mga error at depekto na nakita sa panahon ng pag-verify ay mga pagkakaiba o kontradiksyon sa pagitan ng ilan sa mga nakalistang dokumento, sa pagitan ng mga dokumento at ng aktwal na operasyon ng programa, sa pagitan ng mga pamantayan at ng aktwal na proseso ng pagbuo at pagpapanatili ng software. Kasabay nito, ang pagpapasya kung aling dokumento ang sasailalim sa pagwawasto (marahil pareho) ay isang hiwalay na gawain.

Sinusuri ng pagpapatunay ang pagsunod ng anumang mga artifact na nilikha o ginamit sa panahon ng pagbuo at pagpapanatili ng software sa mga pangangailangan at kinakailangan ng mga gumagamit at customer ng software na ito, na isinasaalang-alang ang mga batas ng paksa at ang mga paghihigpit sa konteksto ng paggamit ng software . Ang mga pangangailangan at pangangailangang ito ay kadalasang hindi nakadokumento - kapag naitala, nagiging paglalarawan sila ng mga kinakailangan, isa sa mga artifact ng proseso ng pagbuo ng software. Samakatuwid, ang pagpapatunay ay isang hindi gaanong pormal na aktibidad kaysa sa pagpapatunay. Ito ay palaging isinasagawa kasama ang paglahok ng mga kinatawan ng mga customer, user, business analyst o mga eksperto sa paksa - ang mga kung saan ang mga opinyon ay maituturing na sapat na pagpapahayag ng mga tunay na pangangailangan at pangangailangan ng mga user, customer at iba pang interesadong partido. Ang mga pamamaraan para sa pagpapatupad nito ay kadalasang gumagamit ng mga tiyak na pamamaraan upang matukoy ang kaalaman at aktwal na pangangailangan ng mga kalahok.

Ang pagkakaiba sa pagitan ng pagpapatunay at pagpapatunay ay inilalarawan sa Figure 1.

Ang mga ibinigay na kahulugan ay nakuha sa pamamagitan ng ilang extension ng mga kahulugan mula sa pamantayan ng IEEE 1012 para sa mga proseso ng pag-verify at pagpapatunay. Sa 1990 IEEE 610.12 standard dictionary ng software engineering terms, ang kahulugan ng verification ay humigit-kumulang pareho, ngunit ang kahulugan ng validation ay medyo naiiba - sinasabi nito na dapat suriin ng validation ang pagsunod ng software na nakuha bilang resulta ng pag-unlad sa orihinal mga kinakailangan para dito. Sa kasong ito, ang pagpapatunay ay magiging isang espesyal na kaso ng pag-verify, na hindi nabanggit saanman sa software engineering literature, samakatuwid, at dahil din ito ay naitama sa IEEE 1012 ng 2004, ang kahulugan na ito ay dapat ituring na hindi tumpak. Madalas na paggamit ng parirala ni B. Boehm:

Sinasagot ng pag-verify ang tanong na "Ginagawa ba natin nang tama ang produkto?", at sinasagot ng validation ang tanong na "Ginagawa ba natin ang tamang produkto?"

ay nagdaragdag din sa pagkalito, dahil ang aphorism ng pahayag na ito, sa kasamaang-palad, ay pinagsama sa kalabuan. Gayunpaman, maraming mga gawa ng may-akda nito ang nagmumungkahi na sa pamamagitan ng pagpapatunay at pagpapatunay ang ibig niyang sabihin ay humigit-kumulang sa parehong mga konsepto tulad ng tinukoy sa itaas. Ang mga pagkakaibang ito ay maaari ding masubaybayan sa nilalaman ng mga pamantayan ng software engineering. Kaya, ang pamantayan ng ISO 12207 ay isinasaalang-alang ang pagsubok bilang isang uri ng pagpapatunay, ngunit hindi ang pagpapatunay, na, tila, ay isang resulta ng paggamit ng isang hindi tumpak na kahulugan mula sa karaniwang diksyunaryo.

Sa konklusyon, nais kong tandaan na, ayon sa mga kahulugan sa itaas, ang static na pagsusuri ng source code ng program ay tumutugma sa pag-verify ng software, tulad ng pagsuri sa pagsunod ng program code sa iba't ibang mga pamantayan sa coding. Sinusuri ng static na pagsusuri ang pagsunod ng mga resulta ng yugto ng disenyo ng software system sa mga kinakailangan at mga paghihigpit na nabalangkas nang mas maaga.

Bibliograpiya

  • V.V. Kulyamin "Mga paraan ng pag-verify ng software". Institute of System Programming RAS 109004, Moscow, st. B. Kommunisticeskaya, blg. 25.
    http://www.ict.edu.ru/ft/005645/62322e1-st09.pdf
  • IEEE 1012-2004 Standard para sa Software Verification at Validation. IEEE, 2005.
  • IEEE 610.12-1990 Standard Glossary of Software Engineering Terminology, Corrected Edition. IEEE, Pebrero 1991.
  • B. W. Boehm. Software engineering; Mga Trend ng R&D at Pangangailangan sa Depensa. Sa R. Wegner, ed. Pananaliksik. Mga Direksyon sa Software Technology. Cambridge, MA:MIT Press, 1979.
  • ISO/IEC 12207 Mga sistema at software engineering - Mga proseso sa ikot ng buhay ng software. Geneva, Switzerland: ISO, 2008.

Pagsubok sa puting kahon

Pagsubok sa kakayahang magamit

A) Pagsubok sa pag-load

Subukan ang performance

Functional na pagsubok

Pagsubok ng software

Ang pagsubok ay ang proseso ng pagsasagawa ng isang programa (o bahagi ng isang programa) na may layunin (o layunin) na makahanap ng mga error.

Mayroong ilang mga pamantayan kung saan kaugalian na pag-uri-uriin ang mga uri ng pagsubok. Karaniwan ang mga sumusunod na sintomas ay nakikilala:

I) Sa pamamagitan ng pagsubok na bagay:

(pagtukoy o pagkolekta ng mga tagapagpahiwatig ng pagganap at oras ng pagtugon ng isang software at hardware system o device bilang tugon sa isang panlabas na kahilingan upang maitaguyod ang pagsunod sa mga kinakailangan para sa isang partikular na system)

b) Pagsusuri ng stress

(tinatasa ang pagiging maaasahan at katatagan ng system kapag nalampasan ang mga limitasyon ng normal na operasyon.)

c) Pagsubok sa katatagan

4) Pagsubok sa interface ng gumagamit

5) Pagsubok sa seguridad

6) Pagsubok sa lokalisasyon

7) Pagsubok sa pagiging tugma

II) Sa pamamagitan ng kaalaman sa sistema:

1) Pagsubok sa itim na kahon

(isang bagay ay nasubok na ang panloob na istraktura ay hindi alam)

(ang panloob na istraktura ng programa ay nasuri, ang data ng pagsubok ay nakuha sa pamamagitan ng pagsusuri sa lohika ng programa)

III) Sa antas ng automation:

1) Manu-manong pagsubok

2) Awtomatikong pagsubok

3) Semi-automated na pagsubok

IV) Ayon sa antas ng paghihiwalay ng mga bahagi:

1) Pagsubok sa bahagi (unit).

2) Pagsubok sa pagsasama

3) Pagsusuri ng system

V) Sa oras ng pagsubok:

1) Pagsubok sa Alpha– isang saradong proseso ng pagsubok sa isang programa ng mga full-time na developer o tester. Ang isang alpha na produkto ay kadalasang 50% lang ang kumpleto; ang program code ay naroroon, ngunit isang makabuluhang bahagi ng disenyo ang nawawala.

2) Beta pagsubok– masinsinang paggamit ng halos tapos na bersyon ng programa upang matukoy ang pinakamataas na bilang ng mga error sa pagpapatakbo nito para sa kanilang kasunod na pag-aalis bago ang huling paglabas sa merkado, sa mass consumer. Ang mga boluntaryo mula sa mga ordinaryong gumagamit sa hinaharap ay hinihikayat para sa pagsubok.

Ang pag-verify ng software ay isang mas pangkalahatang konsepto kaysa sa pagsubok. Ang layunin ng pag-verify ay upang matiyak na ang item na nabe-verify (mga kinakailangan o program code) ay nakakatugon sa mga kinakailangan, ay ipinatupad nang walang hindi sinasadyang mga function, at nakakatugon sa mga pagtutukoy at pamantayan ng disenyo ( ISO 9000-2000). Kasama sa proseso ng pag-verify ang mga inspeksyon, pagsubok ng code, pagsusuri ng mga resulta ng pagsubok, pagbuo at pagsusuri ng mga ulat ng problema. Kaya, karaniwang tinatanggap na ang proseso ng pagsubok ay isang mahalagang bahagi ng proseso ng pag-verify.