Fork me on GitHub

软件测试岗入职两个月的心得体会

1. 个人基本情况

  • 学校背景:本科JS双非、保研华五边缘学院
  • 专业背景:遥感相关专业
  • 绩点:3/27(面试时未提供)
  • 英语成绩:CET4: 538 CET6: 504
  • 获奖竞赛:蓝桥杯B组国二、数学建模省二、校奖若干
  • 科研成果:SCI二区一作、若干二作三作、发明专利在投(后两者没有体现在简历上)

2. 公司及岗位情况

  • 公司情况:测绘行业龙头,但在开发领域算是中小厂,各个分公司的各种测试人员(软件、硬件、算法)总共有五十余个
  • 分公司情况:一共八十几个人,搞技术的有四十几个人,但是做测试的正式工只有我上司一个
  • 岗位情况:硬件测试实习生(但实际上是软件测试)
  • 工资情况:一个月3000,餐补200(请假扣工资和餐补)
  • 上班时间:8:30 - 18:00,中午休息从12点到1点半
  • 竞争者情况:据说在确定要我之前,每天都能接到简历,而且投实习和找工作的都有

3. 工作情况

3.1 软件测试干什么

我主要做的是软件测试中的功能性测试,也就是最低级的测试。主要任务也就是测试软件各种功能、各种控件是否正常,以及软件和设备配合进行测量是否正常。

3.2 工作历程 (unfinished)

一般来说第一周的时间上司会让你熟悉软件、写一写软件使用说明书、完善测试环境啥的。第二周开始就正式参与软件项目的测试。我的上司看我编程还行,再加上第2 - 3周没有什么测试任务,就给了我两周时间,让我先进行自动化测试程序的开发。但由于需要做自动化测试的需求不明确,整个框架要全部自己弄,而且对桌面软件自动化测试开发技术栈也不太了解,导致最后咕咕咕了,没做出啥有效的东西。

从第四周开始,我就正式参与软件项目的测试。一般来说一轮软件测试需要经过以下几个流程:

3.3 工作所需技能

以下技能按重要性从高到低排序:

  1. 调节同事关系的能力:由于测试的工作是在给别人挑刺,因此测试岗和其他同事之间的关系特别容易变得特别紧张,基本上是人见人嫌的状态。因此学习如何和同事相处对于测试岗非常重要。
  2. 与同事沟通的能力:由于测试需要频繁和软件、硬件甚至是算法对接,因此你和别人交流的能力是非常关键的。你需要学会向同事们完整的描述一个缺陷(缺陷的表现、产生缺陷的操作、引发缺陷的原因、缺陷的重要性等),以及和同事沟通争取资源(如服务器资源、设备资源等)等基本沟通操作。
  3. 对产品功能的了解:对产品功能的了解程度,直接决定了你发现的缺陷的数量和质量。如果对于产品功能没有自己的见解,你要么只能发现一些常见的、表面上的问题,要么你发现的问题很容易在讨论后被打成不是问题。这些都会影响你的业绩。
  4. 复现错误的能力:能否对错误进行复现、对产生错误的操作进行定位,决定了你发现的这个错误的可信程度,如果你发现的错误是没法复现的,软件或硬件就可以认为这是一个偶发性问题。那么你的业绩也就随之消失了。
  5. 在规则内多尝试:测试往往很多时候需要多次尝试才能确认问题所在,因此在规则容许的范围内(只通过软件进行操作,不修改配置文件、dll文件等)要尽可能多的进行尝试。
  6. 举一反三的能力:当发现一个问题的时候,多思考有没有什么类似的操作能诱发同类的问题。
  7. 一定的开发能力:一定的开发能力和经验能帮助你更好的理解错误日志、定位产生错误的操作。开发能力要是足够强后期转自动化测试等也比较好转。

