自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

生成式人工智能如何改變軟件開(kāi)發(fā) 原創(chuàng)

發(fā)布于 2024-12-18 08:08
瀏覽
0收藏

采用人工智能編碼助手可以將軟件開(kāi)發(fā)團(tuán)隊(duì)的效率提高40%,其中包括代碼審查至調(diào)試的過(guò)程,同時(shí)可以有效應(yīng)對(duì)現(xiàn)實(shí)世界的挑戰(zhàn)并遵循最佳實(shí)踐。

軟件開(kāi)發(fā)專(zhuān)家Igboanugo David Ugochukwu表示,當(dāng)他帶領(lǐng)的軟件開(kāi)發(fā)團(tuán)隊(duì)在去年開(kāi)始使用人工智能編碼助手時(shí),他對(duì)其能力持懷疑態(tài)度?;谄溟L(zhǎng)達(dá)15年的編程經(jīng)驗(yàn),他不相信大型語(yǔ)言模型能夠?qū)?shí)際的開(kāi)發(fā)工作提供有意義的幫助。在六個(gè)月后,他的看法發(fā)生了根本性轉(zhuǎn)變,其開(kāi)發(fā)團(tuán)隊(duì)的工作效率提高了大約40%,同時(shí)代碼質(zhì)量指標(biāo)也有所提高。

但關(guān)鍵在于,這并不像“人工智能讓編碼變得更容易”那么簡(jiǎn)單。實(shí)際應(yīng)用中的情況遠(yuǎn)比市場(chǎng)宣傳所描繪的更微妙、更有趣,并且從實(shí)用角度來(lái)看,也更具價(jià)值。

實(shí)際應(yīng)用情況

Ugochukwu分享了近日發(fā)生的一件事。他正在調(diào)試Node.js后端一個(gè)嚴(yán)重的內(nèi)存泄漏。這在以往意味著要花費(fèi)數(shù)小時(shí)梳理代碼,添加控制臺(tái)日志,可能還需要花費(fèi)更多的時(shí)間。然而,他將相關(guān)代碼和內(nèi)存配置文件輸入到人工智能助手中,并要求它分析模式。

在幾分鐘之內(nèi),人工智能助手就發(fā)現(xiàn)了一些他未曾留意的一處細(xì)節(jié)——在一個(gè)閉包中意外地保持了WebSocket連接。這是一個(gè)微不足道卻難以察覺(jué)的錯(cuò)誤。盡管人工智能并沒(méi)有神奇地修復(fù)它,但它比傳統(tǒng)的調(diào)試方法更快地指明了正確的方向。

真正有效的方法

根據(jù)其團(tuán)隊(duì)在過(guò)去一年使用人工智能助手的經(jīng)驗(yàn):

1.代碼評(píng)審

Python 
1 def process_user_data(data):
2    if data['status'] == 'active':
3        user = User.objects.get(id=data['user_id'])
4        if user.subscription:
5            if user.subscription.status == 'valid':
6                return handle_active_user(user)
7            else:
8                return handle_inactive_subscription(user)
9    return handle_inactive_user()

人工智能助手發(fā)現(xiàn)了這一點(diǎn),并提出了以下建議:

重構(gòu)版本:

Python 
1 def process_user_data(data):
2    if data['status'] != 'active':
3        return handle_inactive_user()
4      
5    user = User.objects.get(id=data['user_id'])
6    if not user.subscription:
7        return handle_inactive_user()
8      
9    return (handle_active_user(user) 
10            if user.subscription.status == 'valid'
11            else handle_inactive_subscription(user))

雖然它并不是革命性突破,但始終比人類(lèi)審閱者更快地發(fā)現(xiàn)這些可讀性問(wèn)題。

2.測(cè)試生成

這是另一個(gè)意外的發(fā)現(xiàn)。以下是一個(gè)真實(shí)示例:

最初的功能:

Python 
1 def calculate_order_total(items, discount_code=None):
2    subtotal = sum(item.price * item.quantity for item in items)
3    if discount_code:
4        discount = get_discount_amount(discount_code, subtotal)
5        return subtotal - discount
6    return subtotal

人工智能生成了這些測(cè)試用例:

