ChatGPT和百度文心一言寫用例,誰更強(qiáng)?
文心一言發(fā)布的第一時(shí)間,就排隊(duì)申請(qǐng)了邀請(qǐng)碼,昨晚看了下,邀請(qǐng)碼已經(jīng)到手,索性就拿一個(gè)例子試了一下,看看哪個(gè)能夠真正意義上的提高生產(chǎn)力,最簡單的錄制了個(gè)GIF動(dòng)畫如下:
問題:
你是一個(gè)軟件測(cè)試工程師,得到一個(gè)需求:軟件程序Helios會(huì)自動(dòng)采集容器內(nèi)的socket調(diào)用記錄、ptrace調(diào)用記錄、userfaultfd調(diào)用記錄、connect調(diào)用記錄、core_pattern調(diào)用記錄。請(qǐng)根據(jù)軟件測(cè)試方法,為上述需求寫出測(cè)試點(diǎn),驗(yàn)證Helios程序采集容器內(nèi)功能的完整性,并寫出測(cè)試用例,包括正常和異常場景,分別為每個(gè)用例輸出python測(cè)試程序。
ChatGPT的回答:

百度文心一言的回答:

以下是ChatGPT回復(fù)的內(nèi)容:
建立測(cè)試計(jì)劃:
-
驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的socket調(diào)用記錄
-
驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的ptrace調(diào)用記錄
-
驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的userfaultfd調(diào)用記錄
-
驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的connect調(diào)用記錄
-
驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的core_pattern調(diào)用記錄
-
驗(yàn)證Helios程序是否在容器內(nèi)部運(yùn)行穩(wěn)定,不會(huì)發(fā)生系統(tǒng)崩潰等異常情況
設(shè)計(jì)測(cè)試用例 使用以下步驟檢查每個(gè)測(cè)試點(diǎn)是否滿足需求:
測(cè)試點(diǎn)1:驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的socket調(diào)用記錄
測(cè)試用例:
正常場景:步驟1:在容器內(nèi)執(zhí)行socket調(diào)用 步驟2:檢查是否能夠在采集結(jié)果中找到socket調(diào)用記錄 預(yù)期結(jié)果:采集結(jié)果中包括所有的socket調(diào)用記錄
異常場景:步驟1:在容器內(nèi)關(guān)閉socket 步驟2:檢查是否能夠在采集結(jié)果中找到socket調(diào)用記錄 預(yù)期結(jié)果:不應(yīng)該有任何socket調(diào)用記錄
測(cè)試點(diǎn)2:驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的ptrace調(diào)用記錄
測(cè)試用例:
正常場景:步驟1:在容器內(nèi)執(zhí)行ptrace系統(tǒng)調(diào)用 步驟2:檢查是否能夠在采集結(jié)果中找到ptrace調(diào)用記錄 預(yù)期結(jié)果:采集結(jié)果中包括所有的ptrace調(diào)用記錄
異常場景:步驟1:在容器內(nèi)關(guān)閉ptrace 步驟2:檢查是否能夠在采集結(jié)果中找到ptrace調(diào)用記錄 預(yù)期結(jié)果:不應(yīng)該有任何ptrace調(diào)用記錄
測(cè)試點(diǎn)3:驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的userfaultfd調(diào)用記錄
測(cè)試用例:
正常場景:步驟1:在容器內(nèi)執(zhí)行userfaultfd系統(tǒng)調(diào)用 步驟2:檢查是否能夠在采集結(jié)果中找到userfaultfd調(diào)用記錄 預(yù)期結(jié)果:采集結(jié)果中包括所有的userfaultfd調(diào)用記錄
異常場景:步驟1:在容器內(nèi)關(guān)閉userfaultfd 步驟2:檢查是否能夠在采集結(jié)果中找到userfaultfd調(diào)用記錄 預(yù)期結(jié)果:不應(yīng)該有任何userfaultfd調(diào)用記錄
測(cè)試點(diǎn)4:驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的connect調(diào)用記錄
測(cè)試用例:
正常場景:步驟1:在容器內(nèi)執(zhí)行connect系統(tǒng)調(diào)用 步驟2:檢查是否能夠在采集結(jié)果中找到connect調(diào)用記錄 預(yù)期結(jié)果:采集結(jié)果中包括所有的connect調(diào)用記錄
異常場景:步驟1:在容器內(nèi)關(guān)閉connect 步驟2:檢查是否能夠在采集結(jié)果中找到connect調(diào)用記錄 預(yù)期結(jié)果:不應(yīng)該有任何connect調(diào)用記錄
測(cè)試點(diǎn)5:驗(yàn)證Helios程序是否能夠完整地采集容器內(nèi)的core_pattern調(diào)用記錄
測(cè)試用例:
正常場景:步驟1:在容器內(nèi)執(zhí)行core_pattern系統(tǒng)調(diào)用 步驟2:檢查是否能夠在采集結(jié)果中找到core_pattern調(diào)用記錄 預(yù)期結(jié)果:采集結(jié)果中包括所有的core_pattern調(diào)用記錄
異常場景:步驟1:在容器內(nèi)關(guān)閉core_pattern 步驟2:檢查是否能夠在采集結(jié)果中找到core_pattern調(diào)用記錄 預(yù)期結(jié)果:不應(yīng)該有任何core_pattern調(diào)用記錄
測(cè)試點(diǎn)6:驗(yàn)證Helios程序是否在容器內(nèi)部運(yùn)行穩(wěn)定,不會(huì)發(fā)生系統(tǒng)崩潰等異常情況
測(cè)試用例:
正常場景:步驟1:在容器內(nèi)執(zhí)行正常操作 步驟2:檢查容器是否運(yùn)行穩(wěn)定 預(yù)期結(jié)果:容器應(yīng)該在正常操作下保持穩(wěn)定且運(yùn)行正常
異常場景:步驟1:在容器內(nèi)執(zhí)行一個(gè)異常操作 步驟2:檢查容器是否發(fā)生崩潰等異常情況 預(yù)期結(jié)果:容器不應(yīng)該發(fā)生崩潰等異常情況
以上測(cè)試點(diǎn)和測(cè)試用例都已經(jīng)定義好了,只需要根據(jù)需求和預(yù)期結(jié)果使用Python寫出測(cè)試代碼即可。
追問ChatGPT:請(qǐng)給出你所提到的Python測(cè)試代碼。
以下是一個(gè)測(cè)試用例的代碼樣例,可以根據(jù)需求和預(yù)期結(jié)果進(jìn)行相應(yīng)的修改。其他測(cè)試用例的代碼類似,可以使用類似的代碼格式: 導(dǎo)入需要使用的模塊 import subprocess 定義測(cè)試用例
def test_socket():
# 在容器內(nèi)執(zhí)行socket調(diào)用
subprocess.call(["docker", "exec", "container_name", "python", "-c", "import socket; s = socket.socket(); s.bind(('localhost', 1234)); s.listen(5);"])
# 讀取Helios程序采集的結(jié)果
with open("helios_result.txt", "r") as file:
helios_result = file.read()
# 檢查是否采集到了socket調(diào)用記錄
assert "socket.bind((\'localhost\', 1234))" in helios_result
assert "socket.listen(5)" in helios_result
# 關(guān)閉socket連接
subprocess.call(["docker", "exec", "container_name", "python", "-c", "s = socket.socket(); s.connect(('localhost', 1234)); s.close()"])
# 讀取Helios程序采集的結(jié)果
with open("helios_result.txt", "r") as file:
helios_result = file.read()
# 檢查是否沒有采集到socket調(diào)用記錄
assert "socket.connect((\'localhost\', 1234))" not in helios_result
運(yùn)行測(cè)試用例
test_socket()
在這個(gè)測(cè)試用例中,我們使用了Python的subprocess模塊去控制Docker容器的內(nèi)部執(zhí)行,并讀取Helios程序采集的結(jié)果,然后通過斷言語句檢查每個(gè)測(cè)試預(yù)期結(jié)果是否滿足預(yù)期。需要注意的是,這個(gè)測(cè)試用例是以單個(gè)測(cè)試點(diǎn)為例的,其他測(cè)試用例的代碼類似。
以下是百度文心一言的回復(fù):
-
測(cè)試點(diǎn):采集容器內(nèi)的socket調(diào)用記錄、ptrace調(diào)用記錄、userfaultfd調(diào)用記錄、connect調(diào)用記錄、core_pattern調(diào)用記錄。
-
正常場景:輸出Helios程序采集到的數(shù)據(jù),包括socket調(diào)用記錄、ptrace調(diào)用記錄、userfault fd調(diào)用記錄、connect調(diào)用記錄和core_pattern調(diào)用記錄。
-
異常場景:當(dāng)發(fā)現(xiàn)Helios程序沒有輸出相應(yīng)的數(shù)據(jù)時(shí),需要進(jìn)行確認(rèn)測(cè)試驗(yàn)證其完整性。
-
測(cè)試用例:
class TestHelio:
def test_collect(self):
# input = ["localhost:12345", "somehost2:23456", ...]
input = ["stdio-recv0*16+0*8[0x7ff00000,0x3f3fffff]\x00|i64 00=0x7ffffbe60d802'r;R>e$7fh!?o7i@2g~qz%^{y#w}vZYuDxqy&dV<u4BkcJQXp/Ia" \
=\
,82WNmrOtIjU1nSG67PvFg3kslIZCeAzubBu8IWdHKoRgcsLwRS5Il+ @9rprt) (11hkbsic9iqnt/ j28anE> pPy$ \l; xIdoSM - g' G? )bCu= +OTep / mWe + s1T /fA3< 6 !~ M- ]Q! B "
expected = [
'127.0.0.1socklenght=32 addrtype=SocketAddr sockaddrLen=24 family=AFamily id=5 pid=52 time stamp=0x52f4e54a16c40 readahead cnt=0 writeback cnt=0 cpu占用率%dpcs freq msec num rx bytes tx bytes mi register select | 100000000 00000000000000 00000000 0007f000000 00442d304a5ff000 000000000000000166c91000 00000200064e9400020e6cbc5ab38f678f73ba922c38cbd7e92e588ad5b6ed414e4a3a208baac1dccdfe2ecd96ed34d562aa09a8cca3a55af4f45e768aea65ca37bb46db16ef2bf22e9bea39bcf375b347c001f579cd27ce15d18a80b8dc43ee63d923da73abc7d58`
]
assert type(input) is list and len(input) > 0, str(input)
for i in range(len(input)):
res = util.getallsocketcallrecord(
int(input[i][31:25]),
int(input[i][26:28]),
int(input[i][29:30]),
int(input[i][23:22]),
int(input[i][21:20]),
int(input[i][19:18]),
int(input[i][17:16]),
int(input[i][15:14]),
int(input[i][13:12]),
int(input[i][11:10]),
int(input[i][9:8]),
int(input[i][7:6]),
int(input[i][5:4]),
int(input[i][3:2]),
int(input[i][1:0])
)
print(res)
def test_collect_failure(self):
# in
回復(fù)速度: ChatGPT明顯快很多;
回復(fù)精準(zhǔn)度上:ChatGPT明顯是真正的理解了輸入這段文字的意思,并且逐一做出了回復(fù),而且回復(fù)的內(nèi)容精準(zhǔn)度較高,可以作為一個(gè)提效工具去使用,相比文心一言,做的回復(fù)就很粗糙,所以說只能是個(gè)小玩具,也可能是引導(dǎo)回答的方式不對(duì)。
雖然還有一定差距,但是百度已經(jīng)很努力了,被強(qiáng)者牽引之后,相信百度能夠很快趕上,精神可嘉,畢竟是第一個(gè)迎面而上的男人,希望文心一言一樣也變強(qiáng),變成一個(gè)強(qiáng)有力的提效工具。
回到軟件測(cè)試人員甚至程序員會(huì)不會(huì)被替代這個(gè)問題上,很難說,
如果不學(xué)習(xí),還不到被AI提到就早已經(jīng)被別人替代了
,所以還是要堅(jiān)持學(xué)習(xí)的;至少,當(dāng)前還不會(huì),因?yàn)閷⑷斯ぶ悄軕?yīng)用到不用人為干預(yù)就完成用例輸出還需要一定的適應(yīng)和轉(zhuǎn)換成本,所以說學(xué)會(huì)如何借助人工智能把用例寫的更好,這才是核心;
另外一點(diǎn)是可以借助ChatGPT更快速高效的寫代碼,當(dāng)然前提是使用者懂代碼,如果不懂代碼,也不一定能夠很好的利用起來,畢竟你也不知道AI給你的代碼正確性如何,再或者你想修改代碼,還是得知道代碼怎么修改, 整體而言,對(duì)懂代碼的人、對(duì)懂測(cè)試用例的人,無論是ChatGPT還是文言一心,無疑都是好幫手,畢竟,強(qiáng)者恒強(qiáng),借助人工智能去創(chuàng)新創(chuàng)造才是根本。
