प्रोग्रामिंग टूल

एक प्रोग्रामिंग टूल या सॉफ़्टवेयर डेवलपमेंट टूल एक कंप्यूटर प्रोग्राम है जिसका उपयोग सॉफ्टवेयर डेवलपर अन्य प्रोग्राम और एप्लिकेशन बनाने, डीबग करने, बनाए रखने या अन्यथा समर्थन करने के लिए करते हैं। यह शब्द आमतौर पर अपेक्षाकृत सरल कार्यक्रमों को संदर्भित करता है, जिसे किसी कार्य को पूरा करने के लिए जोड़ा जा सकता है, जैसे कोई भौतिक वस्तु को ठीक करने के लिए कई हाथों का उपयोग कर सकता है। सबसे बुनियादी उपकरण एक स्रोत कोड संपादक और एक संकलक या दुभाषिया (कंप्यूटिंग) हैं, जिनका उपयोग सर्वव्यापी और निरंतर किया जाता है। भाषा, विकास पद्धति और व्यक्तिगत इंजीनियर के आधार पर अन्य उपकरणों का अधिक या कम उपयोग किया जाता है, जो अक्सर एक असतत कार्य के लिए उपयोग किया जाता है, जैसे डिबगर या प्रोफाइलर। उपकरण असतत कार्यक्रम हो सकते हैं, अलग से निष्पादित - अक्सर कमांड लाइन से - या एक बड़े कार्यक्रम के भाग हो सकते हैं, जिसे एक एकीकृत विकास वातावरण (आईडीई) कहा जाता है। कई मामलों में, विशेष रूप से सरल उपयोग के लिए, उपकरण के बजाय सरल तदर्थ तकनीकों का उपयोग किया जाता है, जैसे डिबगर का उपयोग करने के बजाय प्रिंट डिबगिंग, प्रोफाइलर के बजाय मैन्युअल समय (समग्र प्रोग्राम या कोड के अनुभाग का) या बग को ट्रैक करना बग ट्रैकिंग सिस्टम के बजाय एक टेक्स्ट फ़ाइल या स्प्रेडशीट।

टूल और एप्लिकेशन के बीच का अंतर अस्पष्ट है। उदाहरण के लिए, डेवलपर्स हर समय उपकरण के रूप में सरल डेटाबेस (जैसे एक फ्लैट फ़ाइल डेटाबेस) का उपयोग करते हैं। हालांकि एक पूर्ण विकसित डेटाबेस को आमतौर पर अपने आप में एक एप्लिकेशन या सॉफ़्टवेयर के रूप में माना जाता है। कई वर्षों तक, कंप्यूटर-सहायता प्राप्त सॉफ़्टवेयर इंजीनियरिंग (CASE) उपकरणों की मांग की गई थी। सफल उपकरण मायावी साबित हुए हैं। एक मायने में, CASE टूल ने डिजाइन और आर्किटेक्चर सपोर्ट पर जोर दिया, जैसे कि UML के लिए। लेकिन इनमें से सबसे सफल उपकरण आईडीई हैं।

मानव से कंप्यूटर भाषा में अनुवाद
आधुनिक कंप्यूटर बहुत जटिल हैं और उन्हें उत्पादक रूप से प्रोग्राम करने के लिए विभिन्न अमूर्तताओं की आवश्यकता होती है। उदाहरण के लिए, प्रोग्राम के बाइनरी प्रतिनिधित्व को लिखने के बजाय एक प्रोग्रामर सी, जावा या पायथन जैसी प्रोग्रामिंग भाषा में प्रोग्राम लिखेगा। असेंबली लैंग्वेज # असेम्बलर्स, कंपाइलर्स और लिंकर (कंप्यूटिंग) जैसे प्रोग्रामिंग टूल एक प्रोग्राम को मानव द्वारा लिखने योग्य और पठनीय स्रोत भाषा से बिट्स और बाइट्स में अनुवादित करते हैं जिन्हें कंप्यूटर द्वारा निष्पादित किया जा सकता है। दुभाषिए वांछित व्यवहार उत्पन्न करने के लिए कार्यक्रम की तत्काल व्याख्या करते हैं।