Python 
1 def test_calculate_order_total():
2    items = [
3        Item(price=10.0, quantity=2),
4        Item(price=15.0, quantity=1)
5    ]
6    assert calculate_order_total(items) == 35.0
7
8  def test_calculate_order_total_with_discount():
9    items = [Item(price=100.0, quantity=1)]
10    assert calculate_order_total(items, 'SAVE20') == 80.0
11
12 def test_calculate_order_total_empty():
13    assert calculate_order_total([]) == 0
14
15 def test_calculate_order_total_invalid_discount():
16    items = [Item(price=10.0, quantity=1)]
17    assert calculate_order_total(items, 'INVALID') == 10.0

它捕捉到了開(kāi)發(fā)人員一開(kāi)始可能會(huì)忽略的邊界案例。

不適用人工智能助手的情況

1.復(fù)雜的架構(gòu)決策

Ugochukwu帶領(lǐng)的開(kāi)發(fā)團(tuán)隊(duì)最近需要重新設(shè)計(jì)身份驗(yàn)證系統(tǒng),以處理多租戶單點(diǎn)登錄(SSO)。人工智能助手提供的建議從技術(shù)上來(lái)說(shuō)是正確的,但忽略了關(guān)于不同客戶端類(lèi)型之間會(huì)話管理的關(guān)鍵現(xiàn)實(shí)因素。

2.場(chǎng)景復(fù)雜型調(diào)試

當(dāng)一個(gè)bug涉及多個(gè)服務(wù)、復(fù)雜狀態(tài)或競(jìng)爭(zhēng)條件時(shí),人工智能工具仍然會(huì)遇到困難。它們可以幫助分析單個(gè)組件,但往往忽略了整體情況。

對(duì)開(kāi)發(fā)工作流程的實(shí)際影響

以下是開(kāi)發(fā)工作流程的實(shí)際變化:

在人工智能整合之前

Plain Text 
1 1. Write code (2 hours)
2 2. Write tests (1 hour)
3 3. Debug issues (2 hours)
4 4. Code review (1 hour)
5
6 Total: ~6 hours per feature

在人工智能整合之后

Plain Text 
1 1. Write code with AI assistance (1 hour)
2 2. AI generates test cases, developer adjusts (30 mins)
3 3. Debug with AI analysis (1 hour)
4 4. AI-assisted code review (30 mins)
5
6 Total: ~3 hours per feature

但問(wèn)題是,這之所以能奏效,是因?yàn)殚_(kāi)發(fā)團(tuán)隊(duì)學(xué)會(huì)了如何有效地使用人工智能工具。雖然他們?cè)诘谝粋€(gè)月的工作效率較低,但正在摸索正確的工作流程。

學(xué)到的最佳實(shí)踐

1.面向開(kāi)發(fā)人員的提示工程

而不是:

Plain Text 
1 "Write a function to process user data"

該開(kāi)發(fā)團(tuán)隊(duì)采取的做法是:

Plain Text 
1 "Write a Python function that:
2
3 - Takes a user_id and data dictionary
4 - Validates required fields: name, email, age
5 - Handles missing fields with default values
6 - Raises ValidationError for invalid data
7 - Returns a processed user object
8
9 Use type hints and include error handling."

輸出內(nèi)容質(zhì)量上的差異十分顯著。

2.代碼審查策略

現(xiàn)在采取的做法是:

  • 第一輪:利用人工智能進(jìn)行風(fēng)格、潛在漏洞和明顯問(wèn)題的審查。
  • 第二輪:人工審查業(yè)務(wù)邏輯和架構(gòu)方面的問(wèn)題。
  • 最后一輪:再次利用人工智能檢查安全漏洞。

3.文檔生成

這改變了游戲規(guī)則。示例如下:

Python 
1 # Original function with minimal docs
2
3 def process_payment(amount, user_id, method):
4
5    # ... implementation ...

人工智能將其擴(kuò)展為:

