GitLab CI/CD使用经验,来自于莫纳什大学的考试任务解析

CI/CD简介

CI/CD的作用在于自动化和加速软件开发、测试和交付流程,通过持续集成确保代码协同工作和质量,通过持续交付降低风险,使每次代码变更都能够快速、高质量地交付到生产环境,从而提高软件开发效率、质量和协作。

作业要求

学校给出一个售货系统的代码,需要学生对于代码进行构建CI/CD(flake8,mypy,pycodestyle,pydocstyle,pylint),并且使用Python完善软件测试(test)。

解析方案

在构建CI/CD管道时,在使用配置文件创建静态分析时,我最初没有区分地将所有阶段合并在一起。在后来的过程中,我通过为每个阶段使用相同的阶段名称来解决这个问题。当测试没有被代码纠正时发生的测试用例。
Below is my code:

stages:- Static Analysis - Testflake8:stage: Static Analysisscript:- pip install flake8- flake8 megamart.pyallow_failure: truemypy:stage: Static Analysis  script:- pip install mypy- mypy megamart.pyallow_failure: truepycodestyle:stage: Static Analysisscript: - pip install pycodestyle- pycodestyle megamart.py allow_failure: truepydocstyle:stage: Static Analysisscript:- pip install pydocstyle- pydocstyle megamart.pyallow_failure: truepylint:stage: Static Analysisscript:- pip install pylint- pylint megamart.pyallow_failure: truetesting:stage: Testscript:- python -m unittest test_megamart.pyallow_failure: false

在这里插入图片描述在修改完测试用例后可以登录你的GitLab可以看到你的测试结果已经通过,但是你的代码风格分析产生一些错误异常

在这里插入图片描述

分析代码风格产生异常的原因

PyCodeStyles

使用Python绘制一个柱状图来查看代码风格产生异常的错误代码
在这里插入图片描述
接下来根据每一个错误给出解决错误的方式
D200: One-line docstring should fit on one line with quotes (found 4):
这个错误只需要在导入一个模块的时候加上备注写入对于模块的描述就可以解决这个问题,下面是对比:
An Example of the Original Version.

from datetime import datetime

An Example of the Fixed Version.

"""
This is the Megamart module.It is Megamart
"""
from datetime import datetime

D205: 1 blank line required between summary line and description
An Example of the Original Version.

def is_not_allowed_to_purchase_item(item: Item, customer: Customer, purchase_date_string: str) -> bool:"""Returns True if the customer is not allowed to purchase the specified item, False otherwise.If an item object or the purchase date string was not actually provided, an Exception should be raised.Items that are under the alcohol, tobacco or knives category may only be sold to customers who are aged 18+ and have their ID verified.An item potentially belongs to many categories - as long as it belongs to at least one of the three categories above, restrictions apply to that item.The checking of an item's categories against restricted categories should be done in a case-insensitive manner.For example, if an item A is in the category ['Alcohol'] and item B is in the category ['ALCOHOL'], both items A and B should be identified as restricted items.Even if the customer is aged 18+ and is verified, they must provide/link their member account to the transaction when purchasing restricted items.Otherwise, if a member account is not provided, they will not be allowed to purchase the restricted item even if normally allowed to.It is optional for customers to provide their date of birth in their profile.Purchase date string should be of the format dd/mm/yyyy.The age of the customer is calculated from their specified date of birth, which is also of the format dd/mm/yyyy.If an item is a restricted item but the purchase or birth date is in the incorrect format, an Exception should be raised.A customer whose date of birth is 01/08/2005 is only considered to be age 18+ on or after 01/08/2023."""

An Example of the Fixed Version.

def is_not_allowed_to_purchase_item(item: Item, customer: Customer, purchase_date_string: str) -> bool:"""Returns True if the customer is not allowed to purchase the specified item, False otherwise.Args:item (Item): The item being purchased.customer (Customer): The customer attempting the purchase.purchase_date_string (str): The purchase date in the format dd/mm/yyyy.Raises:Exception: If the provided item is None.If an item object or the purchase date string was not actually provided, an Exception should be raised.Items that are under the alcohol, tobacco or knives category may only be sold to customers who are aged 18+ and have their ID verified.An item potentially belongs to many categories - as long as it belongs to at least one of the three categories above, restrictions apply to that item.The checking of an item's categories against restricted categories should be done in a case-insensitive manner.For example, if an item A is in the category ['Alcohol'] and item B is in the category ['ALCOHOL'], both items A and B should be identified as restricted items.Even if the customer is aged 18+ and is verified, they must provide/link their member account to the transaction when purchasing restricted items.Otherwise, if a member account is not provided, they will not be allowed to purchase the restricted item even if normally allowed to.It is optional for customers to provide their date of birth in their profile.Purchase date string should be of the format dd/mm/yyyy.The age of the customer is calculated from their specified date of birth, which is also of the format dd/mm/yyyy.If an item is a restricted item but the purchase or birth date is in the incorrect format, an Exception should be raised.A customer whose date of birth is 01/08/2005 is only considered to be age 18+ on or after 01/08/2023."""

