Sunt afisate rezultatele de la 1 la 10 din 10

Hybrid View

  1. #1
    Data inscrierii
    August 2017
    Posturi
    119

    Implicit

    Citat Original a fost postat de adaniel Vezi Post
    Mesajul 'Trec' este un mesaj de pe un EXE DE TEST, in traducere clara, apelam la bunavointa ce dau dovada majoritatea distribuitorilor in a suplimenta testarea aplicatiei.
    Prin cele peste un milion jumatate de linii de cod compilate, exista si modificari aduse in nucleul programului, pentru a tine aplicatia in pas cu modificarile din windows, precum si cu expansiunea bazelor de date,
    modificari ce genereaza in cascada efecte ce nu pot fi cuantificate intotdeauna, ci doar testate.

    Mesajul "Trec" a fost o scapare prin cod, este un mesaj la nivel de nucleu al listelor, trebuia sa fie un mesaj intern prin care verificam ca inca se ruleaza acel cod, dupa ce s-a transformat lista dintr-o tablela paradox intr-o tabela pe memorie, lucru care odata finalizat, ar trebui sa rezolve problemele listelor ce nu se mai pot rula din cauza dimensiunii bazei de date, si poate sa aduca si o viteza de generare.

    Fiind semnalat, va fi corectat, si tot asa vor mai fi corectate multe erori pana apare un kit oficial.
    Si desigur, erori vor ajunge si pe kitul oficial, nu din incompetenta, ci din faptul ca de la o saptamana la alta nu poti testa tot programul. Numai liste sunt peste 600 liste unice (a nu se lua in calcul submeniul unei liste). Si ma refer la cele care prezinta configurari predefinite.
    Ok, hai ca il inteleg pe test, a fost o scapare, dar "Eroare necunoscuta", te rog sa mi-l explici?

  2. #2
    Data inscrierii
    May 2014
    Locatie
    Earth
    Posturi
    59

    Implicit

    Mesajul ala nu ar trebui sa apara. Nu e eroare de logica, ci e eroarea e data la citirea din campurile tabelei modifcm (Date personal).
    Practic pot fi doua cauze. Fie Pointer neinitializat, ceea ce ar da dovada de eroare de programare, nu e cazul pentru ca merge le restul clientilor, nu exista ramificatii ascunse, nu e nici un if pe acolo,
    fie nu ii place ce sau unde citeste. Adica structura incorecta relativ cu versiunea executabilului, ajungand fie sa vrea sa citesca coloana 59 cand sunt numai 58 coloane, fie tocmai din intercalarea
    unei noi coloane aduse pe noua versiune, astfel unde te asteptai sa fie un numar, acum se afla un sir de caractere, si va da eroare de conversie.

    Ideea e ca in unele locuri se ofera mesaje mai complexe, si oricum majoritatea nu le intelege si nu le citeste, in alte locuri se ofera prea putina informatie.
    Am inteles ca aveti oaresce cunostinte de programare. Asta insemna pe de o parte ca intelegeti ca un mesaj complet de cele mai multe ori tot nu ajuta, pentru ca trebuie sa fii in domeniu,
    iar pe de alta parte ca pentru a oferi un mesaj clar de eroare, el trebuie prins la timp.

    Asta inseamna ca aplicatia ar trebui impanzita de zone de prindere a exceptiei.
    De exemplu daca ai un cod care citeste din tabla A, ai mai apoi cod ce citeste din B, si la pe undeva cod ce imparte valoarea din A la B, se pot genera cel putin 3 erori.
    2 din ele pot suna la fel de bine Field "X" not Found. Alta poate suna EConvertError.
    Pe undeva prin cod, daca am si alte variabile, ma pot trezi si cu genericul EAccessViolation.
    Acestea sunt toate exceptii aruncate de Windows sau BDE. Ca sa le customizes si sa fie friendly trebuie prinse si analizate.

    Ca sa le prind se foloseste blocul try except sau try catch daca esti mai acomodat cu limbajul java.
    Daca folosesc unul singur, voi primi unul din mesajele de mai sus, dar BDE-ul nu transmite ce tabla a aruncat exceptia. Doar campul.
    Daca e acces violation sau divide By 0, Windowsul nu imi va spune denumirea variabilei ce a aruncat eroarea, pentru ca odata transformat in cod masina, assembler, nu e decat o adresa pe memorie.
    Este ca obsufocate-ul la java.
    Asa ca trebuie sa pun mai multe blocuri try catch.
    Unul ce sa prinda prima tabla, altul pe a doua tabla, altul pe codul cu impartire la 0.
    Ce ne facem daca apelul pe table se face intercalat? Daca am direct A.Field1 + B.Field2? E o singura linie, nu poti sa le bagi in blocuri separate, deci nu vei sti cine din A si B e gresit.
    Singura solutie e sa preevaluezi intr-un bloc pe A.Field1 si apoi pe B.Field2 pentru ca, in caz de eroare sa dai mesajul cel frumos, si dupa aia executi operatia.

    Astfel pentru 10 randuri ajungi sa ai nevoie de 5-6 blocuri de try catch, poate chiar mai multe, pentru ca mentorul nu se rezuma la adunat pe o linie 2 valori din 2 table, operatiile pot fi mult mai complexe.

    Si acum, sa zicem ca te apuci sa dublezi codul aplicvatiei cu aceste mesaje explicite, ajungi sa iti pui intrebarea: Daca la fiecare bloc try catch pierzi la executie cate 0.4 milisecunde fata de codul fara el,
    nici a 3-a parte dintr-o milisecunda, o masura de timp ignorata total, pentru ca nu o observam intr-o executie individuala,
    cat timp se pierde cand ajungi sa ai vreo 50 de blocuri intr-un loop de 50.000 de inregistrari? 16 minute. Iar o lista de 50000 de inregistrari nu dureaza mai mult de un minut.

    Cu alte cuvinte, daca aici a fost vorba doar de a nu incarca programul cu cod care nu ar trebui sa se execute, pentru ca diferenta de executie este redusa, la fel de bine puteati pune intrebarea asta la executia unei
    liste, caz in care sa sacrifici majoritatea pentru exceptie, pt ca pe delphi au fost mai inspirati sa numeasca blocul try except, nu catch, este inadmisibil.

    https://stackoverflow.com/questions/...are-not-thrown

    Concluzionand,
    Din experienta mea, cand am de facut o aplicatie cu 500 de linii de cod, ce nu face mare lucru, pot sa bag cate mesaje vreau pe ea, pentru ca nu va afecta timpul de executie a ceea ce fac daca nu e complex,
    oricum, variabilele sunt limitate, deci poti pana la urma sa o faci perfecta, si nici nu te gandesti la timpul suplimentar alocat pentru a construi toate aceste mesaje. Pentru ca, dupa cum am explicat, nu e doar textul,
    e si amplasarea codului, ce necesita planificare suplimentara, daca vrei in continuare sa optimizezi codul. Dar atunci cand complexitatea e mare, aplicatia este deja mare si pe desupra se lucreaza contra timp,
    esti nevoit sa minimizezi codul de tratare a exceptiilor. Ca fapt divers, cand a aparut aplicatia Salarii in afara aplicatiei Mentor, nu a aparut din dorinta de a o izola, de a fi ceva aparte, ci din cauza ca executabilul
    de mentor devenise prea mare ca sa mai ruleze pe Windows 98.

 

 

Reguli de Postare

  • Nu poti posta thread-uri noi
  • Nu poti posta raspunsuri
  • Nu poti posta atasamente
  • Nu poti edita posturile tale
  •