आटोमेटिक बग फिक्सिंग : स्वचालित बग-फिक्सिंग मानव प्रोग्रामर के हस्तक्षेप के बिना सॉफ़्टवेयर बग की स्वचालित मरम्मत है।[1][2] इसे आमतौर पर स्वचालित पैच पीढ़ी, स्वचालित बग मरम्मत या स्वचालित प्रोग्राम मरम्मत के रूप में भी जाना जाता है। [3][4] इस तरह की तकनीकों का विशिष्ट लक्ष्य सॉफ्टवेयर प्रोग्रामों में बगैर किसी बाधा के सॉफ्टवेयर प्रोग्राम में बग को खत्म करने के लिए स्वचालित रूप से सही पैच जेनरेट करना है। [5]

विशिष्टता: स्वचालित बग फिक्सिंग अपेक्षित व्यवहार के विनिर्देश के अनुसार किया जाता है जो उदाहरण के लिए एक औपचारिक विनिर्देश या परीक्षण सूट हो सकता है। [6] एक परीक्षण-सूट - इनपुट / आउटपुट जोड़े कार्यक्रम की कार्यक्षमता को निर्दिष्ट करते हैं, संभवतः खोज में ड्राइव करने के लिए एक परख के रूप में उपयोग किए जा सकते हैं। वास्तव में यह ओरण बग दोष के बीच विभाजित किया जा सकता है जो दोषपूर्ण व्यवहार को उजागर करता है, और प्रतिगमन ओरेकल, जो कार्यक्षमता को एन्क्रिप्ट करता है किसी भी कार्यक्रम की मरम्मत विधि को संरक्षित करना चाहिए। ध्यान दें कि एक परीक्षण सूट आमतौर पर अधूरा है और सभी संभावित मामलों को कवर नहीं करता है। इसलिए, एक मान्य पैच के लिए परीक्षण सूट में सभी इनपुट के लिए अपेक्षित आउटपुट का उत्पादन करना संभव है लेकिन अन्य इनपुट के लिए गलत आउटपुट। [7] इस तरह के मान्य लेकिन गलत पैच का अस्तित्व उत्पन्न-और-मान्य तकनीकों के लिए एक बड़ी चुनौती है। हाल ही में सफल स्वचालित बग-फिक्सिंग तकनीक अक्सर परीक्षण सूट के अलावा अन्य अतिरिक्त जानकारी पर निर्भर करती है, जैसे कि पिछले मानव पैच से सीखी गई जानकारी, मान्य पैच के बीच सही पैच की पहचान करने के लिए। [8] अपेक्षित व्यवहार को निर्दिष्ट करने का एक अन्य तरीका औपचारिक विनिर्देशों का उपयोग करना है [9][10] पूर्ण विनिर्देशों के खिलाफ सत्यापन जो कार्यात्मकताओं सहित पूरे कार्यक्रम के व्यवहार को निर्दिष्ट करता है, कम आम है क्योंकि ऐसे विनिर्देश आमतौर पर व्यवहार में उपलब्ध नहीं होते हैं और इस तरह के सत्यापन की गणना लागत है निषेधात्मक।[11]