pyLine

在这里插入图片描述

C0301: Line too long (103/100) (line-too-long)
An Example of the Original Version.

def is_not_allowed_to_purchase_item(item: Item, customer: Customer, purchase_date_string: str) -> bool:"""Determine if the customer is allowed to purchase the specified item.Returns True if the customer is not allowed to purchase the specified item, False otherwise.
def is_not_allowed_to_purchase_item(item: Item, customer: Customer, purchase_date_string: str) -> bool:"""Determine if the customer is allowed to purchase the specified item.Returns True if the customer is not allowed to purchase the specified item, False otherwise.Args:item (Item): The item being purchased.customer (Customer): The customer attempting the purchase.purchase_date_string (str): The purchase date in the format dd/mm/yyyy.

PyDocstyle

在这里插入图片描述

Lizard

在这里插入图片描述

Mypy

在这里插入图片描述

Flake8

在这里插入图片描述

对比汇总表

在这里插入图片描述
其实这个项目中出现的错误有很多,但是因为篇幅问题我没有办法一一把示例代码给出,所以在此我制作出一个统计表格,总结下来CI/CD可以检测代码风格进行统一管理,方便于不同工程师之间进行协同时,因为有统一的代码和备注风格所以减少协同成本。

结论和建议

在"megamart"文件中,最常见的问题是"pyflakes ",其次是"pydocstyles "。这些问题大多与代码注释有关。为了解决这些问题,建议保持代码注释简洁,并遵循一致的代码格式标准。如果您正在使用集成开发环境(IDE),请考虑为自动代码格式化配置插件。

最复杂的函数是“checkout”,因为它涉及18个逻辑条件,包括检查空值和特定数据类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182074.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-115 openGauss 数据库管理-设置安全策略-设置密码安全策略

文章目录 openGauss学习笔记-115 openGauss 数据库管理-设置安全策略-设置密码安全策略115.1 操作步骤 openGauss学习笔记-115 openGauss 数据库管理-设置安全策略-设置密码安全策略 115.1 操作步骤 用户密码存储在系统表pg_authid中,为防止用户密码泄露&#xff…

ffmpeg mp3截取命令,视频与mp3合成带音频视频命令

从00:00:03.500开始截取往后长度到结尾的mp3音频(这个更有用,测试好用) ffmpeg -i d:/c.mp3 -ss 00:00:03.500 d:/output.mp3 将两个音频合并成一个音频(测试好用) ffmpeg -i "concat:d:/c.mp3|d:/output.mp3&…

前端框架Vue学习 ——(四)Axios

文章目录 Axios 介绍Axios 入门Vue项目中使用 Axios Axios 介绍 介绍: Axios 对原生的 Ajax 进行了封装,简化书写,快速开发。(异步请求) 官网: https://www.axios-http.cn/ 官网介绍:Axios 是一个基于 promise 网络请…

20.5 OpenSSL 套接字RSA加密传输

RSA算法同样可以用于加密传输,但此类加密算法虽然非常安全,但通常不会用于大量的数据传输,这是因为RSA算法加解密过程涉及大量的数学运算,尤其是模幂运算(即计算大数的幂模运算),这些运算对于计…

编码器类型说明

目录 光电编码器 磁性编码器 电容式编码器 对比优缺点 编码器在运动控制类产品中比较常见,旋转编码器都是组成运动控制反馈回路的关键元器件,包括工业自动化设备和过程控制、机器人技术、医疗设备、能源、航空航天等。 作为将机械运动转换为电信号的…

❤️ React的安装和使用(实战篇)

React的安装和使用 一、React的安装和使用 reactJs警告提示: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap 翻译:tar2.2.2:此版本的tar不再受支持,将不会收到安全…

新大陆NVH200-AP(U)扫码枪在上位机软件开发中的应用

