SISTEMA DE INFORMAÇÃO Turma ADS 0019. DESIGN E DESENVOLVIMENTO DE SOFTWARE.

Post on 18-Apr-2015

103 views 0 download

Transcript of SISTEMA DE INFORMAÇÃO Turma ADS 0019. DESIGN E DESENVOLVIMENTO DE SOFTWARE.

SISTEMA DE INFORMAÇÃO

Turma ADS 0019

DESIGN E DESENVOLVIMENTO DE SOFTWARE

UNIDADE 2

OBJETIVOS DA UNIDADE 2• Compreender os fundamentos de design de

software;• Entender aspectos relevantes sobre design de

software;• Entender aspectos do desenvolvimento de

software;• Conhecer boas práticas de gerenciamento de

projetos de software.Profº Ricardo luiz 3

DESIGN DE SOFTWARE

TÓPICO 1

• Ao decidir pela construção de algo, seja tangível ou intangível, há uma série de etapas que são comuns.

Profº Ricardo luiz 5

• Ao optar por construir uma casa você decide qual será o processo construtivo a ser adotado. Este processo poderá ser linear, incremental ou iterativo.

Profº Ricardo luiz 6

• Você também definirá quais são os requisitos da sua construção. (peças).

• A etapa seguinte é transformar estes requisitos em uma planta para que uma equipe de obras civis possa realizar a construção. (funcionais ou não funcionais)

Profº Ricardo luiz 7

• Na Engenharia de Software a fase de desenho da planta da construção civil corresponde à fase de design de software.

Profº Ricardo luiz 8

• O objetivo do design de software é prover uma descrição da estrutura de funcionamento que servirá de base para a construção do software.

Profº Ricardo luiz 9

• Também pode ser entendido como a descrição da forma que o sistema terá quando estiver pronto para utilização.

Profº Ricardo luiz 10

• O termo descrição pode ser entendido como uma representação, que poderá ser textual ou gráfica.

Profº Ricardo luiz 11

• Pfleeger (2004, p. 159) nos ensina que o design de software é o “processo criativo de transformar o problema em uma solução”.

Profº Ricardo luiz 12

TIPOS DE DESIGN

TÓPICO 1

• Em determinados momentos do processo de software há necessidade de utilização do design para comunicar como o software será construído para pelo menos dois públicos.(design conceitual e técnico)

Profº Ricardo luiz 14

• O modelo conceitual tem a finalidade de esclarecer ao cliente/usuário como o software desempenhará as funções necessárias.

Profº Ricardo luiz 15

• O design conceitual descreve os limites, as entidades, atributos e relacionamentos do sistema.

Profº Ricardo luiz 16

• Esta descrição poderá responder a questões como (PFLEEGER, 2004):– De onde virão os dados?– O que acontecerá com os dados no sistema?– Qual será a aparência do sistema para os clientes/usuários?– Que opções serão oferecidas para os clientes/usuários?– Qual é a sequência de eventos?– Como será a aparência dos relatórios e das telas?

Profº Ricardo luiz 17

• Este modelo de design não deverá utilizar termos técnicos e não se concentra em detalhes técnicos.

Profº Ricardo luiz 18

• Este modelo de design não deverá utilizar termos técnicos e não se concentra em detalhes técnicos.– Ser escrito na linguagem do cliente/usuário.– Não conter jargão técnico.– Descrever as funções do sistema.– Ser independente da implementação.– Estar vinculado aos documentos de requisitos.Profº Ricardo luiz 19

• Portanto, o design conceitual deverá possibilitar ao cliente/usuário o entendimento do que o sistema fará, o que oferecerá de resultados e também esclarece as características externas observáveis do sistema.

Profº Ricardo luiz 20

• Já o desenho que será utilizado na comunicação com a equipe de desenvolvimento é chamado de design técnico.

Profº Ricardo luiz 21

• Este modelo tem a finalidade de explicitar os componentes de software necessários para atender às necessidades do cliente/usuário.

Profº Ricardo luiz 22

• O design técnico pode compreender inclusive componentes de hardware que precisam ser considerados na construção da solução proposta.

Profº Ricardo luiz 23

