Como empresas são impactadas pelos processos de software
Cada vez mais os setores da economia (primário, secundário e terciário) tem feito uso (e se tornado dependente) das facilidades providas pelos avanços e descobertas da tecnologia da informação. Tecnologias de previsão do tempo e de localização via satélite, por exemplo, são utilizadas no campo para aumentar a produtividade da lavoura e a eficiência de maquinas colheitadeiras. Softwares que gerenciam toda a cadeia de produção e que controlam máquinas e robôs são cada vez mais comuns nas fábricas. Sistemas de venda e controle de estoque são diferenciais estratégicos indispensáveis ao comércio. Diante deste cenário, produzir e manter software dentro de custos, prazos e critérios de qualidade adequados torna-se requisito obrigatório (SOMMERVILLE, 2007).
Relacionado: O Guia de Engenharia de Software
Boas práticas nos processos de software
Para que um software seja desenvolvido de forma consistente, é preciso aliar boas práticas da engenharia de software[1] com um robusto e eficiente processo de desenvolvimento. Diferentes tipos de sistemas necessitam de diferentes processos de desenvolvimento. Por exemplo, um software de tempo real de uma aeronave deve ser completamente especificado antes do inicio do desenvolvimento, enquanto que um sistema de comércio eletrônico a especificação e o desenvolvimento do software podem ser conduzidos paralelamente. O uso de um processo de software inadequado pode reduzir a qualidade ou a utilidade do produto de software a ser desenvolvido e/ou aumentar os custos de desenvolvimento. Este fato leva as organizações que produzem software a usar processos de desenvolvimento que sejam eficientes e que atendam plenamente suas necessidades (SOMMERVILE, 2007).
Howard Baetjer Jr, em seu livro “Software as Capital”, faz o seguinte comentário sobre processo de software (BAETJER 1998, pág. 85) : “... Desde que o software, como todo capital, é conhecimento incorporado, e como esse conhecimento está inicialmente disperso, tácito, latente e incompleto na sua totalidade, o desenvolvimento de software é um processo de aprendizado social. O processo é um dialogo no qual o conhecimento, que deve se transformar em software é reunido e incorporado ao software. O processo fornece interação entre usuários e projetistas, entre usuários e ferramentas em desenvolvimento e entre projetistas e ferramentas em desenvolvimento (tecnologia). É um processo iterativo no qual a própria ferramenta serve como meio de comunicação, com cada nova rodada de dialogo explicitando mais conhecimento útil do pessoal envolvido...”.
Efetivamente, a elaboração de software de computador é um processo de aprendizado, e o resultado, é a incorporação de conhecimentos coletados, destilados e organizados à medida que o processo é conduzido. Processo é o alicerce da engenharia de software. É ele que permite o desenvolvimento racional e oportuno de softwares de computador (PRESSMAN, 2006). Ele pode ser definido para atividades como desenvolvimento, manutenção, aquisição e contratação de software (PAULA FILHO, 2009). Processos de software formam a base para o controle gerencial de projetos de software e estabelece o conteúdo no qual os métodos técnicos são aplicados, os produtos de trabalho (modelos, documentos, dados, relatórios, formulários, etc.) são produzidos, os marcos são estabelecidos, a qualidade é assegurada e as modificações são adequadamente geridas (PRESSMAN, 2006).
O Guia PMBOK® define processo como sendo um conjunto de atividades inter-relacionadas realizadas para obter um conjunto específico de produtos, resultados ou serviços[2] (PMBOK, 2008). Segundo o IEEE[3], um processo é uma sequencia de passos executada com um determinado objetivo (IEEE, 2003).
Para o CMMI[4], um processo é definido quando tem uma descrição que é mantida, ou seja, tem documentação que detalha o que é feito (produto), quando (etapas), por quem (papéis), os itens utilizados (insumos) e os itens produzidos (resultados)(CMMI, 2006). Os processos podem ser definidos com mais ou menos detalhes e suas etapas podem ter ordenação parcial, o que pode permitir paralelismo entre algumas delas (PAULA FILHO, 2009).
Desenvolvimento de Software
Focando no desenvolvimento de software, Ian Sommerville define um processo de software como um conjunto de atividades que leva à produção de um produto de software (SOMMERVILLE, 2007). Roger S. Pressman define processo de software como um arcabouço para as tarefas que são necessárias para construir software de alta qualidade (PRESSMAN, 2006). Wilson de Paula Filho faz uma analogia interessante, para ele processo é uma receita a ser seguida (PAULA FILHO, 2009). Processos de softwares são complexos e como todos os processos intelectuais e criativos dependem de julgamento humano. A existência de um processo de software não garante que o software será entregue no prazo, de que ele irá satisfazer as necessidades do cliente, ou exibirá os atributos arquiteturais que manterão as características de qualidade em longo prazo. Um processo deve ser acoplado a uma sólida prática de engenharia de software e deve ser avaliado para garantir que satisfaça a um conjunto de critérios básicos de processo que demonstram ser essenciais para uma engenharia de software bem sucedida (PRESSMAN, 2006).
Não existe um processo ideal. As organizações devem criar, verificar, validar e aperfeiçoar seus próprios métodos (CMMI, 2006). Várias destas desenvolvem abordagens inteiramente diferentes, adequadas à sua realidade, para o desenvolvimento de software. No caso de alguns sistemas, como os sistemas críticos[5], é necessário um processo de desenvolvimento muito bem estruturado. Nos sistemas de negócios, com requisitos que mudam rapidamente, um processo flexível e ágil é provavelmente mais eficaz (SOMMERVILE, 2007).
Existem vários processos de desenvolvimento de software, porém algumas atividades fundamentais são comuns a todos eles (SOMMERVILE, 2007):
- Especificação: define a funcionalidade do software e as restrições sobre sua operação.
- Projeto e implementação: o software que atenda a especificação deve ser produzido.
- Validação de software: o software deve ser validado para garantir que ela faça o que o cliente deseja.
- Evolução: o software deve evoluir para atender aos novos requisitos que naturalmente surgirão.
Processos de software têm como base modelos de processo genéricos. Esses modelos genéricos não são descrições definitivas de processos de software. Ao contrário, são abstrações do processo que podem ser usadas para explicar diferentes abordagens para o desenvolvimento de software. Eles podem ser considerados como frameworks[6] de processo que podem ser ampliados e adaptados para criar processos mais específicos de engenharia de software. Os modelos genéricos de processos de software amplamente utilizados são o modelo em cascata, o modelo de desenvolvimento evolucionário e o modelo de desenvolvimento baseado em componentes. Estes, não são mutuamente exclusivos e comumente são utilizados em conjunto, especialmente para desenvolvimento de sistemas de grande porte (SOMMERVILLE, 2007).
O modelo em cascata considera as atividades fundamentais do processo compreendendo especificação, desenvolvimento, validação e evolução, e as representa como fases de processos separadas, tais como especificação de requisitos, projeto de software, implementação, testes, integração e manutenção. Neste modelo não se dá inicio a fase seguinte antes que a anterior tenha sido terminada. As vantagens do modelo cascata consistem na documentação produzida em cada fase e sua aderência a outros modelos de processos de engenharia. Seu maior problema é a divisão inflexível do projeto em estágios distintos. Os compromissos devem ser assumidos no estágio inicial do processo, o que torna difícil reagir às mudanças de requisitos. Este modelo pode ser usado quando os requisitos forem bem compreendidos e houver pouca probabilidade de mudanças radicais durante o desenvolvimento do sistema (PRESSMAN, 2006).
O modelo de desenvolvimento evolucionário intercala as atividades de especificação, desenvolvimento e validação. Um sistema inicial é desenvolvido rapidamente baseado em especificações abstratas. Este sistema é, então, refinado com as entradas do usuário para produzir um sistema que satisfaça suas necessidades. Esta abordagem é mais eficaz do que a abordagem em cascata na produção de sistemas que atendam às necessidades imediatas dos usuários. A vantagem de um processo de software baseado na abordagem evolucionária é que a especificação pode ser desenvolvida de forma incremental. À medida que os usuários compreendem melhor seu problema, esse conhecimento é repassado para o desenvolvimento do software (SOMMERVILLE, 2007).
A engenharia de software baseada em componentes baseia-se na existência de um numero significativo de componentes reusáveis. O processo de desenvolvimento do sistema foca a integração desses componentes, em vez de desenvolvê-los a partir do zero. Ela tem a vantagem óbvia de reduzir a quantidade de software a ser desenvolvido e, desta maneira, reduzir os custos e riscos. Isto também leva a uma entrega mais rápida de software. No entanto, compromissos com os requisitos são inevitáveis e isso pode levar a um sistema que não atenda às reais necessidades dos usuários. Além disso, algum controle sobre a evolução do sistema será perdido se novas versões dos componentes reusáveis não estiverem sob controle da organização que os utiliza (SOMMERVILLE, 2007).
Embora não exista um processo de software ideal, existe espaço para o aprimoramento (SOMMERVILE, 2007). Os processos podem incluir técnicas obsoletas ou não tirar vantagem das melhores práticas, porém existem processos customizáveis que permitem aliar a boa prática de desenvolvimento, sustentada por um grande arcabouço de métodos que permitem desenvolver software de qualidade em tempo hábil. .
[1] Engenharia de Software é uma disciplina da engenharia relacionada com todos os aspectos da produção de software, desde os estágios iniciais de especificação do sistema até sua manutenção, depois que este entrar em produção (SOMMERVILLE, 2007). [2] Esta definição é a mesma utilizada pelo CMMI para definir processo (CMMI, 2006). [3] IEEE é a maior associação profissional do mundo dedicada ao avanço da inovação tecnológica e excelência para o benefício da humanidade (IEEE, 2010). [4] O CMMI descreve as características de um processo de software e os critérios para um processo bem sucedido (CMMI, 2006). [5] Sistemas técnicos ou sociotécnicos dos quais as pessoas ou os negócios dependem. Se esses sistemas falharem ao desempenhar seus serviços conforme esperado, podem causar sérios problemas e prejuízos significativos (SOMMERVILLE, 2007). [6] Framework pode ser definido sob dois aspectos: estrutura e função. Quanto à estrutura, um framework é a reutilização do design de parte ou totalidade de um sistema representado por classes abstratas e pela forma como instâncias destas classes interagem (JOHNSON, 1997).
Links Úteis
- Engenharia de software:
Engenharia de software é uma área da computação voltada à especificação, desenvolvimento, manutenção e criação de software. - Engenharia de Software Abril:
O engenheiro com esta formação dedica-se ao desenvolvimento de softwares e programas computacionais - Curso de engenharia de software:
Torne-se um programador, analista ou gerente de projetos com grandes habilidades de engenharia de software. Conheça metodologias e ferramentas como Scrum, XP, PMBOK, UML e muito mais.
Saiba mais sobre Desenvolvimento de Software ;)
- Curso Gerência de Projetos:
A gerência de projetos possui um conjunto de atividades associadas aos processos da gerência. - Definições Iniciais sobre Validação, Verificação e Testes:
Atividades de VV&T são fundamentais ao longo de todo o processo de desenvolvimento de software. - Curso de Scrum: Conhecendo o Product Owner:
Este curso de Scrum traz um treinamento voltado exclusivamente para Product Owners.
Confira outros conteúdos:
Teste de Acessibilidade de Software
Boas Práticas em TDD
Principais Anomalias Arquiteturais de...
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.