한국   대만   중국   일본 
소프트웨어 回歸 - 위키百科, 우리 모두의 百科事典 本文으로 移動

소프트웨어 回歸

위키百科, 우리 모두의 百科事典.

소프트웨어 回歸 ( software regression )는 以前에는 作動했던 機能이 作動을 멈추는 소프트웨어 버그 의 一種이다. 이는 새로운 機能 의 追加 및 버그 修正을 包含하여 소프트웨어의 소스 코드 에 變更 事項이 適用된 後에 發生할 수 있다. [1] 또한 시스템 업그레이드, 시스템 패치 또는 日光 節約 時間制 變更과 같은 소프트웨어가 實行 中인 環境의 變更으로 인해 發生할 수도 있다. [2] 소프트웨어 性能 回歸 ( software performance regression ) 는 소프트웨어가 如前히 올바르게 作動하지만 以前보다 더 느리게 遂行되거나 더 많은 메모리나 資源을 使用하는 狀況을 말한다. [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] 또한 二分法은 性能 回歸를 위해 特定 基準 값 以下(또는 그 以上)를 遂行하는 커밋을 버그가 많은 것으로 看做하고 이 比較 結果에 기초하여 커밋의 왼쪽 또는 오른쪽을 取하는 것으로 使用할 수도 있다.

같이 보기 [ 編輯 ]