4. 实习能学到什么

  1. 了解行业状态:工作和科研不一样。工业界一般用的都是一些“传统”的算法和框架,需要的是你能快速使用工具解决问题,而不是把慢慢把问题完善解决。
  2. 适应工作状态:工作以后自由时间会非常少(相比于大学时期),因此需要合理调节自己的状态。
  3. 学习行业内部黑话:最基本的比如需求、流程、提测、黑盒测试、白盒测试、冒烟测试等。
  4. 学习工作技能:(这块可能以后不干测试的话不太重要)学习编写设备测试环境、根据最小用例检查点编写最小用例、提出测试需求、提出测试计划、提交缺陷、编写测试报告等。

upd1 最新情况 (2023/12/31)

师傅在这周五已经拿N+1离职了(感觉大概率是被优化了,不然拿不到N+1)。我也准备跑路了。

The Missing Semester-Chap1

1. shell命令的实质

当你在 shell 中执行命令时,本质是在执行一段 shell 可以解释执行的简短代码。

1
2
3
# 打印当前的日期和时间
date
# 2023年 12月 12日 星期二 08:30:09 CST

可以向程序传递参数。
1
2
3
# 把hello传给echo,打印到终端
echo hello
# hello

如果你要求 shell 执行某个指令,但是该指令并不是 shell 所了解的编程关键字,
那么它会在 环境变量 $PATH 中查找该指令对应的程序。
1
2
3
4
5
6
7
8
9
10
echo $PATH
# /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/cpy/.local/bin:/home/cpy/bin

# 查找echo位置
which echo
# /usr/bin/echo

# 与echo $PATH等价
/bin/echo $PATH
# /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/cpy/.local/bin:/home/cpy/bin

2. shell 中的路径

shell 中的路径是一组被分割的目录,在 Linux 和 macOS 上使用 / 分割,
而在Windows上是 \。路径 / 代表的是系统的根目录,所有的文件夹都包括在这个路径之下。

如果某个路径以 / 开头,那么它是一个绝对路径,其他的都是相对路径。

相对路径是指相对于当前工作目录的路径,当前工作目录可以使用 pwd 命令来获取。

此外,切换目录需要使用 cd 命令。在路径中,. 表示的是当前目录,而 .. 表示上级目录:

1
2
3
4
5
6
7
8
9
10
11
pwd
# /home/cpy

cd /home
cd ..
pwd
# /

cd ./home
/../bin/echo hello
# hello

3. 一些常用的命令及常用用法

3.1 cd

cd:改变当前工作目录到指定路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 切换到home
cd /home

# 切换到当且目录下的cpy子目录
cd ./cpy

# 切换到父目录
cd ..

# 切切换至用户家目录
cd ~

# 切换到上一次的工作目录
cd -
pwd
# /

3.2 ls

ls:显示指定工作目录下之内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
cd ~
# 打印当前目录下的内容
ls
# code missing_semi 模板 图片 下载 桌面
# last-modified.txt 公共 视频 文档 音乐

# 显示指定工作目录下之内容
ls /
# bin dev home lib64 mnt proc run srv tmp var
# boot etc lib media opt root sbin sys usr 文档

# 列出所有文件信息,包括权限,所有者,大小和修改日期:
ls -l
# 总用量 4
# drwxr-xr-x. 4 cpy cpy 36 11月 12 23:45 code
# -rw-rw-r--. 1 cpy cpy 37 12月 12 00:21 last-modified.txt
# drwxrwxr-x. 2 cpy cpy 41 12月 11 22:15 missing_semi
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 公共
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 模板
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 视频
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 图片
# drwxr-xr-x. 2 cpy cpy 6 10月 4 2022 文档
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 下载
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 音乐
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 桌面

# 列出所有隐藏文件信息
ls -a
# . .bashrc .esd_auth .mozilla 公共 下载
# .. .cache .ICEauthority .pki 模板 音乐
# .bash_history code last-modified.txt .python_history 视频 桌面
# .bash_logout .config .local .viminfo 图片
# .bash_profile .dbus missing_semi .vscode 文档

# 参数组合
ls -la

# 通过管道符( | )配合tail命令获取最后一行的信息
ls -l | tail -n1
# drwxr-xr-x. 2 cpy cpy 6 9月 20 2022 桌面

ls -l 命令显示的每行的前10个字符表示文件权限。
第一个字符如果是”d”表示是文件夹,如果是”-“表示是文件。

