MENTORIZAÇÃO TÉCNICA: UM PACOTE DE PAPÉIS FUNDAMENTAIS NO DESENVOLVIMENTO DE SOFTWARE Marcelo Jaloto1, Luiz Camargo2 Resumo: Este artigo apresenta uma proposta em que a mentorização técnica com seus devidos papéis irão compor um pacote fundamental, para expandir o processo de desenvolvimento de software atual de uma empresa, visando a melhoraria da qualidade e da produtividade de seus softwares. Com este trabalho pretende-se apresentar os benefícios, as principais atividades, responsabilidades e papéis exercidos pelo profissional que exerce a mentorização técnica, assim como sua importância no processo de desenvolvimento de software, definindo o cargo mentor técnico, que ainda é muito pouco difundido e não está formalizado no mercado de trabalho. Palavras-chave: Mentorização. Técnica. Desenvolvimento. Software. Mentor. Abstract: This article presents a proposal in which the technical mentoring with it’s due roles will compose a fundamental package, to expand the current development process of a company, aiming to achieve improvement of quality and productivity of it’s softwares. This essay intends to present the benefits, the main activities, responsibilities and roles played by the Professional who does the technical mentoring, just as it’s importance in the software development process, defining the technical mentor job function, which is yet very little widespread in the business market. Key-words: Mentoring. Technique. Development. Software. Mentor. 1 INTRODUÇÃO Atualmente, a linha de produtividade das empresas de desenvolvimento de software possui um grande déficit causado por profissionais inexperientes em determinados assuntos ou conhecimentos técnicos. Estes profissionais perdem muito tempo em pesquisa e análise minuciosa para solucionar um determinado problema, o qual poderia ser solucionado de modo mais eficaz e eficiente. Para minimizar esta perda de tempo e aumentar a produtividade, um profissional mais experiente poderia orientar outro profissional com dificuldades, a encontrar o “caminho das pedras” de modo mais rápido e fácil, capacitando-o também na solução, para que caso ocorra uma reincidência, o problema possa ser resolvido mais rápido, sem necessitar de apoio de outro profissional. Estes profissionais mais experientes, usualmente conhecidos como mentores técnicos, possuem perfil, conhecimentos, habilidades e características muito semelhantes, e têm como principais áreas de atuação e especialidades, os papéis de líder técnico, projetista, analista implementador e revisor de código. As semelhanças, áreas de atuação e especialidades formam uma combinação ideal para proporcionar uma mentorização técnica de alto nível de qualidade, eficiência e eficácia, resultando em aumento de produtividade. Normalmente, profissionais mais experientes atuam de modo sobrecarregado ao exercer uma mentorização técnica, ou mentoring, quando deixam de desempenhar suas prioridades para repassar conhecimentos a outros menos experientes, acabam prejudicando a sua própria produtividade. Esta perda de produtividade poderia ser evitada se fosse investido nestes profissionais mais experientes, para exercer papéis de um mentor técnico de modo mais prioritário e especializado. ____________________ 1 Pós-graduando em Engenharia de Software pelo Instituto Superior Tupy - Sociesc. E-mail: [email protected]. 2 Professor orientador do Instituto Superior Tupy - Sociesc. E-mail: [email protected]. Mesmo apesar do mercado de trabalho ter o conhecimento destes problemas que prejudicam a sua linha de produtividade, ainda não homologaram o cargo de mentor técnico, porque seus papéis, atividades e responsabilidades não estão bem definidos. Fato que dificulta atualmente a implantação deste cargo, como um papel fundamental no processo de desenvolvimento de software. Tendo o cargo do profissional mentor técnico, formalmente homologado, então, seria mais fácil inserir a mentorização técnica no processo de desenvolvimento de softwares de muitas empresas, que visão melhorias na qualidade e produtividade de seus produtos. Deste modo, este artigo tem como foco apresentar o profissional mentor técnico ao mercado de trabalho, demonstrar sua importância no processo de desenvolvimento de softwares, definir os seus principais papéis, especialidades, atividades, responsabilidades, conhecimentos e experiências, aplicados a mentorização técnica. Sendo assim, espera-se que num futuro próximo, com base neste trabalho, o cargo mentor técnico, seja reconhecido formalmente como uma profissão indispensável ao mercado de trabalho de empresas de desenvolvimento de software. Para uma melhor compreensão dos assuntos propostos, o artigo está dividido em seções. Na próxima seção, 2, é apresentada a definição da mentorização técnica, sua origem e os principais benefícios; a seção 3 apresenta o perfil comum de um mentor técnico de qualidade; na seção 4 será exibida de forma resumida as principais tarefas do cargo mentor técnico; a seção 5 é subdivida em cinco subseções, contendo em cada uma, o resumo de um papel da mentorização; já a seção 6 define, agrupado por papéis, as principais atividades e responsabilidades da mentorização técnica no desenvolvimento de softwares; a seção 7 define os pré-requisitos de um mentor técnico que são desejáveis por uma empresa, apresentando seus os principais conhecimentos e experiências; e na seção 8 apresenta as considerações finais do trabalho e uma sugestão para trabalhos futuros. 2 A MENTORIZAÇÃO TÉCNICA Segundo Oliveira (2012), o termo mentoring pode ser definhado como uma abordagem de orientação profissional e pessoal com elevada amplitude, na qual, um profissional muito experiente com forte sustentação teórica e prática, o mentor, auxilia outro profissional com menor experiência e conhecimento, o mentorado, em aspectos gerais e específicos para o seu desenvolvimento pessoal e profissional. O termo mentoring, assim como a atuação de um mentor, tem origem na época da Guerra de Tróia, período entre 1300 a 1200 a.C., ao ir para a guerra, o Rei de Ithaca, Ulisses, ordenou que seu escravo, conhecido como Mentor, cuidasse de sua família, porque era mestre e conselheiro de seu filho, portanto nesse contexto o termo mentor passou a significar orientador, professor, amigo e protetor, originando o significado do termo mentoring. (OLIVEIRA, 2012). Atualmente no Brasil, utiliza-se a palavra mentoring, que pode ser traduzida para mentorização, logo, com o propósito de facilitar a leitura e a disseminação, será utilizada a palavra no português. A mentorização técnica, tendo como base a definição de Oliveira (2012), possui um profissional que é perito em uma determinada área específica, com vastos e sólidos conhecimentos técnicos. Como este artigo foca na área de desenvolvimento de software, ao ser citado o termo mentorização técnica, logo estará se referindo exclusivamente a mentores técnicos da área de desenvolvimento de software. O principal benefício da mentorização técnica é o aumento expressivo da qualidade para o produto final. Um produto de qualidade é vital e essencial para qualquer empresa destacar-se num mercado altamente competitivo, principalmente o mercado de tecnologia da informação, no ramo de atuação de desenvolvimento de software. A ampliação da produtividade terá um retorno garantido como benefício, porque um mentor técnico poderá apoiar os desenvolvedores, que necessitem de ajuda para resolver um determinado problema. Dependendo da frequência e da complexidade dos problemas, o apoio do mentor na solução e capacitação de cada desenvolvedor será fundamental para reduzir drasticamente o tempo que uma equipe de desenvolvimento levaria sem uma mentorização técnica. O mentor, segundo Chiavenato (2012), pode ajudar uma pessoa a adquirir mais conhecimentos e habilidades, compreender a cultura da organização, entender as políticas internas, ajudar a ganhar novas competências e outras coisas mais, para que a pessoa possa alcançar sucesso na carreira. Um mentor técnico também poderá apoiar na revisão de código de cada desenvolvedor de uma equipe, proporcionando uma melhoria na qualidade do código fonte, podendo inclusive evitar alguns erros banais, fazendo uma inspeção de código mais aprofundada, com foco na qualidade. A frequente capacitação dos desenvolvedores pelo mentor técnico irá resultar em uma gradativa evolução da equipe, tornando cada desenvolvedor da equipe mais capacitado e qualificado para solucionar problemas que já tiveram como lição aprendida. Para problemas que demandam uma solução mais complexa, um mentor poderá atuar como um projetista, raciocinando e projetando uma solução técnica, que será documentada para servir como mecanismo de apoio para um analista e um desenvolvedor trabalharem de forma mais produtiva. Outro importante benefício que deve ser destacado é que o mentor técnico é um canalizador de conhecimento, não guardando apenas para si, mas também difundido o conhecimento, assiduamente a cada membro da equipe de desenvolvedores, resultando na descentralização do conhecimento. Então, investir em um profissional qualificado para atuar com mentorização técnica, significa aumentar a qualidade do produto, isto estará aumentando a produtividade e satisfação do cliente, e consequentemente estará aumentando a lucratividade do produto final. 3 PERFIL DE UM MENTOR TÉCNICO Em primeiro lugar, de acordo com Chiavenato (2012), o mentor deve possuir conhecimento, habilidades e expertise para atender às necessidades de desenvolvimento de um profissional ou de uma equipe de profissionais. Conforme a Brasil Profissões (2012) é considerado importante que um analista de sistemas, um dos papéis do mentor técnico apresente as seguintes características: Boa visão sistêmica para concluir as missões do produto e conquistar os objetivos empresariais; Bom senso crítico e analítico para decidir a melhor solução que atenda a empresa; Estar em constante atualização tecnológica; Dinâmico e preparado às mudanças; Boas relações interpessoais para facilitar a interação e a integração com outros profissionais. Para ser considerado um bom mentor técnico é desejável que este possua as seguintes habilidades conforme critério da Softplan (2012) e outros propostos pelo artigo, como: liderança técnica, exímio conhecedor de soluções tecnológicas, especialista em uma ou mais linguagens de programação e no framework do produto, excelente didática, habilidades para capacitação de outros profissionais, capacidade de solucionar e apoiar na resolução de problemas simples ou complexos, sólidos conhecimentos em orientação a objetos, alto índice de inteligência e raciocínio lógico, ser criativo desenvolvendo soluções mais inteligentes, experiência e maturidade no processo de desenvolvimento de sistemas, capacidade de trabalhar em equipe, conhecedor do negócio e da arquitetura do projeto, inovador de grandes soluções e resultados para contribuir com o crescimento da empresa, profissional bastante produtivo, dedicado, determinado, comprometido e responsável no trabalho, e principalmente este profissional desenvolve seus trabalhos com os mais altos padrões, níveis de excelência e extrema qualidade. 4 SUMÁRIO DO CARGO MENTOR TÉCNICO De acordo com algumas definições da Softplan (2012) e outras propostas pelo artigo, o cargo de mentor técnico, deve possuir como principais funções específicas, as listadas a seguir: Auxiliar outro profissional com menor experiência conforme a demanda e necessidade, orientando e repassando o conhecimento técnico mais adequado e necessário em determinados assuntos específicos da área de atuação; Liderar tecnicamente uma equipe de desenvolvimento de software, servindo como referência na tomada de decisão da melhor solução para o projeto ou produto; Garantir mais qualidade através da revisão de código e inspeção de código; Acompanhar o trabalho de outros colaboradores, visando crescimento profissional; Desenvolver sistemas, de forma independente, apoiar e orientar os demais analistas na construção de soluções por meio de processos, em alterações nos sistemas atuais ou na proposição de novas soluções, baseando-se em requisitos recebidos do cliente ou do analista de negócio; Garantir o desenvolvimento, a qualidade e o atendimento dos produtos, buscando as melhores soluções, por meio da criação, inovação e manutenção dos produtos; Analisar as soluções a serem elaboradas para no desenvolvimento de softwares, de modo que seja garantida uma melhor solução técnica aos requisitos funcionais e não funcionais; Projetar soluções de alta complexidade, utilizando diagramas e padrões de projeto, atendendo requisitos funcionais e não funcionais, dentro do contexto e das restrições da arquitetura, atuando com autonomia e orientando os demais membros da equipe quando necessário; Orientar e acompanhar o trabalho de elaboração, validação e testes de programas de computador com base em especificações recebidas, valendo-se de métodos e técnicas adequadas. 5 PRINCIPAIS ÁREAS DE ATUAÇÃO E ESPECIALIDADES O mentor técnico tem como principais áreas de atuação e especialidades, os papéis de líder técnico, analista implementador sênior, projetista e revisor de código, conforme apresentado na Figura 1. O profissional pode ter seu tempo planejado para atuar nestes cinco papéis, ou em alguns deles, conforme demanda e necessidade da empresa em que atua. Figura 1 Principais Papéis do Mentor Técnico 5.1 Papel: Mentor Técnico Segundo a Rational Software (2012), o papel do mentor é alguém que ensina e orienta uma equipe conforme demanda e necessidade. O mentor pode assumir diferentes papéis e responsabilidades, conforme a necessidade da empresa e do projeto. Com a sua multifuncionalidade, o mentor pode atuar hora “vestindo o chapéu” de um analista implementador sênior para atividades de alta complexidade, atuar como revisor de código para aumentar e garantir uma maior legibilidade e qualidade ao código fonte, atuar como projetista para projetar, orientar e avaliar uma melhor solução técnica, ou ainda hora atuar vestindo o chapéu de líder técnico para orientar na melhor decisão técnica e na liderança técnica da equipe do projeto, incentivando as melhores práticas e padrões de projeto. Um mentor possui amplos conhecimentos dos assuntos e detalhes técnicos de sua área de atuação. Traz contribuições efetivas para o aprimoramento e transformação dos processos de trabalho. É a referência técnica da área e é bastante requerido pela equipe (SOFTPLAN, 2012). Os mentores atuam como um recurso para outros membros da equipe, muitas vezes trabalhando em programação em par com um desenvolvedor menos experiente, como uma forma de transferir seu conhecimento para capacitá-lo em determinado assunto ou situação complexa. Também podem atuar monitorando o projeto com ajuda de ferramentas que fazem varreduras de forma automatizada no código fontes, em busca de falhas na arquitetura de um projeto. Essas ferramentas, como Sonar, Structure 101 e Source Monitor, geram gráficos e análises detalhadas que apontam falhas no código legado, que precisam ser melhoradas. De posse do resultado das análises geradas pelas ferramentas, o mentor pode orientar e conduzir a equipe de desenvolvimento para aplicar a melhor solução técnica, mas de forma planejada, fazendo um refatoramento de código consciente, até que todo o débito técnico deixado pelo legado de falhas arquitetural seja sanado. Segundo a Rational Software (2012), a experiência mostra que o mentor é uma figura muito importante para a implementação bem sucedida do processo. Sem o mentor, o processo fica sem condução e, em muitos casos, isso significa que a implementação de todo o processo pode falhar, e isto é um problema muito comum. Então para garantir que o sucesso seja duradouro, é importante que o papel de mentor seja planejado para o pessoal interno e experiente da organização. O investimento em um ou mais mentores técnicos experientes no projeto, resultam em vários bons motivos, assim como: Orientação da utilização do processo adequadamente no projeto; Uma maneira econômica de passar conhecimento; Para um melhor aproveitamento de um mentor, deve ser planejada a maior parte do seu tempo para apoiar a equipe, porque existe o risco de o projeto depender excessivamente do mentor para solucionar todos os problemas e tratar de tarefas difíceis e complexas, em lugar da própria equipe do projeto. As pessoas que trabalham no projeto precisam ser responsabilizadas e assumir as tarefas complexas de implementação do mentor, após uma evolução natural ao longo de um tempo. Um ponto importante é estar ciente do conflito inerente entre a meta de planejar a maior parte do tempo do mentor para apoiar a equipe, de modo que seja garantida uma maior produtividade no projeto (RATIONAL SOFTWARE, 2012). 5.2 Papel: Líder Técnico Um líder técnico geralmente é um desenvolvedor com mais de oito anos de experiência, maturidade elevada e um amplo conhecimento em diversos domínios técnicos. Este profissional deve orientar outros membros da equipe, conforme demanda e necessidade, e ter a autonomia para liderar uma equipe na tomada de decisão, da escolha da melhor solução para uma nova implementação, alteração ou correção de um problema. Atuam como “braço direito” do gerente ou coordenador de equipe, no que diz respeito à parte técnica, é fundamental para o sucesso do produto, que seja delegado autonomia e poder de decisão ao líder técnico, sobre todo o processo de desenvolvimento e sobre a parte técnica do projeto, porque somente um líder técnico possui visão sistêmica e o conhecimento da “floresta” como um todo. Uma decisão equivocada, devido a não ter o domínio de uma determinada tecnologia, por exemplo, poderá impactar em todo o projeto, transformando em uma “bola neve”, que dificilmente parará de crescer e girar “montanha” abaixo, até que “exploda” em uma parede sem saída. Segundo Maxwell, sem liderança, não há trabalho em equipe, e cada um segue seu próprio caminho. Quanto maior a liderança, maior a habilidade de fazer pessoas trabalharem juntas e formar uma grande equipa unida para seguir uma mesma direção, caminho e objetivo. Estão sempre sendo consultados à procura de uma melhor abordagem técnica ou algo que forneça um benefício similar ao que já se possui, mas por um custo menor. Devem trabalhar evoluindo continuamente, para manter e melhorar suas habilidades em seus domínios de especialização. Líderes técnicos devem ter boas habilidades de comunicação pessoal, escrita e oral. Porque muitas vezes trabalham em estreita colaboração com arquitetos, especialistas e engenheiros de software, na busca da melhor solução de problemas e orientando-os no progresso global do desenvolvimento do produto. 5.3 Papel: Projetista O papel projetista ou designer tem como principal responsabilidade a de projetar a melhor solução para atender as necessidades dos requisitos especificados pelo cliente, utilizando diagramas e padrões de projeto, dentro do contexto e das restrições da arquitetura, como, reusabilidade, desempenho, escalabilidade, portabilidade, testabilidade, atuando com autonomia e orientando os demais membros da equipe quando necessário (SOFTPLAN, 2012). O projetista também atua na crítica, simplifica e evolui a especificação de requisitos elaborada pelo analista de sistemas, visando uma melhor compreensão da equipe de desenvolvimento. Este profissional define as responsabilidades, as operações, os atributos e os relacionamentos de uma ou de várias classes, e ainda determina como eles serão ajustados para o ambiente de implementação. Também, o projetista pode ser responsável por um ou mais pacotes de projeto ou subsistemas de projeto, incluindo todas as classes pertencentes aos pacotes ou subsistemas (RATIONAL SOFTWARE, 2012). Além de suas principais atribuições, o projetista também contribui com a mentorização visando o crescimento e o desenvolvimento da equipe, e apoia na conformidade do processo nos fluxos de projeto de solução técnica e implementação. Então, tudo isso visa contribuir com o aumento de produtividade e qualidade do trabalho desenvolvido pelo implementador. 5.4 Papel: Analista Implementador (Sênior) Segundo a Softplan (2012), o analista implementador sênior é um profissional, que orienta e acompanha o trabalho de elaboração, validação e testes de programas de computador com base em especificações recebidas, valendo-se de métodos e técnicas adequadas. O mentor como analista implementador, deve possuir grau de experiência sênior, para estar preparado a orientar e a acompanhar o trabalho de elaboração, implementação, validação e testes de programas de computador, com base em especificações recebidas, valendo-se de métodos e técnicas adequadas. Também pode ser utilizado para desenvolver rotinas complexas, mas de modo muito bem planejado, para não ocupar-se demais e ficar sobrecarregado nas tarefas de mentorização. Sua principal atuação na mentorização é acompanhar e apoiar o trabalho dos demais integrantes da equipe de desenvolvimento, buscando o constante crescimento destes profissionais. 5.5 Papel: Revisor de Código De acordo com a Rational Software (2012), o papel revisor de código garante a qualidade do código-fonte, além de planejar e conduzir revisões do código-fonte. A revisão de código é uma maneira eficaz de os membros seguirem ao guia de padrão de código determinado pela empresa. Segundo a Softplan o principal objetivo do revisor de código, implementador diferente do autor do código fonte, é garantir que o código fonte esteja de acordo com a solução técnica, não tendo violações de padrões de desenvolvimento. Os requisitos de habilidades deste papel são parecidos com o papel implementador sênior. As pessoas que desempenham este papel geralmente são consideradas especialistas na linguagem de programação usada para o código que está sendo revisado. (RATIONAL SOFTWARE, 2012). 6 PRINCIPAIS ATIVIDADES E RESPONSABILIDADES Algumas das principais atividades da mentorização técnica podem ser observadas, na Figura 2, onde demonstra o processo definido pela Softplan (2012), mas proposto pelo trabalho como sendo um fluxo básico de atuação da mentorização técnica no desenvolvimento de software. Figura 2 Fluxo Básico de Atuação da Mentorização Técnica De acordo com a Rational Software (2012) 5 e a Softplan (2012) 6, as principais atividades e responsabilidades dos papéis da mentorização técnica, estão listadas nos agrupamentos a seguir: - Mentor Técnico: Ajudar os desenvolvedores a usarem processos e modelos da melhor maneira possível;5 Detectar algum problema devido à falta de conhecimento dos desenvolvedores;5 Compartilhar o conhecimento e transferi-lo para outros membros da equipe;5 Realizar treinamentos de usuários;6 Apoiar e orientar a elaboração de rotinas automatizadas de testes por meio da criação de ambientes para simulação, utilizando-se de ferramentas e padrões para os testes;6 Identificar as causas dos erros que estão sendo corrigidos pelos seus supervisionados, capacitando e sugerindo ações para mitigar futuras ocorrências;6 Capacitar e evoluir a equipe de desenvolvimento de sistemas;6 Apoiar os analistas da equipe, visando garantir a qualidade de suas codificações;6 Desenvolver outras atividades inerentes ao cargo ou a critério de seu superior imediato, desde que estejam de acordo com o seu conhecimento e experiência;6 Prestar suporte com autonomia às demais equipes no entendimento das rotinas de seu domínio e/ou responsabilidade;6 Orientar na elaboração do conteúdo e ministrar treinamentos internos dos processos de desenvolvimento e assuntos técnicos e específicos relacionados aos sistemas;6 Prestar informações com autonomia às soluções referentes aos projetos para os processos inerentes à sua área de atuação;6 Respeitar as normas e procedimentos da empresa, seguir o planejamento estratégico e os padrões de qualidade visando à satisfação do cliente;6 Checar de forma automatizada e analisar métricas, como complexidade ciclomática, código clonado, cobertura de código com testes automatizados, código legível e outras; Monitorar constantemente a matriz estrutural de dependência (DSM) do projeto; Identificar, analisar e propor a melhor solução para falhas estruturais no código fonte legado do projeto, com ajuda de ferramentas automatizadas (Sonar, Structure 101 e outras); Fazer análise estática em todo o código fonte do projeto para varrer e identificar erros comuns, com a ajuda de ferramentas automatizadas; Conduzir e orientar a equipe de desenvolvimento na melhor solução técnica para o saneamento do legado de débitos técnicos. - Líder Técnico: Ajudar o gerente de projeto a planejar e orientar o projeto na parte técnica, caso o gerente de projeto tenha pouco ou nenhum conhecimento técnico;5 Impor e estimular um estilo de codificação comum para o projeto;5 Assumir a liderança em problemas difíceis;6 Validar as estimativas de esforço da equipe para desenvolvimento de funcionalidades;6 Analisar e responder pelos impactos das mudanças, visando garantir a integridade dos sistemas, com autonomia;6 Participar na elaboração do planejamento de projetos/operações e versões;6 Coordenar, gerenciar e orientar atividades de desenvolvimento de sistemas; Desenvolver e manter expertise em diversas áreas técnicas; Servir como um recurso para outros membros da equipe; Encontrar oportunidades para melhorar a eficiência da equipe e a qualidade do produto; Comunicar de modo eficaz oralmente e por escrito. - Projetista: Elaborar projetos de alta complexidade, projetando soluções, bem como, estruturar a organização do código e testar rotinas, qualidade e produtividade, atuando com autonomia e orientação geral do superior imediato;6 Elaborar, orientar e validar a documentação das rotinas desenvolvidas para os projetos; 6 Garantir no projeto o cumprimento das boas práticas, metodologias definidas para o processo de desenvolvimento e procedimentos gerais da qualidade, contribuindo com melhorias dos processos e orientando os demais membros da equipe;6 Manter a documentação técnica atualizada e organizada para levantamentos e futuras consultas, orientando sobre os padrões a serem cumpridos;6 Contribuir significativamente com o planejamento de projetos/operações e versões, propondo melhorias e identificando riscos;6 Definir soluções para o desenvolvimento do sistema, através do levantamento de necessidades junto ao cliente interno e externo;6 Elaborar propostas de alteração ou de novos sistemas, a serem apresentadas para o cliente, com base nos requisitos apresentados;6 Cumprir os padrões de qualidade das rotinas e processos sob sua responsabilidade, avaliando o impacto das alterações, visando garantir a integridade dos sistemas;6 Executar revisão dos projetos realizados, bem como dos artefatos técnicos (projeto e programação), apontando, orientando e realizando correções quando necessário;6 Responder pela documentação das rotinas e processos sob sua responsabilidade;6 Atuar como líder de modelagem, com objetivo de economizar tempo e esforço;5 Garantir que as classes tenham o comportamento adequado aos casos de uso;5 Garantir que sejam fornecidas informações suficientes para criar classes não ambíguas;5 Tratar dos requisitos não funcionais relativos à classe;5 Incorporar os mecanismos de projeto usados pela classe;5 Elaborar e produzir a documentação técnica, especificando os casos de uso, rotinas operacionais e outros, com acompanhamento e validação. - Analista Implementador: Analisar as especificações recebidas, verificando possíveis inconsistências ou buscando possibilidades de melhorias;6 Realizar a construção de rotinas de apoio para compilação e instalação dos sistemas, visando à disponibilização para o usuário (deploy);6 Realizar a codificação seguindo as normas e padrões da empresa;6 Realizar testes em condições operacionais simuladas, verificando a correta execução do programa de acordo com o especificado e com o desempenho adequado;6 Realizar correções nos produtos, após a identificação das causas dos erros;6 Realizar a compilação e instalação dos sistemas, disponibilizando para o usuário;6 Gerar scripts de dados necessários para o correto funcionamento dos sistemas;6 Manter a documentação técnica atualizada;6 Realizar estimativas de esforço para construção de sistemas;6 Realizar simulações e criar ambientes de produção para aferir os resultados dos programas;6 Produzir o código-fonte de acordo com o modelo de projeto;5 Executar os casos de teste que causam defeito e identificar a falha no código-fonte;5 Identificar e corrigir a causa raiz de um problema, não apenas o sintoma; Realizar testes unitários; Participar na evolução de alterações e de novas funcionalidades do software; Refatorar códigos fontes existentes para a melhora da manutenabilidade do software. - Revisor de Código: Analisar e revisar com frequência os resultados de cada fase, para detectar problemas;5 Localizar erros que os testes automatizados não conseguem detectar;5 Verificar o código conforme critérios de uma lista de checagem definida pela empresa;6 Analisar as especificações recebidas dos demais integrantes da equipe, verificando e avaliando as inconsistências identificadas ou as melhorias propostas;6 Revisar as normas, os padrões de código, as métricas e os procedimentos da empresa, seguindo padrões de qualidade de código, código limpo e saneamento do legado;6 Realizar inspeção de código periodicamente para garantir mais qualidade ao software; Verificar se o código atende o que foi projetado. 7 CONHECIMENTOS, EXPERIÊNCIAS E FONTES DE AQUISIÇÃO Um bom mentor técnico deve conter no mínimo, mais de oito anos de experiência em atividades inerentes a área de desenvolvimento de softwares e deve ser capacitado e ter os seguintes conhecimentos e experiências como desejável: Superior completo em Ciências da Computação ou na área de Tecnologia de Informação; Pós-graduado em Engenharia de Software ou na área de desenvolvimento de Software; Cursos técnicos relacionados ao desenvolvimento de software; Certificação na linguagem de programação adotada pelo projeto; Conhecimento avançado em orientação a objetos, linguagem de programação adota pelo projeto, framework de desenvolvimento, regras de negócio do projeto, saneamento de código legado, técnicas de código limpo (clean code), otimização de código, padrões de projeto, técnicas e ferramentas de análise estáticas de código e métricas, análise de matriz estrutural de dependências (DSM), análise e projeto de sistemas, levantamento de requisitos, mapeamento de processos, modelagem de dados, linguagem de modelagem (UML), banco de dados (DDL/DML e PL-SQL); Facilidade para trabalhar em equipe, boa comunicação e escrita verbal. 8 CONCLUSÃO E SUGESTÃO DE TRABALHOS FUTUROS Anseia-se que com este trabalho, o papel mentor técnico acabe virando uma tendência em todas as empresas de desenvolvimento de software, devido ao ganho de produtividade e qualidade que este profissional pode gerar, com a orientação, capacitação e evolução da equipe. Neste artigo foi definido o papel do mentor técnico com as suas principais responsabilidades e atividades, para que tenha um foco e saibam suas prioridades, deveres e obrigações. Porque um mentor técnico, também pode atuar em diferentes papéis, e neste trabalho foram destacados os principais, como o papel de líder técnico, analista implementador, projetista, e revisor de código. Outro ponto importante foi à identificação dos principais conhecimentos, experiências e fontes de aquisição, que este profissional deve adquirir ao longo de uma carreira no desenvolvimento de software, para que caso, os profissionais que desejam evoluir de cargo e tornarem-se um mentor técnico no futuro, tenham um rumo e norteamento do que devem aprender. Para as empresas que desejam investir em um mentor técnico e aplicar a mentorização técnica em sua empresa de desenvolvimento de software, o artigo identifica o perfil de um candidato a mentor técnico, comentando sobre suas principais características e habilidades. Também traz um sumário do cargo mentor técnico, comentando sobre as principais atividades que devem ser exercidas por este profissional. E ainda identifica os principais benefícios que a mentorização técnica pode resultar em um time de desenvolvimento de software. Por fim, espera-se que este trabalho contribua na evolução do desenvolvimento de softwares ao demonstrar uma proposta contendo os papéis fundamentais de um mentor técnico. Como sugestão para trabalhos futuros, recomenda-se validar o modelo de processo, Figura 2, para aplicar a mentorização técnica em uma equipe de desenvolvimento de softwares, para melhorar a qualidade e produtividade de uma empresa. REFERÊNCIAS 1. BRASIL PROFISSÕES Analista de Sistemas. Disponível em: <http://www.brasilprofissoes.com.br/profissoes>. Acessado em: 16 Maio 2012. 2. CHIAVENATO, Idalberto. Construção de Talentos: Coaching & Mentoring. - ed. rev. e atual.Rio de Janeiro: Elsevier, 2012. 3. MAXWELL, John C., 1947- Liderando para o Sucesso: descubra como ser um mentor qualificado e influenciar pessoal para o sucesso / John C. Maxwell; [tradução Barbara Coutinho e Leonardo Barroso]. – 1.ed. - Rio de Janeiro: Thomas Nelson Brasil, 2010. 4. OLIVEIRA, Djalma de Pinho Rebouças de. Coaching Mentoring Counseling: um modelo integrado de orientação profissional com sustentação da universidade. São Paulo: Atlas, 2012. 5. RATIONAL SOFTWARE CORPORATION Papéis e Atividades. Disponível em: <http://www.wthreex.com/rup/portugues/index.htm>. Acessado em: 16 Maio 2012. 6. SOFTPLAN Plano de Cargos, Papéis e Atividades. Disponível em: <https://colabore.softplan.com.br>. Acessado em: 30 Agosto 2012.