तकनीक: जनरेट और मान्य: जेनरेट-एंड-वैलिडेट प्रत्येक परीक्षित पैच को इकट्ठा करने के लिए प्रत्येक उम्मीदवार पैच का संकलन और परीक्षण करते हैं जो टेस्ट सूट में सभी इनपुट के लिए अपेक्षित आउटपुट उत्पन्न करते हैं।[6][7]इस तरह की तकनीक आम तौर पर कार्यक्रम के एक परीक्षण सूट के साथ शुरू होती है, अर्थात्, परीक्षण मामलों का एक सेट, जिसमें से कम से कम एक बग को उजागर करता है। [6][8][12][13]बग-फिक्सिंग प्रणाली के आरंभिक और मान्य जेनरोग्रॉग हैं। [6] जेनरेट-एंड-वैलिड तकनीकों की प्रभावशीलता विवादास्पद बनी हुई है, क्योंकि वे आम तौर पर पैच शुद्धता की गारंटी नहीं देते हैं। [7][14] फिर भी, हाल ही में अत्याधुनिक तकनीकों के कथित परिणाम आम तौर पर आशाजनक हैं। उदाहरण के लिए, आठ बड़े सी सॉफ़्टवेयर प्रोग्रामों में व्यवस्थित रूप से 69 वास्तविक विश्व कीड़े एकत्र किए गए, अत्याधुनिक बग-फिक्सिंग सिस्टम पैगंबर 69 बगों में से 18 के लिए सही पैच उत्पन्न करता है। [8] उम्मीदवार पैच उत्पन्न करने का एक तरीका मूल कार्यक्रम पर म्यूटेशन ऑपरेटरों को लागू करना है। उत्परिवर्तन संचालक मूल कार्यक्रम में हेरफेर करते हैं, संभवतः इसके सार सिंटैक्स ट्री प्रतिनिधित्व के माध्यम से, या अधिक मोटे-दाने वाले प्रतिनिधित्व जैसे कि बयान-स्तर या ब्लॉक-स्तर पर काम करना। पहले आनुवांशिक सुधार के दृष्टिकोण बयान स्तर पर काम करते हैं और एक मौजूदा स्रोत को हटाने या एक ही स्रोत फ़ाइल में किसी अन्य कथन के साथ किसी मौजूदा कथन को बदलने के रूप में सरल हटा / प्रतिस्थापित संचालन करते हैं। [6][15] हाल ही के दृष्टिकोण अभ्यर्थी पैच के अधिक विविध सेट उत्पन्न करने के लिए अमूर्त सिंटैक्स ट्री स्तर पर अधिक महीन दाने वाले ऑपरेटरों का उपयोग करते हैं। [8][13] उम्मीदवार पैच उत्पन्न करने के लिए एक अन्य तरीका फिक्स टेम्प्लेट का उपयोग करना है। आमतौर पर बग्स के विशिष्ट वर्गों को ठीक करने के लिए फिक्स टेम्प्लेट पूर्वनिर्धारित परिवर्तन होते हैं। [16] फिक्स टेम्प्लेट के उदाहरणों में यह जाँचने के लिए एक सशर्त विवरण सम्मिलित करना शामिल है कि क्या एक चर का मान शून्य पॉइंटर अपवाद को ठीक करने के लिए अशक्त है, या एक-एक कर त्रुटियों को ठीक करने के लिए एक पूर्णांक स्थिरांक को बदल रहा है। .[16] जनरेट-एंड-वेरिफ़ाइड एप्रोच के लिए स्वचालित रूप से खदानों को ठीक करना भी संभव है। [17][18] कई उत्पन्न-और-मान्य तकनीक अतिरेक अंतर्दृष्टि पर निर्भर करती हैं: पैच का कोड आवेदन में कहीं और पाया जा सकता है। यह विचार जेनप्रॉग प्रणाली में पेश किया गया था, जहां एएसटी नोड्स के दो ऑपरेटर, इसके अलावा और प्रतिस्थापन, कहीं और से लिए गए कोड पर आधारित थे (यानी एक मौजूदा एएसटी नोड को जोड़ना)। इस विचार को आनुभविक रूप से मान्य किया गया है, दो स्वतंत्र अध्ययनों से पता चला है कि एक महत्वपूर्ण अनुपात (3% -17%) मौजूदा कोड से बना है। [19][20] इस तथ्य से परे कि पुन: उपयोग करने के लिए कोड कहीं और मौजूद है, यह भी दिखाया गया है कि संभावित मरम्मत सामग्री का संदर्भ उपयोगी है: अक्सर, दाता संदर्भ प्राप्तकर्ता के संदर्भ के समान है। [21][22]

संश्लेषण-आधारित: मरम्मत तकनीक मौजूद हैं जो प्रतीकात्मक निष्पादन पर आधारित हैं। उदाहरण के लिए, सेमीफिक्स [23] मरम्मत की कमी को दूर करने के लिए प्रतीकात्मक निष्पादन का उपयोग करता है। एंजेलिक्स [24] ने बहुस्तरीय पैच से निपटने के लिए एंजेलिक वन की अवधारणा पेश की। कुछ मान्यताओं के तहत, संश्लेषण समस्या के रूप में मरम्मत की समस्या का वर्णन करना संभव है। सेमीफिक्स [23] and Nopol[25] और नोपोल [25] घटक-आधारित संश्लेषण का उपयोग करता है। [26] डायनामोथ [27] गतिशील संश्लेषण का उपयोग करता है। [28] S3 [29] सिंटेक्स-निर्देशित संश्लेषण पर आधारित है। [30] सारचरेपइर [31] संभावित पैच को स म टी फॉर्मूले में परिवर्तित करता है और उम्मीदवार पैच को क्वेरी करता है जो पैच किए गए प्रोग्राम को सभी आपूर्ति किए गए परीक्षण मामलों को पास करने की अनुमति देता है।

