Baixe o app para aproveitar ainda mais
Prévia do material em texto
ENGENHARIA DE SOFTWARE Roque Maitino Neto E-book 4 Neste E-Book: INTRODUÇÃO ����������������������������������������������������������� 3 SOFTWARE ���������������������������������������������������������������� 5 Evolução de Software ���������������������������������������������������������������5 Manutenibilidade ���������������������������������������������������������������������13 Gestão de mudanças ��������������������������������������������������������������14 Gestão de Projeto de Desenvolvimento de Software �����������23 Pessoas �����������������������������������������������������������������������������������24 Produto ������������������������������������������������������������������������������������25 Processo ����������������������������������������������������������������������������������26 Projeto ��������������������������������������������������������������������������������������27 CONSIDERAÇÕES FINAIS ������������������������������������31 REFERÊNCIAS BIBLIOGRÁFICAS & CONSULTADAS ������������������������������������������������������� 33 2 INTRODUÇÃO A ordem natural das coisas sugere que tudo expe- rimenta evolução, que pode ser efetivada durante milênios ou de uma geração para outra� Se tomar- mos como exemplo elementos do nosso cotidiano, observaremos que o aprimoramento de técnicas, processos, meios, métodos e instrumentos aplicados às atividades que desempenhamos tem proporciona- do evolução jamais observada em nossa qualidade de vida� Inevitável, essa evolução afeta também as características dos seres vivos, as formas de comu- nicação e nosso modo de vida de uma maneira geral� Bem, se tudo muda, não haveria motivo para que nos- sos sistemas permanecessem sem evolução durante seu ciclo de vida� Ao contrário do que alguns podem imaginar, essa evolução não está apenas atrelada à correção de defeitos pela qual um sistema inevita- velmente passa, mas a uma série de providências colocadas em prática para que o produto continue atendendo aos requisitos do cliente, que também são dinâmicos� Essas providências incluem, por- tanto, a adaptação a um novo ambiente, a inclusão de novas características solicitadas pelo cliente e, naturalmente, a correção de defeitos� Essa evolução, contudo, requer um criterioso plane- jamento e o devido acompanhamento para que seja bem-sucedida� Ao conjunto de providências contidas no planejamento, execução e acompanhamento da evolução do software daremos o nome de Gestão 3 de Mudanças e o abordaremos como segundo as- sunto do nosso conteúdo. Por fim, serão abordados elementos do gerenciamento do projeto de desen- volvimento de um software, e esse tema merecerá nossa atenção por um motivo muito simples: assim como qualquer empreitada, a criação de um sistema requer estimativas, elaboração de cronograma, aná- lise de riscos e outras providências que visam a dar ao gerente do projeto a segurança necessária para alcançarem a boa conclusão do trabalho� Com a discussão desses assuntos, esperamos que você compreenda aspectos da evolução de um sof- tware, tenha contato com os tipos de manutenção aplicáveis, e comece a desenvolver habilidade em gerir um projeto de desenvolvimento de software� Bons estudos! 4 SOFTWARE Será possível afirmarmos que um software envelhece? Se essa questão puder ser respondida afirmativamen- te, como então podemos retardar esse envelhecimento e manter nossos sistemas sempre jovens? Quando o assunto é evolução de um software, muitos elementos devem ser considerados para que ele acompanhe o ambiente no qual está inserido e que continue a gerar valor� Nesse contexto, a correta gestão das mu- danças aparece como fator decisivo para o sucesso das atividades de manutenção, além de aumentar as chances de que a decisão entre investir na manuten- ção do sistema atual ou iniciar o projeto de um novo produto mostre-se correta, no decorrer do tempo� Nas próximas páginas, você terá contato com elementos conceituais da manutenção, com algumas leis da evo- lução de um software, com situações que deverão re- querer boa gestão do processo dessa evolução e, por fim, com aspectos do gerenciamento de um projeto de desenvolvimento de software� Sigamos adiante! Evolução de Software Fica cada vez mais difícil imaginarmos um item do nosso cotidiano que não tenha passado por alguma transformação, no decorrer dos anos� As roupas que usamos, nossos carros e os nossos telefones celu- lares são alguns poucos exemplos de produtos que têm sido transformados desde que os conhecemos� As motivações para que seus fabricantes invistam 5 em evolução são inúmeras, mas todas parecem convergir para um ponto: a viabilidade comercial do produto� Mais uma vez, essas considerações todas servem também para o universo dos sistemas de computador que criamos e a evolução desses pro- dutos será o tema central desta primeira parte do nosso conteúdo� Ao utilizar metodologia adequada para criação do software, respeitar as regras de gestão de projetos e capacitar continuamente sua equipe, uma empresa de desenvolvimento espera que suas entregas sejam capazes de satisfazer aos requisitos do cliente� No entanto, mesmo com esse aparato técnico, espera-se que o software sofra alterações e evolua. Quando o produto é colocado em operação, defeitos são des- cobertos (sobretudo pelo usuário), o ecossistema de execução do sistema muda ou, inexoravelmente, os requisitos do cliente mudam� Por isso, a manutenção é tão necessária e deve receber o mesmo grau de atenção que outras fases do projeto� Mais adiante, teremos oportunidade de tratar as mu- danças de requisitos como um dos mais justos mo- tivos para a promoção da evolução de um sistema, mas é necessário pontuar desde já que tais mudan- ças motivam a criação de novas versões do sistema, como ação efetiva em prol da sua evolução� Essas novas versões incorporam mudanças e atualizações ao sistema atual, e nos permite enxergar o processo evolucionário como uma espiral em que as atividades de requisitos, projeto, implementação e testes estão todas presentes, conforme ilustrado na figura 1. 6 Observe que o processo é iniciado com a versão 1 do sistema� Depois de entregue, essa versão passará por mudanças que darão ensejo à criação da sua segunda versão, e assim por diante� Embora esteja- mos tratando dessas versões como um fenômeno com certa regularidade temporal, a necessidade de evolução do software em questão pode ser detectada antes mesmo do lançamento da primeira versão� Especificação Início Versão 2 Versão 3 Versão 1 Especificação Implementação Validação Figura 1: Modelo evolutivo em espiral� Fonte: Sommerville (2018, p� 233) Outra ressalva necessária neste contexto é a que relaciona esse modelo de evolução a casos em que a mesma organização é responsável pelo sistema em toda a sua vida útil� Em situações em que o cliente passa a contar com outra empresa para suporte e evolução do produto, há chance de que o processo evolutivo sofra descontinuidade, já que nem toda 7 documentação de requisitos e de projeto pode ser transferida de uma organização para a outra� Na vi- são de Sommerville (2018), quando a transição do desenvolvimento de um produto para sua evolução não é suave, o processo de modificação do software recebe o nome de manutenção� Na Engenharia de Software, o termo manutenção está muito associado à evolução do software� A manutenção de software é como se denomina, em geral, o processo de adaptação e otimização de um software já desenvolvido, bem como a correção de defeitos descobertos após sua entrega� Uma equipe de desenvolvimento não poderá abrir mão da apli- cação da manutenção em seus produtos, pois essa é a forma de preservar sua qualidade ao longo do tempo� Caso a manutenção não seja aplicada, haverá uma deterioração do valor percebido desse software e, portanto, de sua qualidade� (WAZLAWICK, 2013) FIQUE ATENTO Qualquer trabalho efetuado para modificar o sis- tema, depois queele estiver em operação é con- siderado como manutenção� Muitas pessoas pen- sam na manutenção de sistema de software como pensam na manutenção de hardware: o reparo ou a substituição de peças com defeito ou que não estão funcionando apropriadamente� Porém, a manutenção de software não pode ser vista da mesma maneira� (PFLEEGER, 2004, p� 379) 8 Ao invés de se efetivar por meio de meras trocas de componentes, a manutenção de um software acontece por meio de atividades que se asseme- lham àquelas empreendidas durante o desenvolvi- mento do produto, incluindo análise de requisitos, elaboração do projeto, a efetiva revisão do código, a validação das modificações feitas e a atualização da documentação do sistema. Por isso, os profis- sionais envolvidos na manutenção não devem ser apenas os desenvolvedores, embora sejam eles os que possuem maior conhecimento do código e da estrutura do sistema� Na visão de Pfleeger (2004), a manutenção enfoca, simultaneamente, quatro aspectos principais da evo- lução de um sistema: 1. manter o controle sobre as funções do cotidiano do sistema� 2. manter o controle sobre as modificações realiza- das no sistema� 3. aperfeiçoar as funções já existentes� 4. tomar medidas preventivas para que o desempe- nho não sofra decréscimo para níveis não aceitáveis� Fica claro, então, que a manutenção é indispensável para diversas finalidades, incluindo a continuidade do atendimento aos requisitos do usuário, a correção de falhas, a melhoria do produto entregue, as eventuais integrações com outros sistemas, a adaptação a um novo ambiente operacional ou simplesmente para re- tirar o produto de operação� Considerando os quatro 9 aspectos da evolução do software que a manutenção enfoca e, por causa da sua ampla aplicabilidade, ela foi categorizada, conforme Pfleeger (2004): Manutenção corretiva Em poucas palavras, trata-se da modificação reativa em um produto de software, executada após a entre- ga, com o objetivo de corrigir problemas descobertos� Com o sistema já em operação, à medida que os defeitos se manifestam, eles são relatados ao pes- soal de manutenção, que realiza a devida correção no código e promove mudanças nos artefatos gera- dos durante o ciclo de construção do sistema, dos requisitos até a documentação� Eventualmente – e como forma de sanar uma situação emergencial – o reparo inicial pode ser temporário, e incluir alguma providência rápida para manter o sistema em fun- cionamento. Posteriormente, a correção definitiva pode ser aplicada posteriormente� Manutenção adaptativa Trata-se da modificação aplicada em um produto de software após a entrega do produto, com a finalida- de de manter o software utilizável em um ambiente alterado ou em alteração� Tomemos como exemplo a seguinte situação: um Sistema de Gerenciamento de Banco de Dados (SGBD) em operação é atualizado para uma versão mais atual� Por causa dessa atuali- zação, as rotinas de acesso ao disco necessitam de alteração para que continuem executando essa função e, em decorrência desse fato, uma adaptação deverá ser feita� Essa manutenção adaptativa, portanto, não 10 foi aplicada para que um defeito fosse corrigido, mas para que o sistema continuasse em operação� Manutenção perfectiva Nada é tão bom que não possa ser melhorado, não é mesmo? A manutenção perfectiva é aplicada em um produto de software a fim de melhorar seu de- sempenho e/ou sua manutenibilidade� A necessidade em realizar uma manutenção desse tipo não nasce, via de regra, da detecção de defeitos no sistema� Um exemplo possível é o de um sistema que de- pende bastante da velocidade de processamento para cumprir seus objetivos adequadamente� Um algoritmo mal escrito – com uma série de comandos if encadeados, por exemplo – pode fazer com que o desempenho seja afetado e, por consequência, a percepção dos usuários sobre o sistema� Manutenção preventiva Esse último caso está relacionado com a modifica- ção em um software após a entrega, a fim de reparar falhas latentes antes que se tornem efetivas� Embora guarde semelhanças com o tipo anterior, essa ma- nutenção visa a prevenir falhas, antes que elas se manifestem� Uma ferramenta de teste de software pode ser aplicada no sistema mesmo após sua en- trega e, nessa ocasião, descobrir potencial falha� Essa classificação de manutenções é útil também para que uma organização possa entender como seus esforços de manutenção estão sendo distri- buídos, sobretudo no que se refere aos custos veri- 11 ficados na atividade. Considerando dados colhidos durante mais de 25 anos junto a desenvolvedores dos Estados Unidos, um estudo concluiu que a adição ou a modificação de funcionalidades já existentes responde por 58% dos custos de manutenção, com as atividades de adaptação a um novo ambiente e reparo de defeitos respondendo pelo restante, con- forme ilustra a figura 2. Reparo de defeitos (24%) Adaptação ao ambiente (19%) Adição ou modificação de funcionalidades (58%) Figura 2: Distribuição dos custos de manutenção� Fonte: Sommerville (2018, p� 247) Foi possível constatar, portanto, que é mais caro acres- centar novas características a um sistema durante a manutenção do que implementá-las já no desenvol- vimento inicial� A necessidade de se compreender o sistema para, então, realizar a modificação é um dos fatores que faz essa atividade ficar mais cara, justa- mente por demandar mais tempo da equipe� 12 Manutenibilidade Antes de avançarmos rumo ao próximo item do texto, vale a abordagem do que chamamos de manute- nibilidade de um sistema� Ele expressa o grau de facilidade com que um software pode sofrer melho- ramentos, adaptações ou correções para satisfazer os requisitos do sistema� De qualquer modo, ela deve ser perseguida durante o processo de desenvolvi- mento do software, de modo a minimizar os custos futuros de manutenção� Você poderá também encontrar menções à manu- tenibilidade como uma característica do sistema passível de ser medida pelo tempo médio gasto para a realização de reparos no sistema� Para que essa medição seja possível, Pfleeger (2004) recomenda o registro das seguintes informações: ● O momento em que o problema é relatado pelo usuário� ● Eventual tempo perdido devido ao atraso de outros setores envolvidos na manutenção� ● O tempo exigido para que a equipe de manutenção analise o problema� ● O tempo necessário para especificar quais mu- danças deverão ser feitas no sistema� ● O tempo necessário para que essas mudanças sejam, de fato, efetivadas� ● O tempo necessário para documentar as mudan- ças feitas� 13 É certo que esse conjunto de dados, quando reunido e compilado corretamente, será útil para tomadas de decisões relacionadas ao grau de manutenibili- dade de um sistema� No entanto, haverá ocasiões em que outros tipos de decisões serão necessários e, para isso, a força de trabalho responsável pela evolução do sistema deverá contar com alguém com habilidade de gestão de situações� É justamente da gestão aplicada às mudanças que trata nossa pró- xima seção� Gestão de mudanças Embora inevitáveis, as mudanças nem sempre são simples de serem implementadas. Quando realizadas em um software, elas podem ser mais complexas ain- da, considerando a grande quantidade de elementos que o compõe e as associações entre eles� Este fato, por trivial que seja, já serve para compor o conjunto de fatores que justificam a necessidade de que essas mudanças sejam gerenciadas� Nesse sentido, uma das primeiras avaliações que o gestor (ou responsável pelo sistema) deve fazer é a real necessidade de se aplicar uma determinada manutenção, considerando a comparação entre o tempo (e esforço) para executá-la e o tempo neces- sário para um novo desenvolvimento. Pfleeger (2004) propõe que essa comparação tenha como base os tempos de desenvolvimento e de manutenção de outros projetos, a fim de que o gestor possa ter ideia de quanto tempo a fase evolutiva do sistemadurará� 14 Outra avaliação, que também deve ser feita por um gestor, é aquela que coloca em perspectiva a evolu- ção de um sistema com o seu declínio. Quando um sistema passa a requerer mudanças contínuas e complexas, o gestor deve decidir entre implementar essas mudanças ou também o substituir por um ou- tro sistema� Essa decisão pode ser amparada pelas seguintes análises, de acordo com Pfleeger (2004): ● O custo de manutenção é muito alto? ● A confiabilidade do sistema é aceitável? ● O sistema não pode mais se adaptar a mudanças adicionais em um período razoável? ● O desempenho do sistema ainda está fora das restrições prescritas? ● As funções do sistema têm utilidade limitada? ● Outros sistemas realizam o mesmo trabalho, de forma mais ágil, segura e consumindo menos recursos? ● O custo de manutenção do hardware é alto o su- ficiente para justificar sua substituição por um har- dware mais novo e barato? Se a resposta for afirmativa para a maioria (ou a totalidade) das questões, há que se considerar um novo sistema para substituir o atual� Tomar uma decisão relacionada à manutenção de um sistema estará atrelada, normalmente, ao conhecimento que a equipe acumulou ao longo do tempo sobre outros sistemas, que já sofreram manutenção e experimen- taram evolução� Foi possível, no entanto, agregar 15 conclusões sobre a evolução de sistemas em geral e dar a esse conjunto de comportamentos o nome de Leis da Evolução dos Sistemas ou Leis de Lehman� Sem a intenção esmiuçá-las, apresentaremos as três primeiras do conjunto: 1. Mudança contínua: essa lei estabelece que um programa em constante utilização deve passar por mudanças contínuas, sob pena de se tornar menos útil progressivamente� A mudança – ou o declínio – continuará até que a substituição do sistema apre- sente uma relação custo-benefício mais vantajosa� Os sistemas nunca estão completos, especialmente os de grande porte e, por isso, devem sempre evo- luir� Os sistemas experimentam expansão quando a equipe responsável adiciona a ele mais recursos, mais funcionalidades ou quando passam a se inte- grar a outros sistemas� Mudanças de ambientes e mudanças de plataforma também são fatores que provocam evolução em sistemas� (PFLEEGER, 2004) 2. Aumento de complexidade: essa segunda lei es- tabelece que, quando um sistema em evolução é continuamente modificado, sua estrutura acaba se deteriorando� Por causa disso, sua complexidade au- mentará, exceto por alguma ação que vise a reduzi-la ou mantê-la� A correta documentação das alterações pode contribuir para a redução dessa complexidade� Vale ainda o registro de que o termo “deteriorar” não tem o mesmo sentido físico quando aplicado nesse nosso contexto� 3. Autorregulação: o processo de evolução do sof- tware é autorregulado próximo à distribuição normal 16 com relação às medidas de produtos e atributos de processos� Em outras palavras, os sistemas de sof- tware exibem comportamentos e tendências regu- lares, que podem ser medidas e previstas� Uma das preocupações próprias da gestão da ma- nutenção (ou gestão das mudanças) é manter sob controle os problemas inerentes à atividade� Em re- sumo, aplicar manutenções é uma atividade difícil e não é exatamente por meio dela que um profissional espera conseguir reconhecimento dos seus pares� Do ponto de vista dos usuários, o profissional da manutenção é aquele que pode solicitar interrupção no uso do sistema por vários minutos e que, não raramente, é apontado por eles como o “culpado” pelo problema manifestado no sistema� A boa gestão da manutenção deverá equilibrar a dis- ponibilidade do sistema aos usuários com a neces- sidade inadiável de paradas em sua operação� Essa realidade é aceitável quando aplicada a um ambiente em que uma interrupção não ocasiona maiores danos à operação da organização� No entanto, como proce- der quando o sistema em questão serve como supor- te à vida de pacientes em um hospital? É necessário, portanto, que boas práticas de gerenciamento sejam colocadas em prática para que se implemente as mudanças sem graves consequências ao ambiente� Outra situação com potencial para dificultar o pro- cesso de evolução de um sistema (e que, portanto, precisa de gestão) é a falta de conhecimento do pes- 17 soal de desenvolvimento em relação à estrutura e ao código do sistema� Caso o pessoal que desenvolveu o sistema não esteja mais a serviço da organização, é possível que os desenvolvedores atuais encontrem dificuldades em compreender a documentação ou outros materiais disponíveis, o que pode atrasar o procedimento de manutenção. Afinal, registros em documentos de software nem sempre são claros e a disponibilidade de tempo para entendê-los pode ser pequena� O gerenciamento das mudanças em um sistema deve também equilibrar recursos entre a evolução dos sistemas existentes e a criação dos novos� Conforme nos ensina Pfleeger (2004), é comum que os geren- tes considerem a manutenção e o aprimoramento de um sistema como sendo mais importantes do que a construção de novas aplicações, o que pode revelar uma tendência da organização em dar con- tinuidade aos procedimentos habituais, ao invés de buscar novas alternativas de produtos� No entanto, o desejo dos atuais clientes pode estar relacionado a novas funcionalidades e a novos produtos, o que pode gerar certo conflito de interesses. Mais uma vez, a gestão da situação se faz necessária� A falta de tempo (e, por vezes, de recurso humano) para a aplicação de testes e validações nas mudan- ças provocadas pela manutenção é outra situação que requer um delicado gerenciamento� Mais uma vez, a equipe pode se deparar com condição adversa para propor paradas na operação do sistema, sim- plesmente pela sua necessidade de estar disponível 18 o tempo todo� Além disso, a equipe de manutenção pode não dispor de dados para prever os efeitos das mudanças no código e, com efeito, preparar-se para eles� A gestão desta última situação requer acom- panhamento e registro das atividades, além da pre- paração para a contingência� Há outro elemento nesse contexto que não pode ser desconsiderado e que, nessa condição, deve- rá requerer também esforços de gerenciamento: o custo da evolução de um sistema� Um gestor deve dispensar ainda maior atenção a esse fator quando o sistema considerado no processo de evolução fizer parte de outros sistemas em uso na organização� Nesse caso, não será possível considerar as mudan- ças em apenas um sistema, já que haverá a neces- sidade de avaliar como tais mudanças afetarão os outros sistemas aos quais o primeiro está integrado� (SOMMERVILLE, 2018) De fato, a quantidade de circunstâncias e fatores que demandam gerenciamento em um processo de mudança é elevada e a elas incrementaremos agora os sistemas legados. Essa denominação identifica sistemas que, embora antigos e provavelmente ul- trapassados, ainda permanecem em atividade em uma organização por causa da sua importância na operação dos negócios. Conforme a definição de Sommerville (2018), os sistemas legados são mais antigos e se baseiam em linguagens e tecnologias não mais usadas no desenvolvimento de novos sis- temas. É comum que a grande quantidade de modifi- cações feitas durante os anos de sua operação tenha 19 degradado sua estrutura� Um esquema contendo a composição de elementos de um sistema legado é proposto na figura 3. Software de aplicação Políticas e regras e negócio Software de apoio Dados de aplicação Processos de negócio Hardware de sistema Usa É execu- tado no É execu- tado no UsaUsa Incorpora conhecimento de Restringe Figura 3: Elementos de um sistema legado� Fonte: Sommerville (2018, p� 238) Em resumo, os obstáculos que esses elementos re- presentam podem ser assim descritos: 1. Hardware do Sistema: para a execução desses sistemas pode ser necessário um hardware que não se encontra mais, de manutenção dispendiosa ou que simplesmente estão fora do padrãoatual de aquisi- ções da organização� 2. Software de Apoio: o software legado pode de- pender de outros sistemas para seu funcionamen- to, que incluem sistema operacional específico ou drivers não mais encontrados ou que não são mais suportados pelo fabricante� 20 3. Software de Aplicação: o sistema que efetivamen- te realiza o processamento diário das transações da empresa pode ser composto por programas desen- volvidos em momentos e circunstâncias diferentes e cuja manutenção é muito complexa� 4. Dados de Aplicação: em um sistema que opera há muito tempo, os dados por ele gerados podem se apresentar em um volume imenso, apresentarem inconsistência ou estarem espalhados por bases de dados diversas� 5. Processos de Negócio: alguns dos processos de negócios modelados e implementados nesses siste- mas podem não mais corresponder aos processos atuais da empresa� 6. Políticas e Regras do Negócio: esse item asse- melha-se ao anterior e pode sofrer as restrições im- postas pelos processos de negócios implementados no sistema legado� A pergunta mais imediata a ser feita é: por qual moti- vo as empresas não se apressam em substituir esses sistemas por equivalentes mais modernos e mais fáceis de serem mantidos? A resposta, que também é imediata, sempre mencionará que essa operação seria cara e arriscada demais, na maioria das circuns- tâncias� Descartar um sistema legado que, apesar de obsoleto, ainda funciona, abre possibilidades para que as coisas passem a não corresponder tão bem às expectativas (SOMMERVILLE, 2018)� E, com isso, novamente estamos diante de uma situação que requer gestão relacionada à mudança� 21 As decisões associadas aos sistemas legados ten- dem a ser complexas, mas uma análise desprovida de subjetividade (sim, a retirada de um sistema lega- do pode despertar sentimentos de perda na organi- zação) pode ajudar a mitigar esse cenário intrinca- do� Nesse sentido, Sommerville (2018) sugere uma avaliação realista do sistema legado em atividade e a posterior elaboração de uma estratégia para li- dar com esse sistema� Essa avaliação pode levar o gestor a tomar uma das quatro providências abaixo: ● Descartar completamente o sistema, que será a opção no caso de o sistema não mais contribuir efe- tivamente para os processos do negócio� ● Manter o sistema como está e continuar com a manutenção, ideal para sistemas ainda estáveis e que recebem poucas solicitações de mudanças por parte dos usuários� ● Promover a reengenharia do sistema, de modo a aumentar sua manutenibilidade� Essa alternativa é apropriada para sistemas que ainda suportam melho- rias (como uma nova interface de comunicação com o cliente) e incremento de novas funcionalidades� ● Substituir todo ou parte do sistema por um sistema novo, nos casos em que a continuidade do sistema legado esteja perto da inviabilidade� Na sequência, abordaremos aspectos do gerencia- mento de um projeto de desenvolvimento de um produto de software� 22 Gestão de Projeto de Desenvolvimento de Software Na última seção desse módulo, trataremos de um aspecto de elevada importância no contexto do de- senvolvimento de sistemas: a gestão do projeto que deverá conduzir a equipe até a sua entrega� Conforme mencionamos na parte introdutória deste documento, o desenvolvimento de um software deve ser tratado como um projeto de qualquer outra natureza, respei- tadas as especificidades do produto que irá criar. A despeito da necessária adoção de uma metodologia de desenvolvimento, as atividades de planejamento de tarefas e controle de pessoas, de processos e de eventos devem estar presentes no cotidiano da elaboração do sistema� Conforme nos ensinam Pressman e Maxim (2016), o gerenciamento do processo de desenvolvimento de um software tem suas bases estabelecidas em qua- tro elementos, todos iniciados com a letra P: Pessoa, Produto, Processo e Projeto, nessa ordem� Nas próxi- mas linhas, teremos a oportunidade de discutirmos melhor cada um deles, mas uma menção especial ao elemento Pessoa deve ser feita desde já: é nas pessoas que todo o trabalho é baseado e para elas é dirigido� O esforço humano é o que move um projeto e o gerente que pretende alcançar o sucesso deverá sempre se lembrar dessa verdade� Iniciemos, pois, a análise desses elementos� 23 Pessoas Não é de hoje que estudiosos de projeto de software concordam que manter a motivação do pessoal de desenvolvimento em alta é um dos caminhos mais seguros para o sucesso de um projeto� Nesse sen- tido, o Instituto de Engenharia de Software (ou SEI – Software Engineering Institute) desenvolveu um modelo de maturidade de capacitação de pessoas – o People-CMM e, por meio dele, estabeleceu que toda organização precisa aprimorar continuamen- te sua habilidade de atrair, desenvolver, motivar, or- ganizar e reter a força de trabalho necessária para atingir os objetivos estratégicos dos seus negócios� (PRESSMAN; MAXIM, 2016) Esse modelo define que a formação de equipe, a comunicação, o bom ambiente de trabalho, o geren- ciamento de desempenho, o treinamento, a compen- sação e o desenvolvimento da carreira são suas prá- ticas-chave relacionadas às pessoas em um contexto de projeto� Ele também sugere que organizações que conseguem níveis de maturidade excelentes no desenvolvimento de pessoas têm chances maiores de implementar práticas eficazes de gerenciamento de projetos de software, o que estabelece um círculo virtuoso no ambiente de desenvolvimento� 24 FIQUE ATENTO Pressman e Maxim (2016) apresentam os envolvi- dos (ou stakeholders) em um projeto de software em cinco grupos, a saber: gerentes seniores, ge- rentes técnicos de projeto, profissionais técnicos, clientes e usuários� Produto Embora possa ter outras finalidades, é a geração de um produto que motiva a criação de um projeto de software em boa parte dos casos� Por isso, antes de delinearem um plano de projeto, os envolvidos devem estabelecer os objetivos do produto e seu escopo, além de levantar soluções alternativas e as restrições técnicas para a elaboração desse produto� Na ausência de informações precisas sobre esses aspectos do produto, a equipe terá sérias dificuldades em fazer estimativas de custo, avaliação de riscos, estabelecimento de cronograma e o controle do pro- gresso dos trabalhos� Os objetivos do produto equivalem às suas metas gerais, e não há obrigatoriedade de se definir como essas metas serão atingidas na oportunidade em que os objetivos são definidos. Bem, mas e qual se- ria o objetivo de um produto, na prática? Descrito de forma simples e objetiva, um exemplo possível para um objetivo seria: “O sistema deverá permitir que os alunos solicitem a matrícula e a efetivem por meio do pagamento da primeira mensalidade do curso”� 25 Já o escopo identifica os principais dados, funções e comportamentos que caracterizarão o produto, além de limitar as fronteiras desses dados, funções e comportamentos� (PRESSMAN; MAXIM, 2016) Uma vez definidos os objetivos e o escopo do pro- duto, a equipe deve passar a levantar soluções alter- nativas para esse produto� Dessa forma, os gestores terão meios de selecionar a melhor estratégia, con- siderados os prazos de entrega, limitações financei- ras, disponibilidade de mão de obra, familiaridade da equipe com determinada tecnologia, disponibilidade do cliente para participar das decisões e tantos ou- tros fatores que influenciam qualquer outro projeto. Processo Nesse item, no qual trataremos do terceiro elemento do gerenciamento de um projeto de desenvolvimento de software, nada melhor do que lembrarmos o con- ceito de um processo aplicado à criação de software� De acordo com Schach (2019), o processo de softwa- re é a maneira pela qual produzimos software� Ele abrange a metodologia – com seu modelo de ciclo de vida – e técnicas subjacentes, além das ferramentas utilizadas e, acima de tudo, os indivíduos que estão criando o software. A definição de Pressman e Maxim(2016) para esse item estabelece que um processo de software fornece a metodologia por meio da qual pode ser estabelecido um plano de projeto para o desenvolvimento de um software� 26 No entanto, um processo não precisa (e não deve) ser executado de forma rígida e sem a possibilidade de adaptações, já que cada projeto apresenta suas particularidades� Nem todas as atividades metodoló- gicas têm aplicabilidade imediata a todos os projetos de software, ainda mais se considerarmos tamanhos e complexidades diferentes de cada projeto� Assim, as formas de controle do projeto, suas tarefas, os artefatos intermediários gerados e os critérios de qualidade específicas de uma metodologia podem ser adequados às características próprias de certo projeto� (PRESSMAN; MAXIM, 2016) Projeto Usar as melhores práticas de gerenciamento de pro- jetos em uma empreitada de criação de um sistema não é exatamente uma mera opção para as equipes� Na verdade, a aplicação dessas técnicas de projeto permite que possamos administrar a complexidade envolvida na criação de um produto de software� No entanto, mesmo com aplicação de boas práticas, os projetos podem não ficar livres de atrasos, excesso de gastos ou desvios de seus objetivos� A ocorrên- cia dessas falhas pode ser mitigada com a adoção de controles rigorosos no projeto, o que não seria possível sem um bom gerenciamento� Feitas essas considerações conceituais, iniciamos o tratamento de aspectos mais específicos de ges- tão de um projeto de desenvolvimento de software� Nesse sentido, vale a pena voltarmos nossa atenção 27 para o entendimento de como produto e processo são combinados, tomando como base o contexto do que acabamos de discutir sobre ambos� Pressman e Maxim (2016) sustentam que um projeto começa com a junção de um produto com o processo em que ele se baseará e que essa simbiose se manifesta em cada uma das funções do produto que serão desen- volvidas pelas atividades próprias da metodologia� Vamos imaginar que uma empresa que desenvolve software adote uma metodologia em que as fases de comunicação, planejamento, modelagem, cons- trução e entrega sejam usadas em seu processo de software� Imagine agora que essa empresa esteja construindo um processador de texto, cujas funções estão parcialmente representadas nas linhas da pri- meira coluna da figura 4. Observe que as fases da metodologia estão colocadas nas colunas subse- quentes e que, dessa forma, a figura assume uma forma matricial� Figura 4: Integração do problema com o processo� Fonte: adaptado de Pressman e Maxim (2016) 28 A função de um gerente de projeto de software – com o auxílio de outros envolvidos – é a de estimar quantos e quais recursos cada célula da matriz irá precisar� Além disso, ele deve também projetar pra- zos para as tarefas e os artefatos a serem produzidos ao término de cada uma delas� Em qualquer caso, a equipe deve ter flexibilidade no momento de ado- tar seu processo de software, da mesma forma que poderá escolher outro meio – diferente desse que propusemos – para determinar prazos, recursos e artefatos do projeto� Tomaremos a etapa de Comunicação para exem- plificarmos como o porte do projeto pode afetar as formas com que as tarefas são desenvolvidas� Em um projeto pequeno, as tarefas relacionadas à co- municação podem ser assim distribuídas, segundo Pressmann e Maxim (2016): 1. Criar uma lista de questionamentos sobre alguns pontos do projeto� 2. Promover reunião com os envolvidos que possam esclarecer tais questionamentos� 3. Com a ajuda de alguns envolvidos seleciona- dos, desenvolver uma primeira versão do escopo do projeto� 4. Promover a revisão dessa primeira versão do escopo� 5. Promover alterações com base na revisão feita� 29 Um projeto mais complexo (e, portanto, provavelmen- te maior e com mais envolvidos) poderia requerer outras atividades realizadas nesse mesmo contexto, por exemplo, preparação de cronogramas para as diversas reuniões e previsão de miniespecificações para cada requisito de maior importância e comple- xidade� Mesmo que a atividade metodológica seja a mesma (a Comunicação, no caso), os esforços, no primeiro caso, serão menores do que no segundo caso, em que o projeto é de maior porte� 30 CONSIDERAÇÕES FINAIS Encerramos assim mais um módulo de estudos� Durante o tempo que permanecemos juntos, tivemos a oportu- nidade de discutir questões interessantes sobre uma atividade que costuma ser vista como pouco popular (para evitar a referência “desinteressante”) entre os de- senvolvedores� A evolução de um software não é ape- nas mais uma das etapas de algum procedimento de software� Na verdade, ela é o motivo da continuidade da existência comercialmente viável de um produto de software e, nessa condição, não pode ser negligenciada� A fim de cumprirmos os objetivos desta leitura, tra- tamos de aspectos conceituais da evolução e da manutenção de um sistema, o que preparou o ca- minho para que pudéssemos abordar elementos da crucial tarefa de gerenciar as inevitáveis mudanças em um produto� Sem um efetivo gerenciamento, o que deveria ser a aplicação de melhorias pode se transformar em mais complexidade embutida em um sistema. Como assunto final, analisamos itens que fazem parte do processo de desenvolvimento de um sistema e que estão relacionados à gestão do projeto que conduzirá a equipe a entrega de um produto de qualidade� Esperamos que seu aproveitamento do conteúdo tenha sido excelente e recomendamos que continue se apro- fundando nos assuntos da Engenharia de Software� Bons estudos e boa sorte, sempre! 31 Referências Bibliográficas & Consultadas COHN, M� Desenvolvimento de software com scrum: aplicando métodos ágeis com sucesso� Porto Alegre: Bookman, 2011� [Minha Biblioteca] PAULA FILHO, W� P� Engenharia de software: funda- mentos, métodos e padrões� 3� ed� Rio de Janeiro: LTC, 2009� [Minha Biblioteca] PFLEEGER, S� L� Engenharia de software: teoria e prá- tica� 2� ed� São Paulo: Prentice Hall, 2004� [Biblioteca Virtual] PRESSMAN, R�; MAXIM, B� Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016� [Minha Biblioteca] SBROCCO, J� H� T� C�; MACEDO, P� C� Metodologias ágeis: engenharia de software sob medida� São Paulo: Érica, 2012� [Minha Biblioteca] SCHACH, S� R� Engenharia de software: os paradig- mas clássico e orientados a objetos� 7� ed� Porto Alegre: AMGH, 2009� SOMMERVILLE, I� Engenharia de software� 10� ed� São Paulo: Pearson Education do Brasil, 2018� [Biblioteca Virtual] VAZQUEZ, C. E.; SIMÕES, G. S. Engenharia de requi- sitos: software orientado ao negócio� Rio de Janeiro: Brasport, 2016� [Biblioteca Virtual] WAZLAWICK, R� S� Engenharia de software: conceitos e práticas� Rio de Janeiro: Elsevier, 2013� Introdução Software Evolução de Software Manutenibilidade Gestão de mudanças Gestão de Projeto de Desenvolvimento de Software Pessoas Produto Processo Projeto Considerações finais Referências Bibliográficas & Consultadas
Compartilhar