这么卷,现在测试工程师要求会写工具了?

news2024/11/30 8:53:57

Fintech概念正受到不少互联网金融公司的热捧,主要是指代那些可用于撕裂传统金融服务方式的高新技术。越来越多的企业开辟了新的部门去研究各种各样能让自己产品增值的科技类产品。

尤其是在很多互联网金融公司,业务分析师BA(Business Analyst),又称产品经理受到大家的追捧,虽然身处西二旗等ITer聚集地,但是他们做的工作与金融街上的白领们并无不同,他们是无所不懂的金融达人,顶着各个海外名校金融数学系的Master光环,手持CFA,CPA,FRM,AFP/CFP,CIIA,ACCA等等。

既然是在IT公司做需求分析的工作,除了需要出具需求说明书,然后将需求翻译成程序员能够理解的说明文档,不可避免的也需要做一些测试的工作。现在各种工具琳琅满目,各种智能的自动化测试平台也在全面普及,越来越多的人工工作被取代,于是测试工程师经常会接到任务说:写个工具给BA用,让他们可以参与测试。说起来容易做起来难,对于大部分金融达人来说,代码对于他们无异于普通人看哥德巴赫猜想的手稿,如何让他们能够参与进来,能够更多地参与测试成为了测试工程师更多关注的问题。

前段时间正好接到了一个需求,由于业务需要计算期权费,BA需要计算出最优的数据组合,但是输入有3个参数,每个参数有40个数据,且数据是保留到小数点后15位,这样算下来的排列组合多到一个BA不可能在2周内找到最优解,更不要提在需求文档里明确写上排列组合的期望结果。如果BA写不出来,对于不懂金融的开发和测试,就更是一头雾水,无从下手,怎么能让BA自己算出来需要的数据呢?试了下Excel+Python的解决方案,基本满足了BA的需求,唯一需要BA支持的就是输入的excel需要按照规定的格式制作,以便程序读取。比如第一列是执行价,第二列是买入期权,第三列是卖出期权:

图片

我们对应在代码里需要读取写入Excel里面的数据,依然使用最熟悉的xlrd和xlwt包。之所以把路径之类的都参数化,主要是为了生成UI之后,BA使用起来更方便。

# 获取文件
input_file_path = input.get()
print("Input File Path: " + input_file_path)
output_file_path = input_file_path.replace("option price caculator.xlsx", "new file.xls")
print("Output File Path: " + output_file_path)

在Java中我们一般会使用BigDecimal来进行金融数据的处理,但是在Python中,虽然也有BigDecimal包,但是处理起来会出现各种各样不明原因的报错,所以我们选择了float类型。

# 打开文件
workbook = xlrd.open_workbook(input_file_path)

# 获取sheet内容
sheet1 = workbook.sheet_by_index(0)

# 获取整列的值
orgstrike = sheet1.col_values(0)
orgcall = sheet1.col_values(1)
orgput = sheet1.col_values(2)

# 更改格式
strike = [float(x) for x in orgstrike]
call = [float(x) for x in orgcall]
put = [float(x) for x in orgput]

计算完成后,然后生成新的excel来保存处理过的数据,在不同的Sheet中保存不同的计算结果以便查看。如果需要多次运行且结果可以被覆盖,则加上cell_overwirte_ok = True就可以了。

# 创建文件
file = xlwt.Workbook()
sheet1 = file.add_sheet("符合条件", cell_overwrite_ok=True)
sheet1.write(0, 0, 'call')
sheet1.write(0, 1, 'strike')
sheet1.write(0, 2, 'put')
sheet1.write(0, 3, 'strike')
sheet1.write(0, 4, 'callNeg')
sheet1.write(0, 5, 'strike')
sheet2 = file.add_sheet("不符合条件", cell_overwrite_ok=True)
sheet2.write(0, 0, 'call')
sheet2.write(0, 1, 'strike')
sheet2.write(0, 2, 'put')
sheet2.write(0, 3, 'strike')
sheet2.write(0, 4, 'callNeg')
sheet2.write(0, 5, 'strike')

接下来就是完成BA需求里面逻辑计算,排列组合的部分了,由于需求不同,我就不展示这部分代码了,有个提示在这个地方,如果需要在console里面打印出浮点,请使用如下代码:

print("call: %04d(%18.14f); put: %04d(%18.14f); callneg: %04d(%18.14f)"
      % (i + 1, strike[i], j + 1, strike[j], k + 1, strike[k]))

这样我们逻辑部分就完成了,下面就要进行UI部分的设计和制作了,由于技(懒)术(惰)原因,我们还是使用Python来做,一气呵成。

import tkinter.font as tkFont

对于一般的BA的需求来说,一个输入文件,一个输出文件足够了,所以我们也本着极简的原则做一个UI,成品如下,贴入输入文件的路径,点击GO后,会显示输出文件的链接,点击链接可以打开生成的文件:

图片

在Pycharm的Console里,我们可以看到打印出来的结果:

