image

Unlimited bootcamps + English course forever

80
%OFF
Clezer Oliveira
Clezer Oliveira26/07/2025 17:09
Share
Randstad - Análise de DadosRecommended for youRandstad - Análise de Dados

Engenharia de Software #01 – Introdução à Engenharia de Software

    Olá! Este é o primeiro de uma série de resumos baseados no livro Engenharia de Software de Ian Sommerville. Meu objetivo com essa série é reforçar meus estudos e compartilhar com a comunidade de tecnologia os principais conceitos da área, com uma linguagem acessível.

    Espero que este conteúdo possa ser útil para quem está começando ou revisando fundamentos. Feedbacks são sempre bem-vindos!

    ____________________________________________________________________________________________________________________________________________

    Introdução

    Com a evolução da tecnologia cresce cada vez mais a nossa dependência de dispositivos e ferramentas que nos auxiliam nas mais diversas atividades, e, uma coisa é certa - o mundo moderno não funciona sem software. Os governos, indústrias, sistemas financeiros e plataformas de entretenimento utilizam software de forma intensa.

    Softwares não possuem limitações físicas ou materiais; eles são abstratos e intangíveis, isso quer dizer que são limitados apenas pelas suas complexidades e custo de produção, softwares complexos consequentemente são mais caros e difíceis de modificar. Além disso não existe “a maneira definitiva de fazer um software”, cada software tem características próprias, sendo necessária uma abordagem especifica ao seu propósito – um sistema médico tem necessidades diferentes de um jogo.

    Ainda que a engenharia de software seja vista muitas vezes como atrasada ou inadequada para o mercado atual onde o imediatismo reina, muitos projetos falham pela crescente complexidade dos sistemas – conforme a tecnologia evolui, ela facilita a produção de software e com isso os sistemas ficam mais complexos. Além disso, a falta de um processo de gerenciamento que se preocupa com todas as etapas de produção de software, desde sua concepção até a entrega e manutenção, faz com que o software se torne menos confiável, o custo de produção aumente, a modificação e manutenção fique mais difícil. E é aí que a engenharia de software entra com o objetivo de gerir todo o ciclo de desenvolvimento de software.

    Software

    Vale lembrar que ao falarmos de software em engenharia de software, não estamos nos referindo apenas ao programa em si, mas também a sua documentação, manual e todo material necessário para que ele seja útil. Esses softwares são concebidos como produtos, podendo ser chamados também de produtos de software e podem ser divididos em duas grandes categorias:

    • Produto de software genérico: São softwares para o público geral, o desenvolvedor é quem especifica o produto e suas funcionalidades. Exemplos: Aplicativos de edição de imagem e vídeos, aplicações de gerenciamento de rotinas.
    • Produto de software personalizado: São desenvolvidos para atender as necessidades de um cliente especifico, o cliente é quem determina a sua especificação e funcionalidades. Exemplos: Sistema de computador de bordo, sistemas de negócios específicos.

    A respeito da qualidade é importante analisar todos os atributos do software e não apenas a sua funcionalidade (o que ele faz). A qualidade envolve todos os aspectos de como ele se comporta em execução, segurança, desempenho, estrutura e documentação associada. Aqui novamente, não existe um modelo ideal geral, cada software vai possuir uma característica crítica, um sistema bancário precisa de confiabilidade e segurança da informação, enquanto aplicações interativas e de entretenimento precisam de responsividade.

    Embora não exista um modelo ideal, bons softwares compartilham de 4 características fundamentais:

    • Aceitabilidade: software precisa ser projetado para que o usuário consiga utilizá-lo, isso significa que precisa ser inteligível, útil, e se necessário, compatível com outros sistemas.
    • Dependabilidade e segurança: A dependabilidade inclui segurança da informação (security), segurança (safety) e confiabilidade. Idealmente o software não deve falhar, mas em caso de falha, isso quer dizer que o software não deve causar danos físicos ou econômicos ao usuário. Além disso deve ser protegido contra usuários maliciosos, não permitir acesso ou danos no sistema.
    • Eficiência: Não desperdiçar recursos como memória e ciclos do processador. Eficiência afeta a responsividade, tempo de processamento e utilização de recursos.
    • Manutenibilidade: O software deve ser escrito visando a sua evolução e escalabilidade.

    Engenharia de Software

    Como mencionado anteriormente, a engenharia de software se preocupa com todo os aspectos da produção de software, desde os estágios iniciais até manutenção após a entrega. Os engenheiros são responsáveis por solucionar problemas através de teorias, ferramentas e metodologias, e quando estas não estiverem disponíveis, deve propor outras soluções, sempre respeitando os limites financeiros e organizacionais.

    A engenharia de software utiliza uma abordagem sistemática, uma sequência de atividades que resulta na produção de um software. Essa abordagem é chamada de processo de software e possui quatro atividades fundamentais:

    1. Especificação: Definir o que será produzido, bem como suas restrições.
    2. Desenvolvimento: Elaboração do projeto e programação.
    3. Validação: Série de análises para garantir a utilidade do software.
    4. Evolução: Atualizações para refletir mudanças nos requisitos do cliente e do mercado.

    Ainda que, existam diversos softwares e eles sejam desenvolvidos de maneiras diferentes, boa parte deles são afetados por algumas questões relacionadas:

    • Heterogeneidade: Crescente necessidade de sistemas capazes de atuar de forma distribuída em rede, incluindo diferentes dispositivos.
    • Mudanças de negócios e sociedade: Acompanhando a evolução tecnológica e economias emergentes, as empresas e a sociedade estão em constante mudança.
    • Segurança da informação: A sociedade moderna é altamente dependente de softwares, se faz necessário que possamos confiar neles.
    • Escala: software deve ser pensado considerando diferentes escalas, desde um dispositivo pessoal como um relógio, até sistemas globais baseados em nuvem.

    Além dos desafios técnicos e socias, a engenharia de software precisa ser flexível as diferentes aplicações, conforme abordaremos a seguir.

    Diversidade da Engenharia de Software

    A engenharia de software é uma abordagem sistemática para conceber um software, e alguns fatores importantes devem ser levados em conta: custo prático, cronograma, questões de dependabilidade, necessidade do cliente e desenvolvedores. O principal fator para determinar qual o método e técnica adequado para a produção do software é o tipo de aplicação que será desenvolvida. Existem diversos tipos de aplicações:

    • Aplicações stand-alone: São aplicações executadas em um computador pessoal ou dispositivo móvel. Exemplo: Programas de desenho CAD.
    • Aplicações interativas baseadas em transações: São aplicações executadas remotamente através de computadores, celulares e tablets. Exemplo: E-mails.
    • Sistema de controle embarcado: Sistemas de controle de software que controlam e gerenciam hardware. Exemplo: Software de controle de freio ABS.
    • Sistema de processamento em lotes (batch): Sistemas para o processamento de dados em grandes lotes. Exemplo: Sistema de folhas de pagamento.
    • Sistemas de entretenimento: Sistemas para uso pessoal com objetivo de entreter o usuário. Exemplo Jogos de videogame.
    • Sistemas para modelagem e simulação: Sistemas para modelar processos e simulações que incluem muitos objetos e que interagem. Exemplos sistemas de cálculos de engenharia.
    • Sistemas de coleta de dados e análise: Sistemas que coletam dados e enviam para outros sistemas processarem. Exemplo: Sistemas meteorológicos.
    • Sistemas de sistemas: Sistemas constituídos por vários outros sistemas. Exemplo: Sistemas ERP.

    Além da grande diversidade já existente de aplicações, a constante evolução tecnológica faz com que novas aplicações surjam e que novas maneiras de projetar sejam necessárias, um grande marco nesse sentido foram as aplicações web que revolucionaram o mercado de software, no próximo tópico discutiremos com mais detalhes.

    Engenharia de Software na Internet

    A partir do desenvolvimento dos navegadores capazes de realizar processamento local e executar programas, uma revolução nos softwares corporativos e organizacionais se iniciou. Isso permitiu escrever um software para ser implementado diretamente em servidores web, sem a necessidade de uma instalação local. Essa revolução mudou completamente o cenário de software, agora as aplicações são altamente distribuídas, muitas vezes em escala global. Teve ainda, um impacto significativo na engenharia de software, alguns exemplos são:

    • O reuso de software se tornou a principal abordagem através de componentes e dos sistemas já existentes.
    • Se tornou um consenso que, especificar todos requisitos antes da produção é impraticável, tornando o processo de produção de sistemas web incremental.
    • Implementação através de engenharia de software orientada a serviços, onde os componentes de um sistema web são desenvolvidos como serviços.
    • Tecnologias como AJAX e HTML5 evoluíram para possibilitar interfaces dinâmicas através de navegadores web.

    Ética na engenharia de Software

    O engenheiro de software deve estar ciente que seu trabalho não está limitado a aplicação de habilidades técnicas. Um profissional de engenharia de software, assim como nas demais profissões também deve se comportar de forma ética e moral. Além dos padrões habituais como honestidade, integridade, alguns padrões não são delimitados por leis e o engenheiro de software profissional deve se atentar em alguns aspectos:

    • Confidenciabilidade: a confidenciabilidade dos seus clientes ou empregadores deve ser respeitada.
    • Competência: Não se deve aceitar trabalhos que estejam fora de sua competência.
    • Direitos de propriedade intelectual: O profissional deve se manter atualizado com a legislação vigente e assegurar os direitos da propriedade intelectual dos seus empregadores ou clientes.
    • Uso indevido do computador: por mais trivial que seja, não se deve tirar proveito dos conhecimentos técnicos para utilizar indevidamente os computadores de outras pessoas.

    Questões de ética e moral muitas vezes nos levam a discussões filosóficas, que eu vou evitar entrar nessa publicação, porém, uma abordagem muito mais prática e focada está disponível no código de ética e prática profissional da engenharia de software, desenvolvido pela Association for Computing Machinery (ACM), Institute of Electrical and Electronic Engineers (IEEE) e British Computer Society (BCS).

    Caso queira se aprofundar mais, o código de ética e prática profissional da engenharia de software está disponível em:

    https://www.acm.org/code-of-ethics/software-engineering-code

    Conclusão:

    Em resumo esse capitulo aborda fundamentos da engenharia de software, a importância dos processos e qualidade no desenvolvimento. Ele dá embasamento para os próximos capítulos que veremos.

    Todo conteúdo foi baseado no capítulo 1 do livro Engenharia de Software de Ian Sommerville.

    Share
    Recommended for you
    GFT Start #7 .NET
    GFT Start #7 - Java
    Deal Group - AI Centric .NET
    Comments (0)
    Recommended for youRandstad - Análise de Dados