Quarkus Verification

affaan-m/ECC/docs/tr/skills/quarkus-verification

作者 affaan-mef648e01899ba3e8dc6371642deaaf64b4477775無授權條款275K 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫4 天前更新

Verification loop for Quarkus projects: build, static analysis, tests with coverage, security scans, native compilation, and diff review before release or PR.

AI 產生的概覽

為 Quarkus 專案提供發佈前驗證流程:建置、靜態分析、含涵蓋率的測試、安全掃描、原生編譯與健康檢查。

功能
為 Quarkus 應用程式提供十個階段的驗證清單,涵蓋建置、靜態分析、含 JaCoCo 涵蓋率門檻的測試、相依性與 API 安全掃描、原生編譯、負載測試、健康檢查、容器映像建置、組態驗證與文件審查。內容提供 Maven 與 Gradle 指令範例、Java 測試程式片段、一個 bash 驗證指令稿以及 GitHub Actions 工作流程。產出是一套可重複執行的驗證流程與清單,而非產生的檔案成品。
適用情境
適用於在 Quarkus 服務上開啟提取要求之前、大型重構或相依性升級之後,或部署到預備與正式環境之前。也適合需要確認涵蓋率門檻或原生映像相容性的情況。
執行需求
需要以 Maven 或 Gradle 建置的 Quarkus 專案、JDK,以及選用工具:Checkstyle、PMD、SpotBugs、SonarQube、JaCoCo、OWASP dependency-check、Quarkus CLI、GraalVM 或容器建置、Docker、k6、Trivy 或 Grype,以及 SONAR_TOKEN、CODECOV_TOKEN 等 CI 認證資訊。僅為說明文件,技能未附任何指令稿。

Quarkus Doğrulama Döngüsü

PR'lardan önce, büyük değişikliklerden sonra ve deployment öncesi çalıştırın.

Ne Zaman Aktif Edilir

  • Quarkus servisi için pull request açmadan önce
  • Büyük refactoring veya bağımlılık yükseltmelerinden sonra
  • Staging veya production için deployment öncesi doğrulama
  • Tam build → lint → test → güvenlik taraması → native derleme pipeline'ı çalıştırma
  • Test kapsamının eşikleri karşıladığını doğrulama (%80+)
  • Native image uyumluluğunu test etme

Faz 1: Build

bash
# Mavenmvn clean verify -DskipTests
# Gradle./gradlew clean assemble -x test

Build başarısız olursa, durdurun ve derleme hatalarını düzeltin.

Faz 2: Static Analiz

Checkstyle, PMD, SpotBugs (Maven)

bash
mvn checkstyle:check pmd:check spotbugs:check

SonarQube (yapılandırılmışsa)

bash
mvn sonar:sonar \  -Dsonar.projectKey=my-quarkus-project \  -Dsonar.host.url=http://localhost:9000 \  -Dsonar.login=${SONAR_TOKEN}

Ele Alınacak Yaygın Sorunlar

  • Kullanılmayan import'lar veya değişkenler
  • Karmaşık metodlar (yüksek cyclomatic complexity)
  • Potansiyel null pointer dereference'ları
  • SpotBugs tarafından işaretlenen güvenlik sorunları

Faz 3: Testler + Kapsam

bash
# Tüm testleri çalıştırmvn clean test
# Kapsam raporu oluşturmvn jacoco:report
# Kapsam eşiğini zorla (%80)mvn jacoco:check
# Veya Gradle ile./gradlew test jacocoTestReport jacocoTestCoverageVerification

Test Kategorileri

Unit Testler

Mock'lanmış bağımlılıklarla servis mantığını test edin:

java
@ExtendWith(MockitoExtension.class)class UserServiceTest {  @Mock UserRepository userRepository;  @InjectMocks UserService userService;
  @Test  void createUser_validInput_returnsUser() {    var dto = new CreateUserDto("Alice", "[email protected]");
    // Panache persist() void döndürür — doNothing + verify kullanın    doNothing().when(userRepository).persist(any(User.class));
    User result = userService.create(dto);
    assertThat(result.name).isEqualTo("Alice");    verify(userRepository).persist(any(User.class));  }}
Entegrasyon Testleri

Gerçek veritabanıyla (Testcontainers) test edin:

java
@QuarkusTest@QuarkusTestResource(PostgresTestResource.class)class UserRepositoryIntegrationTest {
  @Inject  UserRepository userRepository;
  @Test  @Transactional  void findByEmail_existingUser_returnsUser() {    User user = new User();    user.name = "Alice";    user.email = "[email protected]";    userRepository.persist(user);
    Optional<User> found = userRepository.findByEmail("[email protected]");
    assertThat(found).isPresent();    assertThat(found.get().name).isEqualTo("Alice");  }}