ये प्रोग्राम कई अच्छी तरह से परिभाषित और दोहराए जाने वाले कार्य करते हैं जो मानव द्वारा किए जाने पर समय लेने वाली और त्रुटि-प्रवण होंगे, जैसे किसी प्रोग्राम के कुछ हिस्सों को स्मृति में रखना और एक लिंकर के रूप में प्रोग्राम के कुछ हिस्सों के बीच संदर्भों को ठीक करना। दूसरी ओर ऑप्टिमाइज़िंग कंपाइलर निष्पादन की गति या किसी प्रोग्राम की अन्य विशेषताओं को बेहतर बनाने के लिए स्रोत कोड पर जटिल परिवर्तन कर सकते हैं। यह एक प्रोग्रामर को उच्च स्तर पर अधिक ध्यान केंद्रित करने की अनुमति देता है, जिस मशीन पर वह चल रहा है, उसके विवरण के बारे में चिंता किए बिना एक कार्यक्रम के वैचारिक पहलू।

मनुष्यों के लिए कार्यक्रम की जानकारी उपलब्ध कराना
सॉफ्टवेयर की उच्च जटिलता के कारण, सबसे अनुभवी सॉफ्टवेयर डेवलपर के लिए भी अधिकांश कार्यक्रमों को एक नज़र में समझना संभव नहीं है। उच्च-स्तरीय प्रोग्रामिंग भाषाओं द्वारा प्रदान किए गए सार भी प्रोग्रामर द्वारा लिखे गए स्रोत कोड और वास्तविक कार्यक्रम के व्यवहार के बीच संबंध को समझना कठिन बनाते हैं। प्रोग्राम में सॉफ्टवेयर बग खोजने के लिए और प्रोग्राम को विस्तारित करते समय नई बग बनाने से रोकने के लिए, सॉफ़्टवेयर डेवलपर प्रोग्राम के बारे में सभी प्रकार की जानकारी देखने के लिए कुछ प्रोग्रामिंग टूल का उपयोग करता है।

उदाहरण के लिए, एक डीबगर एक प्रोग्रामर को प्रोग्राम करने के लिए उपयोग की जाने वाली स्रोत भाषा के संदर्भ में चल रहे प्रोग्राम के बारे में जानकारी निकालने की अनुमति देता है। डिबगर कंपाइलर द्वारा संग्रहीत जानकारी का उपयोग करके कंक्रीट मशीन की स्थिति से स्रोत प्रोग्राम में एक चर के मान की गणना कर सकता है। मेमोरी डिबगर्स सीधे चल रहे प्रोग्रामों की संदिग्ध या एकमुश्त गलत मेमोरी एक्सेस को इंगित कर सकते हैं जो अन्यथा अनिर्धारित रह सकते हैं और प्रोग्राम विफलताओं का एक सामान्य स्रोत हैं।