图片

在文件夹里,我们会找到新生成的文件new file.xls:

图片

在这个文件里,有我们需要的所有符合条件和不符合条件的排列组合:

图片

想做出这样的效果,网上有很多tkFont的教程可以参考。有几点需要提示,tkFont在Python2和3中的使用方法不一样,请先确认自己使用的版本。部分代码如下:

# Title
root.title("Option Price Calculator")

# Input File
labelFilePath = Label(root, text="   Input File: ")
labelFilePath.grid(row=0, sticky=E)

# Textbox
input = StringVar()
entryFilePath = Entry(root, width=80, textvariable=input)
entryFilePath.grid(row=0, column=1)

# Go
buttonGo = Button(root, text="GO", width=5)
buttonGo.bind("<Button-1>", lambda event: OptionPriceCalc.read_excel(event, input))
buttonGo.bind("<Button-1>", lambda event: show_output_file_path(event, input))
buttonGo.grid(row=0, column=3, padx=5, sticky=E+W)

# Output File
labelOutput = Label(root, text="Output File: ")
labelOutput.grid(row=1, sticky=E)

完成需求后,BA提出了新的看法,对于点击连接后是否直接打开,我们是可以控制的:

def show_output_file_path(event, input):
    output = input.get().replace("option price caculator.xlsx", "new file.xls")
    ft = tkFont.Font(family="Calibri", size=11, underline=1)
    labelOutputFile = Label(root, text=output, fg="blue", font=ft)
    labelOutputFile.grid(row=1, column=1, sticky=W+N+S)
    # Click Go -> Click File Name
    labelOutputFile.bind("<ButtonPress-1>", lambda event: open_file(output))
    # Click Go -> Open File Automatically
    # labelOutputFile.bind("<ButtonPress-1>", os.startfile(output))

有了这个模板,BA提出新需求后,我们只需要更改UI文件中调用的方法名,就可以了!


资源分享

下方这份完整的软件测试视频学习教程已经上## 标题传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】-- 初识操作系统

目录 一、冯诺依曼体系结构 二、操作系统 1.概念 2.为什么要有操作系统 三.操作系统 1.硬件层 2.驱动层 3.操作系统层 4.用户层 &#xff08;1&#xff09;用户层 &#xff08;2&#xff09;系统调用接口 &#xff08;3&#xff09;用户操作接口 四、如何管理 1…

C. Zero-Sum Prefixes Codeforces Round #833 (Div. 2)(前缀和+贪心)

传送门 题意&#xff1a; 给你一个长度为n的数组&#xff0c;里面包含a1,a2,a3...an n个元素&#xff0c; 当的时候&#xff0c;你可以将变成任意数字&#xff0c; 问你经过任意次操作后对于&#xff0c;它的前i项和为0的个数是最大是多少&#xff1f; 思路&#xff1a; …

27岁自学Python转行靠谱吗?入行晚吗?

前言 今年已经奔三的小编来给大家说说&#xff0c;之前自己也是在一个普通的二本院校上学&#xff0c;学的还是工商管理&#xff0c;毕竟读书的时候电视剧里面的主角都是工商管理的大佬。 不过在毕业之后就经历了社会的毒打&#xff0c;后面小编就想去换一个工作&#xff0c;…

[附源码]计算机毕业设计springboot交通事故档案管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jsp192ssm驾校报名预约管理系统

目 录 汽车驾校管理系统设计与实现 I 摘 要 I ABSTRACT I 目 录 III 第1章 绪论 3 1.1开发背景 3 1.2开发意义 3 1.3研究内容 3 第2章 主要技术和工具介绍 3 2.1SSM 框架 错误&#xff01;未定义书签。 2.1.1. Spring 框架 3 2.1.2 SpringS…

clickhouse远程访问Oracle 11g数据库(clickhouse-jdbc-bridge)

1、简介 clickhouse-jdbc-bridge&#xff1a;是clickhouse提供的一个jdbc组件&#xff0c;用于通过JDBC的方式远程访问其他数据库表。 2、安装 &#xff08;1&#xff09;下载源文件并打包获取clickhouse-jdbc-bridge-2.0.7-shaded.jar 在官网&#xff1a;https://github.c…

stc15 - ST7920-12864并口通讯和串口通讯的整理(在一个实现中)

文章目录stc15 - ST7920-12864并口通讯和串口通讯的整理(在一个实现中)概述笔记原理图ENDstc15 - ST7920-12864并口通讯和串口通讯的整理(在一个实现中) 概述 为板子写测试程序, 整到12864 LCD这里. STC原厂工程只提供并口通讯. 找了网上同学的串口通讯实现, 整理了一下, 将串…

当成为全球第二大汽车出口国后,中国车企的下一步是什么?

