你们团队的规范吃灰去了吗,如何落地团队规范?

805 阅读5分钟

在项目团队里,你是否也经常听到这些问题:

  • 前端问后端的接口怎么又调不了,是不是你们又动环境了?
  • 测试问研发这个Bug怎么不见了,是不是你们悄悄改了?
  • 这个组件我已经开发了,为什么你又自己实现一次?
  • 同一个 json 解析,为什么项目中引用了好几个版本的解析包?
  • 系统没效果,研发问运维你是不是没构建对?
  • 运维问研发你们是不是没提交全代码?
  • .........

这些问题听起来是不是很耳熟?它们不仅让人头疼,还非常影响团队的效率。

一、统一的规范

其实,大家都知道提高团队效率的关键在于制定并执行统一的规范。规范就像团队的“宪法”,能够降低沟通成本,让成员们有共同的行为准则,从而减少沟通中的摩擦和误解。通过一致的标准,可以确保项目质量,提高代码、文档的可维护性,便于新成员快速融入并缩短适应周期。同时,规范使团队协作更加高效,即使在人员变动时也能保障项目稳定。

二、新的问题

但是,制定规范后,团队可能会面临一个新的问题:规范堆积如山。起初,规范比较少时,大家可能会认真遵守,但随着时间的推移,团队规范越来越多,问题也随之而来。一年前辛辛苦苦制定好的需求规范、编码规范、测试规范、运维流程规范、代码审查规范、联调规范等等,过一两年发现这些规范都吃灰去了。

那么,核心的问题就是:规范制定出来后,如何落地?

三、规范如何落地

规范如何落地呢?在古代,一张圣旨就能实现,但强制实施只能走出历史的舞台。现在,要落地就必需借助自动化工具或平台,用自动化平台来固化规范与流程。

比如,需求不规范,使用平台后必需使用需求模板来设计需求。需求设计完后需要评审后才能分配给开发人员。开发人员的代码自己写单元测试,代码构建时间需要通过代码审查(静态代码安全及规范审查、人工 review)后,才能提测试。这些都可以使用自动化工具的能力和项目管理工具的流程来实现。

四、DevOps

说到自动化,就不得不提DevOps。DevOps(Development & Operations的缩写)是一种联合了开发(Development)和运维(Operations),让开发与运维自动化并平滑地连接在一起。DevOps概念首次提出是在2009年。近几年随着敏捷开发在行业内的深入推广,Google、Netflix、Amazon等大型互联网公司的成功应用,带动了整个行业对DevOps的使用。

五、DevOps的主要工具

  1. 持续集成和持续交付(CI/CD) ,如 Jenkins:Jenkins是一个开源的自动化服务器,用于持续集成和持续交付。它可以帮助团队自动化构建、测试和部署代码。
  2. 版本控制,如 git:Git是一个分布式版本控制系统,用于跟踪文件的变化。它可以帮助团队管理代码的版本,确保代码的一致性和可追溯性。
  3. 容器化,如 Docker、K8s:Docker是一个开源的容器化平台,用于打包、分发和运行应用程序。Kubernetes(K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。

比如:使用Docker打包Java程序

# 使用官方的Java 8镜像作为基础镜像
FROM openjdk:8-jdk-alpine

# 设置工作目录
WORKDIR /app

# 将Maven构建的JAR文件复制到容器中
COPY target/my-java-app-1.0-SNAPSHOT.jar /app/app.jar

# 暴露应用程序的端口(如果需要)
EXPOSE 8080

# 运行Java应用程序
CMD ["java", "-jar", "app.jar"]

4. 配置管理,如 Ansible:Ansible是一个开源的自动化工具,用于配置管理、应用部署和任务自动化。它可以帮助团队自动化配置和管理服务器。

比如:用Ansible在远程服务器上安装和配置Nginx。

---
- name: Install and configure Nginx
  hosts: all
  become: yes
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

    - name: Install Nginx
      apt:
        name: nginx
        state: present

    - name: Start Nginx service
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Create custom Nginx configuration file
      copy:
        content: |
          server {
              listen 80;
              server_name localhost;

              location / {
                  root /var/www/html;
                  index index.html;
              }
          }
        dest: /etc/nginx/sites-available/default
        owner: root
        group: root
        mode: '0644'

    - name: Enable custom Nginx configuration
      file:
        src: /etc/nginx/sites-available/default
        dest: /etc/nginx/sites-enabled/default
        state: link

    - name: Restart Nginx service
      service:
        name: nginx
        state: restarted

5. 监控和日志管理,如 Prometheus、ELK:Prometheus是一个开源的监控系统,用于收集和存储时间序列数据。ELK(Elasticsearch、Logstash、Kibana)是一个开源的日志管理平台,用于收集、存储和可视化日志数据。 6. 自动化测试,如 Selenium:Selenium是一个开源的自动化测试工具,用于测试Web应用程序。它可以帮助团队自动化测试流程,提高测试效率。

比如:使用Selenium打开一个网页,查找一个元素,并与之交互。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 设置浏览器驱动(这里使用Chrome)
driver = webdriver.Chrome()

# 打开目标网页
driver.get("https://www.example.com")

# 等待页面加载
time.sleep(2)

# 查找页面元素(例如一个输入框)
search_box = driver.find_element(By.NAME, "q")

# 输入内容并提交
search_box.send_keys("Selenium automation")
search_box.send_keys(Keys.RETURN)

# 等待结果页面加载
time.sleep(2)

# 验证搜索结果
assert "Selenium automation" in driver.title

# 关闭浏览器
driver.quit()

7. 协作工具,如 Jira、Tapd、Redmine、禅道:这些工具用于项目管理和团队协作。它们可以帮助团队跟踪任务、管理项目进度和协作开发。

我是栈江湖,如果你喜欢此文章,不要忘记点赞+关注