Você está na página 1de 55

Engenharia de Software

Professor
Emiliano S.
[Versão 7 Agosto/2019] Monteiro
1. Conceitos de engenharia de software

Professor
Emiliano S.
Monteiro
1. Conceitos
1.1. Engenharia de software
• A meta da engenharia é desenvolver software de boa relação custo-
benefício.

• O que é engenharia?
– Arte de aplicar os conhecimentos científicos à invenção,
aperfeiçoamento ou utilização da técnica industrial em todas as suas
determinações. (dic. Michaelis)
• Engenharia de software “é uma disciplina da engenharia que se
ocupa de todos os aspectos da produção de software, desde os
estágios iniciais de especificação do sistema até a manutenção
deste sistema, depois que ele entrou em operação”.
1.1. Engenharia de software
• A engenharia de software abrange três elementos fundamentais:

Processos

Pessoas Ferramentas
1.1. Engenharia de software

• Geralmente os problemas que devem ser resolvidos são


complexos, portanto sua resolução necessita de análise, ou seja,
uma investigação.
1.2. Análise

• Análise:
– 1. Decomposição de um todo em suas partes constituintes.
– 2. Exame de cada parte de um todo, tendo em vista conhecer sua
natureza, suas proporções, suas funções, suas relações, etc.
– 3. A análise de sistema é usada em todos os campos onde há um trabalho
de desenvolvimento de algo (produto (software inclusive!) e serviços).
1.2. Análise

• 4. É o estudo do agrupamento de entes que compõem


e/ou interagem para formar um sistema.
• 5. Este campo está intimamente relacionado com a
análise de requisitos ou operações de investigação.
• 6. Pode-se dizer que é: "um inquérito formal explícito
realizado para ajudar alguém (geralmente o analista de
sistemas) a identificar um melhor curso de ação e,
tomar uma decisão melhor”.
1.2. Análise

• A análise pode também ser definida como um conjunto de atividades que


realizam a função orgânica em conjunto de atividades maiores no projeto.
– Função orgânica é o que desempenham elementos que tem estrutura e
comportamento similar.
• Durante o desenvolvimento de sistemas para computadores temos uma fase
chamada de análise de sistemas (análise de requisitos), nela são
desenvolvidos vários diagramas e modelos que retratam o domínio do
problema que será tratado.
– Talvez um dos mais importantes diagramas seja o modelo de dados ou diagrama
entidade relacionamento.
• Existem um número de abordagens diferentes para a análise do sistema
1.2. Análise

• “Análise” é uma palavra originário do


grego, e significam: dissolver, desmontar.
• A análise é utilizada em várias disciplinas
(como engenharia, psicologia, etc) para
designar procedimentos de investigação.
• A análise é definida como o processo pelo
qual nós dividimos o que esta sendo
investigado em partes menores que serão
estudadas individualmente e/ou em
conjunto conforme o caso.
1.3. Analista de sistemas

• A análise de sistemas é um conjunto de técnicas


para a solução de problemas usando uma
combinação de hardware e/ou software.
• A análise de sistemas geralmente decompõe as
atividades manuais realizadas dentro de
empresas, as representa formalmente, utilizando
diagramas, dicionarizando dados e processos,
relações, objetos, regras de negócio e propõem
uma solução computadorizada, esta solução
computadorizada é o sistema que o usuário final
deverá usar.
1.3. Analista de sistemas

• O analista realiza a tarefa de decompor os


problemas dos usuários em partes e
representar estes problemas usam uma
linguagem previamente padronizada
(geralmente diagramas), partindo então
para a construção do software (sistema).
• Analista de sistemas: Perito na definição e
no desenvolvimento de algoritmos
necessários à solução de um problema
particularmente dos algoritmos que
podem ser resolvidos num computador.
1.4. O que é um sistema?

• É uma quantidade de elementos interconectados, ordenados por uma força


interna e ou externa. O ordenamento interno do sistema se expressa no
conjunto de leis de conexão ou ações de interação entre seus elementos. Cada
lei expressa determinada ordem ou tipo de nexos entre certos fenômenos ou
processos.
• Sistema:
1. Conjunto de elementos, materiais ou ideias, entre os quais se possam
encontrar ou definir alguma relação.
2. Disposição das partes ou dos elementos de um todo, coordenados entre si,
e que funcionam como estrutura organizada.
3. Reunião de elementos naturais da mesma espécie.
1.5. Teoria geral dos sistemas

• A Teoria Geral dos Sistemas nos diz:


– 1. Quanto mais especializado é um sistema, menos capaz
ele é de se adaptar a circunstâncias diferentes.
– 2. Quanto maior for um sistema, maior o número de seus
recursos que serão destinados a manutenção diária.
– 3. Os sistemas sempre fazem parte de sistemas maiores e
sempre podem ser divididos em sistemas menores.
– 4. Sistemas crescem.
1.6. Características dos softwares

