Upload
eneias
View
1.666
Download
2
Embed Size (px)
Citation preview
1
Introdução à Engenharia de Software
Bibliografia: SOMMERVILLE, Ian. Engenharia de Software. São Paulo: Pearson Addison-Wesley, 2007.
IFPR – Instituto Federal do Paraná – Campus Umuarama
Curso Técnico em Informática
Disciplina: Engenharia de Software - 2º módulo - 2010
Professora: Márcia Cristina Dadalto Pascutti ([email protected])
2
Engenharia de Software (ES) É uma disciplina da engenharia cuja meta é o
desenvolvimento de sistemas de software com boa relação custo-benefício;
É uma disciplina relativamente nova. Surgiu pela 1a vez em 1968 crise do software (hardware poderoso, portanto o software resultante era maior e mais complexo);
Dessa forma uma abordagem informal para a construção desses sistemas não era o bastante. Os projetos atrasavam, apresentavam custos elevados, não eram confiáveis, eram de difícil manutenção e tinham desempenho ruim o desenvolvimento de software estava em crise.
3
Engenharia de Software (ES)
Novas técnicas e novos métodos eram necessários para controlar a complexidade inerente aos sistemas de software;
Essas técnicas se tornaram parte da ES. Ainda existem problemas, porém houve um grande progresso desde 1968 e o desenvolvimento da ES melhorou de modo marcante o software produzido.
4
Engenharia de Software (ES) Quando um software é bem-sucedido – quando
satisfaz as necessidades das pessoas que o usam, tem desempenho sem falhas por um longo período, é fácil de modificar e ainda mais fácil de usar – ele pode e efetivamente modifica as coisas para melhor.
Mas quando o software falha – quando seus usuários ficam insatisfeitos, quando tem tendência a erros, quando é difícil de modificar e ainda mais difícil de usar – podem e efetivamente acontecem coisas desagradáveis.
Para obter sucesso, precisamos de disciplina quando o software é projetado e construído precisamos de uma abordagem de engenharia.
5
1. O que é software? São os programas de computador, a
documentação associada e os dados de configuração necessários para que esses programas operem corretamente.
Há dois tipos de software Produtos genéricos: produtos desenvolvidos
para o mercado; pacotes de software. A especificação do software é controlada pela organização que o desenvolve.
Produtos sob encomenda (personalizados): produtos desenvolvidos para um cliente específico. A especificação do software é controlada pela organização que está comprando o software os desenvolvedores devem trabalhar de acordo com essa especificação.
6
2. O que é 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 desse sistema;
Geralmente, os engenheiros de software adotam uma abordagem sistemática e organizada em seu trabalho, pois essa, com certeza, é a maneira mais eficaz de produzir software de alta qualidade.
7
3. Qual a diferença entre engenharia de software e ciência da computação?
Ciência da computação ocupa-se da teoria e dos fundamentos referentes aos computadores e sistemas de software;
Engenharia de software dedica-se aos problemas práticos da produção de software;
Teorias mais refinadas da ciência da computação nem sempre podem ser aplicadas a problemas reais e complexos, que requerem uma solução de software.
8
4. Qual a diferença entre engenharia de software e engenharia de sistemas? Engenharia de sistemas ocupa-se
de todos os aspectos relacionados ao desenvolvimento de sistemas, incluindo hardware e software;
Engenharia de software é parte desse processo.
Engenharia de Sistemas
Engenharia de software
9
5. O que é um processo de software? É um conjunto de atividades e resultados que geram um
produto de software; Há 4 atividades fundamentais – comuns a todos os
processos de software 1. Especificação do software: definição das funcionalidades
e restrições;2. Desenvolvimento do software: o software deve ser
produzido de forma a atender as especificações;3. Validação do software: garantia de que o software faz o
que o cliente deseja;4. Evolução do software: o software deve evoluir para
atender as necessidades mutáveis dos clientes. Diferentes organizações podem utilizar processos diferentes para
produzir o mesmo tipo de produto.
10
6. O que é um modelo de processo de software? É uma representação simplificada de um
processo de software, apresentada a partir de uma perspectiva específica;
Um modelo de processo de software define a seqüência em que as atividades do processo serão realizadas;
Exemplos de Modelos de Processo de Software Modelo em Cascata (Ciclo de Vida Clássico) Desenvolvimento Evolucionário Desenvolvimento Formal (Transformação formal) Desenvolvimento Orientado a Reuso (Montagem de
um sistema a partir de componentes reutilizáveis)
11
Modelo Cascata Considera as atividades de especificação,
desenvolvimento, validação e evolução, que são fundamentais ao processo, e as representa como fases separadas do processo, como a especificação de requisitos, o projeto de software, os testes e assim por diante.
Após cada estágio ter sido definido, ele é “aprovado” e o desenvolvimento prossegue para o estágio seguinte.
12
Desenvolvimento Evolucionário Tem como base a idéia de desenvolver uma
implementação inicial, expor ao comentário do usuário/cliente e fazer seu aprimoramento por meio de muitas versões, até que um sistema adequado tenha sido desenvolvido.
Em vez de ter as atividades de especificação, desenvolvimento e validação em separado, todo esse trabalho é realizado concorrentemente.
13
Desenvolvimento Evolucionário
Descrição do esboço
Especificação
Desenvolvimento
Validação
Versão inicial
Versões intermediárias
Versão final
Atividades concorrentes
14
Engenharia de Software Baseada em Componentes
Baseia-se na existência de um número significativo de componentes reutilizáveis;
O processo de desenvolvimento de sistemas se concentra na integração desses componentes em um sistema, em vez de partir do zero;
Desenvolvimento Baseado em Componentes.
15
7. Quais são os custos da engenharia de software?
A distribuição dos custos ao longo do processo de software depende do modelo de processo utilizado e do tipo de software que está sendo desenvolvido;
Aproximadamente 60% dos custos são relacionados ao desenvolvimento e 40% são referentes aos testes;
Para software personalizado (com um longo ciclo de duração), os custos de evolução normalmente excedem os custos de desenvolvimento;
Software genérico normalmente tem custo de especificação baixo, porém devem ser extensivamente testados.
16
8. O que são métodos de engenharia de software? Baseiam-se na idéia de desenvolver modelos
de um sistema que possam ser representados graficamente e de utilizar esses modelos como uma especificação ou projeto de sistema;
Métodos Análise Estruturada;Orientados a Objetos (UML – Unified
Modeling Language – Linguagem de Modelagem Unificada)
17
9. O que é CASE (computer-aided software engineering)? Uma ferramenta CASE é um software destinado a
proporcionar apoio automatizado às atividades de processo de software, como a análise de requisitos, modelagem do sistema, depuração e testes;
Alguns exemplos de ferramentas CASE RequisiteProDrCaseRational RoseAstah
18
10. Quais são os atributos de um bom software? Facilidade de manutenção o software deve
ser escrito de modo que possa evoluir para atender as necessidades mutáveis dos clientes;
Nível de Confiança inclui confiabilidade, segurança e proteção;
Eficiência inclui rapidez de resposta, tempo de processamento, utilização da memória, entre outros;
Facilidade de Uso (usabilidade) o software deve dispor de uma interface apropriada com o usuário e de documentação adequada. Deve ser utilizável sem esforços indevidos.
19
11. Quais são os principais desafios enfrentados pela engenharia de software? Desafio da heterogeneidade
desenvolver técnicas para construir softwares confiáveis, que sejam flexíveis para atender diferentes tipos de computadores e diferentes sistemas de apoio;
Desafio da entrega reduzir tempo para entrega de sistemas grandes e complexos, sem comprometer a qualidade;
Desafio da confiança desenvolver técnicas que demonstrem que o software pode ter a confiança dos seus usuários.
20
Processos de Software
21
Processo de Software Conjunto de atividades e resultados associados
que levam à produção de um produto de software;
Não há um processo ideal e até dentro da mesma empresa pode haver muitos processos diferentes utilizados para o desenvolvimento de software;
Existem muitos processos de software diferentes, porém há atividades fundamentais comuns a todos eles, como:
1. Especificação de software é preciso definir a funcionalidade do software e as restrições em sua operação;
22
Processo de Software 2. Projeto e implementação de
software deve ser produzido o software de modo que cumpra sua especificação;
3. Validação de software o software precisa ser validado para garantir que ele faz o que o cliente deseja;
4. Evolução de software o software precisa evoluir para atender às necessidades mutáveis do cliente.
23
Modelos de Processo de Software
São utilizados para explicar diferentes abordagens do desenvolvimento de software.
Um modelo de processo de software define a seqüência em que as atividades do processo serão realizadas;
Exemplos de processo de software 1. Modelo Cascata;2. Desenvolvimento Evolucionário;3. Engenharia de Software Baseada em
Componentes.
24
Modelo Cascata Primeiro modelo publicado do processo
de desenvolvimento de software; Também conhecido como Ciclo de Vida
Clássico ou Modelo Clássico; Esse modelo considera as atividades de
especificação, desenvolvimento, validação e evolução, que são fundamentais ao processo, e as representa como fases separadas do processo, como a especificação de requisitos, o projeto de software, os testes e assim por diante.
25
Modelo Cascata
Definição de requisitos
Projeto de sistemas e de software
Implementação e teste de unidades
Integração e teste de sistemas
Operação e manutenção
26
Fases do Modelo Cascata Análise e definição de requisitos
(especificação de requisitos) as funções, as restrições e os objetivos do sistema são estabelecidos por meio da consulta aos usuários do sistema;
Em seguida são definidos em detalhes e servem como uma especificação do sistema.
27
Fases do Modelo Cascata Projeto de sistemas e de software
agrupa os requisitos em sistemas de hardware ou de software. Estabelece uma arquitetura do sistema geral.
Implementação e teste de unidades durante esse estágio, o projeto de software é compreendido como um conjunto de programas ou de unidades de programa. O teste de unidade envolve verificar que cada unidade atenda a sua especificação.
28
Fases do Modelo Cascata Integração e teste de sistemas
as unidades de programa ou programas individuais são integrados e testados como um sistema completo a fim de garantir que os requisitos de software foram atendidos. Depois dos testes, o sistema de software é entregue ao cliente.
29
Fases do Modelo Cascata Operação e Manutenção
normalmente esta é a fase mais longa do ciclo de vida. O sistema é instalado e colocado em operação. A manutenção envolve corrigir erros que não foram descobertos em estágios anteriores do ciclo de vida ou aumentar as funções desse sistema à medida que novos requisitos são descobertos.
30
Modelo Cascata Em princípio, o resultado de cada fase
envolve um ou mais documentos que são aprovados;
A fase seguinte não deve se iniciar até que a fase precedente tenha sido concluída;
O processo de software não é um modelo linear simples, mas envolve uma seqüência de iterações das atividades de desenvolvimento problema do modelo cascata inflexível divisão do projeto nesses estágios distintos.
31
Modelo Cascata O modelo cascata somente deve ser
utilizado quando os requisitos forem bem compreendidos;
Contudo, ele reflete a prática da engenharia;
Conseqüentemente, os processos de software com base nessa abordagem ainda são muito utilizados no desenvolvimento de software.
32
Desenvolvimento Evolucionário
Tem como base a idéia de desenvolver uma implementação inicial, expor o resultado ao comentário do usuário e fazer seu aprimoramento por meio de muitas versões, até que um sistema adequado tenha sido desenvolvido;
Em vez de ter as atividades de especificação, desenvolvimento e validação em separado, todo esse trabalho é realizado concorrentemente com um rápido feedback por meio dessas atividades.
33
Desenvolvimento Evolucionário
Descrição do esboço
Especificação
Desenvolvimento
Validação
Versão inicial
Versões intermediárias
Versão final
Atividades concorrentes
34
Desenvolvimento Evolucionário
A abordagem evolucionária do desenvolvimento de software, muitas vezes, é mais eficaz do que a abordagem em cascata, no sentido de produzir sistemas que atendam às necessidades imediatas dos clientes;
VANTAGEM a especificação pode ser desenvolvida gradativamente. À medida que os usuários desenvolvem uma compreensão melhor de seus problemas, isso pode ser refletido no sistema de software.
35
Desenvolvimento Evolucionário
PROBLEMAS 1. Como os sistemas são desenvolvidos
rapidamente, não é viável produzir documentos que reflitam cada versão do sistema;
2. Os sistemas freqüentemente são mal-estruturados. A mudança constante tende a corromper a estrutura do software. Incorporar modificações torna-se cada vez mais difícil e oneroso.
36
Engenharia de Software Baseada em Componentes
Essa abordagem tem como base a existência de um número significativo de componentes reutilizáveis;
O processo de desenvolvimento de sistemas se concentra na integração desses componentes em um sistema, ao invés de proceder ao desenvolvimento a partir do zero;
37
Engenharia de Software Baseada em Componentes
Especificação de requisitos
Análise de componentes
Modificação derequisitos
Projeto de sistemacom reuso
Desenvolvimento e integração
Validação desistema
Modelo genérico de processo para a engenharia de software baseada em
componentes
38
Engenharia de Software Baseada em Componentes
Especificação de requisitos
Análise de componentes
Modificação derequisitos
Projeto de sistemacom reuso
Desenvolvimento e integração
Validação desistema
39
Engenharia de Software Baseada em Componentes
Especificação de Requisitos comparável com outros processos, por exemplo, modelo cascata;
As funções, as restrições e os objetivos do sistema são estabelecidos por meio da consulta aos usuários do sistema;
Em seguida são definidos em detalhes e servem como uma especificação do sistema.
40
Engenharia de Software Baseada em Componentes
Especificação de requisitos
Análise de componentes
Modificação derequisitos
Projeto de sistemacom reuso
Desenvolvimento e integração
Validação desistema
41
Engenharia de Software Baseada em Componentes
Análise de Componentes com base na especificação de requisitos, é feita uma busca de componentes para implementar essa especificação;
Nem sempre é possível encontrar uma combinação exata e os componentes que podem ser utilizados fornecem somente parte da funcionalidade requerida.
42
Engenharia de Software Baseada em Componentes
Especificação de requisitos
Análise de componentes
Modificação derequisitos
Projeto de sistemacom reuso
Desenvolvimento e integração
Validação desistema
43
Engenharia de Software Baseada em Componentes
Modificação de requisitos durante esse estágio, os requisitos são analisados, utilizando-se as informações sobre os componentes que foram encontrados;
Eles são então modificados para refletir os componentes disponíveis;
Quando as modificações forem impossíveis, a atividade de análise de componentes é refeita, a fim de procurar soluções alternativas.
44
Engenharia de Software Baseada em Componentes
Especificação de requisitos
Análise de componentes
Modificação derequisitos
Projeto de sistemacom reuso
Desenvolvimento e integração
Validação desistema
45
Engenharia de Software Baseada em Componentes
Projeto de sistema com reuso durante essa fase, a infra-estrutura do sistema é projetada ou uma infra-estrutura existente é reutilizada;
Os projetistas levam em conta os componentes que são reutilizados e organizam a infra-estrutura para lidar com esse aspecto.
46
Engenharia de Software Baseada em Componentes
Especificação de requisitos
Análise de componentes
Modificação derequisitos
Projeto de sistemacom reuso
Desenvolvimento e integração
Validação desistema
47
Engenharia de Software Baseada em Componentes
Desenvolvimento e integração o software que não puder ser comprado será desenvolvido, e os componentes e sistemas COTS (commercial off-the-shelf –
sistemas comerciais de prateleira) serão integrados, a fim de criar um sistema.
48
Engenharia de Software Baseada em Componentes
Especificação de requisitos
Análise de componentes
Modificação derequisitos
Projeto de sistemacom reuso
Desenvolvimento e integração
Validação desistema
49
Engenharia de Software Baseada em Componentes
Validação de sistema o software deve ser validado para garantir que faz o que o cliente deseja.
50
Engenharia de Software Baseada em Componentes
VANTAGENS Reduz a quantidade de software a ser
desenvolvida, reduzindo custos e riscos;
Geralmente propicia a entrega mais rápida do software.
51
Engenharia de Software Baseada em Componentes
PROBLEMAS As adequações nos requisitos são
inevitáveis, e isso pode resultar em um sistema que não atenda às reais necessidades dos usuários;
O controle sobre a evolução do sistema se perde, uma vez que novas versões dos componentes reutilizáveis não estão sob o controle da organização que utiliza esses componentes.
52
Processos Iterativos Os modelos apresentados anteriormente
apresentam vantagens e desvantagens; Para o desenvolvimento de grandes
sistemas, pode haver a necessidade de utilizar diferentes abordagens para diferentes partes dos sistemas, de maneira que um modelo híbrido tem de ser utilizado;
Há também a necessidade de iteração, em que partes do processo são repetidas, à medida que os requisitos do sistema evoluem.
53
Processos Iterativos
Existem dois modelos híbridos, que apóiam diferentes abordagens do desenvolvimento e que foram explicitamente projetados para apoiarem a iteração do processo
Desenvolvimento Incremental
Desenvolvimento em Espiral
54
Desenvolvimento Incremental É uma abordagem intermediária, que combina
as vantagens do modelo cascata e do desenvolvimento evolucionário;
Em um processo de desenvolvimento incremental, os clientes identificam, em um esboço, as funções a serem fornecidas pelo sistema, definindo quais são mais importantes e quais são menos importantes;
Em seguida é definida uma série de estágios de entrega, com cada um fornecendo um subconjunto das funcionalidades do sistema;
As funções prioritárias são entregues primeiramente ao cliente;
55
Desenvolvimento Incremental Uma vez identificados os incrementos, os
requisitos para as funções a serem entregues no primeiro incremento são definidos em detalhes;
Esse incremento é desenvolvido, utilizando-se o processo de desenvolvimento mais apropriado;
Uma vez que um incremento é concluído e entregue, os clientes podem colocá-lo em operação;
Isso significa que eles recebem com antecedência parte da funcionalidade do sistema, podendo experimentar o sistema, facilitando assim o esclarecimento dos requisitos para os incrementos seguintes;
56
Desenvolvimento Incremental À medida que novos incrementos são
concluídos, eles são integrados aos estágios existentes, melhorando a funcionalidade do sistema a cada novo estágio de entrega;
57
Desenvolvimento Incremental
Definir esboço dos requisitos
Atribuir requisitosaos incrementos
Projetar arquite-tura do sistema
Desenvolver incre-mento do sistema
Validar incre-mento
Integrar incre-mento
Validar sistemaSistema
FinalSistema incompleto
58
Desenvolvimento Incremental Não existe a necessidade de utilizar o
mesmo processo para o desenvolvimento de cada incremento;
Quando as funções têm uma especificação bem-definida, o modelo de desenvolvimento em cascata pode ser utilizado;
Quando a especificação for mal definida, poderá ser utilizado um modelo de desenvolvimento evolucionário.
59
Desenvolvimento Incremental VANTAGENS 1. Os clientes não precisam esperar até que
todo o sistema seja entregue, para então tirar proveito dele;
2. Existe um risco menor de fracasso completo do sistema. Embora possam ser encontrados problemas em alguns incrementos, é provável que alguns incrementos sejam entregues com sucesso ao cliente;
3. Como as funções prioritárias são entregues primeiro, é inevitável que elas passem pela maior parte dos testes.
60
Desenvolvimento Incremental PROBLEMAS Os incrementos devem ser
relativamente pequenos, e cada incremento deve produzir alguma funcionalidade para o sistema;
Pode, portanto, ser difícil mapear os requisitos dos clientes dentro de incrementos de tamanho correto.
61
Desenvolvimento Incremental Extreme Programming
(programação extrema) recente evolução da abordagem incremental;
Tem como base o desenvolvimento e a entrega de incrementos de funcionalidade muito pequenos, o envolvimento do cliente no processo, a constante melhoria de código e a programação impessoal.
62
Desenvolvimento em Espiral Em vez de representar o processo de
software como uma seqüência de atividades com algum retorno de uma atividade para outra, o processo é representado como uma espiral;
Cada loop na espiral representa uma fase do processo de software;
Assim, o loop mais interno pode estar relacionado à vialibidade do sistema;
O loop seguinte, à definição de requisitos para o sistema;
O próximo loop, ao projeto do sistema, e assim por diante.
63
Desenvolvimento em Espiral
64
Desenvolvimento em Espiral Cada loop da espiral é dividido em
quatro setores: 1. Definição de objetivos São definidos os objetivos específicos
para essa fase do projeto; São identificados os riscos do projeto
e, dependendo dos riscos poderão ser planejadas estratégias alternativas.
65
Desenvolvimento em Espiral
Definição dos objetivos
66
Desenvolvimento em Espiral 2. Avaliação e redução de riscos Para cada um dos riscos de projeto
identificados, é realizada uma análise detalhada e são tomadas providências para reduzir esses riscos;
Por exemplo, se houver um risco de os requisitos serem inadequados, poderá ser desenvolvido um protótipo.
67
Desenvolvimento em Espiral
Avaliação e reduçãode riscos
68
Desenvolvimento em Espiral 3. Desenvolvimento e validação Depois da avaliação dos riscos, é
escolhido um modelo de desenvolvimento para o sistema;
Por exemplo, se forem dominantes os riscos relacionados à interface com o usuário, pode ser utilizado o modelo de desenvolvimento evolucionário (prototipação).
69
Desenvolvimento em Espiral
DesenvolvimentoE
validação
70
Desenvolvimento em Espiral 4. Planejamento O projeto é revisto e é tomada uma
decisão sobre continuar com o próximo loop da espiral;
Se a decisão for continuar, serão traçados os planos para a próxima fase do projeto.
71
Desenvolvimento em Espiral
Planejamento
72
Desenvolvimento em Espiral Não há fases fixas, como especificação
ou projeto, no modelo em espiral; O modelo em espiral abrange outros
modelos de processo, como por exemplo, prototipação;
Diferença do modelo em espiral em relação a outros modelos de processo de software explícita consideração dos riscos no modelo em espiral;
Risco algo que pode acontecer de errado.
73
Especificação de Software Estabelece quais funções são requeridas
pelo sistema e as restrições sobre a operação e o desenvolvimento do sistema;
Essa atividade é chamada de Engenharia de Requisitos muito importante;
O processo de engenharia de requisitos leva à produção de um documento de requisitos, que é a especificação para o sistema;
Existem quatro fases principais no processo de engenharia de requisitos
74
Especificação de Software 1. Estudo de Viabilidade existe
tecnologia atual para o desenvolvimento do sistema? Existem restrições orçamentárias?;
2. Levantamento e análise de requisitos obtenção dos requisitos do sistema. Entrevista, observação, sistemas existentes, ...;
3. Especificação de requisitos documento que especifica os requisitos;
4. Validação de requisitos verificação dos requisitos quanto a pertinência, consistência e integralidade.
75
Projeto e Implementação de Software
Um projeto de software é uma descrição estruturada de software a ser implementada, dos dados que são parte do sistema, das interfaces entre os elementos do sistema e dos algoritmos utilizados;
Métodos de Projeto Projeto estruturado; Projeto orientado a objetos;
76
Projeto e Implementação de Software
Programação atividade pessoal, sem regras;
Teste x Depuração Teste estabelece a existência de
defeitos; Depuração localiza e corrige esses
defeitos.
77
Validação de Software Destina-se a mostrar que um sistema está de
acordo com suas especificações e que atende às expectativas do cliente;
Processo de teste 1. Teste de unidade componentes
individuais; 2. Teste de módulo coleção de
componentes; 3. Teste de subsistema conjunto de
módulos integrados; 4. Teste de sistema integração dos
subsistemas; 5. Teste de aceitação o sistema é testado
com os dados fornecidos pelo cliente, no lugar dos testes simulados.
78
Evolução de Software Manutenção de software é o
processo de modificar o sistema desenvolvido depois que o mesmo é colocado em operação;
O software é continuamente modificado ao longo de seu tempo de duração, em resposta a requisitos em constante modificação e às necessidades do cliente.
79
Ferramentas CASE
É o nome dado ao software utilizado para apoiar as atividades de processo de software, como a engenharia de requisitos, o projeto, o desenvolvimento de programa e os testes;
As ferramentas CASE, portanto, incluem editores de projeto, dicionários de dados, compiladores, depuradores, ferramentas de construção de sistemas, entre outros.
80
Ferramentas CASE Exemplos de atividades que podem
ser automatizadas utilizando-se CASE
O desenvolvimento de modelos gráficos de sistemas, como parte das especificações de requisitos ou do projeto de software;
A compreensão de um projeto utilizando-se um dicionário de dados que contém informações sobre as entidades e sua relação em um projeto;
A geração de interfaces com usuários;
81
Ferramentas CASE
Exemplos de atividades que podem ser automatizadas utilizando-se CASE
A depuração de programas, pelo fornecimento de informações sobre um programa em execução;
Tradução automatizada de programas, a partir de uma antiga versão de uma linguagem de programação, como Cobol, para uma versão mais recente.