前言: 由于本次使用的是USB接口的扫码枪 1、先安装Nset软件,使用扫码枪扫描“启动设置条码”,然后扫描“USB CDC串口”条码 2、打开NSet软件,点击“刷新按钮” 就能找到扫码枪设备 3、设置条码后缀 点击“高级设置”,然后点击“数据编辑”,在“后缀”那里设置结束符…

1-3 docker 安装 prometheus

一、环境 1、环境准备 安装Docker 镜像加速 安装 docker 检查版本 安装Docker-compose 二、Docker-compose 安装 Prometheus 1、【方式一】手动创建 docker-compose 和 配置文件 创建prometheus监控的文件夹 创建alertmanager的配置文件 - config.yml 新建grafana的…

windows mysql安装

1、首先去官网下载mysql安装包,官网地址:MySQL :: Download MySQL Community Server 2:把安装包放到你安装mysql的地方,然后进行解压缩,注意,解压后的mysql没有配置文件,我们需要创建配置文件 配…

红黑树——原理刨析

众所周知,红黑树是从AVLTree树中衍变而来的,所以在学红黑树之前还是要好好的理解一下AVLTree树的原理,为理解红黑树减轻理解负担,好了进入正题。 红黑树原理: 由名可知,红黑树——肯定是与颜色有关的一个树…

操作系统——文件在外存中的分配方式(王道视频p61 P62)

1.总体概述: 连续分配 —— 链接分配 —— 索引分配 (1)对于顺序分配,这种方式 基本不会使用了, 因为 它存在一个 核心的问题就是 没法更新;不过,还是要注意它的 “文件目录”——其中存放了…

强化学习中策略的迭代

一、策略迭代 一旦使用vπ改善了策略π,产生了更好的策略π0,我们就可以计算vπ0并再次对其进行改进,产生更好的π00。因此,我们可以获得一系列单调改善的策略和值函数: 其中E−→表示策略评估,I−→表示策…

企业通配符SSL证书的特点

企业通配符SSL证书是一种数字证书,其可以用于保护多个企业网站,对网站传输信息进行加密服务。这种证书通常适用于拥有多个子域名或二级域名的企事业单位。今天就随SSL盾小编了解企业通配符SSL证书的相关信息。 1. 保护所有域名和子域名:企业通…

linux 启动引导找不到内核修复

问题现象 选中内核按e 看到引导内核信息 挂载ISO映像进入救援模式,查看boot目录 与 引导文件内容不一致 再次重启引导系统,按e 修改内核引导项与boot目录一致, crtl - x 继续执行 登录系统 mount /dev/sdm1 /mnt 挂载vfat 引导目录 纠…

CorelDRAW2024好不好用?怎么下载

cdr是CorelDRAW的简称,一款专注排版和矢量图形编辑的平面设计软件。这款软件的设计界面精微细致、简洁易懂。功能尤其强大,图标设计,印刷排版,服装设计等都可以胜任。还有多种模板使得设计相当的轻松,今天简单介绍一下…

C语言查看各数据类型所占大小

编译器&#xff1a;VC2010 #include<stdio.h> int main() {printf("%d\n",sizeof(char));printf("%d\n",sizeof(short));printf("%d\n",sizeof(int));printf("%d\n",sizeof(long));printf("%d\n",sizeof(long long))…

【Python语言】集合的使用方法总结

目录 1、集合基本知识&#xff1a; 2、定义 2.1 定义集合变量 2.2 定义空集合 3、集合的常用操作 3.1 定义集合 3.2 添加新元素 3.3 移除元素 3.4 从集合中随机取出元素 3.5 清空集合 3.6 取两个集合的差集 3.7 消除两个集合的差集 3.8 两个集合合并 3.9 统计集合…

软件外包开发质量控制方法

在软件外包开发项目中&#xff0c;质量控制是确保交付的软件符合预期质量标准的关键步骤。以下是一些常用的软件外包开发质量控制方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 需求明确&#x…

【第28例】IPD体系进阶 | 需求管理:需求实现过程

目录 简介 内容详解 CSDN学院相关推荐 作者简介 简介 继续 IPD 体系中的需求管理相关的专题。 先来看看整个需求管理涉及的过程内容: 需求管理流程主要包含五个阶段: 需求收集; 需求分析; 需求分发/分配;

构建数字孪生的四大挑战

如果不能解决由数字孪生带来的开发难题&#xff0c;那么企业就无法享受这种技术便利。 数字孪生已经成为企业当前面对的一大机遇&#xff0c;其核心在于利用虚拟副本中的分析数据对未来业务事件开展预测。这不仅能够大大降低决策难度&#xff0c;同时也有助于提升决策效果。 然…