---
title: "Polity"
canonical: https://wavect.io/zh/case-studies/polity/
language: zh
description: "Polity 是一个企业级 SaaS 平台。Wavect 统一了质量工程、按服务设置的测试门禁、发布自动化和前端现代化工作。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

[← 所有案例研究](/zh/case-studies/)

![Polity logo](/img/clients/svg/polity.svg)

案例研究 · 2026

Polity

# 七个微服务上的 QA 统一，数百个 bug 关闭，发布闸门稳住。

Polity 是一个跑在七个微服务之上的企业级平台。分布式、复杂，并被以企业客户要求的标准对待，这类系统里，QA不是可选项。

ENTERPRISE 软件 QA 2026 上线

速览

项目类型 软件 QA

行业 [企业 SaaS](/zh/industries/enterprise-ai-saas/)

阶段 企业

项目规模 多年期 Retainer + 固定价格

年份 2026

技术栈

React Java/Kotlin Go Python Rust Docker

状态 上线

实例 [polity.li](https://polity.li/)

## 概览

Polity 是一个跑在七个微服务之上的企业级平台。分布式、复杂，并被以企业客户要求的标准对待，这类系统里，QA不是可选项。

## 挑战是什么？

七个服务，各自有自己的工具链、成熟度和故障模式。多个供应商并行推代码、功能开发在飞、企业客户群不容忍回归。要在一年半内把这一切统一进一个质量模型，同时不能拖慢工程团队。

## 我们做了什么决定？

### 在七个服务上，集中式 QA 跟不上。我们把质量推到代码生根的地方。

> 供应商的 PR 是逐个评审的、测试集中在一个团队里、关键流程靠手工验证。这套模式撑不过七个微服务的持续交付节奏。我们推出两个协议。第一个把供应商集成评估从逐个 PR 评审改为有明确闸门的结构化同行评审流程。第二个把集中式测试拆成按服务的 CI 闸门和组件级校验，落到全部七个微服务上。与此同时，我们把前端和工具链栈迁移到当前一代平台并现代化开发者工作流，把关键流程上的手工 QA 换成自动化的端到端覆盖，把所有七个服务的 CI 重新接成带护栏的流水线，并集成了端到端用户流校验。重点从来不是更多测试。重点是把责任、自动化和标准化推到真正做决策的位置。

## 我们做了什么

覆盖七个服务和多个供应商的质量，需要的先是协调层，而不是更多工具。架构上的判断：从集中、手工、碎片化的工作流，转向可扩展、按 ownership 驱动、自动化的系统，通过标准化和现代基础设施，为开发者速度、评审质量、可靠性和长期可维护性做优化。具体：推出一套供应商集成评审协议，把评估从逐个 PR 评审转成有明确闸门的结构化同行评审流程；推出一套统一测试协议，把集中式测试拆成按服务的 CI 闸门和组件级校验，落到全部七个微服务上；把前端和工具链栈迁移到当前一代前端平台并现代化开发者工作流；把关键产品验证上的手工 QA 换成自动化端到端测试；把 7+ 服务上碎片化的遗留 CI 整合进带护栏的流水线，并集成端到端用户流校验。在此之上：E2E 策略、降低不稳定性、加固 CI/CD、监督供应商与贡献者质量、分类处理数百个 bug。工具投资大约在第三个月开始回本。结果：能撑过团队人员变动、供应商轮换和持续重构的质量。

## 成果

### 7个服务 - 统一测试
- **Category:** 规模

### 数百个 - Bug已解决
- **Category:** 风险

想让你的项目也拿到这样的成果？

范围固定。期限固定。已签 SoW。

[联系我们](/zh/contact/)

## 精选界面

![Polity, screen 1](/img/case-studies/polity/001_hu_d08fd51ea6b7f0d7.webp)

![Polity, screen 2](/img/case-studies/polity/002_hu_12ddd7ebddda7717.webp)

![Polity, screen 3](/img/case-studies/polity/003_hu_55d20f41b3b754dc.webp)

![Polity, screen 4](/img/case-studies/polity/004_hu_59536493a33cc265.webp)

![Polity, screen 5](/img/case-studies/polity/005_hu_dcbd298958236dad.webp)

![Polity, screen 6](/img/case-studies/polity/006_hu_93a76ddfdf1a4117.webp)

![Polity, screen 7](/img/case-studies/polity/007_hu_3811f149ba140c64.webp)

![Polity, screen 8](/img/case-studies/polity/008_hu_f1c5deb1741041d7.webp)

## 经验总结

分布式系统的质量是协调问题，不是工具问题。让七个服务、多个供应商和持续交付保持同一标准，需要的流程工作与技术工作一样多。真正起作用的架构判断：从集中、手工、碎片化的工作流，转向可扩展、按 ownership 驱动、自动化的系统。

## 技术栈

- [React](https://react.dev/)
- [Java/Kotlin](https://kotlinlang.org/)
- [Go](https://go.dev/)
- [Python](https://www.python.org/)
- [Rust](https://www.rust-lang.org/)
- [Docker](https://www.docker.com/)
- [CI/CD](https://github.com/features/actions)

## 标签

- Enterprise
- QA
- Microservices

## 链接与资源

[Polity](https://polity.li/)

相关服务

- [定制软件开发](/zh/services/software-development/)
- [软件质量保障](/zh/services/software-quality-assurance/)

客户引用与商标

Wavect 发布这些案例研究，讲述的是我们自己的工作。客户名称、标识和商标归各自所有者所有，在此仅用于标识相关工作，并不表示任何合作、赞助或背书关系。每个案例描述的是 Wavect 在一项更大工作中的自身贡献，客户自己的团队以及其他服务商也共同促成了这些结果。归属于客户的数据是该客户自行提供的数字。关于我们工作的数据来自我们在页面所示核查日期的记录，可按要求提供证据。评价均转载自各卡片所标注的平台，并链接至原始来源。我们不公开任何合作的商业条款，产品截图的权利仍属于所展示的客户。如果你被列在此处，希望更正、修改或撤下相关内容，请写信给我们，我们会处理： [office@wavect.io](mailto:office@wavect.io)

### [SKD Dresden](/zh/case-studies/skd-dresden/)

德累斯顿国家艺术收藏馆（Staatliche Kunstsammlungen Dresden, SKD）是世界上历史最悠久、最负盛名的博物馆网络之一。他们希望弄清楚：区块链对一家文化机构到底能现实地做到什么。

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/case-studies/polity/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-05-21",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-21",
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".faq-question",
          ".faq-answer"
        ]
      },
      "url": "https://wavect.io/zh/case-studies/polity/"
    },
    {
      "@id": "https://wavect.io/verified-claims.json#polity-seven-services-qa",
      "@type": "Claim",
      "appearance": {
        "@id": "https://wavect.io/zh/case-studies/polity/#webpage",
        "@type": "WebPage",
        "inLanguage": "zh",
        "url": "https://wavect.io/zh/case-studies/polity/"
      },
      "author": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "dateModified": "2026-08-04",
      "identifier": "polity-seven-services-qa",
      "inLanguage": "en",
      "text": "Wavect owned quality engineering across 7 microservices on the Polity platform for around 1.5 years."
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@id": "https://wavect.io/zh/case-studies/polity/#case-study",
  "@type": "Article",
  "about": {
    "@id": "https://wavect.io/zh/case-studies/polity/#project",
    "@type": "CreativeWork",
    "creator": {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ]
    },
    "dateCreated": "2026-01-01",
    "description": "软件 QA engagement",
    "funder": {
      "@type": "Organization",
      "name": "Polity"
    },
    "name": "Polity",
    "subjectOf": {
      "@id": "https://wavect.io/zh/case-studies/polity/#case-study",
      "@type": "Article"
    },
    "url": "https://polity.li/"
  },
  "abstract": "七个服务，各自有自己的工具链、成熟度和故障模式。多个供应商并行推代码、功能开发在飞、企业客户群不容忍回归。要在一年半内把这一切统一进一个质量模型，同时不能拖慢工程团队。",
  "author": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "datePublished": "2026-01-01",
  "description": "Polity 是一个跑在七个微服务之上的企业级平台。分布式、复杂，并被以企业客户要求的标准对待，这类系统里，QA不是可选项。",
  "headline": "Polity, Wavect Case Study",
  "image": "https://wavect.io/img/clients/svg/polity.svg",
  "inLanguage": "zh",
  "isPartOf": {
    "@type": "CollectionPage",
    "name": "Wavect Case Studies",
    "url": "https://wavect.io/zh/case-studies/"
  },
  "keywords": "Enterprise, QA, Microservices, React, Java/Kotlin, Go, Python, Rust, Docker, CI/CD",
  "mainEntityOfPage": "https://wavect.io/zh/case-studies/polity/",
  "mentions": [
    {
      "@type": "DefinedTerm",
      "name": "React",
      "url": "https://react.dev/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Java/Kotlin",
      "url": "https://kotlinlang.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Go",
      "url": "https://go.dev/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Python",
      "url": "https://www.python.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Rust",
      "url": "https://www.rust-lang.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Docker",
      "url": "https://www.docker.com/"
    },
    {
      "@type": "DefinedTerm",
      "name": "CI/CD",
      "url": "https://github.com/features/actions"
    }
  ],
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/zh/case-studies/polity/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/case-studies/",
      "name": "案例研究",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/case-studies/polity/",
      "name": "Polity",
      "position": 3
    }
  ]
}
```