• No design técnico devem ser considerados diversos requisitos necessários à solução do problema do cliente/usuário.– Configurações de hardware.– Necessidades de software.– Interfaces de comunicação.– Entradas e saída do sistema.– Arquitetura de rede utilizada.

Profº Ricardo luiz 24

ARQUITETURA DE SOFTWARE

TÓPICO 1

• Softwares que possuem grande conjunto de requisitos tipicamente são divididos ou decompostos em diversos subsistemas que oferecem o conjunto de serviços necessários para o software cumprir sua função.

Profº Ricardo luiz 26

• O processo de definição de quais serão estes subsistemas, os controles necessários e a comunicação de tais subsistemas são conhecidos como o projeto de arquitetura do software.

Profº Ricardo luiz 27

• A arquitetura de software é, portanto, a estrutura de organização e divisão dos módulos que o compõem.

Profº Ricardo luiz 28

• Sommerville (2003), indica três vantagens de projetar e documentar explicitamente uma arquitetura de software:

Profº Ricardo luiz 29

MODULARIDADE

TÓPICO 1

• No processo de definição do design mais adequado ao software, outra tarefa bastante árdua é a definição da modularidade.

Profº Ricardo luiz 31

• É uma tarefa árdua pelo fato de haver diversos fatores envolvidos na decisão da distribuição do software em módulos.

Profº Ricardo luiz 32

• Pfleeger (2004), indica que o design de um software seja criado com base em um dos seguintes modos:–Decomposição modular;–Decomposição orientada a dados;–Decomposição orientada a eventos;–Design ‘outside-in’ (de fora para dentro);–Design orientado a objetos;Profº Ricardo luiz 33

• O design de software pode ser elaborado através de uma das abordagens descritas ou a partir da combinação de algumas dessas abordagens. A idéia central é utilizar uma hierarquia, aumentando o detalhamento a cada nível.Profº Ricardo luiz 34

DESIGN DE INTERFACES COM O USUÁRIO

TÓPICO 1

• O design de interface com o usuário pode iniciar na fase de requisitos para os casos em que há necessidade de explicitar algumas interfaces críticas da aplicação.

Profº Ricardo luiz 36

• Porém o maior volume de trabalho ocorre na fase de design. É nesta fase que as interfaces com o usuário são desenhadas.

Profº Ricardo luiz 37

• Embora possa parecer simples, se considerarmos a importância que as interfaces com o usuários representam para um software, chegaremos à conclusão de que é uma atividade com grau de complexidade relativamente alto.Profº Ricardo luiz 38

• Assumindo a premissa de que o usuário considera que o software é representado principalmente pelas suas partes visíveis, o seu design pode ser crítico para determinados projetos.

Profº Ricardo luiz 39

• Uma interface com o usuário deve abordar:–Metáforas: elementos que podem ser

reconhecidos e aprendidos.–Modelo mental: organização e representação de

elementos.–Regras de navegação para o modelo: como se

mover entre os elementos.–Aspecto: aparência do sistema.– Impressão: experiência do usuário.

Profº Ricardo luiz 40

• O objetivo de considerar tais elementos é permitir que o usuário obtenha acesso rápido ao conteúdo que necessita, sem que perca a compreensão enquanto navega pelas informações.

Profº Ricardo luiz 41

• Duas questões fundamentais devem ser consideradas em seu design: cultura e preferência

Profº Ricardo luiz 42

• Quando o software é desenvolvido para uso por uma grande diversidade de usuários que podem abranger o país ou quem sabe o mundo, é necessário que se considere diversos aspectos relacionados a este possível público. Profº Ricardo luiz 43

• Os aspectos que devem ser considerados são as crenças, valores, normas, tradições, hábitos e até mesmo os mitos daqueles que utilizarão o software.

Profº Ricardo luiz 44

• As cores também podem ter significados muito relevantes. “Na Inglaterra, a cor púrpura representa a realeza, e, no Japão, púrpura significa dignidade e nobreza. Mas na Grécia antiga, púrpura simboliza a morte e o demônio”. Profº Ricardo luiz 45

INDEPENDÊNCIA DOS COMPONENTES

TÓPICO 1

• É desejado que todo software desenvolvido seja estruturado de forma a facilitar o processo de manutenção.