API Testleri

REST Assured ile REST endpoint'lerini test edin:

java
@QuarkusTestclass UserResourceTest {
  @Test  void createUser_validInput_returns201() {    given()        .contentType(ContentType.JSON)        .body("""            {"name": "Alice", "email": "[email protected]"}            """)        .when().post("/api/users")        .then()        .statusCode(201)        .body("name", equalTo("Alice"));  }
  @Test  void createUser_invalidEmail_returns400() {    given()        .contentType(ContentType.JSON)        .body("""            {"name": "Alice", "email": "invalid"}            """)        .when().post("/api/users")        .then()        .statusCode(400);  }}

Kapsam Raporu

Ayrıntılı kapsam için target/site/jacoco/index.html sayfasını kontrol edin:

  • Genel satır kapsamı (hedef: %80+)
  • Branch kapsamı (hedef: %70+)
  • Kapsanmamış kritik yolları belirleyin

Faz 4: Güvenlik Taraması

Bağımlılık Güvenlik Açıkları (Maven)

bash
mvn org.owasp:dependency-check-maven:check

CVE'ler için target/dependency-check-report.html raporunu inceleyin.

Quarkus Güvenlik Denetimi

bash
# Güvenlik açığı olan extension'ları kontrol etmvn quarkus:audit
# Tüm extension'ları listelemvn quarkus:list-extensions

OWASP ZAP (API Güvenlik Testi)

bash
docker run -t ghcr.io/zaproxy/zaproxy:stable zap-api-scan.py \  -t http://localhost:8080/q/openapi \  -f openapi

Yaygın Güvenlik Kontrolleri

  • Tüm gizli bilgiler ortam değişkenlerinde (kodda değil)
  • Tüm endpoint'lerde girdi doğrulama
  • Kimlik doğrulama/yetkilendirme yapılandırılmış
  • CORS düzgün yapılandırılmış
  • Güvenlik başlıkları ayarlanmış
  • Parolalar BCrypt ile hash'lenmiş
  • SQL injection koruması (parametreli sorgular)
  • Genel endpoint'lerde rate limiting

Faz 5: Native Derleme

GraalVM native image uyumluluğunu test edin:

bash
# Native executable oluşturmvn package -Dnative
# Veya container ilemvn package -Dnative -Dquarkus.native.container-build=true
# Native executable'ı test et./target/*-runner
# Temel smoke testleri çalıştırcurl http://localhost:8080/q/health/livecurl http://localhost:8080/q/health/ready

Native Image Sorun Giderme

Yaygın sorunlar:

  • Reflection: Dinamik sınıflar için reflection yapılandırması ekleyin
  • Resources: quarkus.native.resources.includes ile kaynakları dahil edin
  • JNI: Native kütüphaneler kullanıyorsanız JNI sınıflarını kaydedin

Örnek reflection yapılandırması:

java
@RegisterForReflection(targets = {MyDynamicClass.class})public class ReflectionConfiguration {}

Faz 6: Performans Testi

K6 ile Yük Testi

javascript
// load-test.jsimport http from 'k6/http';import { check } from 'k6';
export const options = {  stages: [    { duration: '30s', target: 50 },    { duration: '1m', target: 100 },    { duration: '30s', target: 0 },  ],};
export default function () {  const res = http.get('http://localhost:8080/api/markets');  check(res, {    'status is 200': (r) => r.status === 200,    'response time < 200ms': (r) => r.timings.duration < 200,  });}

Çalıştırın:

bash
k6 run load-test.js

İzlenecek Metrikler

  • Yanıt süresi (p50, p95, p99)
  • Throughput (istek/saniye)
  • Hata oranı
  • Bellek kullanımı
  • CPU kullanımı

Faz 7: Sağlık Kontrolleri

bash
# Livenesscurl http://localhost:8080/q/health/live
# Readinesscurl http://localhost:8080/q/health/ready
# Tüm sağlık kontrollericurl http://localhost:8080/q/health
# Metrikler (etkinleştirilmişse)curl http://localhost:8080/q/metrics

Beklenen yanıtlar:

json
{  "status": "UP",  "checks": [    {      "name": "Database connection",      "status": "UP"    }  ]}

Faz 8: Container Image Build

bash
# Container image oluşturmvn package -Dquarkus.container-image.build=true
# Veya belirli registry ilemvn package \  -Dquarkus.container-image.build=true \  -Dquarkus.container-image.registry=docker.io \  -Dquarkus.container-image.group=myorg \  -Dquarkus.container-image.tag=1.0.0
# Container'ı test etdocker run -p 8080:8080 myorg/my-quarkus-app:1.0.0

Container Güvenlik Taraması

