Artikoli

Tgħallem kif tagħmel testijiet f'Laravel b'eżempji sempliċi, billi tuża PHPUnit u PEST

Fejn jidħlu testijiet awtomatizzati jew unit tests, fi kwalunkwe lingwa ta’ programmar, hemm żewġ opinjonijiet opposti:

  • Ħela ta 'ħin
  • Inti ma tistax tagħmel mingħajrha

Għalhekk, b'dan l-artikolu se nippruvaw nikkonvinċu lil ta 'l-ewwel, speċjalment billi nuru kemm huwa faċli li tibda bl-ittestjar awtomatizzat f'Laravel.

L-ewwel ejja nitkellmu dwar il-"għaliex", u mbagħad ejja naraw xi eżempji tal-kif.

Għaliex għandna bżonn ittestjar awtomatizzat

Testijiet awtomatizzati jmexxu partijiet mill-kodiċi u jirrappurtaw kwalunkwe żball. Dak hu l-aktar mod sempliċi biex tiddeskrivihom. Immaġina li toħroġ karatteristika ġdida f'app, u mbagħad assistent robot personali jmur jittestja manwalment il-karatteristika l-ġdida, filwaqt li jittestja wkoll jekk il-kodiċi l-ġdid ma kisirx xi waħda mill-karatteristiċi qodma.

Dan huwa l-vantaġġ ewlieni: jerġa 'jittestja l-karatteristiċi kollha awtomatikament. Dan jista 'jidher xogħol żejjed, imma jekk ma tgħidx lir-"robot" biex tagħmel dan, għandna alternattivament nagħmluha manwalment, hux? 

Jew karatteristiċi ġodda jistgħu jiġu rilaxxati mingħajr ma jiġi ttestjat jekk jaħdmux, bit-tama li l-utenti jirrappurtaw bugs.

Testijiet awtomatizzati jistgħu jagħtuna diversi vantaġġi:

  • Iffranka l-ħin tal-ittestjar manwali;
  • Huma jippermettulek tiffranka l-ħin kemm fuq il-funzjoni l-ġdida implimentata kif ukoll fuq il-funzjonijiet konsolidati billi tevita rigressjoni;
  • Immoltiplika dan il-benefiċċju bil-karatteristiċi ġodda kollha u l-karatteristiċi kollha diġà implimentati;
  • It-tliet punti preċedenti japplikaw għal kull verżjoni ġdida;
  • ...

Ipprova immaġina l-applikazzjoni tiegħek f'sena jew tnejn, b'iżviluppaturi ġodda fit-tim li ma jafux il-kodiċi miktub fis-snin preċedenti, jew saħansitra kif tittestjah. 

L-ewwel testijiet awtomatizzati tagħna

Biex twettaq l-ewwel ittestjar awtomatizzat f'Laravel, m'għandekx bżonn tikteb xi kodiċi. Iva, inti taqra dan id-dritt. Kollox huwa diġà kkonfigurat u ppreparat fil-pre-installazzjonidefinite ta' Laravel, inkluż l-ewwel eżempju bażiku.

Tista' tipprova tinstalla proġett Laravel u tmexxi l-ewwel testijiet immedjatament:

laravel new project
cd project
php artisan test

Dan għandu jkun ir-riżultat fil-console tiegħek:

Jekk nagħtu ħarsa lejn il-predefinit ta' Laravel /tests, għandna żewġ fajls:

testijiet/Feature/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

M'għandekx bżonn tkun taf l-ebda sintassi biex tifhem x'inhu għaddej hawn: tagħbija l-home page u ċċekkja jekk il-kodiċi tal-istatus HTTP è "200 OK".

Magħruf ukoll bħala l-isem tal-metodu test_the_application_returns_a_successful_response() isir test li jinqara meta tara r-riżultati tat-test, sempliċiment billi tissostitwixxi s-simbolu tas-sottolinja bi spazju.

testijiet/Unità/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_that_true_is_true()
    {
        $this->assertTrue(true);
    }
}

Jidher daqsxejn inutli, tivverifika biex tara jekk dan hux minnu? 

