Specjaliści od oprogramowania są słusznie znani z wymyślania chwytliwych nazw dla rzeczy opartych na zdrowym rozsądku. „Inżynieria platformowa” jest tego niedawnym przykładem, łącząc ugruntowane zasady z innowacyjnością natywnych dla chmury struktur.
U podstaw inżynieria platformowa polega na ujednoliceniu procesu tworzenia oprogramowania poprzez przyjęcie spójnego, zarządzanego zestawu narzędzi, tworząc tym samym warunki do zwiększenia produktywności zespołów. Bardziej dojrzałe branże wiedzą o tym już od dziesięcioleci.
Czym jest inżynieria platformowa?
Inżynieria platformowa to praktyka projektowania, tworzenia i zarządzania podstawową infrastrukturą programową oraz systemami dla aplikacji i usług. Obejmuje zarządzanie infrastrukturą fizyczną i chmurową, automatyzację procesów, integrację różnych narzędzi, zapewnianie bezpieczeństwa i zgodności, monitorowanie wydajności oraz utrzymywanie wysokiej dostępności i odzyskiwania po awarii.
Dziedzina ta ma kluczowe znaczenie dla zapewnienia solidnych, skalowalnych i bezpiecznych środowisk technicznych, które umożliwiają sprawne tworzenie i wdrażanie aplikacji.
Inżynieria platformowa oznacza przejście od odizolowanych działań do harmonijnego ekosystemu, poprawiając doświadczenia deweloperów i efektywność operacyjną.
Have an account? Log In
Przejście od indywidualnej doskonałości do wspólnych kompetencji
Pojedynczy deweloper, czyli „rzemieślnik oprogramowania”, może początkowo przewyższać cały zespół dzięki własnemu, niestandardowemu zestawowi narzędzi. Jednak wymagania związane ze skalowaniem przedsiębiorstwa programistycznego szybko nadają priorytet sztuce pracy zespołowej — komunikacji, współpracy oraz strategicznemu udostępnianiu narzędzi i procesów.
Inżynieria platformowa stanowi wyrafinowaną odpowiedź na te dylematy związane ze skalowaniem. Obejmuje selekcjonowanie i zarządzanie zestawem aplikacji oraz narzędzi, które służą jako wspólna podstawa, umożliwiając deweloperom innowacje poprzez integrowanie i rozwijanie istniejących modułów.
Rolą zespołu inżynierii platformowej jest stworzenie wewnętrznej platformy deweloperskiej (IDP), która wykracza poza ograniczenia tradycyjnego tworzenia aplikacji poprzez uwzględnienie struktur takich jak Kubernetes, wspierając środowisko samoobsługowe, które wzmacnia pozycję deweloperów.
Zasada rzemiosła ma zastosowanie również do testowania: kompetentny tester eksploracyjny zdolny do automatyzacji jest prawdopodobnie najskuteczniejszym specjalistą ds. zapewniania jakości, jakiego można znaleźć. Wyzwanie polega jednak na skalowalności. Automatyzacja testów często funkcjonuje w silosach, a poszczególne osoby tworzą rozwiązania z wykorzystaniem narzędzi takich jak Selenium na własne, unikalne sposoby. Odejście lub awans tych osób często prowadzi do całkowitego przebudowania istniejących systemów przez ich następców, którzy mogą mieć inne podejście do korzystania z narzędzi.
Wspólne platformy testowe: wspieranie współpracy
Z drugiej strony wspólna platforma testowa umożliwiłaby produktywną współpracę profesjonalnych testerów, użytkowników biznesowych i deweloperów. Taka platforma, jak Copado's Robot Testing, nie tylko ułatwiałaby udostępnianie i ponowne wykorzystywanie testów, danych i wyników, lecz także promowałaby przejrzystość oceny jakości. Dzięki infrastrukturze jako kod (kolejna chwytliwa nazwa rzeczy opartej na zdrowym rozsądku) środowiska testowe można sprawnie wdrażać w chmurze, zapewniając wszystkim interesariuszom dostęp na żądanie i przejrzystość.
W erze mikrousług funkcjonalność poszczególnych komponentów, orkiestrujących przez platformy takie jak Docker i Kubernetes, musi być analizowana pod kątem obciążenia poznawczego i wpływu na użytkownika. W tym miejscu zastosowanie znajdują zasady inżynierii niezawodności witryn (SRE), zapewniające niezawodność systemów oraz wyposażenie zespołów operacyjnych w solidne narzędzia do obsługi alertów, takie jak Puppet, i rozwiązania do monitorowania, aby utrzymać obserwowalność.
Wyzwania inżynierii platformowej
Pomimo oczywistych korzyści inżynieria platformowa nie jest pozbawiona wyzwań. Wymaga starannego zarządzania i ciągłego rozwoju. Wiele sprawnych firm produktowych ma trudności z opracowaniem wspólnej platformy dla swoich produktów, dlatego oczekiwanie, że działy IT będą z natury posiadać te kompetencje, jest nierealistyczne. Z tego powodu szerokie platformy aplikacyjne wysokiego poziomu, takie jak Salesforce, oraz platformy deweloperskie, takie jak Git czy Azure DevOps, zyskują na popularności. To samo dzieje się z platformami testowymi, ale nieco wolniej.
Ponieważ aplikacje są tworzone poprzez składanie komponentów ze wspólnej platformy, jakość i solidność tej platformy stają się najważniejsze. Każdy problem z platformą może potencjalnie wpłynąć na wszystkie zbudowane na niej aplikacje. Dlatego platforma i aplikacje muszą rozwijać się równolegle, przy czym platforma powinna zawsze wyprzedzać aplikacje, aby zapewnić stabilność.
Testowanie platformy musi być oddzielone od testowania aplikacji, niezależnie od tego, czy przeprowadzasz testowanie na produkcji, czy nie. To pierwsze jest zwykle bardziej techniczne i koncentruje się na testach jednostkowych, interfejsach API, skalowalności i wydajności, podczas gdy to drugie ma bardziej charakter procesów biznesowych i z natury obejmuje testowanie kompleksowe.
Utrzymanie jakości w całym cyklu życia platformy
W miarę jak organizacje wdrażają podejścia natywne dla chmury, niezawodność ich platformy ma kluczowe znaczenie. Każdy problem w obrębie platformy może mieć szerokie konsekwencje, dlatego jasne rozgraniczenie między testowaniem platformy a testowaniem aplikacji jest niezwykle istotne. Taki podział umożliwia ukierunkowane podejście do skalowalności i wydajności: pierwsze koncentruje się na aspektach technicznych, takich jak interfejsy API, a drugie na funkcjonalności dla użytkownika końcowego.
More Articles
Wyjaśnienie oprogramowania i narzędzi inżynierii platform
W inżynierii platform różne narzędzia programistyczne służą do zarządzania procesami związanymi z tworzeniem, wdrażaniem i utrzymywaniem infrastruktury oraz aplikacji, a także do ich usprawniania.
Weźmy pod uwagę narzędzie takie jak Postman. Początkowo opracowany jako projekt poboczny w celu uproszczenia przepływu pracy z interfejsami API podczas programowania i testowania, Postman jest doskonałym narzędziem dla pojedynczych testerów. Jednak po zintegrowaniu z przepływem pracy związanym z ciągłą integracją/ciągłym dostarczaniem (CI/CD) jego możliwości znacznie się zwiększają, dzięki czemu służy szerszemu celowi w ramach platformy chmurowej. Umożliwia szybkie i proste testowanie interfejsów API, zapewniając użytkownikowi natychmiastową informację zwrotną.
W miarę rozwoju zespołu ograniczenia Postmana stają się oczywiste. Choć doskonale sprawdza się w testowaniu ręcznym i eksploracji, nie spełnia oczekiwań w środowiskach współpracy, w których wymagane są zautomatyzowane, powtarzalne i skalowalne testy. W miarę rozwoju operacji związanych z oprogramowaniem kluczowe stają się takie elementy jak komunikacja, udostępnianie i ponowne wykorzystywanie, często przyćmiewając wydajność pojedynczej osoby.
Inne kluczowe narzędzia używane w inżynierii platform obejmują:
- Narzędzia do konteneryzacji
- Docker: do tworzenia, wdrażania i uruchamiania aplikacji w kontenerach.
- Kubernetes: platforma do orkiestracji kontenerów, służąca do automatyzacji wdrażania, skalowania i obsługi kontenerów aplikacji w klastrach hostów.
- Narzędzia infrastruktury jako kodu (IaC):
- Terraform: służy do bezpiecznego i wydajnego tworzenia, modyfikowania oraz wersjonowania infrastruktury.
- Ansible: narzędzie o otwartym kodzie źródłowym do udostępniania oprogramowania, zarządzania konfiguracją i wdrażania aplikacji.
- Puppet: kolejne popularne narzędzie do zarządzania konfiguracją.
- Narzędzia ciągłej integracji/ciągłego wdrażania (CI/CD):
- Jenkins: serwer automatyzacji o otwartym kodzie źródłowym używany do automatyzowania części procesu tworzenia oprogramowania.
- GitLab CI/CD: zapewnia usprawniony sposób automatyzowania etapów cyklu życia tworzenia aplikacji.
- CircleCI: oferuje ciągłą integrację i dostarczanie, pomagając zespołom programistycznym szybko publikować kod.
- Narzędzia do monitorowania i obserwowalności:
- Prometheus: system monitorowania o otwartym kodzie źródłowym z bazą danych szeregów czasowych.
- Grafana: służy do wizualizacji i monitorowania metryk.
- Elasticsearch, Logstash i Kibana (stos ELK): popularne narzędzia do rejestrowania i wizualizacji danych.
- Dostawcy usług chmurowych:
- Amazon Web Services (AWS): zapewnia szeroki zakres usług chmurowych.
- Microsoft Azure: oferuje usługi przetwarzania w chmurze.
- Google Cloud Platform (GCP): zapewnia pakiet usług przetwarzania w chmurze.
- Systemy kontroli wersji:
- Git: rozproszony system kontroli wersji służący do śledzenia zmian w kodzie źródłowym.
- GitHub: platforma do przechowywania i zarządzania repozytoriami Git.
- Narzędzia do zapewniania bezpieczeństwa i zgodności:
- HashiCorp Vault: służy do zabezpieczania, przechowywania i kontrolowania dostępu do tokenów, haseł, certyfikatów, kluczy API i innych poufnych danych.
- SonarQube: ocenia jakość kodu i identyfikuje luki w zabezpieczeniach.
- Narzędzia siatki usług:
- Istio: Otwarta platforma do łączenia, zarządzania i zabezpieczania mikrousług.
- Linkerd: Zapewnia mikrousługom obserwowalność, niezawodność i bezpieczeństwo.
- Struktury bezserwerowe:
- AWS Lambda: Umożliwia uruchamianie kodu bez udostępniania serwerów i zarządzania nimi.
- Serverless Framework: Upraszcza tworzenie aplikacji z wykorzystaniem architektur bezserwerowych.
- Zarządzanie bazami danych:
- MongoDB: Popularna baza danych NoSQL.
- PostgreSQL: Zaawansowana relacyjna baza danych o otwartym kodzie źródłowym.
Obietnica inżynierii platformowej
Choć inżynieria platformowa obiecuje zwiększenie produktywności programistów, urzeczywistnienie tego potencjału jest łatwiejsze w teorii niż w praktyce. Platformą należy zarządzać z dużą starannością, testować ją pod kątem stabilności i nie dopuścić do tego, aby stała się wąskim gardłem. Ten ambitny cel wymaga skoordynowanych działań zespołów DevOps — od inżyniera DevOps po zespół produktowy. Pomyślne wdrożenie zależy od sprawnej orkiestracji, wydajności potoków oraz zaangażowania w ciągłą integrację i ciągłe wdrażanie. Skuteczne praktyki testowania oraz zestaw narzędzi ukierunkowany na automatyzację są warunkami wstępnymi udanej inżynierii platformowej.
Chcesz dowiedzieć się więcej o sztucznej inteligencji i testowaniu oprogramowania? Zapisz się do biuletynu QA Lead, aby być na bieżąco z najnowszymi trendami.