Profº Ricardo luiz 47

• Um design de software para poder ser considerado bom deveria possuir as seguintes características (PFLEEGER, 2004):

Profº Ricardo luiz 48

• Facilidade de entendimento.• Facilidade de implementação.• Facilidade de realização de testes.• Facilidade de modificação.• Tradução correta dos requisitos em

software. Profº Ricardo luiz 49

• A facilidade para realizar modificações é um aspecto altamente relevante, pois a manutenção é tipicamente de longo prazo.

Profº Ricardo luiz 50

• É relativamente comum encontrarmos casos de alterações em requisitos ou correção de defeitos exigirem que o design do software seja modificado para acomodar a mudança necessária.

Profº Ricardo luiz 51

• Uma das formas de atender à boa parte das características do que é considerado um bom design é privilegiar a independência de componentes.

Profº Ricardo luiz 52

• Para o reconhecimento e medição do grau de independência dos componentes de um software são utilizados os conceitos de acoplamento e coesão.

Profº Ricardo luiz 53

• O conceito de acoplamento diz respeito ao grau de dependência entre componentes.• A coesão está relacionada à parte

interna da construção do componente.

Profº Ricardo luiz 54

• O design de software considerado ideal é aquele que possui baixo acoplamento e alta coesão.

Profº Ricardo luiz 55

DESENVOLVIMENTO DE SOFTWARE

TÓPICO 2

• É nessa fase que entra em cena a arte da programação de computadores.• Para que o software seja escrito de

forma a atender requisitos de desempenho, proteção, segurança, disponibilidade e principalmente facilidade de manutenção.Profº Ricardo luiz 57

• É fundamental que o processo criativo da programação se restrinja às soluções dadas aos desafios de implementação.

Profº Ricardo luiz 58

• Este processo criativo, portanto, deve seguir padrões de codificação, depuração e testes para que o código fonte seja legível e manutenível por qualquer pessoa que conheça os padrões.

Profº Ricardo luiz 59

• Uma das fases que tipicamente tem consumido a maior fatia de esforço em um projeto de software é a fase de desenvolvimento, também conhecida como fase de codificação

Profº Ricardo luiz 60

PADRÕES DE CODIFICAÇÃO

TÓPICO 2

• Na fase de desenvolvimento deve ser dada grande atenção aos padrões de codificação. Padrões de codificação ou estilos de codificação se referem às convenções utilizadas para escrita de código fonte.

Profº Ricardo luiz 62

• A definição do que é um bom padrão/estilo de codificação é relativamente dependente da equipe de desenvolvimento em que se está inserido.

Profº Ricardo luiz 63

• Para determinadas equipes trabalhar utilizando um prefixo nas propriedades ou variáveis que identifique o tipo delas é uma das melhores práticas e que trazem resultados impressionantes.

Profº Ricardo luiz 64

• Para outras equipes é considerada a coisa mais ridícula e inadmissível já criada pelo homem.

Profº Ricardo luiz 65

• Utilizar padronizações de código é muito importante se olharmos do ponto de vista do processo que mais consome recursos no desenvolvimento de software, a manutenção.

Profº Ricardo luiz 66

• A padronização de código pode ter valor incalculável do ponto de vista da redução da probabilidade de inserção de bugs em processos de manutenção e da agilidade que pode permitir no momento da detecção da origem de um determinado problema.Profº Ricardo luiz 67

• A padronização de código também permite que pessoas que não desenvolveram aquele trecho de código façam a sua manutenção com um nível de facilidade aproximado ao nível de facilidade de quem o escreveu. Profº Ricardo luiz 68

• A legibilidade de código se refere a quão simples/fácil um trecho de código é para leitura e qual é a quantidade de pessoas que conseguem ler o código escrito (as palavras-chave são facilidade de entendimento). Profº Ricardo luiz 69

• Alguns elementos podem facilitar a legibilidade como endentação, cores utilizadas para diferenciar palavras reservadas, tipos das variáveis, tamanho do texto (linha), utilização de negrito, etc.

Profº Ricardo luiz 70

• Todos os identificadores de um programa devem ter nomes significativos. A questão de nomes de identificadores também é muito controversa.

Profº Ricardo luiz 71

