·

Engenharia de Controle e Automação ·

Engenharia de Software

Send your question to AI and receive an answer instantly

Ask Question

Preview text

www.devmedia.com.br\n[versão para impressão]\nLink original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=29630\nPrincípios da Engenharia de Software\nVeja neste artigo uma introdução à Engenharia de Software e aos seus principais conceitos.\nA Engenharia de Software é composta de diversos conceitos de fundamental importância na área e abrange um processo, um conjunto de métodos ou práticas e diversas ferramentas que possibilitam aos profissionais desenvolverem software de alta qualidade. A primeira definição é a de Software. Muitos não sabem dizer realmente o que é um software. Um Software de computador é um produto desenvolvido por profissionais de software que também dão suporte a ele a longo prazo e abrange programas executáveis em computadores de diversos portes ou arquitetura, conteúdos que são apresentados quando programas são executados, informações descritivas em forma impressa ou virtual. Outro conceito importante dentro do software é o de software legado que consiste em um software desenvolvido há muitas décadas atrás, portanto, é um software bastante antigo que têm sido continuamente modificado para se adequar a mudanças dos requisitos de negócio e a plataformas computacionais. Esse tipo de software apesar de ser antigo, eles são considerados indispensáveis para funções de negócios vitais.\nA engenharia de software está fortemente relacionada ao software na medida que ela nos capacita para o desenvolvimento de sistemas complexos dentro do prazo e com alta qualidade, dos aspectos muito importantes para o sucesso de um projeto.\nA criação de um software bem-sucedido se dá através de um processo adaptável e ágil que conduzirá a um resultado de alta qualidade atendendo às necessidades dos clientes que de fato usam o software.\nOutro conceito bastante importante é o de artefato que do ponto de vista de um engenheiro de software consiste de um conjunto de programas, conteúdo (dados) e outros artefatos que são software. No entanto, do ponto de vista do usuário, o artefato consiste de informações resultantes que tornam melhor a vida dele, como documentação, help online, etc.\nNo restante do artigo veremos mais detalhes sobre definições de Engenharia de Software e processos.\nEngenharia de Software A engenharia de software possui diversas definições. No entanto, Fritz Bauer definiu o conceito de engenharia de software de forma bastante clara: \"Engenharia de Software é o estabelecimento e o emprego de sólidos princípios de engenharia de modo a obter software de maneira econômica, que seja confiável e funcione de forma eficiente em máquinas reais\".\nEssa definição apesar de fornecer uma base parece ser um tanto abstrata demais, não enfatizando aspectos mais técnicos, necessidades do cliente, prazo, métricas e processos. Para isso a IEEE desenvolveu uma definição muito mais abrangente: \"Engenharia de Software é: (1) A aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, na operação e na manutenção de software; isto é, a aplicação de engenharia de software. (2) O estudo de abordagens como definido em (1)\".\nA engenharia de software está fortemente ligada com a noção de qualidade. A Figura 1 mostra as camadas da engenharia de software.\nFigura 1. Camadas da Engenharia de Software. A gestão da qualidade ajudam a promover uma cultura de aperfeiçoamento contínuo de processos, sendo esta a cultura que no final das contas sempre leva ao desenvolvimento de abordagens cada vez mais efetivas na engenharia de software. Portanto, podemos notar que a parte fundamental que sustenta a engenharia de software é o foco na qualidade, como mostrado na figura acima.\n\nA figura também mostra uma camada de processos que é a responsável por manter as camadas de tecnologia coesas e também é quem possibilita o desenvolvimento de software de forma racional e dentro do prazo. O processo define uma metodologia que deve ser estabelecida para que possamos ter uma entrega efetiva. O processo também é a base para o controle de gerenciamento de projetos de software, permite aplicar métodos técnicos, produzir diferentes produtos como alterações, mudanças, etc., e por fim estabelece marcos, garantia da qualidade e gerir mudanças de forma apropriada. Um conceito bastante importante dentro de processo é o de metodologia ou framework que é o responsável por estabelecer uma base para um processo de engenharia de software completo através de um pequeno número atividades estruturais aplicáveis a todos projetos de software, independente de tamanho ou complexidade. Uma metodologia de processo genérica possui cinco atividades:\n\n• Comunicação: Antes do inicio do projeto comunicamos e colaboramos com os clientes e todos os interessados para compreender os seus objetivos e fazermos o levantamento das necessidades que ajudarão a definirmos as funções e características do software a ser construído.\n• Planejamento: O planejamento é como um mapa que ajuda a guiar a equipe na jornada de construção do produto. No planejamento define-se o trabalho de engenharia descrevendo suas tarefas técnicas, recursos necessários, produtos a serem construídos e um cronograma de trabalho.\n• Modelagem: Modelos são esboços de modo que possamos ter uma ideia melhor do todo. Caso necessários os modelos são mais detalhados a fim de compreender melhor o problema e como resolvê-lo.\n• Construção: Essa atividade é onde o software é construído. No entanto, atividades de testes também são realizadas nessa atividade com o intuito de revelar erros na codificação.\n• Emprego: O incremento do software ou o software completo é entregue ao cliente que avalia o produto e retorna feedbacks baseando-se na avaliação do produto. Por fim, as ferramentas são responsáveis por fornecer suporte automatizado ou semiautomatizado para o processo e os métodos. Quando as ferramentas são interligadas de forma que informações criadas por uma ferramentas sejam usadas por outra temos um sistema que suporta o desenvolvimento, também chamado de Engenharia de Software com o Auxilio do Computador ou Computer Aided Software Engineering (CASE). As cinco atividades genéricas acima podem ser utilizadas para criação de software simples, pequenos ou grandes e complexos. O detalhes do processo de software poderá ser diferentes para diferentes tipos de projetos, no entanto, as atividades metodológicas permanecerão as mesmas. Para a maioria dos projetos de software poderemos ter essas cinco atividades aplicadas iterativamente quantas forem as iterações do projeto, sendo que cada iteração irá gerar um incremento de software. Ao final de cada incremento teremos um software cada vez mais completo. As atividades acima também são complementadas por uma série de atividades de apoio que são aplicadas ao longo de um projeto e ajuda a equipe no gerenciamento, controle de progresso, qualidade, mudanças e risco. As atividades de apoio são: • Controle e acompanhamento: Permite uma avaliação do progresso em relação ao plano do projeto e que sejam tomadas medidas necessárias para o cumprimento do cronograma proposto. • Administração de Riscos: Avalia os riscos que podem afetar o resultado ou a qualidade do produto ou do projeto. • Garantia da Qualidade: Define e conduz as atividades que garantem a qualidade do software. • Revisões técnicas: Avaliam-se artefatos para identificar e eliminar erros antes que sejam propagadas para a atividade seguinte. • Medição: Define e coleta medidas do processo, projeto e do produto que auxiliarão na entrega do software de acordo com os requisitos. • Gerenciamento da configuração de software: gerenciar os efeitos das mudanças. • Gerenciamento da reusabilidade: Define quais serão os critérios para reuso e estabelece mecanismos para obtenção de componentes reutilizáveis. • Preparo e produção de artefatos de software: Engloba atividades para criar artefatos como modelos, documentos, logs, formulários, etc. Não podemos esquecer que os projetos devem ser ágeis e adaptáveis. Dessa forma, não precisamos de todas as atividades acima, o uso ou o não uso de determinada atividade será feita de acordo com as necessidades de um projeto. Nesse ponto podemos afirmar que existem dois modelos principais e bastante difundidos que são utilizados nos processos de software. O primeiro deles são os modelos de processo dogmática e sem adaptações podendo aumentar a burocracia e criarão dificuldades para todos os envolvidos. Por sua vez os modelos ágeis seguem princípios que conduzem a uma abordagem mais informal enfatizando a flexibilidade e adaptabilidade. Esses modelos são muito apropriados nos mais diversos tipos de projetos e muito úteis quando aplicações para a Internet são projetadas. Bibliografia [1] Pressman, R. Engenharia de Software: Uma abordagem Profissional. 7º edição. Editora Bookman. [2] Ken Schwaber e Jeff Sutherland. Scrum Guide. Disponível em http://www.scrum.org [3] Mike Cohns: Succeeding with Agile. Disponível em http://www.mountaingoatsoftware.com/blog/ Higor Medeiros Higor Medeiros (higorowen@gmail.com) é aluno da Universidade do Vale do Rio dos Sinos em Ciência da Computação cursando o 4º semestre, onde também trabalha na pesquisa científica na área de inteligência artificial com Processament [...] Publicado em 1899