{"id":6124,"date":"2024-08-18T21:31:16","date_gmt":"2024-08-19T00:31:16","guid":{"rendered":"https:\/\/netproject.com.br\/blog\/?p=6124"},"modified":"2024-08-18T22:09:35","modified_gmt":"2024-08-19T01:09:35","slug":"uso-de-llms-na-engenharia-de-software","status":"publish","type":"post","link":"https:\/\/blog.netproject.com.br\/blog\/uso-de-llms-na-engenharia-de-software\/","title":{"rendered":"Uso de LLMs na Engenharia de Software"},"content":{"rendered":"<p class=\"estimated-read-time\">Tempo de leitura:<small> 15 minutos<\/small><\/p> \n<h2 class=\"wp-block-heading\">Large Language Models<\/h2>\n\n\n\n<p>Um Modelo de Linguagem de Grande Escala (LLM) \u00e9 um<strong> tipo de modelo de Intelig\u00eancia Artificial <\/strong>especializado em processamento de linguagem natural (NLP). Esses modelos s\u00e3o treinados com vastas quantidades de dados textuais, permitindo que eles aprendam padr\u00f5es e estruturas complexas da linguagem humana. A caracter\u00edstica principal dos LLMs \u00e9 a <strong>capacidade de gerar textos que s\u00e3o coerentes e contextualmente apropriados, <\/strong>imitando a maneira como os humanos escrevem e se comunicam.<\/p>\n\n\n\n<p>Os LLMs utilizam t\u00e9cnicas avan\u00e7adas de<strong> aprendizado profundo<\/strong>, como as redes<strong> neurais transformers<\/strong>, que s\u00e3o projetadas para lidar com a complexidade da linguagem natural. Esses modelos s\u00e3o altamente vers\u00e1teis e podem ser aplicados em uma variedade de tarefas de linguagem, como gera\u00e7\u00e3o de texto, resposta a perguntas, tradu\u00e7\u00e3o autom\u00e1tica, sumariza\u00e7\u00e3o de textos e an\u00e1lise de sentimentos.<\/p>\n\n\n\n<p> Essas capacidades tornam os LLMs ferramentas poderosas em diversas aplica\u00e7\u00f5es de processamento de linguagem natural!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Evolu\u00e7\u00e3o Temporal dos Modelos de Linguagem de Grande Escala (LLMs)<\/h2>\n\n\n\n<p>A evolu\u00e7\u00e3o dos Modelos de Linguagem de Grande Escala (LLMs) pode ser tra\u00e7ada desde os primeiros desenvolvimentos nas arquiteturas de redes neurais, passando por avan\u00e7os cruciais que levaram \u00e0 cria\u00e7\u00e3o dos modelos modernos usados hoje em dia.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. <strong>Introdu\u00e7\u00e3o das Redes Neurais Recorrentes (RNNs)<\/strong><\/h4>\n\n\n\n<p>Em 1986, Rumelhart et al. introduziram o conceito de Redes Neurais Recorrentes (RNNs), que abriu a possibilidade de processar dados sequenciais. Isso foi um marco importante, pois as RNNs permitiram que os modelos levassem em considera\u00e7\u00e3o a ordem dos dados, uma caracter\u00edstica essencial para o processamento de linguagem natural (NLP). As RNNs possibilitaram a gera\u00e7\u00e3o de sequ\u00eancias de texto e a modelagem de contextos lingu\u00edsticos que dependiam de informa\u00e7\u00f5es precedentes.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. <strong>A Evolu\u00e7\u00e3o com Long Short-Term Memory (LSTM)<\/strong><\/h4>\n\n\n\n<p>Na d\u00e9cada de 1990, Hochreiter e Schmidhuber propuseram a arquitetura Long Short-Term Memory (LSTM), uma extens\u00e3o das RNNs. As LSTMs abordaram algumas das limita\u00e7\u00f5es das RNNs, como o problema de &#8220;vanishing gradient&#8221;, que dificultava o treinamento em longas sequ\u00eancias de dados. As LSTMs conseguiram melhorar significativamente o desempenho em muitas aplica\u00e7\u00f5es de NLP, sendo amplamente adotadas em tarefas como tradu\u00e7\u00e3o autom\u00e1tica, reconhecimento de fala e gera\u00e7\u00e3o de texto.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. <strong>Revolu\u00e7\u00e3o com a Arquitetura Transformer (2017)<\/strong><\/h4>\n\n\n\n<p>Em 2017, Vaswani et al. introduziram a arquitetura Transformer, que marcou uma revolu\u00e7\u00e3o no campo de NLP. Diferente das RNNs e LSTMs, os Transformers utilizam um mecanismo de autoaten\u00e7\u00e3o (self-attention) que permite capturar relacionamentos entre palavras em uma sequ\u00eancia sem depender da ordem sequencial dos dados. Essa arquitetura facilitou o treinamento em paralelo de modelos maiores e mais complexos, resultando em um impacto profundo na modelagem de linguagem e desencadeando uma explos\u00e3o de atividades na pesquisa e desenvolvimento de LLMs.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. <strong>O Surgimento dos Modelos GPT e a Populariza\u00e7\u00e3o dos LLMs<\/strong><\/h4>\n\n\n\n<p>Em 2018, a OpenAI lan\u00e7ou o modelo Generative Pre-trained Transformer (GPT), que se destacou por sua capacidade de gerar texto de maneira coerente e relevante ap\u00f3s ser pr\u00e9-treinado em grandes corpora de dados textuais. O GPT foi seguido por itera\u00e7\u00f5es subsequentes, como GPT-2, GPT-3, GPT-3.5 e, mais recentemente, GPT-4. Com o GPT-3 e GPT-3.5, observou-se uma mudan\u00e7a significativa no desempenho gerativo, o que atraiu um grande interesse tanto no GPT (e seu derivado ChatGPT) quanto nos LLMs em geral.<\/p>\n\n\n\n<p>Esses modelos alcan\u00e7aram um desempenho not\u00e1vel em parte devido \u00e0 enorme quantidade de dados nos quais foram treinados. Por exemplo, o GPT-3 foi treinado em 45 terabytes de dados textuais e possui 175 bilh\u00f5es de par\u00e2metros, permitindo uma capacidade impressionante de gerar e compreender linguagem.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5. <strong>Expans\u00e3o e Open Source com LLaMA (2023)<\/strong><\/h4>\n\n\n\n<p>Em fevereiro de 2023, a Meta lan\u00e7ou o LLaMA, um modelo de c\u00f3digo aberto que foi treinado em 1,4 trilh\u00f5es de tokens, com tamanhos de modelo variando de 7 bilh\u00f5es a 65 bilh\u00f5es de par\u00e2metros. O LLaMA representa um esfor\u00e7o para democratizar o acesso a LLMs de alto desempenho, permitindo que pesquisadores e desenvolvedores em todo o mundo explorem e desenvolvam novas aplica\u00e7\u00f5es baseadas em modelos de linguagem de grande escala.<\/p>\n\n\n\n<p>A evolu\u00e7\u00e3o dos LLMs reflete um progresso cont\u00ednuo na modelagem de linguagem, desde as primeiras arquiteturas de redes neurais at\u00e9 os avan\u00e7ados modelos de hoje, como GPT-4 e LLaMA. Cada avan\u00e7o contribuiu para a constru\u00e7\u00e3o de modelos mais poderosos e capazes, expandindo as fronteiras do que \u00e9 poss\u00edvel em processamento de linguagem natural e transformando diversas \u00e1reas da tecnologia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LLMs em Engenharia de Software<\/h2>\n\n\n\n<p>Nos \u00faltimos anos, os <strong>Modelos de Linguagem de Grande Escala (Large Language Models &#8211; LLMs) <\/strong>t\u00eam se destacado como uma tecnologia emergente com potencial significativo para transformar diversas \u00e1reas do conhecimento, incluindo a Engenharia de Software (Software Engineering &#8211; SE). <\/p>\n\n\n\n<p>Este artigo apresenta o trabalho realizado pelos pequisadores da Meta Platforms (Facebook e Instagram), trazendo um um panorama abrangente dessa nova \u00e1rea, <strong>explorando as aplica\u00e7\u00f5es dos LLMs em atividades essenciais da Engenharia de Software<\/strong>, como codifica\u00e7\u00e3o, design, levantamento de requisitos, reparo, refatora\u00e7\u00e3o, melhoria de desempenho, documenta\u00e7\u00e3o e an\u00e1lise de dados.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Os LLMs, com suas propriedades emergentes, trazem uma nova dimens\u00e3o de novidade e criatividade para o campo da Engenharia de Software. <\/strong><\/p>\n\n\n\n<p>No entanto, essas mesmas propriedades tamb\u00e9m introduzem desafios t\u00e9cnicos consider\u00e1veis, como a necessidade de identificar e eliminar solu\u00e7\u00f5es incorretas, comumente conhecidas como <strong>&#8220;alucina\u00e7\u00f5es&#8221;.<\/strong><\/p>\n\n\n\n<p>A pesquisa apresentada neste artigo destaca o papel crucial que as t\u00e9cnicas h\u00edbridas \u2014 <strong>combinando abordagens tradicionais da Engenharia de Software com LLMs \u2014<\/strong> desempenham no desenvolvimento e na implementa\u00e7\u00e3o de solu\u00e7\u00f5es baseadas em LLMs que sejam confi\u00e1veis, eficientes e eficazes. Al\u00e9m de fornecer uma vis\u00e3o geral das aplica\u00e7\u00f5es atuais, este artigo tamb\u00e9m discute os desafios de pesquisa ainda em aberto, buscando fornecer dire\u00e7\u00f5es futuras para o avan\u00e7o do uso de LLMs na Engenharia de Software.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">As &#8220;alucina\u00e7\u00f5es&#8221; <\/h2>\n\n\n\n<p>As &#8220;alucina\u00e7\u00f5es&#8221; de um Modelo de Linguagem de Grande Escala (LLM) referem-se a situa\u00e7\u00f5es em que o modelo gera respostas que s\u00e3o factualmente incorretas, irrelevantes ou inventadas, apesar de parecerem plaus\u00edveis ou coerentes no contexto da linguagem. <\/p>\n\n\n\n<p>Essas alucina\u00e7\u00f5es ocorrem porque os <strong>LLMs, ao serem treinados em grandes volumes de dados textuais, aprendem padr\u00f5es e correla\u00e7\u00f5es na linguagem, mas n\u00e3o t\u00eam uma compreens\u00e3o profunda do mundo real ou acesso a informa\u00e7\u00f5es atualizadas durante o processo de infer\u00eancia.<\/strong><\/p>\n\n\n\n<p>Essas alucina\u00e7\u00f5es podem manifestar-se de v\u00e1rias formas, como:<\/p>\n\n\n\n<ol>\n<li><strong>Fatos Inventados<\/strong>: O modelo pode gerar informa\u00e7\u00f5es que parecem factuais, mas que s\u00e3o completamente inventadas ou imprecisas.<\/li>\n\n\n\n<li><strong>Contexto Irrelevante<\/strong>: O LLM pode produzir respostas que, embora linguisticamente corretas, n\u00e3o se aplicam ao contexto da pergunta ou solicita\u00e7\u00e3o feita.<\/li>\n\n\n\n<li><strong>Inven\u00e7\u00e3o de Detalhes<\/strong>: Em algumas situa\u00e7\u00f5es, o modelo pode preencher lacunas de informa\u00e7\u00e3o com detalhes fict\u00edcios, especialmente quando os dados de treinamento n\u00e3o cobrem suficientemente o t\u00f3pico em quest\u00e3o.<\/li>\n<\/ol>\n\n\n\n<p>Essas alucina\u00e7\u00f5es representam um desafio significativo para a utiliza\u00e7\u00e3o confi\u00e1vel de LLMs em aplica\u00e7\u00f5es cr\u00edticas, onde a precis\u00e3o e a veracidade das informa\u00e7\u00f5es s\u00e3o essenciais.<\/p>\n\n\n\n<p> Por isso, h\u00e1 um interesse crescente em desenvolver t\u00e9cnicas que possam mitigar ou detectar essas alucina\u00e7\u00f5es, garantindo que as respostas geradas pelos modelos sejam mais precisas e confi\u00e1veis.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O N\u00e3o Determinismo dos Modelos de Linguagem de Grande Escala (LLMs) <\/h2>\n\n\n\n<p>Os Modelos de Linguagem de Grande Escala (LLMs) s\u00e3o intrinsecamente n\u00e3o determin\u00edsticos, o que significa que <strong>a mesma solicita\u00e7\u00e3o (prompt) pode produzir respostas diferentes em execu\u00e7\u00f5es distintas de infer\u00eancia.<\/strong> Isso ocorre a menos que a t<strong>emperatura seja configurada para zero<\/strong>, uma configura\u00e7\u00e3o que, embora possa reduzir a varia\u00e7\u00e3o nas respostas, geralmente \u00e9 considerada sub\u00f3tima em m\u00faltiplas execu\u00e7\u00f5es.<\/p>\n\n\n\n<p>Al\u00e9m disso, independentemente da configura\u00e7\u00e3o da temperatura, <strong>pequenas mudan\u00e7as no prompt podem resultar em sa\u00eddas significativamente diferentes. <\/strong>Esse comportamento n\u00e3o determin\u00edstico dos LLMs motiva a pr\u00e1tica de &#8220;engenharia de prompts&#8221; (prompt engineering) e o processamento dos resultados obtidos, mas tamb\u00e9m levanta desafios importantes para a avalia\u00e7\u00e3o cient\u00edfica da Engenharia de Software baseada em LLMs.<\/p>\n\n\n\n<p><strong>A principal quest\u00e3o que surge \u00e9: <\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center\">&#8220;Se os resultados podem variar a cada vez que o processo \u00e9 executado, como podemos determinar se uma t\u00e9cnica proposta realmente representa um avan\u00e7o em rela\u00e7\u00e3o ao estado da arte?&#8221;<\/p>\n\n\n\n<p>Essa indetermina\u00e7\u00e3o dificulta a compara\u00e7\u00e3o objetiva e a valida\u00e7\u00e3o dos m\u00e9todos desenvolvidos, uma vez que os resultados n\u00e3o s\u00e3o consistentemente replic\u00e1veis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>T\u00e9cnicas h\u00edbridas &#8211; Combinando abordagens tradicionais da Engenharia de Software com LLMs <\/strong><\/h2>\n\n\n\n<p>Vamos a alguns exemplos de t\u00e9cnicas h\u00edbridas apresentados no artigo:<\/p>\n\n\n\n<ul>\n<li><strong>Combinando LLMs com planejamento e pesquisa<\/strong>: Alguns pesquisadores desenvolveram modelos h\u00edbridos que integram LLMs com t\u00e9cnicas de planejamento e pesquisa, resultando em melhorias significativas em rela\u00e7\u00e3o aos modelos b\u00e1sicos. Por exemplo, Zhang et al. relataram aprimoramentos na gera\u00e7\u00e3o de c\u00f3digo ao combinar LLMs com t\u00e9cnicas de busca de API.<\/li>\n\n\n\n<li><strong>Sele\u00e7\u00e3o de candidatos a partir dos resultados do LLM<\/strong>: As abordagens h\u00edbridas utilizam t\u00e9cnicas existentes de engenharia de software ou IA para selecionar o melhor candidato entre os principais resultados de um LLM. T\u00e9cnicas como gera\u00e7\u00e3o de testes e classifica\u00e7\u00e3o baseada em redes neurais s\u00e3o usadas para melhorar a corre\u00e7\u00e3o do c\u00f3digo e identificar poss\u00edveis falhas.<\/li>\n\n\n\n<li><strong>P\u00f3s-processamento com an\u00e1lise de programas<\/strong>: Jain et al. introduziram o Jigsaw, que refina o c\u00f3digo gerado usando t\u00e9cnicas de an\u00e1lise e s\u00edntese de programas, aprimorando a qualidade da sa\u00edda&nbsp;.<\/li>\n\n\n\n<li><strong>Agentes de LLM colaborativos<\/strong>: Dong et al. propuseram um m\u00e9todo em que v\u00e1rios LLMs trabalham de forma colaborativa, cada um desempenhando pap\u00e9is distintos em tarefas de gera\u00e7\u00e3o de c\u00f3digo, levando a melhorias substanciais.<\/li>\n\n\n\n<li><strong>Gera\u00e7\u00e3o e avalia\u00e7\u00e3o de testes<\/strong>: t\u00e9cnicas h\u00edbridas como a CODAMOSA combinam testes de software baseados em pesquisa com LLMs para gerar casos de teste de alta cobertura. Essa abordagem ajuda a redirecionar os esfor\u00e7os de busca para \u00e1reas subcobertas, obtendo uma cobertura melhor do que os m\u00e9todos tradicionais.<\/li>\n\n\n\n<li><strong>Teste de muta\u00e7\u00e3o para gera\u00e7\u00e3o de testes<\/strong>: Dakhel et al. usaram o teste de muta\u00e7\u00e3o para aprimorar os testes gerados pelo LLM, melhorando a detec\u00e7\u00e3o de falhas escritas por humanos ao aumentar as solicita\u00e7\u00f5es com mutantes sobreviventes.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Engenharia de Prompts<\/h2>\n\n\n\n<p>Prompt Engineering trata-se de melhorar as perguntas ou instru\u00e7\u00f5es dadas ao LLM para obter melhores resultados. Pense nisso como fazer as perguntas certas para obter as melhores respostas.<\/p>\n\n\n\n<p><strong> Por que isso \u00e9 importante? <\/strong><\/p>\n\n\n\n<p>Melhores instru\u00e7\u00f5es levam a melhores artefatos. Se perguntarmos ao LLM da maneira correta, ele poder\u00e1 produzir artefatos de software mais precisos e \u00fateis.<\/p>\n\n\n\n<p><strong>O resultado do prompt<\/strong><\/p>\n\n\n\n<p>Os LLMs produzem duas coisas importantes: o artefato de software principal e uma explica\u00e7\u00e3o.<\/p>\n\n\n\n<p>Tanto o artefato quanto a explica\u00e7\u00e3o s\u00e3o cruciais para os engenheiros de software. O artefato \u00e9 o produto principal e a explica\u00e7\u00e3o ajuda a entend\u00ea-lo e us\u00e1-lo.<\/p>\n\n\n\n<p>Mais pesquisas s\u00e3o necess\u00e1rias para melhorar as instru\u00e7\u00f5es dadas aos LLMs e as explica\u00e7\u00f5es que eles fornecem. Isso tornar\u00e1 as sa\u00eddas mais confi\u00e1veis e \u00fateis.<\/p>\n\n\n\n<p><strong>Exemplo para ilustrar<\/strong>:<\/p>\n\n\n\n<p><strong>Imagine um chef e uma receita<\/strong>: pense no LLM como um chef. A sa\u00edda prim\u00e1ria (artefato) \u00e9 o prato que o chef prepara. A explica\u00e7\u00e3o \u00e9 como a receita que mostra como o prato foi feito. Tanto o prato quanto a receita s\u00e3o importantes. O prato \u00e9 o que voc\u00ea come, mas a receita ajuda voc\u00ea a entender como prepar\u00e1-lo sozinho ou ajust\u00e1-lo ao seu gosto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uso da Engenharia de Prompts na Engenharia de Software<\/h2>\n\n\n\n<p>A Engenharia de Prompts pode ser utilizada de forma eficaz em v\u00e1rios aspectos da engenharia de software, para otimizar o desempenho de grandes modelos de linguagem (LLMs):<\/p>\n\n\n\n<ul>\n<li><strong>Codifica\u00e7\u00e3o e gera\u00e7\u00e3o de c\u00f3digo<\/strong>: Ao criar solicita\u00e7\u00f5es espec\u00edficas, os desenvolvedores podem orientar os LLMs a <strong>gerar trechos de c\u00f3digo <\/strong>que atendam a requisitos espec\u00edficos ou sigam determinados padr\u00f5es de codifica\u00e7\u00e3o. Isso ajuda a produzir sa\u00eddas de c\u00f3digo mais precisas e relevantes&nbsp;<\/li>\n\n\n\n<li><strong>Design e arquitetura<\/strong>: No design de software, a engenharia de prompts pode ser usada para <strong>obter padr\u00f5es de design ou sugest\u00f5es arquitet\u00f4nicas dos LLMs<\/strong>. Instru\u00e7\u00f5es personalizadas podem ajudar a explorar diferentes alternativas de design e avaliar seu impacto potencial no sistema.<\/li>\n\n\n\n<li><strong>Coleta de requisitos<\/strong>: os prompts podem ser criados para ajudar os LLMs a<strong> extrair e refinar os requisitos de software das descri\u00e7\u00f5es em linguagem natural.<\/strong> Isso pode melhorar a clareza e a integridade da documenta\u00e7\u00e3o de requisitos.<\/li>\n\n\n\n<li><strong>Teste e depura\u00e7\u00e3o<\/strong>: Ao usar solicita\u00e7\u00f5es que se concentram em cen\u00e1rios espec\u00edficos de teste ou tarefas de depura\u00e7\u00e3o, os LLMs podem ser direcionados para<strong> gerar casos de teste ou sugerir estrat\u00e9gias de depura\u00e7\u00e3o<\/strong>. Isso pode aumentar a efici\u00eancia do processo de teste e ajudar a identificar poss\u00edveis problemas desde o in\u00edcio.<\/li>\n\n\n\n<li><strong>Documenta\u00e7\u00e3o e an\u00e1lise<\/strong>: A engenharia de prompts pode ajudar na<strong> gera\u00e7\u00e3o de documenta\u00e7\u00e3o abrangente<\/strong>, instruindo os LLMs a se concentrarem em aspectos espec\u00edficos do software, como instru\u00e7\u00f5es de uso ou detalhes da API. Al\u00e9m disso, os prompts podem ser usados para analisar o c\u00f3digo em busca de melhorias de desempenho ou oportunidades de refatora\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p>Essas aplica\u00e7\u00f5es de engenharia r\u00e1pida demonstram seu potencial para aprimorar v\u00e1rios est\u00e1gios do ciclo de vida da engenharia de software, tornando os LLMs ferramentas mais eficazes para desenvolvedores.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trabalhos futuros<\/h2>\n\n\n\n<ul>\n<li>Construir e ajustar LLMs para tarefas de engenharia de software apresenta uma \u00e1rea de pesquisa significativa, com foco no treinamento e ajuste de modelos espec\u00edficos para tarefas de engenharia de software, aumentando a precis\u00e3o de tarefas preditivas, como detec\u00e7\u00e3o de vulnerabilidades e previs\u00e3o de clones.<\/li>\n\n\n\n<li>A melhoria do desempenho em t\u00e9cnicas baseadas em LLM requer uma explora\u00e7\u00e3o mais aprofundada, especialmente no desenvolvimento de t\u00e9cnicas para encontrar melhorias de desempenho al\u00e9m do tempo de execu\u00e7\u00e3o, considerando atributos n\u00e3o funcionais, como consumo de energia e consumo de mem\u00f3ria.<\/li>\n\n\n\n<li>Explorar a engenharia de explica\u00e7\u00e3o junto com a engenharia de prompt \u00e9 crucial, pois os LLMs podem fornecer explica\u00e7\u00f5es para artefatos gerados, potencialmente impactando a aceita\u00e7\u00e3o de solu\u00e7\u00f5es em tarefas de engenharia de software.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00f5es<\/h2>\n\n\n\n<p>O artigo destaca a sub-representa\u00e7\u00e3o da engenharia e design de requisitos baseados em LLM na literatura de engenharia de software, indicando a necessidade de mais pesquisas nessas \u00e1reas.<\/p>\n\n\n\n<p>Ele enfatiza o potencial dos LLMs em testes de software, gera\u00e7\u00e3o de c\u00f3digo e tarefas de reparo, apresentando oportunidades de avan\u00e7os na gera\u00e7\u00e3o de testes de software baseados em LLM&nbsp;.<\/p>\n\n\n\n<p>O estudo identifica a import\u00e2ncia da engenharia de prompte e do processamento de sa\u00edda na engenharia de software baseada em LLM, enfatizando a necessidade de pesquisas para otimizar as explica\u00e7\u00f5es fornecidas com a sa\u00edda prim\u00e1ria.<\/p>\n\n\n\n<p>O artigo discute os desafios impostos pela alucina\u00e7\u00e3o das LLM e a necessidade de t\u00e9cnicas de teste automatizadas para garantir a corre\u00e7\u00e3o dos artefatos de engenharia de software gerados pela LLM.<\/p>\n\n\n\n<p><strong>Refer\u00eancias<\/strong><\/p>\n\n\n\n<p>S. Hochreiter and J. Schmidhuber, \u201cLong short-term memory,\u201d Neuralcomputation, vol. 9, no. 8, pp. 1735\u20131780, 1997<\/p>\n\n\n\n<p>D. E. Rumelhart, G. E. Hinton, and R. J. Williams, \u201cLearning repre-sentations by back-propagating errors,\u201d nature, vol. 323, no. 6088, pp.533\u2013536, 1986.<\/p>\n\n\n\n<p>A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A. N.Gomez, L. Kaiser, and I. Polosukhin, \u201cAttention is all you need,\u201d 2017, arXiv:1706.03762<\/p>\n\n\n\n<p>K. Zhang, G. Li, J. Li, Z. Li, and Z. Jin, \u201cToolcoder: Teach code generation models to use api search tools,\u201d 2023, arXiv:2305.04032<\/p>\n\n\n\n<p>N. Jain, S. Vaidyanath, A. Iyer, N. Natarajan, S. Parthasarathy, S. Ra-jamani, and R. Sharma, \u201cJigsaw: large language models meet programsynthesis,\u201d in Proceedings of the 44th International Conference onSoftware Engineering. Pittsburgh Pennsylvania: ACM, May 2022,<br>pp. 1219\u20131231<\/p>\n\n\n\n<p>Y. Dong, X. Jiang, Z. Jin, and G. Li, \u201cSelf-collaboration Code Gener-ation via ChatGPT,\u201d Apr. 2023, arXiv:2304.07590<\/p>\n\n\n\n<p><span style=\"color: transparent; font-family: serif; font-size: 12.186px; text-wrap: nowrap;\">Y. Dong, X. Jiang, Z. Jin, and G. Li, \u201cSelf-collaboration Code Gener-<\/span><span role=\"presentation\" dir=\"ltr\" class=\"rpv-core__text-layer-text\" data-highlight-text-page=\"18\" style=\"box-sizing: border-box; border: 0px solid rgb(228, 230, 232); --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; color: transparent; cursor: text; position: absolute; transform-origin: 0px 0px; text-wrap: nowrap; left: 510.987px; top: 535.1px; font-size: 12.186px; font-family: serif; transform: scaleX(1.01996);\">ation via ChatGPT,\u201d Apr. 2023, arXiv:2304.07590<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p><small> 15 minutos<\/small> Large Language Models Um Modelo de Linguagem de Grande Escala (LLM) \u00e9 um tipo de modelo de Intelig\u00eancia Artificial especializado em processamento de linguagem natural (NLP). Esses modelos s\u00e3o treinados com vastas quantidades de dados textuais, permitindo que eles aprendam padr\u00f5es e estruturas complexas da linguagem humana. A caracter\u00edstica principal dos LLMs \u00e9 a capacidade de gerar textos que s\u00e3o coerentes e contextualmente apropriados, imitando a maneira como os humanos escrevem e se comunicam. Os LLMs utilizam t\u00e9cnicas avan\u00e7adas de aprendizado profundo, <a href=\"https:\/\/blog.netproject.com.br\/blog\/uso-de-llms-na-engenharia-de-software\/\" class=\"more-link\"><span>Continue<\/span>\u2192<\/a><\/p>\n","protected":false},"author":1,"featured_media":6126,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/posts\/6124"}],"collection":[{"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/comments?post=6124"}],"version-history":[{"count":4,"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/posts\/6124\/revisions"}],"predecessor-version":[{"id":6129,"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/posts\/6124\/revisions\/6129"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/media\/6126"}],"wp:attachment":[{"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/media?parent=6124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/categories?post=6124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.netproject.com.br\/blog\/wp-json\/wp\/v2\/tags?post=6124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}