

# SEC11-BP02 自動化在整個開發和發佈生命週期的測試
<a name="sec_appsec_automate_testing_throughout_lifecycle"></a>

 自動化在整個開發和發佈生命週期的安全署性測試。自動化可以讓軟體在發佈之前更容易一致且重複地找出潛在問題，因此能降低將供應軟體的安全問題風險。 

**預期成果：** 自動化測試的目標是提供以程式設計方式，及早偵測潛在問題，而且常常是遍及整個開發生命週期。啟用自動化迴歸測試時，您可以對變更之後的軟體重新執行功能性與非功能性的測試，確認先前測試過的軟體運作仍如預期。如果定義安全單元測試來檢查常見的錯誤組態，例如損壞或缺失的驗證，您就能夠在開發過程中及早發現和修正這些問題。

 測試自動化會使用專用測試個案來進行應用程式驗證，測試期間以應用程式需求和所需功能為基礎。自動化測試會將產生的測試輸出與其個別預期輸出進行比較，得到最後結果，進而加快整體的測試生命週期。包括像是迴歸測試與單位測試套組的測試方法最適合自動化應用。自動化安全屬性測試，建置人員就能接收自動化意見回饋，而不需要等待舉行安全檢閱。採用靜態或靜態程式碼分析的自動化測試，可以提高程式碼品質，並協助及早在開發生命週期中偵測出潛在的軟體問題。 

**常見的反模式：**
+  未傳達測試個案與自動化測試的測試結果。 
+  僅在即將發佈前執行自動化測試。 
+  自動化有經常改變需求的測試個案。 
+  無法提供如何解決安全測試結果的指引。 

**建立此最佳實務的優勢：**
+  降低人員評估系統安全署性的依賴性。 
+  可在跨多個工作串流之間找到一致結果，進而提高一致性。 
+  降低造成安全問題被導入產品線上軟體的可能性。 
+  因提早捕捉到軟體問題，而縮短偵測與矯正之間的範圍時段。 
+  提高跨多個工作串流之系統或重複行為的能見度，其可用來促進整體組織改進。 

**未建立此最佳實務時的風險暴露等級：**中 

## 實作指引
<a name="implementation-guidance"></a>

