Zalecenia dotyczące standaryzacji narzędzi i procesów

Dotyczy tego zalecenia z listy kontrolnej dotyczącej doskonałości operacyjnej platformy Azure Well-Architected Framework:

OE:04 Zoptymalizuj procesy tworzenia oprogramowania i zapewniania jakości, postępując zgodnie ze sprawdzonymi w branży rozwiązaniami dotyczącymi programowania i testowania. Aby jednoznacznie oznaczyć role, standaryzację praktyk między składnikami, takimi jak narzędzia, kontrola źródła, wzorce projektowe aplikacji, dokumentacja i przewodniki dotyczące stylu.

Przewodnik pokrewny: Zwiększanie szybkości | kompilacjiKorzystanie z ciągłej integracji

W tym przewodniku opisano zalecenia dotyczące definiowania standardów dla narzędzi i procesów tworzenia oprogramowania. Definiowanie spójnych rozwiązań prowadzi do wydajnego zespołu obciążeń i pracy wysokiej jakości. Zespoły o wysokiej wydajności używają sprawdzonych w branży narzędzi i procesów, aby zminimalizować zmarnowany wysiłek i potencjalne błędy kodu.

Kluczowe strategie projektowania

Pierwszym krokiem optymalizacji praktyk programistycznych jest standaryzacja narzędzi i procesów. Jeśli to możliwe, należy używać sprawdzonych w branży rozwiązań zamiast opracowywać rozwiązania wewnętrzne. Aby jeszcze bardziej zoptymalizować swoje rozwiązania, należy zastosować narzędzia z małą ilością kodu i bez kodu. Te narzędzia umożliwiają skoncentrowanie wysiłków na aplikacji i pomaga zaoszczędzić czas. W przypadku wszystkich narzędzi i procesów, które można standandaryzować, zaimplementuj szkolenia, aby zespoły zrozumiały i efektywnie ich używały. Aby zdefiniować standardy, które pomagają zoptymalizować praktyki programistyczne, należy wziąć pod uwagę następujące zalecenia.

Korzystanie z dobrze znanych i dojrzałych narzędzi gotowych

Używaj dobrze znanych i dojrzałych narzędzi gotowych i standandaryzuj ich użycie. Wysoce skuteczne zespoły inżynieryjne przyjmują najlepsze w klasie narzędzia. Takie podejście minimalizuje potrzebę opracowywania rozwiązań do planowania, programowania, testowania, współpracy oraz ciągłej integracji i ciągłego dostarczania (CI/CD). Wiele przedsiębiorstw daje deweloperom wybór między kilkoma narzędziami, ale wszystkie opcje są standardowymi narzędziami dla organizacji i są weryfikowane wewnętrznie. Co najważniejsze, wybierz narzędzia spełniające wymagania dotyczące obciążenia. Gotowe narzędzia powinny zapewniać następujące funkcje:

  • Planowanie pracy i zarządzanie listami prac

  • Kontrola wersji i repozytoria

  • Potoki ciągłej integracji/ciągłego wdrażania

  • Testowanie, takie jak integracja, dym, syntetyczny użytkownik, symulacja, chaos i inne testy jakości

  • Programowanie kodu

W niektórych przypadkach jedno narzędzie lub zestaw narzędzi mogą zapewniać kilka funkcji. Upewnij się, że rozumiesz możliwości narzędzi i ich ograniczenia, aby spełniały twoje wymagania dotyczące funkcji.

Określ, czy należy inwestować w kosztowne narzędzia lub wersje premium narzędzi. Zastanów się nad czasem i nakładem pracy nad opracowywaniem własnych rozwiązań w porównaniu z funkcjami oferowanymi przez narzędzia w warstwie Premium. Rozważ jednorazowe koszty w porównaniu z kosztami cyklicznymi. W większości przypadków narzędzia gotowe zapewniają wyższą wartość zespołowi.

Używaj narzędzi z małą ilością kodu, bez kodu i sztucznej inteligencji, gdy jest to praktyczne. Narzędzia z małą ilością kodu i bez kodu oszczędzają doświadczonym deweloperom czas, umożliwiając im łatwe podłączanie funkcji zamiast wykonywania całego procesu tworzenia kodu. Te narzędzia umożliwiają również członkom zespołu obciążeń, którzy mogą nie być przeszkoleni deweloperami, aby współtworzyć działanie obciążenia. Narzędzia sztucznej inteligencji mogą pomóc w tworzeniu kodu, przeglądach i optymalizacji.

Standaryzacja strategii rozgałęziania