接下来的九个字符,每三个字符构成一组(rwx)。
它们分别代表了文件所有者(missing),用户组(users)以及其他所有人具有的权限。
“-“代表没有某种权限。

对文件来说,”r”代表可以读取文件,”w”代表可以向文件中写入,”x”表示这个文件可以被执行。

对文件夹来说,”r”代表可以查看文件夹中的内容,”w”代表可以在文件夹中创建、删除、重命名文件和文件夹,
“x”表示可以访问文件夹中的内容或进入该文件夹.

通过 cd 命令进入某文件夹,需要它和它各级父目录的”x”权限。

3.3 mv

mv:移动文件到任意位置

1
2
# 移动文件到任意位置(如果文件夹名称相同则和重命名效果一样)
mv 路径/到/来源 路径/到/目标

3.4 cp

cp:复制文件到任意位置

1
2
3
4
5
6
7
8
# 复制一个文件到另外一个地方:
cp 文件的原始路径 文件的目标路径

# 复制一个文件到另外一个目录, 保持文件名不变:
cp 文件的原始路径 目标目录路径

# 递归的复制一个目录内的内容到另外一个地方(如果目标目录存在,目录被复制到目标目标内部):
cp -r 目录的原始路径 目标目录路径

3.5 mkdir

mkdir:创建一个空文件夹

1
2
# 创建文件夹
mkdir ./test

3.6 rmdir

rmdir:删除空文件夹

1
2
# 删除指定文件夹
rmdir ./test

3.7 rm

rm:删除指定文件

1
2
3
4
5
# 删除指定文件
rm last-modified.txt

# 递归删除某文件夹里的文件
rm -r ./missing_semi

4. 在程序间创建连接

在 shell 中,程序有两个主要的“流”:它们的输入流和输出流。

当程序尝试读取信息时,它们会从输入流中进行读取,当程序打印信息时,它们会将信息输出到输出流中。

通常,一个程序的输入输出流都是您的终端。也就是,您的键盘作为输入,显示器作为输出。但是,我们也可以重定向这些流!

最简单的重定向是 < file 和 > file。这两个命令可以将程序的输入输出流分别重定向到文件:

1
2
3
4
5
# 把hello输出到hello.txt
echo hello > hello.txt

# 从hello.txt读取数据输出到hello2.txt
cat < hello.txt > hello2.txt

使用 >> 来向一个文件追加内容。

1
2
3
4
cat < hello.txt >> hello2.txt
cat hello2.txt
# hello
# hello

使用管道(pipes),我们能够更好的利用文件重定向。| 操作符允许我们将一个程序的输出和另外一个程序的输入连接起来:

1
2
# 把ls的输出和tail的输入链接起来
ls -l / | tail -n1

5. 作业答案

Q1: 本课程需要使用类Unix shell,例如 Bash 或 ZSH。如果您在 Linux 或者 MacOS 上面完成本课程的练习,则不需要做任何特殊的操作。
如果您使用的是 Windows,则您不应该使用 cmd 或是 Powershell;您可以使用Windows Subsystem for Linux或者是 Linux 虚拟机。
使用echo $SHELL命令可以查看您的 shell 是否满足要求。如果打印结果为/bin/bash或/usr/bin/zsh则是可以的。

按要求输入echo $SHELL命令即可。

Q2: 在 /tmp 下新建一个名为 missing 的文件夹。

1
mkdir /tmp/missing

Q3:用 man 查看程序 touch 的使用手册。

1
man touch

Q4:用 touch 在 missing 文件夹中新建一个叫 semester 的文件。

1
2
cd /tmp/missing
touch semester

Q5:将以下内容一行一行地写入 semester 文件:

1
2
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu

第一行可能有点棘手,# 在Bash中表示注释,而 ! 即使被双引号(”)包裹也具有特殊的含义。
单引号(’)则不一样,此处利用这一点解决输入问题。更多信息请参考 Bash quoting 手册

因为访问不上这个网址,于是我改成了访问百度。

1
2
3
4
# 注意字符串需要用单引号包裹
echo '#!/bin/sh' > semester
# 注意追加是用>>号在文件最后添加语句
echo 'curl --head --silent www.baidu.com' >> semester