• O software é desenvolvido ou projetado por engenharia, não


manufaturado como um produto industrial.
• Software não se desgasta.
• Software não sofre doenças, não tira férias nem recebe salário.
• A maioria dos softwares é feita sob medida em vez de ser
montada a partir de componentes existentes.
1.7. O que gerentes perguntam?

1. Por que demora tanto tempo para que os programas sejam


concluídos?
2. Por que os custos são tão elevados?
3. Por que não descobrimos todos os erros antes de entregarmos o
software aos nossos clientes?
4. Por que temos dificuldade em medir o progresso enquanto o
software esta sendo desenvolvido?
1.8. Crise de software

• Problemas de software que não funcionam adequadamente,


problemas de desenvolvimento, como manter o volume
crescente de atualizações e a demanda de novos softwares ou
funcionalidades.
1.8. Crise de software

• Problemas:
– Não é dedicado tempo suficiente para coleta de dados sobre
o processo de desenvolvimento, o processo deve ser medido.
– Insatisfação do cliente com o sistema concluído.
– Qualidade de software é suspeita!
– O software existente é difícil de manter.
1.10. Projetar  Construir

A engenharia de software acompanha todo o processo de desenvolvimento


2. Processos de software

Professor
Emiliano S.
Monteiro
2. O processo de software
• É um conjunto de atividades e resultados associados que geram
um produto de software. Estas atividades são executadas por
engenheiros de software.

– Quais são as atividades básicas num processo de desenvolvimento de


um produto qualquer?

• Existem os mais variados processos de software e eles organizam


estas fases básicas cada um da sua maneira.
2.1. Etapas básicas de um processo de software

1 Análise de requisitos de software


2 Especificação de requisitos
3 Projeto do sistema
3 .1. Arquitetura de Software e seus componentes
4 Implementação (ou codificação)
4.1. Programação do sistema e banco de dados
5 Teste
5.1. Testes unitários, integração, usabilidade, etc
6 Documentação
6.1. Para administradores, gestores, usuários e desenvolvedores
7 Suporte e Treinamento de usuários
8 Manutenção
9 Desativação ou substituição
2.2. Conceitos Básicos - Processo
• Um conjunto de tarefas ordenadas constitui um processo,
uma séria de etapas que envolvem atividades, restrições
e recursos para alcançar a saída desejada.

• Um processo é um conjunto de procedimentos,


organizados de modo que nos permita construir produtos
que satisfaçam a uma série de objetivos e padrões.
2.3. Caracterização de um processo

• Um processo envolve um conjunto de ferramentas e técnicas, entre


elas:
– a) o processo deve descrever todas as suas atividades
– b) o processo utiliza recursos e esta sujeito a restrições dos mesmos
– c) o processo pode ser composto de sub-processos
– d) cada atividade do processo tem critérios de entrada e saída
– e) as atividades são organizadas em sequência, com uma ordem de
execução
– f) todo processo tem um conjunto de diretrizes que explicam os objetivos
de cada atividade
– g) restrições e controles podem ser aplicadas a cada atividade.
2.4. Time line

Atualmente existem mais de 100 filosofias de desenvolvimento:


http://en.wikipedia.org/wiki/List_of_software_development_philosophies
2.5. Processo: Cascata
2.5. Processo: Cascata
• Características:
• Um dos primeiros modelos, proposto por Winston W.
Royce, em 1970. O desenvolvimento de um estágio deve
terminar antes do próximo começar. Só quando todos os
requisitos forem enunciados é que a equipe de
desenvolvimento pode iniciar suas atividades. Pode ser
usado para estimar quando falta para o término do
projeto. É fácil de explicar aos clientes.

• Não reflete como o código é desenvolvido. É


frequentemente utilizado na resolução de problemas
nunca antes resolvidos. Ao final de cada fase é produzido
um artefato, sem detalhar como. Trata o
desenvolvimento de software como resolução de
problema. Enfoque nos documentos e artefatos.
2.6. Processo: Espiral
Avaliação e análise de risco

Criado por Barry Boehm em


1988, é similar a um “risco
envolvido” que forma o
desenho da espiral. É um Requisitos
modelo incremental e
interativo.

Primero concebe as operações,


depois gera requisitos, depois
desenvolve e finalmente Testes
habilita os testes, reiniciando o
ciclo novamente.
Codificação
Lançamento
2.7. Processo: Prototipação
• A prototipação pode ser a base
de um processo de software.
Permite o desenvolvimento
rápido para esclarecer dúvidas,
reduzindo os riscos e a incerteza
do desenvolvimento.
• O protótipo começa com um
conjunto simples de requisitos,
quando apresentado aos
clientes, este protótipo passa
por refinamentos sucessivos, até
que um protótipo final tenha
sido obtido, permitindo então a
codificação final.
2.8. Processo: Desenvolvimento orientado ao reuso