डेटा-चालित: मशीन सीखने की तकनीक स्वचालित बग-फिक्सिंग सिस्टम की प्रभावशीलता में सुधार कर सकती है। [8] ऐसी तकनीकों का एक उदाहरण गिटहब और सोर्स फोर्ज में खुले स्रोत रिपॉजिटरी से एकत्र मानव डेवलपर्स से पिछले सफल पैच से सीखता है। [8] इसके बाद सभी उत्पन्न उम्मीदवार पैच के बीच संभावित सही पैच को पहचानने और प्राथमिकता देने के लिए सीखा जानकारी का उपयोग करें। [8] वैकल्पिक रूप से, पैच को सीधे मौजूदा स्रोतों से खनन किया जा सकता है। उदाहरण के दृष्टिकोण में दाता अनुप्रयोगों से खनन पैच शामिल हैं [11] या क्यूए वेब साइटों से। [32] सीक्वेंस र एक-पंक्ति पैच उत्पन्न करने के लिए स्रोत कोड पर अनुक्रम से अनुक्रम सीखने का उपयोग करता है। [33] यह एक तंत्रिका नेटवर्क वास्तुकला को परिभाषित करता है जो स्रोत कोड के साथ अच्छी तरह से काम करता है, प्रतिलिपि तंत्र के साथ टोकन के साथ पैच का उत्पादन करने की अनुमति देता है जो कि सीखा शब्दावली में नहीं हैं। उन टोकन को मरम्मत के तहत जावा वर्ग के कोड से लिया गया है।

