Кіріспе
Қолда бар бағдарламалық жасақтаманы жаңа бағдарлама жасау үшін пайдалану. Бағдарламалық жасақтаманы әзірлеуде (және жалпы компьютерлік бағдарламалауда) кодты қайта пайдалану, сондай-ақ бағдарламалық жасақтаманы қайта қолдану деп те аталады, – бұл қолда бар бағдарламалық жасақтаманы немесе бағдарламалық жасақтама туралы білімді қайта пайдалану принциптерін сақтап, жаңа бағдарлама жасау үшін пайдалану. Кодты қайта пайдалану таңдалған бағдарламалау тілінің күрделілігіне және ауқымына байланысты әртүрлі жолдармен іске асырылуы мүмкін. Ол төменгі деңгейдегі тәсілдерден, мысалы, кодты көшіру және жабыстыру (мәселен, код үзінділері арқылы), қарапайым функциялардан (процедуралар немесе кіші бағдарламалардан) бастап, жоғары деңгейдегі модульдерге (мысалы, кітапханаларға) немесе арнайы атау кеңістіктеріне, пакеттерге, фреймворктерге немесе бағдарламалық құралдар жиынтығына дейін жетеді. Кодты қайта пайдалану тәуелділіктерді тудырады, бұл кодты қолдауды қиындатуы мүмкін. Кем дегенде бір зерттеуде кодты қайта пайдалану техникалық қарызды азайтатыны көрсетілген.
In software development (and computer programming in general), code reuse, also called software reuse, is the use of existing software, or software knowledge, to build new software, following the reusability principles. Code reuse may be achieved by different ways depending on a complexity of a programming language chosen and range from a lower level approaches like code copy pasting (e. g. via snippets), simple functions (procedures or subroutines) or a bunch of objects or functions organized into modules (e. g. libraries) or custom namespaces, and packages, frameworks or software suites in higher levels. Code reuse implies dependencies which can make code maintainability harder. At least one study found that code reuse reduces technical debt.
Шолу
Кодты қайта пайдалану бағдарламалаудың алғашқы күндерінен бері қолданылып келеді. Бағдарламашылар әрқашан кодтың, үлгілердің, функциялардың және процедуралардың бөліктерін қайта қолданған. Дегенмен, бағдарламалық жасақтаманы қайта пайдалануды жеке зерттеу саласы ретінде 1968 жылы ғана мойындады, осы кезде Белл зертханаларының Дуглас Макилрой бағдарламалық жасақтама индустриясын қайта пайдаланатын компоненттерге негіздеуді ұсынды. Кодты қайта пайдалану бағдарламалық өнімді әзірлеу процесінде жасалған активтерді пайдалану арқылы уақытты және ресурстарды үнемдеуге, сондай-ақ артық көшірмелерді азайтуға бағытталған. Қайта пайдаланудың негізгі идеясы – бір уақытта жазылған компьютерлік бағдарламаның бөліктерін кейінірек жазылған басқа бағдарламаларды құру үшін пайдалануға болады немесе олай болуы керек. Кодты қайта пайдалану қайта пайдаланатын активтердің жеке сақталатын нұсқасын жасауды білдіруі мүмкін. Код ең көп таралған қайта пайдаланатын ресурс болғанымен, даму циклында жасалған басқа да активтер: бағдарламалық компоненттер, тест жиынтықтары, жобалар, құжаттама және т.б. қайта пайдалануға мүмкіндік береді. Бағдарламалық кітапхана кодты қайта пайдаланудың жақсы мысалы болып табылады. Бағдарламашылар өз бағдарламаларының белгілі бір бөліктерін қайта пайдалануға мүмкіндік беретін ішкі абстракцияларды жасауға немесе өздері үшін арнайы кітапханаларды құруға шешім қабылдауы мүмкін. Бағдарламалық жасақтаманы қайта пайдалануды жеңілдететін сипаттамаларға модулділік, әлсіз байланыс, жоғары үйлесімділік, ақпаратты жасыру және мәселелерді бөлу жатады. Жаңадан жазылған кодтың қолданыстағы кодтың бөлігін пайдалануы үшін интерфейс немесе байланыс құралы анықталуы керек. Бұған әдетте субпрограмманы, объектіні, класты немесе прототипті шақыру немесе пайдалану кіреді. Ұйымдарда мұндай тәжірибелер домендік инженерия, сондай-ақ бағдарламалық өнімдер желісін жасау арқылы ресмилендіріліп, стандартталады. Қолданыстағы бағдарламаның алдыңғы нұсқасын келесі нұсқаның бастапқы нүктесі ретінде пайдалану да кодты қайта пайдаланудың бір түрі болып табылады. Кейбір "қайта пайдалану" жағдайларында кодтың бір бөлігі немесе толығымен ескі бағдарламадан жаңа бағдарламаға көшіріледі. Ұйымдар осы тәсілмен жаңа өнімді тезірек нарыққа шығара алады, бірақ содан кейін кесіп-қою бағдарламалаудан туындаған кодты көшірудің көптеген проблемаларымен аяқталуы мүмкін. Көптеген зерттеушілер қайта пайдалануды жылдамдатуға, жеңілдетуге, жүйелендіруге және бағдарламалау процесінің ажырамас бөлігіне айналдыруға жұмыс істеді. Объектіге бағытталған бағдарламалауды ойлап табудың негізгі мақсаттары осылар, ол қайта пайдаланудың ең көп таралған формаларының біріне айналды. Кейінірек пайда болған жалпылама бағдарламалау. Тағы бір жаңа тәсіл – бағдарламалық жасақтама "генераторларын" пайдалану, олар пайдаланушылар таңдаған параметрлер жиынтығына сүйене отырып, белгілі бір типтегі жаңа бағдарламаларды құра алады. Мұндай жүйелерді зерттеу салалары генеративтік бағдарламалау және метапрограммалау болып табылады.
Бағдарламалық кітапханалар
Кодты қайта пайдаланудың өте кең таралған мысалы – бағдарламалық кітапхананы пайдалану тәсілі. Көптеген бағдарламаларға ақпаратты белгілі форматтарға түрлендіру, сыртқы жадқа қол жеткізу, сыртқы бағдарламалармен байланыс орнату немесе ақпаратты (сандар, сөздер, аттар, орындар, күндер сияқты) стандартты тәсілдермен өңдеу сияқты көптеген операциялар қажет болады. Жаңа бағдарламалардың авторлары операцияны орындау үшін бағдарламаға жаңа код жазудың орнына, "дөңгелекті қайта ойлап табудың" қажеті болмай, бағдарламалық кітапханадағы кодты пайдалана алады. Кітапханалық реализациялар көбінесе жақсы тексерілген болады және сирек кездесетін немесе күрделі жағдайларды қамтиды. Алайда, кітапхананы алу, оқу және конфигурациялауға кететін уақыт пен шығын, сондай-ақ өнімділікке немесе күтілетін нәтижеге әсер ететін егжей-тегжейлерді өзгерте алмау кемшіліктері бар.
Құрылыс үлгілері
Дизайн үлгісі – қайталанатын мәселенің жалпы шешімі. Дизайн үлгілері материалдық емес, көбінесе тұжырымдамалық болып келеді және нақты қажеттілікке бейімделуге жарайды. Дегенмен, абстрактілі кластар мен интерфейстерді кейбір үлгілерді жүзеге асыру үшін қайта қолдануға болады.
Нысандар
Әдетте, бағдарламашылар үшінші тараптық қолданбалар мен фреймворктер арқылы бағдарламалық жасақтаманың үлкен бөліктерін қайта қолданады. Бірақ, фреймворктер көбінесе белгілі бір салаға арналған және тек ұқсас қолданбалар тобына ғана қолданылады.
Жоғары деңгейдегі функция
Функционалдық бағдарламалауда жоғары ретті функциялар бұрын дизайн үлгілері немесе фреймворктер қолданылған көптеген жағдайларда қолданылуы мүмкін.
Қайта есептеу
Ретрокомпьютерлік – бұл кодты қайта пайдалануды қамтиды, себебі ретро бағдарламалар ескі компьютерлерде немесе олардың эмуляторларында іске қосылады.
Компьютерлік қауіпсіздік
Компьютерлік қауіпсіздікте кодты қайта пайдалану бағдарламалық құралды бұзу әдісі ретінде қолданылады. Егер шабуылшы бағдарламаның басқару ағынын өзгерту үшін кодты тікелей енгізе алмаса, мысалы, W^X сияқты код енгізуден қорғау шаралары болған жағдайда, ол басқару ағынын жадта бар код тізбектеріне қайта бағыттауы мүмкін. Кодты қайта пайдалану шабуылдарының мысалдары: libc-ге қайта оралу шабуылы, қайта бағытталған бағдарламалау және секіруге бағытталған бағдарламалау.
Құралымдары
Объектіге бағытталған контекстте компонент – бірлесіп жұмыс істейтін сыныптар жиынтығын (немесе жалғыз сыныпты) және оның интерфейстерін көрсетеді. Интерфейстер компоненттерді алмастыруға жауапты. Қайта пайдаланылатын компоненттерді компоненттік бастапқы кодты басқару технологияларын (CSCM) қолдана отырып, SCM репозиторийлері арасында бөліп алып, синхрондауға болады.
Сыртқы компьютерлер
"Кодты қайта пайдалану" тұжырымдамасы бағдарламалық жасақтамадан басқа да инженерлік салаларда қолданылуы мүмкін. Мысалы, компьютерлік дизайндағы параметрлік модельдеу, қайта қолданылатын эскиздер жасауға мүмкіндік береді. Стандарттау өзара үйлесімді бөліктердің жасалуына әкеледі, оларды көптеген жағдайларда қайта пайдалануға болады.
Сын
Кодты қайта пайдалану, қайта пайдаланылатын компонентке тәуелділікті тудырады. Роб Пайк: "Аз көшіру, аз тәуелділіктен жақсы" деген пікір білдірді. Google компаниясына келгенде, компания кодты қайта пайдалануға ерекше мән берді. Оның ойынша, Google-дың код базасы әлі де компиляция жылдамдығы және қолдау-күтім тұрғысынан бұрынғы саясаттың салдарынан қиындықтарды бастан өткеруде. Қайта пайдаланылатын кодты жазу мен жобалау көбінесе көп күш-жігерді қажет етеді. Фред Брукс өзінің "Қирағы шұңқыр" және "Күміс оқ жоқ" атты мақалаларында осы күш-жігерге байланысты елеулі жоғары шығындарды талқылайды. Қателік – бұл күш-жігер көбінесе сол шығындарды қайтару механизмдерін толық түсінбестен жұмсалады. Мұндай негіздеме көбінесе физикалық өндіріс процесіндегі қайта пайдаланылатын бөліктерге дұрыс емес салмақтаудан туындайды. Бұл дұрыс емес, себебі код жазу – бірнеше бірлікті өндіруге қарағанда, бір өнімді жобалауға ұқсас.