Lição 15 - Modelos de Desenvolvimento
e a Engenharia de Software
e a Engenharia de Software
Em lições anteriores você teve a oportunidade de aprender os conceitos e premissas aplicados a Engenharia de Software. Nesta lição vamos percorrer uma trilha de aprendizagem que envolverá o aprendizado dos ciclos de vida no desenvolvimento de software. Mostrarei a você quais são eles e as suas características. Você aprenderá também, que para a construção de um sistema é necessário passar por algumas fases, sendo elas: Levantamento de Requisitos, Análise, Projeto, Desenvolvimento, Teste, Validação e Implementação. Ao final da lição, você conseguirá compreender e documentar os requisitos, tarefas estas que um Analista de Sistema é responsável.
Estamos na era da informação, da tecnologia, da inovação, quando as informações mudam, constantemente, devido à evolução do mundo em que vivemos. E é simples chegar a esta conclusão, basta acompanhar as mídias sociais, os telejornais e outros meios de comunicação para ver que a informação em segundos vai de um continente a outros mais. Sim, a outros! Isso tudo faz com que as indústrias sejam obrigadas a atualizar seu portfólio de produtos e serviços com mais frequência, o que gera acirrada comparação entre os concorrentes.
Neste mundo tão competitivo, algumas perguntas vêm à mente:
Como diferenciar o produto?
Como manterei meu software no mercado?
Como obter lucro com o produto que comercializo?
O que posso fazer de diferente se meu produto é similar ao concorrente?
Você sabia que, muitas vezes, o lucro está justamente no planejamento, na qualidade do que é oferecido aos consumidores, do que no produto ou serviço em si? Quando são realizadas reuniões com os clientes, a coleta de requisitos de forma assertiva, a prototipação e as entregas constantes, o cliente sente-se próximo à empresa, o que, na área de tecnologia, é essencial, pois a concorrência é imensa.
Vamos juntos trilhar este caminho de conhecimento. Pegue papel e caneta (ou algum meio eletrônico para fazer suas anotações) e venha comigo.
Imagine que você acabou de ser contratado(a) por uma empresa que atua na gestão de sistemas escolares. Este sistema é utilizado pelos docentes para registro de frequência, avaliações, planos de aula e disponibilizar materiais aos alunos. Os alunos, por sua vez, utilizam o sistema para verificar e entregar as atividades avaliativas, assim como os conteúdos postados pelos docentes, os alunos também podem fazer solicitações diversas, acompanhar sua frequência e suas notas. A secretaria escolar acessa o mesmo sistema, o qual contém informações pessoais dos alunos, seus contratos, o financeiro (mensalidades pagas, em atraso e a pagar). O departamento de Recursos Humanos (RH) também acessa o mesmo sistema, mas eles atuam com os dados dos docentes e demais colaboradores da instituição, de forma a gerar pagamento dos funcionários mediante o cargo de cada um. Há, também, o setor pedagógico, que efetua o acompanhamento de alunos e docentes para o bom andamento dos cursos, ou seja, este setor possui acesso aos dados dos alunos e aos registros dos docentes.
O seu desafio aqui é apresentar formas de solucionar os problemas que ocorrem no momento em que o cliente está utilizando o software. Alguns dos problemas relatados pelos clientes da empresa são:
Às vezes, após efetuar o login no sistema, quando o aluno possui duas matrículas ativas, ou seja, faz dois cursos em turnos diferentes, somente um dos cursos aparece para ele ver os materiais e fazer as atividades. Neste caso, o aluno terá sérios problemas, pois nem consegue visualizar as informações de um dos cursos.
O docente faz lançamento de frequência e registra conteúdo ministrado em sala de aula, disponibiliza materiais e atividades, diariamente, no entanto o sistema tem apresentado muita lentidão em todos estes processos. Com esta lentidão, os profissionais ficam desmotivados a manter os registros atualizados, o que interfere em todo o processo escolar que é realizado inteiramente via sistema, além de gerar muito estresse.
Outro problema enfrentado pelos docentes é que, quando eles tentam anexar atividades para o aluno fazer download posteriormente, aparecem diversos erros na tela, mas o sistema não indica o que poderia ser feito para que isso não ocorra, então, nem o setor pedagógico consegue passar orientação à sua equipe.
Algumas empresas concorrentes já estão fazendo a apresentação dos seus respectivos sistemas, também de Gestão Escolar, para os clientes que hoje são seus, da empresa em que você trabalha. Caso sua empresa continue com estes problemas no produto que ela fornece, pode vir à falência, pois uma empresa sem clientes não existe.
Sabendo que os três problemas mencionados anteriormente precisam de solução emergencial e permanente, aqui vai um spoiler: quando há documentação, e os processos de desenvolvimento de software são respeitados e aplicados, os problemas são minimizados e, em muitos casos, podem ser até zerados.
Durante esta lição, você deve ter percebido que, em diversos momentos, eu menciono Processo de Software. Na Engenharia de Software, processos são etapas que devem ser seguidas para atingir o objetivo final, que pode ser desde a entrega de um produto ou até um serviço.
Um processo é um conjunto de atividades relacionadas que levam à produção de um sistema de software. (SOMMERVILLE, 2011)
Um exemplo que gosto muito de mencionar, quando o assunto é processo, é o da receita de bolo, em que colocamos os ingredientes, cada um com suas quantidades corretas, da forma adequada, no momento certo. Cada um possui a forma de diluir, mexer, assar e, por fim, o consumo dele. Da mesma forma que o bolo foi preparado (seguindo processos), um software deve ser desenvolvido para que seja entregue com qualidade.
O Ciclo de vida de software, também chamado de Software Development Lifecycle - SDLC - é um conjunto de etapas que envolvem desde a concepção de um projeto até a descontinuação do seu desenvolvimento. É uma excelente forma de atingir a eficácia na criação e na entrega de produtos, pela forma de acompanhar o desenvolvimento de aplicações, gerenciar riscos, verificar erros e analisar possibilidades de aprimoramentos (ROCHA, 2001).
A norma IEC 12207(ABNT, 2008) detalha os processos que envolvem o ciclo de vida do software agrupados em três classes: processos fundamentais, processos de apoio e processos organizacionais.
Os processos fundamentais envolvem a contratação, a execução do desenvolvimento e a manutenção de produtos durante o ciclo de vida do software. Já os processos de apoio contribuem para a qualidade e o sucesso do projeto. Os processos organizacionais são empregados para estabelecer e implementar uma estrutura que engloba todos os envolvidos no desenvolvimento do projeto (ROCHA, 2001). Na Figura 3, há os Processos de ciclo de vida do software, e as tarefas de cada um dos processos são detalhadas.
Existem vários Modelos de Processos de Software, que podem ser entendidos como normas ou até como uma forma inteligente de padronizar, desde o início, da coleta de ideias até a entrega do produto ao cliente, assim como o acompanhamento de uso do mesmo. As principais etapas e que estão em praticamente todos os modelos são coleta de requisitos, elaborar documentação do projeto / desenvolvimento do sistema e implantação / manutenção do sistema (PRESSMAN, 2002).
A seguir, detalharemos todas as fases do projeto, separadamente:
Levantamento de Requisitos: neste momento, o analista deve conversar com o cliente perguntando e anotando, ou gravando, tudo o que ele espera do produto, suas expectativas, suas limitações, sejam elas financeiras sejam de equipe, a abrangência do software (quem são as pessoas que o utilizarão), as restrições (que são as regras de funcionamento do sistema, na Engenharia de Software, conhecidas como Regras de Negócio do Produto), quais dados o cliente precisar armazenar e como ele quer visualizá-los. É neste momento que deve ser criado um vínculo do cliente com a empresa, inclusive, comprometimento de ambas as partes para que a solução tenha sucesso.
Análise: aqui, o analista deve elaborar a documentação técnica baseada na coleta de requisitos para então orientar a equipe de desenvolvimento. A documentação técnica é composta pelas regras de negócios definidas em requisitos funcionais e não funcionais.
Projeto: neste momento, os requisitos são modelados, com as ferramentas case, que serão estudadas na próxima lição. Por meio delas, é possível elaborar projeto gráfico de todos os processos do software. Os diagramas elaborados na fase de projeto servem tanto para orientar a equipe técnica de desenvolvimento quanto para manter o cliente ciente do que ele realmente está solicitando. É uma segurança para ambos os lados e considerado um documento para, posteriormente, inclusive, gerar o custo do software.
Desenvolvimento: os programadores recebem as especificações (que são os requisitos funcionais / não funcionais, o projeto, entre outros), codificam o programa em alguma linguagem de programação, executam os testes pertinentes ao desenvolvimento e liberam o código para a equipe de testes. Muitas vezes, os testes são todos realizados pela equipe de programação, e o software vai direto para a fase de implementação, o que acaba ocasionando problemas diversos, como erros pelo fato de testes necessários terem sido ignorados.
Teste: nesta fase, testa-se, exaustivamente, o sistema, diversos tipos de testes são realizados. Este conteúdo será aprofundado na lição três. Basicamente, são realizados testes de caixa branca, testes de caixa preta, de regressão, usabilidade, segurança, integração, performance, instalação, manutenção, testes funcionais, estresse, entre outros. Diversos tipos de testes podem ser automatizados, visando assegurar a qualidade e rapidez de sua execução.
Validação: esta é muito importante também, pois é quando são confrontados os requisitos solicitados pelo cliente com o que realmente foi realizado. Geralmente, neste momento, é aplicada a matriz de mapeamento de requisitos. Esta fase de validação anda em parceria com a fase anterior, pois, no momento de testar o software, já é possível fazer a validação de itens.
Implantação e Manutenção: a implantação é uma das etapas mais delicadas, pois podem ocorrer problemas não previstos nas etapas anteriores, o que nos leva a um dos tipos de manutenção, que é a corretiva (para resolução do problema). Entenda que a manutenção ocorre durante toda a vida útil do produto, seja ela por algum melhoramento seja mesmo em virtude de novas exigências, e podem ser internas ou externas da empresa. Por exemplo, se alguma lei mudou e ela interfere no software, é necessário manutenção. Esta situação é muito comum em softwares que trabalham com emissão de documentos fiscais, já que a legislação está em constante alteração.
Na literatura, o termo Modelo de Processos de Software pode ser encontrado com outros nomes: Modelos de Ciclo de Vida de Software, Modelos Prescritivos de Processos, Modelos de Processos de Software, Modelos de Processos, Modelagem Ciclo de Vida, Paradigmas do Desenvolvimento de Software, Paradigmas do Ciclo de Vida.
Anteriormente, mencionei que existem diversos modelos de processos ou de ciclo de vida. Mas por que existem tantos modelos? Softwares são criados para a resolução de problemas, os quais possuem quatro estágios distintos: situação atual, definição do problema, desenvolvimento técnico e a integração com a solução. Este ciclo ainda pode ser aplicado à solução total ou às partes que estão sendo desenvolvidas (PRESSMAN, 2002).
Como sabemos, muitas vezes, as soluções não ficam conforme esperadas, possuem erros, ou são necessárias novas implementações, e aí vem a dúvida: em que momento do modelo podemos incluir a correção, a manutenção ou mesmo a implementação do software? Para responder a esta pergunta, percorrerei os principais modelos de ciclo de vida de um software, pois os autores, no decorrer dos anos, foram criando modelos baseados na experiência que as empresas tiveram na implementação de cada um dos modelos.
Este modelo também recebe o nome de modelo sequencial linear e, conforme sua nomenclatura, é a sua representação gráfica. Neste modelo, é sugerida uma abordagem sistemática sequencial para o desenvolvimento do software.
O modelo espiral foi definido e proposto por Barry Boehm, em 1988, no seu artigo A Spiral Model of Software Development and Enhancement. O modelo é dividido em certo número de atividades que formam uma estrutura chamada regiões de tarefas. Basicamente, existem três a seis regiões de tarefas (PRESSMAN, 2002). Cada uma das regiões é preenchida por um conjunto de tarefas, as quais são adaptadas às características do projeto a ser desenvolvido. Se o projeto for pequeno, o conjunto de tarefas é pequeno, caso o projeto seja maior, consequentemente, o conjunto de tarefas também será maior.
As regiões de tarefas são:
Comunicação com o cliente: tarefas necessárias para estabelecer comunicação efetiva entre desenvolvedor e cliente.
Planejamento: tarefas necessárias para definir recursos, prazos e outras informações relacionadas ao projeto.
Análise de risco: tarefas necessárias para avaliar os riscos, tanto técnicos quanto gerenciais.
Engenharia: tarefas necessárias para construir uma ou mais representações da aplicação.
Construção e liberação: tarefas necessárias para construir, testar, instalar e fornecer apoio ao usuário, como a documentação e o treinamento.
Avaliação pelo cliente: tarefas necessárias para obter realimentação do cliente com base na avaliação das representações do software criadas durante o estágio da engenharia e implementadas durante o estágio da instalação.
O modelo de prototipagem consiste em ouvir o que o cliente precisa, elaborar um modelo de software que atenda aos objetivos gerais por ele solicitados. Então, o modelo é disponibilizado para o cliente verificar se é isso mesmo que solicitou, ajustes são realizados, como um ciclo, até que atenda ao que ele realmente precisa e, então, o software seja desenvolvido e entregue (PRESSMAN, 2002).
O modelo se propõe a ser menos burocrático, e o desenvolvimento do software mais rápido que o modelo sequencial linear. No entanto, se a coleta inicial de requisitos e as regras de apresentação da prototipagem ao cliente não forem bem ajustadas, este modelo, apesar de ser mais assertivo, tende a ser mais demorado para a implementação do software.
O modelo incremental combina elementos do modelo sequencial linear com a interatividade da prototipagem. Cada sequência linear produz um incremento executável, ou seja, uma versão executável do software.
O primeiro incremento de um modelo incremental é chamado de núcleo do produto, ou seja, os requisitos básicos são satisfeitos, mas nem todas as características são desenvolvidas. O núcleo do produto é usado pelo cliente, ou passa por uma revisão detalhada. É desenvolvido um plano para o próximo incremento para satisfazer as necessidades do cliente ou características faltantes e este processo é repetido até que o produto seja produzido por completo (PRESSMAN, 2002). O que este modelo traz de diferente da prototipagem, é que a cada incremento, um novo produto operacional é gerado.
Nesta lição, você aprendeu que um software possui ciclo de vida, que há diversos modelos de ciclo vida, modelos estes, que foram aplicados em empresas reais e que, devido a necessidades e situações que foram surgindo, novos modelos passaram a ser criados, gerando a evolução dos modelos.
Também aprendeu que requisitos são as regras para o funcionamento do sistema, ou seja, eles são importantíssimos, pois tudo se inicia por deles. Caso seja feita uma coleta ruim de requisitos, há o risco de nem sair produto, ou o cliente frustrar-se com o que for lhe apresentado. Já se a coleta, negociação e a análise de requisitos, for realizada com qualidade, a tendência é de sucesso com o cliente e, consequentemente, da empresa.
Um analista de sistemas possui um papel muito importante na indústria de software, e tenho notado que, em outras empresas, não necessariamente só do ramo de TI (Tecnologia da Informação), tem sido muito procurado. E sabe o motivo? Coletar a informação do que o cliente precisa e intermediar com a equipe técnica. Quando este serviço é prestado com assertividade, todos tendem a crescer.
O desafio do analista é conhecer a área em que fará análise e verificação dos requisitos, pois, para ele coletar boas informações, dialogar com o cliente, precisa entender do assunto. Imagine que você envie o currículo para atuar em uma empresa que produz software para postos de combustíveis, o mínimo que precisa buscar conhecer é que tipo de serviço é fornecido em um posto de combustível, quais são os tipos de combustíveis oferecidos. Já se você enviar currículo para uma empresa que atue no ramo de hotelaria, os conhecimentos mínimos que precisa buscar do cliente são: como funciona o hotel? É somente um ou é uma rede de hotéis? Se for uma rede, os dados são separados por hotel ou uma base de dados somente? Quem são as pessoas que utilizarão o sistema?
Perceba que são conhecimentos simples, mas não pense que a simplicidade não é importante, é aqui que a maioria deixa a desejar. Quando você conhece o mínimo do cliente que atenderá, terá a atenção e a confiança do mesmo. Além de, é claro, o sistema sair muito bom.
Nós nos encontraremos na próxima lição!
Clique aqui, teste seus conhecimentos sobre esta lição e confirme sua participação nesta disciplina!
ABNT. ISSO/IEC 12207. Systems and software engineering — Software life cycle processes. Rio de Janeiro: ABNT, 2008.
KRUKOV, Y. [Sem título]. [2022]. 1 fotografia. Disponível em: https://www.pexels.com/pt-br/foto/debate-brainstorm-juntar-ideias-negocio-7640741/. Acesso em: 9 jun. 2022.
PRESSMAN, R. S. Engenharia de Software. 5. ed. Rio de Janeiro: McGraw-Hill, 2002.
ROCHA, A. R. C. da. Qualidade de Software. São Paulo: Prentice Hall, 2001.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson, 2011
SPISKE, M. [Sem título]. [2022]. 1 fotografia. Disponível em: https://www.pexels.com/pt-br/foto/html-world-wide-web-rede-mundial-de-computadores-fundo-177598/. Acesso em: 9 jun. 2022.
THISIS ENGINEERING. [Sem título]. [2022]. 1 fotografia. Disponível em: https://www.pexels.com/pt-br/foto/aplicativo-app-debate-brainstorm-3912478/. Acesso em: 9 jun. 2022.