Wybierz model oparty na magistrali, jeśli jest to możliwe. Rozgałęzianie oparte na magistrali zapewnia synchronizację zespołu programistycznego obciążeń i zachęca do ciągłego dostarczania. Zdefiniuj zasady gałęzi, aby chronić ważne gałęzie, takie jak gałąź główna. Aby uzyskać więcej informacji, zobacz Wdrażanie strategii rozgałęziania Usługi Git oraz Zasady i ustawienia gałęzi.

Ocena metryk w celu kwantyfikacji skuteczności programowania

Zespoły ds. tworzenia oprogramowania i zapewniania jakości mogą poprawić się tylko wtedy, gdy będą mogły określić ich skuteczność. Aby określić efektywność, muszą zidentyfikować metryki, które mierzą szybkość pracy deweloperów i definiują kluczowe wskaźniki wydajności. Przykłady tych metryk to:

  • Częstotliwość wdrażania: liczba wdrożeń wdrażanych przez każdego dewelopera każdego dnia.

  • Czas realizacji: czas potrzebny na przejście z listy prac do wdrożenia produkcyjnego przez zadanie lub historię użytkownika.

  • Średni czas na rozwiązanie: średni czas poświęcany na naprawianie usterek lub wad w kodzie.

  • Współczynnik niepowodzeń zmian: procent zmian, które powodują awarię.

Aby ułatwić uczestnikom projektu i zespołowi ds. obciążeń łatwe śledzenie szybkości, wizualizowanie wskaźników KPI przy użyciu pulpitów nawigacyjnych lub innych narzędzi do raportowania.

Standaryzacja sposobu pisania, przeglądów i kodu dokumentów przez zespół ds. obciążeń

Standaryzacja sposobu pisania, przeglądów i kodu dokumentów przez zespół ds. obciążeń przy użyciu przewodnika stylowego. Styl standardowy ułatwia współpracę i ułatwia dołączanie nowych deweloperów. Aby efektywnie pracować, nowi deweloperzy muszą wiedzieć, jak działa zespół ds. obciążeń. Przewodnik stylu z jasno zdefiniowanymi standardami może ułatwić ich proces trenowania. W przewodniku stylu zdefiniuj standardy dla języków programowania, bibliotek, struktur i innych konwencji.

Gdy jest to praktyczne, użyj narzędzi, aby wymusić standardy formatowania kodu. Na przykład program Visual Studio oferuje kilka narzędzi , które skanują kod pod kątem stylu, jakości, konserwacji, projektowania i innych problemów. W przypadku infrastruktury jako kodu (IaC) można użyć narzędzia Checkov lub Terrascan dla programu Terraform.

Aby zapewnić spójność i uniknąć potencjalnych nieporozumień, przewodnik po stylu powinien zawierać standardowe konwencje nazewnictwa artefaktów, środowisk, gałęzi, kompilacji i przebiegów.

Należy również ustawić wytyczne i standardy dla dozwolonego stopnia wariancji w środowiskach. Jeśli istnieją nowe języki, struktury lub inne technologie, które członkowie zespołu ds. obciążeń chcą dodać do standardowej listy, zaimplementuj proces używania tych narzędzi w piaskownicy lub niższym środowisku. Przetestuj ich rentowność i w razie potrzeby zastąp istniejące technologie.

Użyj rekordów decyzyjnych dotyczących architektury (ADR), aby zachować historyczny zapis decyzji dotyczących projektu zespołu obciążeń. Usługi ADRs pomagają zespołom w utrzymaniu nowego zrozumienia obciążenia. Pomagają również nowym członkom zespołu dowiedzieć się więcej o decyzjach projektowych, które są podejmowane podczas cyklu życia obciążenia. Upewnij się, że usługi ADRs są kontrolowane w wersji.

W przypadku reguły ADR uwzględnij następujące elementy:

  • Wybrane przez Zespół narzędzia i technologie, na przykład przy użyciu języka SQL lub NoSQL.

  • Przyczyny decyzji twojego zespołu.

  • Inne rozważane opcje, które pomagają w kontekście ostatecznej decyzji.

  • Wymagania funkcjonalne i niefunkcjonalne, które są uwzględniane w decyzjach.

  • Kontekst procesu podejmowania decyzji, taki jak problem, który został rozwiązany.

Implementowanie standardów dotyczących rozwiązywania problemów z długiem technicznym

Przyjmij sposób myślenia, że dług techniczny jest zamierzony i niezbędny dla elementów dostarczanych przez zespół ds. obciążeń. Ten sposób myślenia motywuje twój zespół do regularnego rozważenia i rozwiązania problemu długu technicznego, aby uniknąć akumulowania. Rozwiązywanie problemów z długiem technicznym jako regularnie powtarzającym się zadaniem na liście prac.