Aħna ser nitkellmu speċifikament dwar it-testijiet tal-unità ftit aktar tard. Għalissa, trid tifhem x'jiġri ġeneralment f'kull test.

  • Kull fajl tat-test fil-folder /tests hija klassi PHP li testendi t-TestCase ta' PHPUnit
  • F'kull klassi, tista 'toħloq metodi multipli, normalment metodu wieħed għal sitwazzjoni biex tittestja
  • F'kull metodu hemm tliet azzjonijiet: it-tħejjija tas-sitwazzjoni, imbagħad it-teħid ta' azzjoni u mbagħad tivverifika (l-affermazzjoni) jekk ir-riżultat huwiex kif mistenni

Strutturalment, dak kollu li għandek bżonn tkun taf, kollox jiddependi fuq l-affarijiet eżatti li trid tittestja.

Biex tiġġenera klassi tat-test vojta, sempliċement ħaddem dan il-kmand:

php artisan make:test HomepageTest

Il-fajl huwa ġġenerat tests/Feature/HomepageTest.php:

class HomepageTest extends TestCase
{
    // Replace this method with your own ones
    public function test_example()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Issa ejja naraw x'jiġri jekk kodiċi tat-test ifalli f'Laravel

Ejja issa naraw x'jiġri jekk l-asserzjonijiet tat-test ma jagħtux ir-riżultat mistenni.

Ejja nbiddlu l-eżempji tat-testijiet għal dan:

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/non-existing-url');
 
        $response->assertStatus(200);
    }
}
 
 
class ExampleTest extends TestCase
{
    public function test_that_true_is_false()
    {
        $this->assertTrue(false);
    }
}

U issa, jekk imexxu l-kmand php artisan test għal darb'oħra:

 FAIL  Tests\Unit\ExampleTest
⨯ that true is true
 
 FAIL  Tests\Feature\ExampleTest
⨯ the application returns a successful response
 
---
 
• Tests\Unit\ExampleTest > that true is true
Failed asserting that false is true.
 
at tests/Unit/ExampleTest.php:16
   12▕      * @return void
   13▕      */
   14▕     public function test_that_true_is_true()
   15▕     {
➜  16▕         $this->assertTrue(false);
   17▕     }
   18▕ }
   19▕
 
• Tests\Feature\ExampleTest > the application returns a successful response
Expected response status code [200] but received 404.
Failed asserting that 200 is identical to 404.
 
at tests/Feature/ExampleTest.php:19
   15▕     public function test_the_application_returns_a_successful_response()
   16▕     {
   17▕         $response = $this->get('/non-existing-url');
   18▕
➜  19▕         $response->assertStatus(200);
   20▕     }
   21▕ }
   22▕
 
 
Tests:  2 failed
Time:   0.11s

Hemm żewġ testijiet li fallew, immarkati bħala FAIL, bi spjegazzjonijiet hawn taħt u vleġeġ li jindikaw il-linja eżatta tat-testijiet li fallew. L-iżbalji huma indikati b'dan il-mod.

Eżempju: Ittestjar tal-kodiċi tal-formola tar-reġistrazzjoni f'Laravel

Ejja ngħidu li għandna formola u għandna bżonn nittestjaw diversi każijiet: aħna niċċekkjaw jekk ifallix b'dejta invalida, niċċekkjaw jekk tirnexxix bl-input korrett, eċċ.

Il-kit tal-bidu uffiċjali minn Laravel Breeze jinkludi i tittestja l-funzjonalità fi ħdanha. Ejja nħarsu lejn xi eżempji minn hemm:

tests/Feature/RegistrationTest.php