• As declarações de variáveis devem ser feitas sempre que possível no início de blocos de código.

• Obs.: A técnica de declarar variáveis no momento que serão utilizadas deve ser evitada.

Profº Ricardo luiz 72

• As variáveis devem ser inicializadas o mais próximo possível de sua declaração.

• Obs.: se houver algum valor padrão, este deve ser atribuído à variável para que na pior das hipóteses, o valor padrão seja utilizado.

Profº Ricardo luiz 73

• Os iniciantes na programação têm uma tendência de não se importarem adequadamente com a questão da endentação

Profº Ricardo luiz 74

• Não escrever linhas de código com mais de 90 caracteres. • Códigos grandes devem ter a quebra

de linhas após a vírgula, ou antes de um operador.

Profº Ricardo luiz 75

• Outra questão relevante é o espaçamento entre operandos e operadores.• Deve-se considerar também a

importância do uso de parênteses para priorizar operações.

Profº Ricardo luiz 76

• Cada tipo de laço de repetição deve ser utilizado para a situação mais apropriada.

Profº Ricardo luiz 77

• Quando erros ou falhas são identificados no software pode ser necessário realizar o processo de depuração de código.

Profº Ricardo luiz 78

• Bugs podem ser entendidos como "comportamentos" indesejados pela pessoa que programou o código.

Profº Ricardo luiz 79

ESTILOS DE ENDENTAÇÃO

TÓPICO 2

• Existem diversos tipos de estilos de endentação de código fonte, dentre estes, os mais conhecidos e utilizados são: o estilo K&R, BSD/Allman, BSD/KNF, Whitesiths, GNU e Banner.

Profº Ricardo luiz 81

ESTILO K&R

ESTILO BSD/ALLMAN

ESTILO BSD/KNF

ESTILO WHITESMITHS

ESTILO BANNER

GERENCIAMENTO DE PROJETOS DE SOFTWARE

TÓPICO 3

• Para o adequado gerenciamento de projetos de software os principais modelos utilizados atualmente são o PMBoK e o SCRUM.

Profº Ricardo luiz 88

• O PMBoK é um guia de melhores práticas em gerenciamento de projetos que pode ser utilizado para gestão de projetos de quaisquer áreas. Ele descreve um modelo mais formal de gestão de projetos.

Profº Ricardo luiz 89

• Já o SCRUM é um modelo para a gestão de projetos de software ágil. Ambos os modelos têm foco em planejamento, execução, controle e encerramento.

Profº Ricardo luiz 90

• A gestão de pessoas é uma atividade muito importante no gerenciamento de projetos. Em função disso, o relacionamento interpessoal é fundamental para obtenção de melhores resultados.

Profº Ricardo luiz 91

• O gerenciamento de projetos é uma das atividades mais árduas desempenhada pelo profissional de software, pois o grau de contribuição das pessoas no resultado do projeto é muito significativo em desenvolvimento de software.Profº Ricardo luiz 92

ABRANGÊNCIA DO GERENCIAMENTO DE PROJETOS

TÓPICO 3

• Softwares são muito utilizados como suporte aos negócios há poucas décadas.

Profº Ricardo luiz 94

• Uma questão importante que deve ser levada em consideração é o fato de que o software deixou de ser diferencial para as organizações, pois praticamente todas fazem uso dele.

Profº Ricardo luiz 95

• O uso de recursos de softwares é uma necessidade do dia a dia das organizações.

Profº Ricardo luiz 96

• Cada organização tem um grau de dependência de softwares para execução de suas atividades e a margem de oportunidades para utilização como diferencial estratégico tem diminuído.

Profº Ricardo luiz 97

• Na mesma proporção que o software deixa de ter participação como diferencial estratégico para as organizações ele passa a se tornar crítico em termos de dependência.

Profº Ricardo luiz 98

• Os softwares precisam estar disponíveis 24 horas por dia, 7 dias por semana, caso contrário poderá representar um gargalo para o crescimento dos negócios.

Profº Ricardo luiz 99

• Um fator que tem preocupado as organizações em relação às atividades de desenvolvimento de software é a falta de gente para atender às demandas existentes nas organizações.

Profº Ricardo luiz 100