• Sommervile (2003), na maioria dos projetos de software, ocorre algum reuso de


software. Isto acontece quando as pessoas envolvidas no projeto de um software
conhece outros projetos similares.
• Estes softwares similares sofrem pequenas modificações e são incorporados ao novo
projeto em desenvolvimento.
• A abordagem voltada para a componentização de software, também trata do reuso de
código entre projetos.
• Uma categoria de sistemas que se beneficia desta forma de trabalho são “softwares de
prateleira”, pois muitos possuem funções similares, nesta categoria entram pequenas
automações comerciais.
• Sua principal vantagem esta na redução de software a ser produzido, também propicia
a redução do tempo de entrega. Sua desvantagem esta no controle sobre a evolução
do sistema, pois partes do sistema, componentizadas estão sob controle de terceiros.
2.20. Processo: SCRUM
• Scrum é um processo iterativo de desenvolvimento incremental de software.
• Ele vai do desenvolvimento de produto até a entrega da aplicação.
• Seu foco está em:
– Ser uma estratégia de desenvolvimento flexível, do produto, onde uma equipe de desenvolvimento funciona
como uma unidade para alcançar um objetivo comum.
• Os criadores (em 1986 foram Hirotaka Takeuchi e Ikujiro Nonaka) descreveram o scrum como: “uma nova abordagem
para o desenvolvimento de produtos comerciais que aumenta a velocidade e flexibilidade, com base em estudos de caso
de empresas de fabricação nas indústrias de fotocopiadoras, automotivo e impressora”.
• Eles chamaram esta abordagem de holística ou rugby, porque todo o processo é realizado por uma equipe
multifuncional em várias fases sobrepostas
2.21. Kanban board
To-Do Doing Done
2.21. Kanban board
2.21. Kanban
2.22. Considerações sobre os processos

• Conhecer os processos de desenvolvimento habilita o aluno a realizar


uma melhor escolha de processo para uso em projetos futuros.
• A vantagem de conhecer vários processos permite inclusive evitar
futuros problemas com projetos em andamento (o principal seria a
mudança da metodologia de trabalho) o que impacta no custo e
cronograma do projeto.
• Também permite conhecer vantagens e desvantagens de cada um
possibilitando que se possa inclusive desenvolver um processo próprio e
específico para uma empresa ou projeto de software.
4.6. Ferramentas para diagramação

Professor
Emiliano S.
Monteiro
Open
ModelSphere

http://www.modelsphere.com/org/
StarUML

https://sourceforge.net/projects/staruml/
StarUML

http://staruml.io/
Star UML Star UML

fork

WhiteStar UML

https://sourceforge.net/projects/whitestaruml/

http://whitestaruml.sourceforge.net/
Visual Paradigm Community Edition

https://www.visual-paradigm.com/download/community.jsp
OPEN SYSTEM ARCHITECT (CODEBYDESIGN)

https://www.codebydesign.com/
SYSTEM ARCHITECT
History
System Architect was initially created and developed by
Jan Popkin under the auspices of Popkin Software.
System Architect was one of the first Windows-based
computer-aided software engineering (CASE)
tools[citation needed]. It evolved through the years to
become an enterprise architecture modeling tool — one
that enables the end user to utilize many notations and
methods to model aspects of their organization in a
repository, and disseminate this information to a large
audience.

Telelogic acquired Popkin Software in April, 2005[8] and


IBM acquired Telelogic in 2008. After acquisition of
Telelogic, IBM included System Architect (and all other
Telelogic products) in the Rational division, named after
Rational Software, which it acquired in 2003.[9] On
January 1, 2016, IBM announced that UNICOM Global
had acquired System Architect from IBM, and that its
core development and support team, which originated at
Popkin Software, was joining UNICOM Systems to
continue to build the product line.

Fonte: https://en.wikipedia.org/wiki/System_Architect
https://www.teamblue.unicomsi.com/products/system-architect/
Referências bibliográficas
• Básica
– PFLEEGER, Shari Lawrance. Engenharia de software – teoria e prática. 2ª. ed. São Paulo :
Prentice Hall, 2004.
– SOMMERVILLE, Ian. Engenharia de Software. 6ª. Ed. São Paulo : Addison Wesley, 2003.
– BEZERRA, Eduardo. Princípios de Análise e Projeto de Sistemas com UML. 1.ed. Rio de Janeiro:
Elsevier, 2007.
• Complementar
– FERNANDES, Aguinaldo, Aragon. TEIXEIRA, Descartes de Souza. Fábrica de software –
implantação e gestão de operações. São Paulo : Atlas, 2004.
– LARMAN, Craig. Utilizando UML e padrões: uma introdução à análise e o projeto orientados a
objetos e ao processo unificado. 2.ed. Porto Alegre: Bookman, 2004. .

• Outras referências podem ser encontradas na página da disciplina em: www.pontodeensino.com


Prof. Emiliano S. Monteiro

Você também pode gostar