सन्दर्भसंपादित करें

  1. Rinard, Martin C. (2008). "Technical perspective Patching program errors". Communications of the ACM. 51 (12): 86. डीओआइ:10.1145/1409360.1409381.
  2. Harman, Mark (2010). "Automated patching techniques". Communications of the ACM. 53 (5): 108. डीओआइ:10.1145/1735223.1735248.
  3. Monperrus, Martin (2018). "Automatic Software Repair". ACM Computing Surveys. 51 (1): 1–24. arXiv:1807.00515. डीओआइ:10.1145/3105906.
  4. Gazzola, Luca; Micucci, Daniela; Mariani, Leonardo (2019). "Automatic Software Repair: A Survey" (PDF). IEEE Transactions on Software Engineering. 45 (1): 34–67. hdl:10281/184798. डीओआइ:10.1109/TSE.2017.2755013.
  5. Tan, Shin Hwei; Roychoudhury, Abhik (2015). "relifix: Automated repair of software regressions". 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering. IEEE. पपृ॰ 471–482. आई॰ऍस॰बी॰ऍन॰ 978-1-4799-1934-5. डीओआइ:10.1109/ICSE.2015.65.
  6. Weimer, Westley; Nguyen, ThanhVu; Le Goues, Claire; Forrest, Stephanie (2009). "Automatically finding patches using genetic programming". Proceedings of the 31st International Conference on Software Engineering. IEEE. पपृ॰ 364–374. CiteSeerX 10.1.1.147.8995. आई॰ऍस॰बी॰ऍन॰ 978-1-4244-3453-4. डीओआइ:10.1109/ICSE.2009.5070536.
  7. Qi, Zichao; Long, Fan; Achour, Sara; Rinard, Martin (2015). "An Anlysis of Patch Plausibility and Correctness for Generate-and-Validate Patch Generation Systems". Proceedings of the 2015 International Symposium on Software Testing and Analysis. ACM. CiteSeerX 10.1.1.696.5616. आई॰ऍस॰बी॰ऍन॰ 978-1-4503-3620-8. डीओआइ:10.1145/2771783.2771791.
  8. Long, Fan; Rinard, Martin (2016). "Automatic patch generation by learning correct code". Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM. पपृ॰ 298–312. आई॰ऍस॰बी॰ऍन॰ 978-1-4503-3549-2. डीओआइ:10.1145/2837614.2837617.
  9. Pei, Yu; Furia, Carlo A.; Nordio, Martin; Wei, Yi; Meyer, Bertrand; Zeller, Andreas (May 2014). "Automated Fixing of Programs with Contracts". IEEE Transactions on Software Engineering. 40 (5): 427–449. arXiv:1403.1117. डीओआइ:10.1109/TSE.2014.2312918. बिबकोड:2014arXiv1403.1117P.
  10. "Contract-based Data Structure Repair Using Alloy". CiteSeerX 10.1.1.182.4390. Cite journal requires |journal= (मदद)
  11. सन्दर्भ त्रुटि: <ref> का गलत प्रयोग; codephage नाम के संदर्भ में जानकारी नहीं है।
  12. Qi, Yuhua; Mao, Xiaoguang; Lei, Yan; Dai, Ziying; Wang, Chengsong (2014). "The Strength of Random Search on Automated Program Repair". Proceedings of the 36th International Conference on Software Engineering. ICSE 2014. Austin, Texas: ACM. पपृ॰ 254–265. आई॰ऍस॰बी॰ऍन॰ 978-1-4503-2756-5. डीओआइ:10.1145/2568225.2568254.
  13. Long, Fan; Rinard, Martin (2015). "Staged Program Repair with Condition Synthesis". Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering. ESEC/FSE 2015. Bergamo, Italy: ACM. पपृ॰ 166–178. CiteSeerX 10.1.1.696.9059. आई॰ऍस॰बी॰ऍन॰ 978-1-4503-3675-8. डीओआइ:10.1145/2786805.2786811.
  14. Monperrus, Martin (2014). "A Critical Review of "Automatic Patch Generation Learned from Human-written Patches": Essay on the Problem Statement and the Evaluation of Automatic Software Repair". Proceedings of the 36th International Conference on Software Engineering. ICSE 2014. New York, New York: ACM. पपृ॰ 234–242. arXiv:1408.2103. आई॰ऍस॰बी॰ऍन॰ 978-1-4503-2756-5. डीओआइ:10.1145/2568225.2568324.
  15. Le Goues, Claire; Dewey-Vogt, Michael; Forrest, Stephanie; Weimer, Westley (2012). "A Systematic Study of Automated Program Repair: Fixing 55 out of 105 Bugs for $8 Each". 2012 34th International Conference on Software Engineering (ICSE). IEEE. पपृ॰ 3–13. CiteSeerX 10.1.1.661.9690. आई॰ऍस॰बी॰ऍन॰ 978-1-4673-1067-3. डीओआइ:10.1109/ICSE.2012.6227211.
  16. सन्दर्भ त्रुटि: <ref> का गलत प्रयोग; par नाम के संदर्भ में जानकारी नहीं है।
  17. Martinez, Matias; Monperrus, Martin (2018), "Ultra-Large Repair Search Space with Automatically Mined Templates: The Cardumen Mode of Astor", Search-Based Software Engineering (अंग्रेज़ी में), Springer International Publishing, पपृ॰ 65–86, arXiv:1712.03854, आई॰ऍस॰बी॰ऍन॰ 9783319992402, डीओआइ:10.1007/978-3-319-99241-9_3
  18. Koyuncu, Anil; Liu, Kui; Bissyandé, Tegawendé F.; Kim, Dongsun; Klein, Jacques; Monperrus, Martin; Le Traon, Yves (2020). "FixMiner: Mining relevant fix patterns for automated program repair". Empirical Software Engineering (अंग्रेज़ी में). arXiv:1810.01791. डीओआइ:10.1007/s10664-019-09780-z.
  19. Martinez, Matias; Weimer, Westley; Monperrus, Martin (2014). "Do the fix ingredients already exist? An empirical inquiry into the redundancy assumptions of program repair approaches". Proceedings of the 36th International Conference on Software Engineering. पपृ॰ 492–495. arXiv:1403.6322. आई॰ऍस॰बी॰ऍन॰ 9781450327688. डीओआइ:10.1145/2591062.2591114.
  20. Barr, Earl T.; Brun, Yuriy; Devanbu, Premkumar; Harman, Mark; Sarro, Federica (2014). "The plastic surgery hypothesis". Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering - FSE 2014. पपृ॰ 306–317. CiteSeerX 10.1.1.646.9678. आई॰ऍस॰बी॰ऍन॰ 9781450330565. डीओआइ:10.1145/2635868.2635898.
  21. White, Martin; Tufano, Michele; Martinez, Matias; Monperrus, Martin; Poshyvanyk, Denys (2019). "Sorting and Transforming Program Repair Ingredients via Deep Learning Code Similarities". 2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER). पपृ॰ 479–490. arXiv:1707.04742. आई॰ऍस॰बी॰ऍन॰ 978-1-7281-0591-8. डीओआइ:10.1109/SANER.2019.8668043.
  22. सन्दर्भ त्रुटि: <ref> का गलत प्रयोग; capgen नाम के संदर्भ में जानकारी नहीं है।
  23. Nguyen, Hoang Duong Thien; Qi, Dawei; Roychoudhury, Abhik; Chandra, Satish (2013). "SemFix: Program Repair via Semantic Analysis". Proceedings of the 2013 International Conference on Software Engineering. ICSE '13'. San Francisco, California: IEEE Press. पपृ॰ 772–781. आई॰ऍस॰बी॰ऍन॰ 978-1-4673-3076-3.
  24. Mechtaev, Sergey; Yi, Jooyong; Roychoudhury, Abhik (2016). "Angelix: scalable multiline program patch synthesis via symbolic analysis". Proceedings of the 38th International Conference on Software Engineering, ICSE 2016, Austin, Texas, May 14-22, 2016. पपृ॰ 691–701.
  25. सन्दर्भ त्रुटि: <ref> का गलत प्रयोग; nopol नाम के संदर्भ में जानकारी नहीं है।
  26. Jha, Susmit; Gulwani, Sumit; Seshia, Sanjit A.; Tiwari, Ashish (2010-05-01). Oracle-guided component-based program synthesis. ACM. पपृ॰ 215–224. आई॰ऍस॰बी॰ऍन॰ 9781605587196. डीओआइ:10.1145/1806799.1806833.
  27. Durieux, Thomas; Monperrus, Martin (2016-05-14). "DynaMoth". DynaMoth: dynamic code synthesis for automatic program repair (PDF). पपृ॰ 85–91. आई॰ऍस॰बी॰ऍन॰ 9781450341516. डीओआइ:10.1145/2896921.2896931.
  28. Galenson, Joel; Reames, Philip; Bodik, Rastislav; Hartmann, Björn; Sen, Koushik (2014-05-31). CodeHint: dynamic and interactive synthesis of code snippets. ACM. पपृ॰ 653–663. आई॰ऍस॰बी॰ऍन॰ 9781450327565. डीओआइ:10.1145/2568225.2568250.
  29. Le, Xuan-Bach D.; Chu, Duc-Hiep; Lo, David; Le Goues, Claire; Visser, Willem (2017-08-21). Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering - ESEC/FSE 2017. ACM. पपृ॰ 593–604. आई॰ऍस॰बी॰ऍन॰ 9781450351058. डीओआइ:10.1145/3106237.3106309.
  30. Alur, Rajeev; Bodik, Rastislav; Juniwal, Garvit; Martin, Milo M. K.; Raghothaman, Mukund; Seshia, Sanjit A.; Singh, Rishabh; Solar-Lezama, Armando; Torlak, Emina; Udupa, Abhishek (2013). "Syntax-guided synthesis". 2013 Formal Methods in Computer-Aided Design. पपृ॰ 1–8. CiteSeerX 10.1.1.377.2829. आई॰ऍस॰बी॰ऍन॰ 9780983567837. डीओआइ:10.1109/fmcad.2013.6679385.
  31. Ke, Yalin; Stolee, Kathryn; Le Goues, Claire; Brun, Yuriy (2015). "Repairing Programs with Semantic Code Search". Proceedings of the 2015 30th IEEE/ACM International Conference on Automated Software Engineering. ASE 2015. Lincoln, Nebraska: ACM. पपृ॰ 295–306. आई॰ऍस॰बी॰ऍन॰ 978-1-5090-0025-8. डीओआइ:10.1109/ASE.2015.60.
  32. सन्दर्भ त्रुटि: <ref> का गलत प्रयोग; QAFix नाम के संदर्भ में जानकारी नहीं है।
  33. Chen, Zimin; Kommrusch, Steve James; Tufano, Michele; Pouchet, Louis-Noel; Poshyvanyk, Denys; Monperrus, Martin (2019). "SEQUENCER: Sequence-to-Sequence Learning for End-to-End Program Repair". IEEE Transactions on Software Engineering: 1. arXiv:1901.01808. आइ॰एस॰एस॰एन॰ 0098-5589. डीओआइ:10.1109/TSE.2019.2940179.