隨著軟體逐漸建置，採用各種不同機制來測試軟體，確保您正根據應用程式的業務邏輯為主的功能性需求，以及著重應用程式可靠性、效能和安全性的非功能性需求，進行應用程式的測試作業。 

 靜態應用程式安全測試 (SAST) 分析原始程式碼是否有異常的安全模式，並提供可能存在缺陷程式碼的提示。SAST 依賴靜態輸入來測試某個範圍的已知安全問題，這些輸入包括文件 (需求規格、設計文件，以及設計規格4) 和應用程式原始程式碼。靜態程式碼分析器可協助加快大量程式碼的分析作業。[NIST 品質群組](https://www.nist.gov/itl/ssd/software-quality-group)則提供[原始程式碼安全分析器](https://www.nist.gov/itl/ssd/software-quality-group/source-code-security-analyzers)的比較，其中包括能用於[位元組程式碼掃描器](https://samate.nist.gov/index.php/Byte_Code_Scanners.html)和[二進位程式碼掃描器](https://samate.nist.gov/index.php/Binary_Code_Scanners.html)的開放原始碼工具。

 應用動態分析安全測試 (DAST) 方法以補充您的靜態測試，這個方法會在應用程式執行期間進行測試，找出潛在的意外行為。動態測試可用來偵測出靜態分析無法偵測出的潛在問題。在程式碼儲存、建置和管道等階段進行測試，您就可以檢查進入程式碼當中的各種不同潛在問題類型。[Amazon CodeWhisperer](https://aws.amazon.com/codewhisperer/) 提供程式碼建議，包括在建置人員的 IDE 中執行安全掃描。[Amazon CodeGuru Reviewer](https://aws.amazon.com/codeguru/) 可以找出關鍵問題、安全問題，以及在應用程式開發期間難以發現的錯誤，並提供改善程式碼品質的建議。 

 [開發人員安全研討會](https://catalog.workshops.aws/sec4devs)使用 AWS 開發人員工具，像是 [AWS CodeBuild](https://aws.amazon.com/codebuild/)、[AWS CodeCommit](https://aws.amazon.com/codecommit/) 和 [AWS CodePipeline](https://aws.amazon.com/codepipeline/)，執行包括 SAST 和 DAST 測試方法的發佈管道自動化。 

 隨著 SDLC 繼續進行，建立包括安全團隊定期進行應用程式檢閱的反覆程序。收集自這些安全檢閱的意見回饋應加以解決，並在發佈準備度檢閱時加以驗證。這些檢閱作業會建立堅實強大的應用程式安全狀態，並提供建置人員可解決潛在問題的可行動意見回饋。 

### 實作步驟
<a name="implementation-steps"></a>
+  實作一致的 IDE、程式碼檢閱，以及包括安全測試的 CI/CD 工具。 
+  考慮 SDLC 中的哪個位置適合封鎖管道，而不只是通知建置人員出現需要矯正的問題。 
+  [開發人員安全研討會](https://catalog.workshops.aws/sec4devs)提供在發佈管道中整合靜態與動態測試的範例。 
+  使用自動化工具執行測試或程式碼分析，這些工具包括像是已與開發人員 IDE 完成整合的 [Amazon CodeWhisperer](https://aws.amazon.com/codewhisperer/)，以及可在遞交認可時掃描程式碼的 [Amazon CodeGuru Reviewer](https://aws.amazon.com/codeguru/)，協助建置人員在正確時間得到意見回饋。 
+  使用 AWS Lambda 進行建置時，您可以使用 [Amazon Inspector](https://aws.amazon.com/about-aws/whats-new/2023/02/code-scans-lambda-functions-amazon-inspector-preview/) 來掃描多個功能的應用程式程式碼。 
+  [AWS CI/CD 研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/ef1c179d-8097-4f34-8dc3-0e9eb381b6eb/en-US/)提供在 AWS 上建置 CI/CD 管道的起點。 
+  如果將自動化測試納入 CI/CD 管道，您應該使用票證系統來追蹤通知，以及軟體問題的矯正。 
+  如果是可能會產生發現結果的安全測試，連結矯正的指引將有助於建置人員改善程式碼品質。 
+  定期分析自動化工具所找到的發現結果，以便找出下次自動化、建置人員訓練或認知行銷活動的優先順序。 

## 資源
<a name="resources"></a>

 **相關文件：** 
+  [持續交付與持續部署](https://aws.amazon.com/devops/continuous-delivery/) 
+  [AWS DevOps 能力合作夥伴](https://aws.amazon.com/devops/partner-solutions/?blog-posts-cards.sort-by=item.additionalFields.createdDate&blog-posts-cards.sort-order=desc&partner-solutions-cards.sort-by=item.additionalFields.partnerNameLower&partner-solutions-cards.sort-order=asc&awsf.partner-solutions-filter-partner-type=partner-type%23technology&awsf.Filter%20Name%3A%20partner-solutions-filter-partner-location=*all&awsf.partner-solutions-filter-partner-location=*all&partner-case-studies-cards.sort-by=item.additionalFields.sortDate&partner-case-studies-cards.sort-order=desc&awsm.page-partner-solutions-cards=1) 
+  [AWS 安全能力合作夥伴](https://aws.amazon.com/security/partner-solutions/?blog-posts-cards.sort-by=item.additionalFields.createdDate&blog-posts-cards.sort-order=desc&partner-solutions-cards.sort-by=item.additionalFields.partnerNameLower&partner-solutions-cards.sort-order=asc&awsf.partner-solutions-filter-partner-type=*all&awsf.Filter%20Name%3A%20partner-solutions-filter-partner-categories=use-case%23app-security&awsf.partner-solutions-filter-partner-location=*all&partner-case-studies-cards.sort-by=item.additionalFields.sortDate&partner-case-studies-cards.sort-order=desc&events-master-partner-webinars.sort-by=item.additionalFields.startDateTime&events-master-partner-webinars.sort-order=asc) (應用程式安全) 
+  [選擇 Well-Architected CI/CD 方法](https://aws.amazon.com/blogs/devops/choosing-well-architected-ci-cd-open-source-software-aws-services/) 
+  [使用 Amazon EventBridge 和 Amazon CloudWatch Events 監控 CodeCommit 事件](https://docs.aws.amazon.com/codecommit/latest/userguide/monitoring-events.html) 
+  [Amazon CodeGuru 檢閱中的機密偵測](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/recommendations.html#secrets-detection) 
+  [配合有效管控，加速在 AWS 的部署](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [AWS 如何達到自動化安全、無人為介入的部署](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/) 

 **相關影片：**
+  [無人為介入：Amazon 的自動化持續交付管道](https://www.youtube.com/watch?v=ngnMj1zbMPY) 
+  [自動化跨帳戶 CI/CD 管道](https://www.youtube.com/watch?v=AF-pSRSGNks) 

 **相關範例：**
+  [開發人員的產業認知](https://owasp.org/www-project-top-ten/) 
+  [AWS CodePipeline 管控](https://github.com/awslabs/aws-codepipeline-governance) (GitHub) 
+  [開發人員安全研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/66275888-6bab-4872-8c6e-ed2fe132a362/en-US) 
+  [AWS CI/CD 研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/ef1c179d-8097-4f34-8dc3-0e9eb381b6eb/en-US/) 