Załóżmy na przykład, że twój zespół ustandaryzował bibliotekę. W czasie należy przełączyć się do innej biblioteki, aby uzyskać nowe funkcje w obciążeniu. To przejście może spowodować zadłużenie techniczne. Często przejścia takie jak te mogą pozostawić zespół roboczy obsługujący dwie technologie, ponieważ nie mogą w pełni przejść bezproblemowo. Zespół ds. obciążeń musi ustalić priorytety ukończenia przejścia, ponieważ gdy obciążenie osiągnie nową funkcjonalność, uczestnicy projektu są zadowoleni i mniej prawdopodobne, aby rozważyć dług techniczny.

Standaryzacja sposobu stosowania wersji do artefaktów

Standaryzacja sposobu stosowania wersji do artefaktów i sposobu uwidaczniania wersji wewnętrznie i zewnętrznie. Na przykład systemy klienckie powinny uwidocznić uruchomioną wersję w interfejsie użytkownika. Ta technika jest przydatna, gdy zespół ds. obciążeń rozwiązuje problemy, ponieważ klient może łatwo komunikować się z używaną wersją. Interfejsy REST mogą uwidaczniać wersje niektórych składników lub baz danych. Aby uwidocznić wersję schematu, możesz użyć określonej tabeli w metadanych.

Używaj sprawdzonych w branży wzorców projektowych aplikacji, aby upewnić się, że aplikacja jest niezawodna, wydajna i bezpieczna. Użyj tych wzorców, aby zaoszczędzić czas i nakład pracy w porównaniu z opracowywaniem własnych rozwiązań dla aplikacji. Wybierz wzorce, które korzystają z obciążenia. Regularnie przeglądaj wzorce projektowe, aby upewnić się, że używasz odpowiednich wzorców w miarę rozwoju obciążenia.

Implementowanie podejścia shift-left do testowania

Zaimplementuj podejście shift-left do testowania, wykonując testy jednostkowe wcześnie i często w całym procesie programowania. Częste testowanie w każdym środowisku deweloperów pomaga deweloperom uzyskać zaufanie do swoich aplikacji. Aby ułatwić tworzenie strategii testowania przy użyciu podejścia shift-left, rozważ następujące zasady:

  • Pisanie testów na najniższym możliwym poziomie. Preferuj testy z najmniejszymi zależnościami zewnętrznymi i uruchamiaj testy w ramach kompilacji.

  • Pisanie testów raz i uruchamianie testów wszędzie, w tym w środowisku produkcyjnym. Pisanie testów, które można uruchamiać w każdym środowisku projektowym bez uwzględniania czynników specyficznych dla jednego środowiska, takich jak zaszyfrowane wpisy tajne lub konfiguracje.

  • Zaprojektuj obciążenie na potrzeby testowania. Podczas opracowywania aplikacji należy spełnić wymagania dotyczące testowania.

  • Traktuj kod testowy jako kod aplikacji. Zastosuj te same standardy jakości i programistyczne do kodu aplikacji i kodu testowego. Przechowuj kod testowy obok kodu aplikacji. Opracowywanie i utrzymywanie kodu testowego za pomocą kodu aplikacji. Aby zapewnić jakość testów, odrzuć testy, które nie są niezawodne.

  • Rozważ własność testową, która opiera się na własności obciążenia. Twój zespół obciążeń jest właścicielem testów i nie powinien polegać na innych zespołach do testowania kodu.

  • Automatyzowanie testów jak najwięcej. Zautomatyzowany kod zmniejsza obciążenie zespołu obciążeń i wymusza spójną jakość.

Aby uzyskać szczegółowe wskazówki dotyczące implementowania strategii testowania Metodyki DevOps, zobacz Testowanie zmian w lewo z testami jednostkowymi.

Wymagaj praktyk DevSecOps w ramach standardowych procedur operacyjnych. Twój zespół ds. obciążeń powinien zrozumieć praktyki w zakresie zabezpieczeń związane z programowaniem oprogramowania i zapewnianiem jakości. Muszą przestrzegać tych praktyk bez wyjątku. Aby uzyskać więcej informacji, zobacz Przewodnik cyklu życia programowania zabezpieczeń.

Implementowanie standardów nazewnictwa i tagowania zasobów