• Mas afinal o problema está na falta de gente ou no excesso de demanda? O que ocorre provavelmente é o reflexo do produto de ambos

Profº Ricardo luiz 101

• Acredita-se que atualmente o software tem papel importante nas atividades das organizações. O software tornou-se um requisito básico para a sobrevivência e crescimento das organizações.

Profº Ricardo luiz 102

DEFINIÇÃO DE PAPÉIS E RESPONSABILIDADES

TÓPICO 3

• A definição clara de papéis e responsabilidades dentro de um projeto de software é um elemento importante para que os componentes da equipe do projeto canalizem suas energias em realizar o escopo do projeto e não percam tempo com outras preocupações.

Profº Ricardo luiz 104

• No organograma deverão constar todos os níveis da estrutura hierárquica relevante do projeto. O registro dos papéis e responsabilidades pode ser feito, por exemplo, em uma ata de reunião.

Profº Ricardo luiz 105

• Em projetos maiores é aconselhável que as preocupações de realizar o trabalho operacional sejam delegadas para um membro da equipe e que o responsável pelo projeto possa realizar o acompanhamento efetivo do progresso do projeto tomando decisões de forma ágil e imediata à necessidade.Profº Ricardo luiz 106

• Uma ferramenta muito importante no gerenciamento de projetos maiores é a matriz RACI (Responsible, Accountable, Consult and Inform), pois possibilita uma visão clara das responsabilidades de cada envolvido no projeto. Profº Ricardo luiz 107

FUNÇÕES E RESPONSABILIDADES

TÓPICO 3

• O processo de desenvolvimento do projeto é planejado em torno da exigência de que todo projeto seja administrado com uso de uma equipe integrada, que inclua a representação adequada das áreas funcionais e de negócios envolvidas.Profº Ricardo luiz 109

• Os membros da equipe devem ter o poder de tomar decisões em nome da função ou área que representam.

Profº Ricardo luiz 110

• As funções e responsabilidades de cada membro da equipe devem ser definidas e claramente comunicadas a todos na equipe.

Profº Ricardo luiz 111

• Os objetivos da organização e do projeto devem ser definidos e compreendidos por todos os membros da equipe, que aceitaram participar do projeto.

Profº Ricardo luiz 112

• Uma equipe integrada de projeto exibe também características de trabalho em equipe, inclusive cooperação, comunicação aberta e alto nível de confiança entre os vários representantes que participam da equipe. Profº Ricardo luiz 113

• Uma equipe integrada de projeto exibe também características de trabalho em equipe, inclusive cooperação, comunicação aberta e alto nível de confiança entre os vários representantes que participam da equipe. Profº Ricardo luiz 114

GESTÃO DE PESSOAS

TÓPICO 3

• No mundo do trabalho, as habilidades das pessoas podem ser divididas em habilidades técnicas também conhecidas por "hard skills" e habilidades pessoais, também conhecidas como "soft skills”.

Profº Ricardo luiz 116

• Cada vez mais se pode perceber que as habilidades pessoais têm influência no sucesso profissional.

Profº Ricardo luiz 117

• Uma pessoa que cultive apenas as habilidades técnicas poderá tornar-se muito boa naquele assunto. O limite do crescimento profissional dela tipicamente está relacionado ao somatório das habilidades técnicas com as habilidades pessoais.Profº Ricardo luiz 118

• Isto é realmente polêmico, mas o que normalmente se percebe na área de software é esta relação, pois mesmo que o profissional seja muito bom tecnicamente haverá momentos em que ele precisará interagir com pessoas. Profº Ricardo luiz 119

• Habilidades Técnicas geralmente são fáceis para observar, quantificar e medir.• Já, as habilidades pessoais são

tipicamente difíceis de serem observadas, quantificadas e medidas.

Profº Ricardo luiz 120

• Elas se referem na relação entre as pessoas comunicando, ouvindo, dialogando, fornecendo feedback, cooperando com membros, resolvendo problemas, contribuindo em reuniões, resolvendo conflitos, entre outras. Profº Ricardo luiz 121

• Habilidades pessoais têm grande importância para as oportunidades e desenvolvimento da carreira, bem como conhecimentos técnicos aprofundados.

Profº Ricardo luiz 122