use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class RegistrationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_registration_screen_can_be_rendered()
    {
        $response = $this->get('/register');
 
        $response->assertStatus(200);
    }
 
    public function test_new_users_can_register()
    {
        $response = $this->post('/register', [
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => 'password',
            'password_confirmation' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
}

Hawnhekk għandna żewġ testijiet fi klassi waħda, peress li t-tnejn huma relatati mal-formola ta’ reġistrazzjoni: wieħed jiċċekkja jekk il-formola hijiex mgħobbija b’mod korrett u ieħor jiċċekkja jekk is-sottomissjoni taħdem tajjeb.

Ejja nsiru familjari ma 'żewġ metodi oħra biex nivverifikaw ir-riżultat, żewġ affermazzjonijiet oħra: $this->assertAuthenticated()$response->assertRedirect(). Tista 'tiċċekkja l-asserzjonijiet kollha disponibbli fid-dokumentazzjoni uffiċjali ta' PHPUnit e Rispons Laravel . Innota li xi asserzjonijiet ġenerali jseħħu dwar is-suġġett $this, filwaqt li oħrajn jiċċekkjaw l-ispeċifiċi $responsemis-sejħa tar-rotta.

Ħaġa oħra importanti hija l- use RefreshDatabase;dikjarazzjoni, bil-puplesija, imdaħħla fuq il-klassi. Huwa meħtieġ meta l-azzjonijiet tat-test jistgħu jaffettwaw id-database, bħal f'dan l-eżempju, l-illoggjar iżid dħul ġdid fil- userstabella tad-database. Għal dan, għandek toħloq database tat-test separata li tiġi aġġornata magħha php artisan migrate:freshkull darba li jsiru t-testijiet.

Għandek żewġ għażliet: toħloq fiżikament database separata jew tuża database SQLite fil-memorja. It-tnejn huma kkonfigurati fil-fajl phpunit.xmlipprovdut awtomatikamentdefinita ma Laravel. Speċifikament, għandek bżonn din il-parti:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
    <!-- <env name="DB_DATABASE" value=":memory:"/> -->
    <env name="MAIL_MAILER" value="array"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
</php>

Ara l- DB_CONNECTIONDB_DATABASEliema huma kkummentati? Jekk għandek SQLite fuq is-server tiegħek, l-eħfef azzjoni hija li sempliċement tneħħi l-kumment ta' dawk il-linji u t-testijiet tiegħek jimxu kontra dik id-database fil-memorja.

F'dan it-test ngħidu li l-utent huwa awtentikat b'suċċess u ridirezzjonat lejn il-homepage korretta, iżda nistgħu wkoll nittestjaw id-dejta attwali fid-database.

Minbarra dan il-kodiċi:

$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);

Nistgħu nużaw ukoll l-affermazzjonijiet tat-test tad-database u agħmel xi ħaġa bħal din:

$this->assertDatabaseCount('users', 1);
 
// Or...
$this->assertDatabaseHas('users', [
    'email' => 'test@example.com',
]);

Eżempju tal-paġna Login

Ejja issa naraw eżempju ieħor ta 'paġna Login ma' Laravel Breeze

tests/Feature/AuthenticationTest.php:

class AuthenticationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_login_screen_can_be_rendered()
    {
        $response = $this->get('/login');
 
        $response->assertStatus(200);
    }
 
    public function test_users_can_authenticate_using_the_login_screen()
    {
        $user = User::factory()->create();
 
        $response = $this->post('/login', [
            'email' => $user->email,
            'password' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
 
    public function test_users_can_not_authenticate_with_invalid_password()
    {
        $user = User::factory()->create();
 
        $this->post('/login', [
            'email' => $user->email,
            'password' => 'wrong-password',
        ]);
 
        $this->assertGuest();
    }
}

Huwa dwar il-formola tal-login. Il-loġika hija simili għar-reġistrazzjoni, hux? Iżda tliet metodi minflok tnejn, għalhekk dan huwa eżempju ta 'ttestjar ta' xenarji kemm tajbin kif ukoll ħżiena. Għalhekk, il-loġika komuni hija li għandek tittestja ż-żewġ każijiet: meta l-affarijiet imorru tajjeb u meta jfallu.

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.

Ukoll, dak li tara f'dan it-test huwa l-użu ta ' Fabbriki tad-Database : Laravel joħloq utent falz ( għal darb'oħra, fuq id-database tat-test aġġornata tiegħek ) u mbagħad jipprova jidħol, bi kredenzjali korretti jew mhux korretti.

Għal darb'oħra, Laravel jiġġenera l-fabbrika predefinita b'data falza għall- Usermudell, barra l-kaxxa.

database/factories/UserFactory.php:

class UserFactory extends Factory
{
    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

Tara, kemm huma ppreparati affarijiet minn Laravel innifsu, allura jkun faċli għalina li nibdew nittestjaw?

Mela jekk inwettqu php artisan testwara l-installazzjoni ta 'Laravel Breeze, għandna naraw xi ħaġa bħal din:

 PASS  Tests\Unit\ExampleTest
✓ that true is true
 
 PASS  Tests\Feature\Auth\AuthenticationTest
✓ login screen can be rendered
✓ users can authenticate using the login screen
✓ users can not authenticate with invalid password
 
 PASS  Tests\Feature\Auth\EmailVerificationTest
✓ email verification screen can be rendered
✓ email can be verified
✓ email is not verified with invalid hash
 
 PASS  Tests\Feature\Auth\PasswordConfirmationTest
✓ confirm password screen can be rendered
✓ password can be confirmed
✓ password is not confirmed with invalid password
 
 PASS  Tests\Feature\Auth\PasswordResetTest
✓ reset password link screen can be rendered
✓ reset password link can be requested
✓ reset password screen can be rendered
✓ password can be reset with valid token
 
 PASS  Tests\Feature\Auth\RegistrationTest
✓ registration screen can be rendered
✓ new users can register
 
 PASS  Tests\Feature\ExampleTest
✓ the application returns a successful response
 
Tests:  17 passed
Time:   0.61s

Testijiet funzjonali meta mqabbla ma 'testijiet unitarji u oħrajn

Rajt is-subfolders tests/Feature e tests/Unit ?. 

X'inhi d-differenza bejniethom? 

Globalment, barra mill-ekosistema Laravel/PHP, hemm diversi tipi ta 'ttestjar awtomatizzat. Tista' ssib termini bħal:

  • Testijiet unitarji
  • Ittestjar tal-karatteristiċi
  • Testijiet ta' integrazzjoni
  • Testijiet funzjonali
  • Ittestjar minn tarf sa tarf
  • Testijiet ta' aċċettazzjoni
  • Testijiet tad-duħħan
  • eċċ.

Jidher ikkumplikat, u d-differenzi attwali bejn dawn it-tipi ta 'testijiet kultant huma mċajpra. Huwa għalhekk li Laravel issimplifika dawn it-termini konfużi kollha u ġabarhom fi tnejn: unità/karatteristika.

Fi kliem sempliċi, it-testijiet tal-karatteristiċi jippruvaw jesegwixxu l-funzjonalità attwali tal-applikazzjonijiet tiegħek: ikseb il-URL, ċempel l-API, jimita l-imġieba eżatta bħal timla l-formola. It-testijiet tal-karatteristiċi normalment iwettqu l-istess operazzjonijiet jew simili bħal kull utent tal-proġett jagħmel, manwalment, fil-ħajja reali.

It-testijiet unitarji għandhom żewġ tifsiriet. B'mod ġenerali, tista 'ssib li kwalunkwe test awtomatizzat jissejjaħ "ittestjar tal-unità" u l-proċess kollu jista' jissejjaħ "test tal-unità". Iżda fil-kuntest tal-funzjonalità kontra l-unità, dan il-proċess huwa dwar l-ittestjar ta 'unità speċifika ta' kodiċi mhux pubblika, b'mod iżolat. Pereżempju, għandek klassi Laravel b'metodu li jikkalkula xi ħaġa, bħall-prezz totali tal-ordni b'parametri. Għalhekk, it-test tal-unità jiddikjara jekk ir-riżultati korretti jiġux ritornati minn dak il-metodu (unità tal-kodiċi), b'parametri differenti.

Biex tiġġenera test unitarju, trid iżżid bandiera:

php artisan make:test OrderPriceTest --unit

Il-kodiċi ġġenerat huwa l-istess bħat-test ta 'qabel l-unitàdefiSistema Laravel:

class OrderPriceTest extends TestCase
{
    public function test_example()
    {
        $this->assertTrue(true);
    }
}

Kif tistgħu taraw, ma teżistix RefreshDatabase, u dan huwa wieħed minn defil-aktar definizzjonijiet komuni tat-test tal-unità: ma tmissx id-database, taħdem bħala "kaxxa sewda", iżolata mill-applikazzjoni li taħdem.

Nippruvaw nimitaw l-eżempju li semmejt qabel, ejja nimmaġinaw li għandna klassi tas-servizz OrderPrice.

app/Services/OrderPriceService.php:

class OrderPriceService
{
    public function calculatePrice($productId, $quantity, $tax = 0.0)
    {
        // Some kind of calculation logic
    }
}

Imbagħad, it-test unitarju jista' jidher xi ħaġa bħal din:

class OrderPriceTest extends TestCase
{
    public function test_single_product_no_taxes()
    {
        $product = Product::factory()->create(); // generate a fake product
        $price = (new OrderPriceService())->calculatePrice($product->id, 1);
        $this->assertEquals(1, $price);
    }
 
    public function test_single_product_with_taxes()
    {
        $price = (new OrderPriceService())->calculatePrice($product->id, 1, 20);
        $this->assertEquals(1.2, $price);
    }
 
    // More cases with more parameters
}

Fl-esperjenza personali tiegħi mal-proġetti Laravel, il-maġġoranza kbira tat-testijiet huma testijiet tal-Karatteristiċi, mhux testijiet tal-Unità. L-ewwel, trid tittestja jekk l-applikazzjoni tiegħek taħdem, il-mod kif in-nies reali jużawha.

Sussegwentement, jekk għandek kalkoli speċjali jew loġika tista ' definire bħala unità, b'parametri, tista 'toħloq testijiet ta' unità speċifikament għal dak.

Xi drabi, il-kitba tat-testijiet teħtieġ li tiġi mmodifikata l-kodiċi innifsu u li ssir rifactoring biex tagħmilha aktar "testabbli": tissepara l-unitajiet fi klassijiet jew metodi speċjali.

Meta/kif twettaq it-testijiet?

X'inhu l-użu attwali ta 'dan php artisan test, meta għandek tmexxiha?

Hemm approċċi differenti, skont il-fluss tax-xogħol tan-negozju tiegħek, iżda ġeneralment trid tiżgura li t-testijiet kollha huma "ħodor" (jiġifieri mingħajr żbalji) qabel ma timbotta l-bidliet finali tal-kodiċi fir-repożitorju.

Imbagħad, taħdem lokalment fuq il-kompitu tiegħek, u meta taħseb li lest, agħmel xi testijiet biex tiżgura li ma kisret xejn. Ftakar, il-kodiċi tiegħek jista 'jikkawża bugs mhux biss fil-loġika tiegħek iżda wkoll involontarjament jikser xi mġiba oħra fil-kodiċi ta' xi ħadd ieħor miktub twil ilu.

Jekk nieħdu pass 'il quddiem, huwa possibbli li awtomat ħafna affarijiet. B'diversi għodod CI/CD, tista 'tispeċifika t-testijiet biex isiru kull meta xi ħadd jimbotta bidliet għal fergħa Git speċifika jew qabel ma tgħaqqad il-kodiċi fil-fergħa tal-produzzjoni. L-aktar fluss tax-xogħol sempliċi jkun li tuża Github Actions, għandi vidjo separat li jipprova dan.

X'għandek tittestja?

Hemm opinjonijiet differenti dwar kemm għandha tkun kbira l-hekk imsejħa "kopertura tat-test": ipprova kull operazzjoni u każ possibbli f'kull paġna, jew illimita x-xogħol għall-aktar partijiet importanti.

Fil-fatt, dan huwa fejn naqbel ma 'nies li jakkużaw l-ittestjar awtomatizzat li jieħdu aktar ħin milli jipprovdu benefiċċju attwali. Dan jista' jiġri jekk tikteb testijiet għal kull dettall. Cela dit, jista 'jkun meħtieġ mill-proġett tiegħek: il-mistoqsija ewlenija hija "x'inhu l-prezz ta' żball potenzjali".

Fi kliem ieħor, għandek bżonn tipprijoritizza l-isforzi tal-ittestjar tiegħek billi tistaqsi l-mistoqsija "X'jiġri jekk dan il-kodiċi falla?" Jekk is-sistema tal-ħlas tiegħek għandha bugs, se jkollha impatt dirett fuq in-negozju. Mela jekk il-funzjonalità tar-rwoli/permessi tiegħek tinkiser, din hija kwistjoni ta 'sigurtà enormi.

Jogħġobni kif poġġih Matt Stauffer waqt konferenza: "L-ewwel trid tittestja dawk l-affarijiet li, jekk ifallu, ikeċċek minn xogħolek." Ovvjament dik hija esaġerazzjoni, imma tieħu l-idea: ipprova l-affarijiet importanti l-ewwel. U mbagħad karatteristiċi oħra, jekk ikollok ħin.

PEST: alternattiva ġdida għal PHPUnit

L-eżempji kollha ta 'hawn fuq huma bbażati fuq l-għodda ta' ttestjar minn qabel Laraveldefilejla: PHPUnit . Iżda matul is-snin dehru għodod oħra fl-ekosistema u waħda mill-aħħar popolari hija PEST . Maħluq minn impjegat uffiċjali ta 'Laravel Nuno Maduro , timmira li tissimplifika s-sintassi, u tagħmel il-kodiċi tal-kitba għat-testijiet saħansitra aktar mgħaġġel.

Taħt il-barnuża, tiġri su PHPUnit, bħala saff addizzjonali, qed jipprova jimminimizza xi partijiet ripetuti minn qabeldefiaħħar tal-kodiċi PHPUnit.

Ejja nħarsu lejn eżempju. Ftakar il-klassi tat-test ta 'qabel il-karatteristikadefinited f'Laravel? Infakkarkom:

namespace Tests\Feature;
 
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Taf kif jidher l-istess test b'PEST?

test('the application returns a successful response')->get('/')->assertStatus(200);

Iva, linja WIEĦED ta 'kodiċi u dak hu. Allura, l-għan ta 'PEST huwa li tneħħi l-overhead ta':

  • Noħolqu klassijiet u metodi għal kollox;
  • Estensjoni tal-każ tat-test;
  • Billi tpoġġi azzjonijiet fuq linji separati: f'PEST tista' tikkatinahom flimkien.

Biex tiġġenera test PEST f'Laravel, trid tispeċifika bandiera addizzjonali:

php artisan make:test HomepageTest --pest

Sa minn din il-kitba, PEST huwa pjuttost popolari fost l-iżviluppaturi ta 'Laravel, iżda hija l-preferenza personali tiegħek jekk tużax din l-għodda addizzjonali u titgħallem is-sintassi tagħha, kif ukoll nota PHPUnit.

BlogInnovazione.it

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.

Artikoli riċenti

Veeam għandu l-aktar appoġġ komprensiv għar-ransomware, mill-protezzjoni għar-rispons u l-irkupru

Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...

April 23 2024

Rivoluzzjoni Ekoloġika u Diġitali: Kif il-Manutenzjoni Predittiva qed tittrasforma l-Industrija taż-Żejt u l-Gass

Il-manutenzjoni ta’ tbassir qed tirrivoluzzjona s-settur taż-żejt u l-gass, b’approċċ innovattiv u proattiv għall-ġestjoni tal-impjant...

April 22 2024

Ir-regolatur tal-antitrust tar-Renju Unit iqajjem allarm ta’ BigTech fuq GenAI

Is-CMA tar-Renju Unit ħarġet twissija dwar l-imġieba ta 'Big Tech fis-suq tal-intelliġenza artifiċjali. Hemm…

April 18 2024

Casa Green: rivoluzzjoni tal-enerġija għal futur sostenibbli fl-Italja

Id-Digriet "Case Green", ifformulat mill-Unjoni Ewropea biex itejjeb l-effiċjenza enerġetika tal-bini, ikkonkluda l-proċess leġiżlattiv tiegħu bi...

April 18 2024