소프트웨어 回歸
(
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]
또한 二分法은 性能 回歸를 위해 特定 基準 값 以下(또는 그 以上)를 遂行하는 커밋을 버그가 많은 것으로 看做하고 이 比較 結果에 기초하여 커밋의 왼쪽 또는 오른쪽을 取하는 것으로 使用할 수도 있다.
같이 보기
[
編輯
]
各州
[
編輯
]
- ↑
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
.
- ↑
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日에 確認함
.
- ↑
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日에 確認함
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
“Git - Git Hooks”
. 《git-scm.com》
. 2021年 11月 7日에 確認함
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
Gross, Thomas (1997年 9月 10日). 〈Bisection Debugging〉.
《Proceedings of the International Workshop on Automatic Debugging》
(英語). Linkøping University Electronic Press. 185?191쪽.
- ↑
“Git - git-bisect Documentation”
. 《git-scm.com》
. 2021年 11月 7日에 確認함
.
- ↑
“hg - bisect”
. 《www.selenic.com》. Mercurial
. 2021年 11月 7日에 確認함
.
- ↑
“Reading 11: Debugging”
. 《web.mit.edu》. MIT.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
“Analyze runtime performance”
. 《Chrome Developers》 (英語). Google
. 2021年 11月 7日에 確認함
.
- ↑
“Performance analysis reference - Microsoft Edge Development”
. 《docs.microsoft.com》 (美國 英語). Microsoft
. 2021年 11月 7日에 確認함
.
- ↑
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
.
- ↑
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
.
- ↑
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
.
- ↑
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
.