उपकरणों की सूची
सॉफ्टवेयर उपकरण कई रूपों में आते हैं:
 * बाइनरी-कोड संगतता विश्लेषण उपकरण
 * बग डेटाबेस: इश्यू ट्रैकिंग सिस्टम की तुलना - बग ट्रैकिंग सिस्टम सहित
 * बिल्ड टूल्स: स्वचालन बनाएँ, बिल्ड ऑटोमेशन सॉफ्टवेयर की सूची
 * कॉल ग्राफ
 * कोड कवरेज़ : कोड कवरेज#सॉफ़्टवेयर कोड कवरेज टूल।
 * कोड समीक्षा: कोड समीक्षा के लिए उपकरणों की सूची
 * कोड साझा करने वाली साइटें: ताजा मांस, क्रुगल,  sourceforge , गिटहब। यह भी देखें :श्रेणी:कोड खोज इंजन।
 * संकलक और लिंकर (कंप्यूटिंग) उपकरण: GNU टूलचेन, GNU संकलक संग्रह, Microsoft Visual Studio, CodeWarrior, Xcode, Intel C संकलक
 * डिबगर्स: डीबगर # डिबगर्स की सूची। डिबगिंग भी देखें।
 * disassembler: आम तौर पर रिवर्स इंजीनियरिंग  टूल।
 * दस्तावेज़ जनरेटर: डॉक्यूमेंटेशन जेनरेटर की तुलना, help2man, सादा पुराना दस्तावेज़ीकरण, asciidoc
 * औपचारिक तरीके: विशिष्टता, विकास और सत्यापन के लिए गणितीय तकनीकें
 * ग्राफिकल यूजर इंटरफेस बिल्डर
 * पुस्तकालय इंटरफ़ेस जनरेटर: SWIG
 * एकता उपकरण
 * मेमोरी डीबगर अक्सर प्रोग्रामिंग भाषाओं (जैसे सी (प्रोग्रामिंग भाषा)  और सी ++) में उपयोग किए जाते हैं जो मैन्युअल मेमोरी प्रबंधन की अनुमति देते हैं और इस प्रकार  स्मृति रिसाव  और अन्य समस्याओं की संभावना होती है। वे स्मृति उपयोग की दक्षता को अनुकूलित करने के लिए भी उपयोगी होते हैं। उदाहरण: dmalloc,  विद्युत बाड़, Insure++, Valgrind
 * पदच्छेद : पार्सिंग#पार्सर विकास सॉफ्टवेयर
 * रूपरेखा (कंप्यूटर प्रोग्रामिंग) या प्रोफाइलिंग: प्रदर्शन विश्लेषण उपकरणों की सूची
 * संशोधन नियंत्रण: संशोधन नियंत्रण सॉफ्टवेयर की सूची, संशोधन नियंत्रण सॉफ्टवेयर की तुलना
 * स्क्रिप्टिंग भाषाएँ: PHP, AWK (प्रोग्रामिंग भाषा), पर्ल, पायथन (प्रोग्रामिंग भाषा), REXX, रूबी (प्रोग्रामिंग भाषा), ऑपरेटिंग सिस्टम खोल, Tcl
 * खोज: पकड़, ढूँढें (यूनिक्स)
 * सोर्स कोड क्लोन/डुप्लिकेशंस फाइंडिंग: डुप्लीकेट कोड#टूल्स
 * स्रोत कोड संपादक
 * पाठ संपादक: पाठ संपादकों की सूची, पाठ संपादकों की तुलना
 * प्रोग्रामिंग शैली: इंडेंट (यूनिक्स), प्रिटीप्रिंट | प्रिटी-प्रिंटर, सौंदर्यीकरण, मिनिमिफिकेशन (प्रोग्रामिंग)
 * स्रोत कोड पीढ़ी टूल: स्वचालित प्रोग्रामिंग#कार्यान्वयन
 * स्थैतिक कोड विश्लेषण: लिंट (सॉफ्टवेयर), स्थैतिक कोड विश्लेषण के लिए उपकरणों की सूची
 * यूनिट टेस्टिंग: यूनिट टेस्टिंग फ्रेमवर्क की सूची

आईडीई
एकीकृत विकास वातावरण कई उपकरणों की सुविधाओं को एक पैकेज में जोड़ता है। उदाहरण के लिए, वे विशिष्ट कार्यों को करना आसान बनाते हैं, जैसे किसी विशेष प्रोजेक्ट में केवल फाइलों में सामग्री खोजना। उदाहरण के लिए आईडीई का उपयोग उद्यम स्तर के अनुप्रयोगों के विकास के लिए किया जा सकता है।

विशिष्ट प्रोग्रामिंग भाषाओं के लिए आईडीई के विभिन्न पहलुओं को एकीकृत विकास परिवेशों की इस तुलना में पाया जा सकता है।

यह भी देखें

 * कंप्यूटर एडेड सॉफ्टवेयर इंजीनियरिंग उपकरण
 * कंप्यूटर विज्ञान
 * विन्यास प्रणाली
 * भाषा का अंकन
 * सॉफ़्टवेयर विकास किट
 * सॉफ्टवेयर इंजीनियरिंग और सॉफ्टवेयर इंजीनियरिंग विषयों की सूची
 * सॉफ्टवेयर सिस्टम
 * यूजर इनोवेशन के लिए टूलकिट
 * डेवलपर अनुभव

संदर्भ

 * Software Development Tools for Petascale Computing Workshop 2007