各州 [ 編輯 ]

  1. Wong, W. Eric; Horgan, J.R.; London, Saul; Agrawal, Hira (1997). 〈A Study of Effective Regression Testing in Practice〉. 《Proceedings of the Eighth International Symposium on Software Reliability Engineering (ISSRE 97)》 . IEEE. doi : 10.1109/ISSRE.1997.630875 . ISBN   0-8186-8120-9 . S2CID   2911517 .  
  2. Yehudai, Amiram; Tyszberowicz, Shmuel; Nir, Dor (2007). 《Locating Regression Bugs》 . Haifa Verification Conference . doi : 10.1007/978-3-540-77966-7_18 . 2018年 3月 10日에 確認함 .  
  3. Shang, Weiyi; Hassan, Ahmed E.; Nasser, Mohamed; Flora, Parminder (2014年 12月 11日). “Automated Detection of Performance Regressions Using Regression Models on Clustered Performance Counters” (PDF) . 2021年 1月 13日에 原本 文書 (PDF) 에서 保存된 文書 . 2022年 4月 10日에 確認함 .  
  4. Henry, Jean-Jacques Pierre (2008). 《The Testing Network: An Integral Approach to Test Activities in Large Software Projects》. Springer Science & Business Media. 74쪽. ISBN   978-3540785040 .  
  5. Richardson, Jared; Gwaltney, William Jr (2006). 《Ship It! A Practical Guide to Successful Software Projects》 . Raleigh, NC: The Pragmatic Bookshelf. 32, 193 쪽. ISBN   978-0-9745140-4-8 .  
  6. Leung, Hareton K.N.; White, Lee (November 1990). 〈A study of integration testing and software regression at the integration level〉. 《Proceedings of the International Conference on Software Maintenance》 . San Diego, CA, USA: IEEE. doi : 10.1109/ICSM.1990.131377 . ISBN   0-8186-2091-9 . S2CID   62583582 .  
  7. Rothermel, Gregg; Harrold, Mary Jean; Dedhia, Jeinay (2000). “Regression test selection for C++ software” . 《Software Testing, Verification and Reliability》 (英語) 10 (2): 77?109. doi : 10.1002/1099-1689(200006)10:2<77::AID-STVR197>3.0.CO;2-E . ISSN   1099-1689 .  
  8. Weyuker, E.J.; Vokolos, F.I. (December 2000). “Experience with performance testing of software systems: issues, an approach, and case study” . 《IEEE Transactions on Software Engineering》 26 (12): 1147?1156. doi : 10.1109/32.888628 . ISSN   1939-3520 .  
  9. Daly, David; Brown, William; Ingo, Henrik; O'Leary, Jim; Bradford, David (2020年 4月 20日). 〈The Use of Change Point Detection to Identify Software Performance Regressions in a Continuous Integration System〉. 《Proceedings of the International Conference on Performance Engineering》 . Association for Computing Machinery. 67?75쪽. doi : 10.1145/3358960.3375791 . ISBN   978-1-4503-6991-6 . S2CID   211677818 .  
  10. Nistor, Adrian; Jiang, Tian; Tan, Lin (May 2013). 〈Discovering, reporting, and fixing performance bugs〉. 《Proceedings of the Working Conference on Mining Software Repositories (MSR)》 . 237?246쪽. doi : 10.1109/MSR.2013.6624035 . ISBN   978-1-4673-2936-1 . S2CID   12773088 .  
  11. Agarwal, Pragya; Agrawal, Arun Prakash (2014年 9月 17日). “Fault-localization techniques for software systems: a literature review” . 《ACM SIGSOFT Software Engineering Notes》 39 (5): 1?8. doi : 10.1145/2659118.2659125 . ISSN   0163-5948 . S2CID   12101263 .  
  12. “Git - Git Hooks” . 《git-scm.com》 . 2021年 11月 7日에 確認함 .  
  13. Orso, Alessandro; Apiwattanapong, Taweesup; Harrold, Mary Jean (2003年 9月 1日). “Leveraging field data for impact analysis and regression testing” . 《ACM SIGSOFT Software Engineering Notes》 28 (5): 128?137. doi : 10.1145/949952.940089 . ISSN   0163-5948 .  
  14. Qu, Xiao; Acharya, Mithun; Robinson, Brian (September 2012). 〈Configuration selection using code change impact analysis for regression testing〉. 《Proceedings of the International Conference on Software Maintenance》 . 129?138쪽. doi : 10.1109/ICSM.2012.6405263 . ISBN   978-1-4673-2312-3 . S2CID   14928793 .  
  15. Tomasdottir, Kristin Fjola; Aniche, Mauricio; van Deursen, Arie (October 2017). 〈Why and how JavaScript developers use linters〉. 《Proceedings of the International Conference on Automated Software Engineering》 . 578?589쪽. doi : 10.1109/ASE.2017.8115668 . ISBN   978-1-5386-2684-9 .  
  16. Gross, Thomas (1997年 9月 10日). 〈Bisection Debugging〉. 《Proceedings of the International Workshop on Automatic Debugging》 (英語). Linkøping University Electronic Press. 185?191쪽.  
  17. “Git - git-bisect Documentation” . 《git-scm.com》 . 2021年 11月 7日에 確認함 .  
  18. “hg - bisect” . 《www.selenic.com》. Mercurial . 2021年 11月 7日에 確認함 .  
  19. “Reading 11: Debugging” . 《web.mit.edu》. MIT.  
  20. Buhse, Ben; Wei, Thomas; Zang, Zhiqiang; Milicevic, Aleksandar; Gligoric, Milos (May 2019). 〈VeDebug: Regression Debugging Tool for Java〉. 《Proceedings of the International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)》 . 15?18쪽. doi : 10.1109/ICSE-Companion.2019.00027 . ISBN   978-1-7281-1764-5 . S2CID   174799830 .  
  21. Taha, A.-B.; Thebaut, S.M.; Liu, S.-S. (September 1989). 〈An approach to software fault localization and revalidation based on incremental data flow analysis〉. 《Proceedings of the Annual International Computer Software & Applications Conference》 . IEEE. 527?534쪽. doi : 10.1109/CMPSAC.1989.65142 . ISBN   0-8186-1964-3 . S2CID   41978046 .  
  22. Ocariza, Frolin S.; Zhao, Boyang (2021). “Localizing software performance regressions in web applications by comparing execution timelines” . 《Software Testing, Verification and Reliability》 (英語) 31 (5): e1750. doi : 10.1002/stvr.1750 . ISSN   1099-1689 . S2CID   225416138 .  
  23. “Analyze runtime performance” . 《Chrome Developers》 (英語). Google . 2021年 11月 7日에 確認함 .  
  24. “Performance analysis reference - Microsoft Edge Development” . 《docs.microsoft.com》 (美國 英語). Microsoft . 2021年 11月 7日에 確認함 .  
  25. Yao, Kundi; B. de Padua, Guilherme; Shang, Weiyi; Sporea, Steve; Toma, Andrei; Sajedi, Sarah (2018年 3月 30日). 〈Log4Perf: Suggesting Logging Locations for Web-based Systems' Performance Monitoring〉. 《Proceedings of the International Conference on Performance Engineering》 . Association for Computing Machinery. 127?138쪽. doi : 10.1145/3184407.3184416 . ISBN   978-1-4503-5095-2 . S2CID   4557038 .  
  26. Li, Heng; Shang, Weiyi; Adams, Bram; Sayagh, Mohammed; Hassan, Ahmed E. (2020年 1月 30日). “A Qualitative Study of the Benefits and Costs of Logging from Developers' Perspectives” . 《IEEE Transactions on Software Engineering》 47 (12): 2858?2873. doi : 10.1109/TSE.2020.2970422 . S2CID   213679706 .  
  27. Heger, Christoph; Happe, Jens; Farahbod, Roozbeh (2013年 4月 21日). 〈Automated root cause isolation of performance regressions during software development〉. 《Proceedings of the International Conference on Performance Engineering》 . Association for Computing Machinery. 27?38쪽. doi : 10.1145/2479871.2479879 . ISBN   978-1-4503-1636-1 . S2CID   2593603 .  
  28. Malik, Haroon; Adams, Bram; Hassan, Ahmed E. (November 2010). 〈Pinpointing the Subsystems Responsible for the Performance Deviations in a Load Test〉. 《Proceedings of the International Symposium on Software Reliability Engineering》 . 201?210쪽. doi : 10.1109/ISSRE.2010.43 . ISBN   978-1-4244-9056-1 . S2CID   17306870 .