新一轮汽车出口浪潮在疫情期间悄然启动&#xff0c;中国汽车工业协会发布数据显示&#xff0c;自2021年起&#xff0c;汽车出口销量呈现高速增长的势头&#xff0c;2022年前三季度汽车出口量超过2021年全年出口量&#xff0c;并超越德国&#xff0c;成为仅次于日本的全球第二大…

熊市链游模型如何设计开发?

GameFi的全局趋势 自第一款视频游戏诞生以来&#xff0c;游戏世界已经发生了翻天覆地的变化。技术和玩游戏的目的是不断围绕游戏本身发展着的两件主要事情。曾经的街机游戏、主机游戏、电脑游戏&#xff0c;再到如今智能手机时代&#xff0c;手机游戏已经无处不在。随着时间的…

Navicat 被广泛的应用于各行各业的原因

近期&#xff0c;Navicat 发起了一场用户线上投票活动&#xff0c;受到了众多用户的关注和热情响应&#xff01;今天&#xff0c;我们就带大家了解此次投票数据通过用户的职业、使用频率、连接的数据库种类以及最常用的功能&#xff0c;通过用户视角了解 Navicat 产品的适用范畴…

Https加密超文本传输协议的运用

内容预知 1.https的相关知识 1.1 https的简介 1.2 HTTP 与 HTTPS 的区别 1 .3 SSL的相关了解 1.3 SSL/TLS协议和证书的关系 1.4 https的工作流程 1.5 客户端是如何验证证书是否有效 1.6 web网站并未全部采用https的原因 2. SSL证书获取的方法 2.1 阿里云证书的获取 2…

linux不显示当前路径的解决方法

1.输入vim ~/.bashrc进入用户的shell环境变量的配置文件(可以设置环境变量以及通过alias设置别名&#xff09; 2.按下“i”键进入编辑模式(底部显示INSERT&#xff09; 3.修改\w为$PWD&#xff1a; 修改为&#xff1a; 4.按“esc”键后输入":wq"保存并退出&#xff…

IPSec NAT穿越原理

在IPSec VPN部署中&#xff0c;如果发起者位于私网内部&#xff08;如下图FW_C&#xff09;&#xff0c;而它希望与FW_A之间直接建立一条IPSec隧道&#xff0c;这种情况下NAT会对部署IPSec VPN网络造成障碍。 PC2发业务报文给PC1&#xff0c;IPSec先对IP包头或端口信息进行验证…

10 个用图表解释JavaScript 闭包的面试题

闭包是函数式编程中的核心概念之一&#xff0c;是每个 JavaScript 开发人员必备的知识。在这里&#xff0c;我准备了 10 个关于闭包的面试挑战题&#xff0c;这些基本都是面试中经常被问到的。 你准备好了吗&#xff1f;我们现在要开始了。 每个题目都有一个代码片段&#xf…

代码随想录算法训练营第五十天| LeetCode123. 买卖股票的最佳时机 III、LeetCode188. 买卖股票的最佳时机 IV

一、LeetCode123. 买卖股票的最佳时机 III 1&#xff1a;题目描述&#xff08;123. 买卖股票的最佳时机 III&#xff09; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意…

小学生学Arduino---------点阵(一)静态图片显示

今天来看一下&#xff0c;点阵模块这一模块可以做出非常有意思的东西。 学习目标&#xff1a; 1、了解点阵原理 2、掌握图形绘制&#xff08;心形、三角形等&#xff09; 3、掌握图形显示器的功能 4、掌握led点阵屏幕的功能 5、搭建电路 6、编写程序 一、点阵的原理 LED点阵屏…

Functional Programming in Java venkat(16) Being Lazy part3

文章目录Functional Programming in Java venkat(16): Being LazyLeveraging the Laziness of StreamsIntermediate and Terminal OperationsMethod Evaluation OrderPeeking into the LazinessFunctional Programming in Java venkat(16): Being Lazy 这里是记录学习这本书 F…

linux权限详解

文章目录1.用户转换1.将普通用户转换成root1.su -2. su2.将root转换为普通用户2.文件的权限1.文件访问者的分类拥有者和other所属组2.rwx的含义3.修改权限第一种修改方式1.拥有者修改2.所属组的修改3.other的修改4.整体修改第二种修改方式666000777使用权限的修改1.拥有者用户的…

[事务]-事务概念/特性/并发问题/传播特性

1. 事务的概念 事务&#xff08;Transaction&#xff09;指的是一个操作序列&#xff0c;该操作序列中的多个操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的工作单位&#xff0c;是数据库环境中的逻辑工作单位&#xff0c;由DBMS中的事务管理子系统负责…

爬虫工作流程、请求与响应原理、requests库讲解

爬虫工作流程、请求与响应原理、requests库讲解 爬虫分类主要分为两大板块 web爬虫&#xff08;浏览器爬虫&#xff09; APP爬虫&#xff08;手机端爬虫&#xff09; 在这两大板块中又可以把爬虫归类为聚焦爬虫和通用爬虫 聚焦爬虫&#xff1a;针对某一个接口&#xff08;ur…