bash
# Trivytrivy image myorg/my-quarkus-app:1.0.0
# Grypegrype myorg/my-quarkus-app:1.0.0

Faz 9: Yapılandırma Doğrulama

bash
# Tüm yapılandırma özelliklerini kontrol etmvn quarkus:info
# Tüm yapılandırma kaynaklarını listelecurl http://localhost:8080/q/dev/io.quarkus.quarkus-vertx-http/config

Ortama Özgü Kontroller

  • Veritabanı URL'leri ortam başına yapılandırılmış
  • Gizli bilgiler dışsallaştırılmış (Vault, ortam değişkenleri)
  • Loglama seviyeleri uygun
  • CORS origin'leri doğru ayarlanmış
  • Rate limiting yapılandırılmış
  • İzleme/tracing etkinleştirilmiş

Faz 10: Dokümantasyon İncelemesi

  • OpenAPI/Swagger dokümanları güncel (/q/swagger-ui)
  • README kurulum talimatlarını içeriyor
  • API değişiklikleri belgelenmiş
  • Breaking change'ler için migration rehberi
  • Yapılandırma özellikleri belgelenmiş

OpenAPI spec oluşturun:

bash
curl http://localhost:8080/q/openapi -o openapi.json

Doğrulama Kontrol Listesi

Kod Kalitesi

  • Build uyarısız geçiyor
  • Static analiz temiz (yüksek/orta sorun yok)
  • Kod ekip kurallarını takip ediyor
  • PR'da yorum satırına alınmış kod veya TODO yok

Test

  • Tüm testler geçiyor
  • Kod kapsamı ≥ %80
  • Gerçek veritabanıyla entegrasyon testleri
  • Güvenlik testleri geçiyor
  • Performans kabul edilebilir sınırlar içinde

Güvenlik

  • Bağımlılık güvenlik açığı yok
  • Kimlik doğrulama/yetkilendirme test edilmiş
  • Girdi doğrulama tamamlanmış
  • Gizli bilgiler kaynak kodda değil
  • Güvenlik başlıkları yapılandırılmış

Deployment

  • Native derleme başarılı
  • Container image oluşturuluyor
  • Sağlık kontrolleri doğru yanıt veriyor
  • Hedef ortam için yapılandırma geçerli

Native Image

  • Native executable oluşturuluyor
  • Native testler geçiyor
  • Başlangıç süresi < 100ms
  • Bellek ayak izi kabul edilebilir

Otomatik Doğrulama Script'i

bash
#!/bin/bashset -e
echo "=== Faz 1: Build ==="mvn clean verify -DskipTests
echo "=== Faz 2: Static Analiz ==="mvn checkstyle:check pmd:check spotbugs:check
echo "=== Faz 3: Testler + Kapsam ==="mvn test jacoco:report jacoco:check
echo "=== Faz 4: Güvenlik Taraması ==="mvn org.owasp:dependency-check-maven:check
echo "=== Faz 5: Native Derleme ==="mvn package -Dnative -Dquarkus.native.container-build=true
echo "=== Tüm Fazlar Tamamlandı ==="echo "Raporları inceleyin:"echo "  - Kapsam: target/site/jacoco/index.html"echo "  - Güvenlik: target/dependency-check-report.html"echo "  - Native: target/*-runner"

CI/CD Entegrasyonu

GitHub Actions Örneği

yaml
name: Verification
on: [push, pull_request]
jobs:  verify:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v7
      - name: Set up JDK 21        uses: actions/setup-java@v5        with:          java-version: '21'          distribution: 'temurin'
      - name: Cache Maven packages        uses: actions/cache@v6        with:          path: ~/.m2          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
      - name: Build        run: mvn clean verify -DskipTests
      - name: Test with Coverage        run: mvn test jacoco:report jacoco:check
      - name: Security Scan        run: mvn org.owasp:dependency-check-maven:check
      - name: Upload Coverage        uses: codecov/codecov-action@v7        with:          token: ${{ secrets.CODECOV_TOKEN }}          files: target/site/jacoco/jacoco.xml

En İyi Uygulamalar

  • Her PR öncesi doğrulama döngüsünü çalıştırın
  • CI/CD pipeline'ında otomatize edin
  • Sorunları hemen düzeltin; borç biriktirmeyin
  • Kapsamı %80'in üzerinde tutun
  • Bağımlılıkları düzenli olarak güncelleyin
  • Native derlemeyi periyodik olarak test edin
  • Performans trendlerini izleyin
  • Breaking change'leri belgeleyin
  • Güvenlik tarama sonuçlarını inceleyin
  • Her ortam için yapılandırmayı doğrulayın

來源與署名

來源:affaan-m/ECC位於docs/tr/skills/quarkus-verification提交ef648e0

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架