Q6:尝试执行这个文件。例如,将该脚本的路径(./semester)输入到您的shell中并回车。如果程序无法执行,请使用 ls 命令来获取信息并理解其不能执行的原因。

输入ls -l查看文件权限发现,semester没有执行(x)权限

1
2
ls -l
# -rw-rw-r--. 1 cpy cpy 49 12月 12 00:04 semester

Q7:查看 chmod 的手册(例如,使用 man chmod 命令)

输入man chmod 命令即可

Q8:使用 chmod 命令改变权限,使 ./semester 能够成功执行,不要使用 sh semester 来执行该程序。
您的 shell 是如何知晓这个文件需要使用 sh 来解析呢?更多信息请参考:shebang

1
2
3
4
# 给所有用户都增加执行权限
chmod +x ./semester
# 执行代码
./semester

Q9:使用 | 和 > ,将 semester 文件输出的最后更改日期信息,写入主目录下的 last-modified.txt 的文件中

1
2
3
4
5
6
# 创建文件
touch ~/last-modified.txt

# 从 semester 文件输出筛选最后更改日期信息
# 重定向输出流到last-modified.txt
./semester | grep -i "Date" > /home/last-modified.txt

1/f随机过程

0. 前言

在看《Backscattering Properties of MultiScale Rough Surfaces》这篇文章的时候,发现自己对 $ 1/f $ 随机信号一无所知,然后找到了《一种 1/f 噪声模型的分析方法》这篇文章。

1. $ 1/f $ 模型

1.1 $ 1/f $ 模型定义

1/f 过程是指其功率谱密度满足如下关系的随机过程:

其中 $\omega_x^2$ 为谱常量, $\gamma$ 为频率指数或谱常数,范围为0到2。

准确定义:广义上平稳零均值的随机过程 $x(t)$ ,如果出现了上下限频率 ,并被理想带通滤波器滤波后,其输出信号满足

因此自然界的 $1/f$ 过程只能在一定频率范围存在。

1.2 $ 1/f $ 过程性质

  1. $ 1/f $过程的均值为0
  2. $ 1/f $过程具有统计自相似性(即对于 $a>0$ 存在常数 $H$ 使 $x(t)=a^{-H}x(at)$, $H$ 表示自相似程度)

1.3

ICESat-2 ATL07 数据说明

1 数据描述

1.1 参数

沿轨道的海冰和海面高度。其中海冰高度是相对于时变海面(包括海洋潮汐、逆气压计效应和其他因素)而言的。

1.2 文件信息

1.2.1 格式

HDF格式。

1.2.2 ICESat-2描述

每个地面轨道根据产生它的激光点号进行编号,最左边为地面轨道1L(GT1L),最右边为地面轨道3R(GT3R)。每对位点中的左右位点在跨轨道方向相距约90米,在沿轨道方向相距约2.5公里。

Matlab Cody——CUP Challenge 题解

1. Problem 1974. Length of a short side

1
2
3
function a = calculate_short_side(b, c)
a = sqrt(c.^2-b.^2)
end

2. Problem 2024. Triangle sequence

1
2
3
4
5
6
function area = triangle_sequence(n)
a = [0 1;1 1]^n;
x = [9;16];
res = a*x;
area = res(2);
end

3. Problem 2022. Find a Pythagorean triple

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function flag = isTherePythagoreanTriple(a, b, c, d)
tol = 1e-5;
if abs(a^2+b^2 - c^2) <= tol
flag = true;
elseif abs(a^2+b^2 - d^2) <= tol
flag = true;
elseif abs(a^2+c^2 - d^2) <= tol
flag = true;
elseif abs(b^2+c^2 - d^2) <= tol
flag = true;
else
flag = false;
end
end

4. Problem 2023. Is this triangle right-angled?

1
2
3
4
5
6
7
8
9
function flag = isRightAngled(a,b,c)
temp = [a,b,c];
temp = sort(temp,2,'ascend');
tol = 1e-5;
if abs(temp(1)^2+temp(2)^2-temp(3)^2)<=tol
flag = true;
else
flag = false;
end