Implementowanie konwencji tagowania i nazewnictwa jest najlepszym rozwiązaniem w zakresie zarządzania zasobami platformy Azure i organizowania ich. Konwencje tagowania i nazewnictwa ułatwiają identyfikowanie, klasyfikowanie i grupowanie zasobów na podstawie typowych atrybutów, takich jak środowisko, aplikacja, właściciel lub centrum kosztów. Umożliwiają one również zabezpieczenia, automatyzację, raportowanie i zarządzanie zasobami w subskrypcjach i grupach zasobów.

Oto niektóre korzyści wynikające z używania standardowych konwencji tagowania i nazewnictwa:

  • Zapewniają one spójność i przejrzystość identyfikacji zasobów i zarządzania nimi, ułatwiają odnajdywanie i wyszukiwanie w Azure Portal, programie PowerShell, interfejsie wiersza polecenia i interfejsach API.
  • Umożliwiają filtrowanie i grupowanie zasobów na potrzeby rozliczeń, monitorowania, zabezpieczeń i zgodności.
  • Obsługują one zarządzanie cyklem życia zasobów, takie jak aprowizowanie, likwidowanie, tworzenie kopii zapasowych i odzyskiwanie.
  • Są one niezbędne do celów bezpieczeństwa. Jeśli wystąpi zdarzenie zabezpieczeń, kluczowe znaczenie ma szybkie zidentyfikowanie systemów, których dotyczy problem, funkcje obsługiwane przez te systemy i potencjalny wpływ na firmę.

Aby uzyskać więcej informacji na temat używania konwencji nazewnictwa dla zasobów w chmurze, zobacz Definiowanie konwencji nazewnictwa. Aby uzyskać więcej informacji na temat stosowania tagów metadanych do zasobów w chmurze, zobacz Definiowanie strategii tagowania.

Ułatwienia platformy Azure

  • Azure DevOps to kolekcja usług, których można użyć do tworzenia wspólnej, wydajnej i spójnej praktyki programistycznej. Usługa Azure DevOps łączy następujące rozwiązania:

    • Usługa Azure Pipelines udostępnia usługi kompilacji i wydania do obsługi ciągłej integracji/ciągłego wdrażania aplikacji.

    • Azure Boards to internetowe narzędzie do zarządzania pracą, które obsługuje rozwiązania Agile, takie jak Scrum i Kanban.

    • Azure Repos to narzędzie kontroli wersji, które obsługuje rozproszony system kontroli wersji git i system Kontrola wersji serwera Team Foundation.

    • Azure Test Plans to oparte na przeglądarce rozwiązanie do zarządzania testami, które zapewnia możliwości wymagane do planowanego testowania ręcznego, testowania akceptacyjnego użytkownika, testowania eksploracyjnego i zbierania opinii uczestników projektu.

    • Usługa Azure Artifacts służy do umożliwienia deweloperom wydajnego udostępniania kodu i zarządzania pakietami.

  • GitHub Actions dla platformy Azure to narzędzie, za pomocą którego można zautomatyzować procesy ciągłej integracji/ciągłego wdrażania. Integruje się bezpośrednio z platformą Azure, aby uprościć wdrożenia. Możesz tworzyć przepływy pracy, które kompilują i testują każde żądanie ściągnięcia do repozytorium lub wdrażają scalone żądania ściągnięcia do środowiska produkcyjnego.

  • GitHub Projects to narzędzie do zarządzania pracą, którego można użyć do tworzenia tablic Kanban, raportów, pulpitów nawigacyjnych i innych funkcji.

  • Narzędzia z małą ilością kodu i bez kodu obejmują:

  • Szablony usługi Azure Resource Manager i Bicep to narzędzia natywne dla platformy Azure, których można użyć do wdrożenia IaC. Terraform to inne narzędzie IaC obsługiwane przez platformę Azure, którego można użyć do wdrażania infrastruktury i zarządzania nią.

  • Visual Studio to niezawodne narzędzie programistyczne, które integruje się z platformą Azure i obsługuje wiele języków.

  • GitHub Copilot to usługa sztucznej inteligencji, która działa jako programista pary i udostępnia sugestie dotyczące stylu autouzupełniania podczas programowania. Copilot jest dostępny jako rozszerzenie w programie Visual Studio i kilku innych narzędziach programistycznych.

  • Testowanie obciążenia platformy Azure to w pełni zarządzana usługa testowania obciążenia, której można użyć do generowania obciążenia na dużą skalę przez symulowanie ruchu dla aplikacji niezależnie od tego, gdzie są hostowane.

Lista kontrolna doskonałości operacyjnej

Zapoznaj się z pełnym zestawem zaleceń.