Python 
1 def process_payment(
2    amount: Decimal,
3    user_id: str,
4    method: PaymentMethod
5 ) -> PaymentResult:
6    """Process a payment transaction for a user.
7
8    Args:
9        amount: Transaction amount in user's local currency.
10        user_id: Unique identifier for the user.
11        method: Payment method object containing card/bank details.
12
13    Returns:
14        PaymentResult object containing transaction ID and status.
15
16    Raises:
17        InsufficientFundsError: If payment method has insufficient funds.
18        InvalidPaymentMethodError: If payment method is expired/invalid.
19        PaymentProcessingError: If payment gateway encounters an error.
20
21    Example:
22        >>> result = process_payment(
23        ...     amount=Decimal('99.99'),
24        ...     user_id='usr_123',
25        ...     method=PaymentMethod(type='credit_card', token='tok_xyz')
26        ... )
27        >>> print(result.transaction_id)
28        'tx_abc123'
29    """

安全注意事項(xiàng)

在安全方面,必須極其謹(jǐn)慎。以下是吸取的一些教訓(xùn):

1.永遠(yuǎn)不要讓人工智能生成安全關(guān)鍵代碼

不要做的示例:

Python 
1 # DON'T: Let AI generate authentication logic
2 def verify_password(plain_text, hashed):
3    return hashlib.md5(plain_text.encode()).hexdigest() == hashed

2.始終檢查生成的SQL

已經(jīng)看到人工智能建議易受攻擊的查詢(xún):

SQL 
1 -- DON'T: Raw string formatting
2 f"SELECT * FROM users WHERE id = '{user_id}'"
3
4 -- DO: Parameterized queries
5 "SELECT * FROM users WHERE id = %s", (user_id,)

展望未來(lái)

根據(jù)目前的趨勢(shì)和開(kāi)發(fā)人員的經(jīng)驗(yàn),以下是一些實(shí)際的變化趨勢(shì):

1.集成開(kāi)發(fā)環(huán)境(IDE)整合正變得日益重要

最新的人工智能驅(qū)動(dòng)的集成開(kāi)發(fā)環(huán)境(IDE)不僅提供代碼建議,還能理解整個(gè)代碼庫(kù)。例如,開(kāi)發(fā)團(tuán)隊(duì)的IDE異步函數(shù)在不同服務(wù)中的調(diào)用方式,標(biāo)記了異步函數(shù)中潛在的競(jìng)爭(zhēng)條件。

2.專(zhuān)業(yè)模型正在涌現(xiàn)

現(xiàn)在有一些人工智能模型專(zhuān)門(mén)針對(duì)某些框架或語(yǔ)言進(jìn)行訓(xùn)練。目前,獲得的針對(duì)TypeScript的特定建議明顯優(yōu)于通用的代碼生成。

3.測(cè)試正在轉(zhuǎn)變

人工智能在生成人類(lèi)可能錯(cuò)過(guò)的邊緣案例和壓力測(cè)試方面做得越來(lái)越好,自從采用人工智能工具以來(lái),測(cè)試覆蓋率有所提高。

結(jié)論

人工智能在短期內(nèi)并不會(huì)取代開(kāi)發(fā)人員。與其相反,人工智能可以提高軟件開(kāi)發(fā)效率,幫助他們更早地發(fā)現(xiàn)漏洞,并處理編程中繁瑣且重復(fù)性的任務(wù)。關(guān)鍵在于理解其局限性,并將其作為高效的工具使用,而不是替代人類(lèi)的判斷。

在這個(gè)數(shù)字時(shí)代中茁壯成長(zhǎng)的開(kāi)發(fā)人員并不是那些能編寫(xiě)大量代碼的人,而是那些擅長(zhǎng)與人工智能工具協(xié)作,同時(shí)對(duì)自己所構(gòu)建的內(nèi)容及其背后的邏輯與目的有著深刻認(rèn)識(shí)的人。

Ugochukwu在撰寫(xiě)本文的過(guò)程中,就巧妙地借助了人工智能的力量來(lái)輔助部分內(nèi)容的創(chuàng)作。這正是關(guān)鍵所在。人工智能是一種工具,開(kāi)發(fā)人員需要理解并且有效地利用它。

原文標(biāo)題:??Beyond ChatGPT: How Generative AI Is Transforming Software Development??,作者:Igboanugo David Ugochukwu

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
已于2024-12-18 09:38:12修改
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