5. Problem 2021. Is this triangle right-angled?

1
2
3
4
5
6
7
8
function flag = isRightAngled(a, b, c)
tol = 1e-5;
if abs(a^2+b^2-c^2)<tol
flag = true;
else
flag = false;
end
end

6. Problem 2020. Area of an Isoceles Triangle

1
2
3
4
5
function A = isocelesArea(x,y)
w = y/2;
h = sqrt(x^2-w^2);
A = w*h;
end

7. Problem 2018. Side of a rhombus

1
2
3
function y = rhombus_side(x)
y = sqrt(x.^2 + (x+1).^2)/2;
end

Matlab Cody——Basics Rounding 题解

1. Problem 42641. MATLAB Basic: rounding

错误写法:

1
2
3
function y = round_zero(x)
y = round(x,TieBreaker="tozero");
end

正确写法:

1
2
3
function y = round_zero(x)
y = fix(x);
end

2. Problem 42642. MATLAB Basic: rounding II

1
2
3
function y = round_x(x)
y = round(x);
end

3. Problem 42643. MATLAB Basic: rounding III

1
2
3
function y = round_x(x)
y = floor(x);
end

4. Problem 42644. MATLAB Basic: rounding IV

1
2
3
function y = round_x(x)
y = ceil(x);
end

5. Problem 2559. Check that number is whole number

1
2
3
function y = your_fcn_name(x)
y = (x==round(x));
end

6. Problem 2866. Matlab Basics - Rounding II

1
2
3
function y = round_3_d_p(x)
y = round(x,3);
end

7. Problem 2867. Matlab Basics - Rounding III

1
2
3
function y = round_ten_thou(x)
y = round(x,-4);
end

8. Problem 2120. Rounding off numbers to n decimals

1
2
3
function y = myround(x,n)
y = round(x,n);
end

9. Problem 43278. Make roundn function

1
2
3
function y = myroundn(x,n)
y = round(x,n-1);
end

10. Problem 713. Find the maximum number of decimal places in a set of numbers

题目意思:给定一个向量或值矩阵,计算输入中的最大小数位数。尾随零不算有效。没有有效数字将导致答案为 0。
题解:没有找到一个优雅的写法,所有先放空。

1

Matlab Cody——Basics on Vectors题解

0. Matlab Cody 简介

Matlab Cody是一个类似Leetcode的oj网站,网址:https://ww2.mathworks.cn/matlabcentral/cody

1. Problem 3. Find the sum of all the numbers of the input vector

1
2
3
function y = vecsum(x)
y = sum(x,'all')
end

2. Problem 6. Select every other element of a vector

1
2
3
function y = everyOther(x)
y = x(1:2:end);
end

3. Problem 247. Arrange Vector in descending order

1
2
3
function y = desSort(x)
y = sort(x,'descend');
end

4. Problem 135. Inner product of two vectors

1
2
3
function z = your_fcn_name(x,y)
z = dot(x,y);
end

5. Problem 624. Get the length of a given vector

1
2
3
function y = VectorLength(x)
y = length(x);
end

6. Problem 1107. Find max

1
2
3
function y = your_fcn_name(x)
y = max(x,[],'all');
end

7. Problem 605. Whether the input is vector?

1
2
3
4
5
6
7
function y = checkvector(x)
if isvector(x)
y = 1;
else
y = 0;
end
end

8. Problem 2631. Flip the vector from right to left

题目要求不能直接使用函数,所以自己写

1
2
3
function y = flip_vector(x)
y = x(end:-1:1);
end

9. Problem 3076. Create a vector

1
2
3
function y = zeroToNby2(n)
y = 0:2:n;
end

10. Problem 1024. Doubling elements in a vector

1
2
3
4
5
function B = your_fcn_name(A)
B = zeros(1,2*length(A));
B(1:2:end-1) = A;
B(2:2:end) = A;
end

11. Problem 42651. Vector creation

1
2
3
function y = vector(x)
y = 1:x;
end
  • Copyrights © 2022-2026 CPY
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信