sexta-feira, 25 de outubro de 2013

Design Patterns

Também chamados de Padrões de Projeto, surgiram com a motivação de ajudar a solucionar problemas que ocorrem frequentemente, e, se usados com bom senso, podem se tornar ferramentas poderosas para qualquer desenvolvedor de software, uma vez que já foram testadas, utilizadas e aprimoradas a partir da experiência e conhecimento de outros programadores.

São soluções de templates abstratos de alto nível. São "blueprints" para soluções e não uma solução por si própria.

O conjunto dos mais conhecidos design patterns estão catalogados no livro "Design Patterns: Elements of Reusable Object-Oriented Software", mais conhecido como "A bíblia dos Design Patterns". Foi escrito por Erich Hamma, Richard Helm, Ralph Johnson e John Vlissdes, conhecidos como Gang of Four (GoF).

Eles coletaram 23 Design Patterns e os organizaram em 3 grupos:

Creational Patterns ou Padrões de Criação

Tratam da construção do objeto e o de referência.

Structural Patterns ou Padrões Estruturais

Tratam da relação entre objetos e como eles interagem entre si para formarem grandes objetos complexos.

Behavioral Patterns ou Padrões Comportamentais

Tratam da comunicação entre os objetos, especialmente em termos de responsabilidade e de algoritmos.

Utilidade

Seu valor reside no fato que eles foram soluções utilizadas e testadas, o que proporciona confiança em sua eficácia.

Design Patterns focam na reutilização de soluções. Ao quebrar problemas em partes menores, é possível encontrar Design Patterns para resolvê-los.

Princípios comuns de design

Keep It Simple Stupid (KISS)

Mantenha o código simples, mas não seja simplista. Evite a complexidade desnecessária.

Don't repeat yourself (DRY)

Evite a repetição de qualquer parte do sistema abstraindo as coisas que são comuns entre si e colocá-las em um lugar único.

Tell, don't ask

Está estreitamente alinhado com o encapsulamento e a atribuição de responsabilidades para as suas classes corretas. Afirma que você deve dizer aos objetos quais ações você quer que eles realizem, ao invés de fazer perguntas sobre o estado do objeto e então tomar uma decisão por si próprio em cima da ação que você quer realizar.

You ain't gonna need it (YAGNI)

Refere-se a necessidade de adicionar somente as funcionalidades que são necessárias para a aplicação deixar de lado qualquer tentação de adicionar outras funcionalidades que você acha que precisa. O Test Driven Development, ou desenvolvimento orientado a testes, adere ao YAGNI. TDD se baseia na escrita de testes que comprovam a funcionalidade do sistema e então escrevem somente o código para obter êxito no teste.

Separation Of Concerns (SoC)

É o processo de dissecação de uma parte de software em distintas características que encapsulam um único comportamento e dados que podem ser utilizados por outras classes. O ato de separar um programa em discretas responsabilidades aumenta significativamente a reutilização de código, manutenção e testabilidade.

Fonte: http://www.princiweb.com.br/blog/programacao/design-patterns/o-que-sao-design-patterns.html


quinta-feira, 24 de outubro de 2013

Padrões de Projeto

Um padrão é uma regra de três partes que expressa a relação entre um contexto (1), um problema (2) e uma solução (3).

Domain Driven Design

Significa projeto Orientado a Domínio. Pode ser visto como a volta da orientação a objetos. Quando se fala em Orientação a Objetos, pensa-se logo em classes, heranças, polimorfismo, encapsulamento. Mas a essência da orientação a objetos também tem coisas como:

Alinhamento do código com o negócio


O contato dos desenvolvedores com os especialistas do domínio é algo essencial.

Favorecer a reutilização

Os blocos de construção, facilitam aproveitar um mesmo conceito de domínio ou um mesmo código em vários lugares.

Acoplamento mínimo

Com um modelo bem feito, organizado, as várias partes de um sistema interagem sem que haja muita dependência entre módulos ou classes de objetos de conceitos distintos.

Independência da tecnologia


Domain Driven Design não foca em tecnologia, mas em entender as regras de negócio e como elas devem estar refletidas no código e no modelo de domínio. Não que a tecnologia utilizada não seja importante, mas esta não é uma preocupação de DDD.

Modelo em funcionamento

Para ter um software que atenda perfeitamente a um determinado domínio, é necessário que se estabeleça, em primeiro lugar, uma Linguagem Ubíqua*. Nessa linguagem estão termos que fazem parte das conversas diárias entre especialistas de negócio e times de desenvolvimento. Isso significa que, se durante uma conversa com um cliente do sistema de cobrança, por exemplo, ele disser: "Temos que emitir a fatura para o cliente antes da data limite", vamos ter no nosso código alguma coisa do tipo:
  • Uma classe para a entidade Cliente;
  • Uma classe para a entidade Fatura;
  • Algum serviço que tenha um método emitir;
  • Algum atributo com o nome de data limite.
Utilizando a Longuagem Ubíqua, criamos um modelo de domínio através do Projeto Dirigido pelo Modelo (Model Driven Design - MDD). A ideia por trás de MDD é a de que o seu modelo abstrato deve ser uma representação perfeita do seu domínio. Tudo que existe no seu negócio deve aparecer no modelo.

Num processo ágil defendido pelo MDD, a criação do modelo abstrato deve ser feita em grupo, com todas pessoas juntas. Se arquitetos e analistas de negócio criarem o modelo sem a participação dos programadores, corre-se o risco de criar um modelo que não é implementável ou que usará uma tecnologia inadequada. Da mesma forma, se os programadores codificarem sem se basear num modelo consistente, provavelmente desenvolverão um software que simplesmente não serve para o domínio. Em DDD, parte das pessoas que modelam o domínio são necessariamente pessoas que colocam a mão em código (Hands-on Modellers).

O processo de maturação de um sistema utilizando MDD deve ser contínuo. O modelo servirá de guia para a criação de código e, ao mesmo tempo, o código ajuda a aperfeiçoar o modelo. O contato contínuo com o código trará insights aos programadores, que irão refatorar o código. Essa refatoração deverá ser feita não só no código, mas também no próprio modelo.

Blocos de construção do Model Driven Design

Decidindo pela criação de um modelo utilizando MDD, precisamos, inicialmente, isolar o modelo de domínio das demais partes que compõem o sistema. Essa separação pode ser feita utilizando-se uma arquitetura em camadas, que dividirá a aplicação em quatro partes

Interface do Usuário

Responsável pela exibição de informações do sistema ao usuário e também por interpretar comandos do usuário.

Aplicação

Não possui lógica de negócio. É responsável por conectar a Interface de Usuário às camadas inferiores.

Domínio

Representa conceitos, regras e lógicas de negócio. Todo o foco de DDD está nesta camada.

Infra-estrutura

Fornece recursos técnicos que darão suporte às camadas superiores.


Após dividir o sistema em camadas, preocupamo-nos apenas com a camada de domínio. Para modelar esta parte, utilizamos alguns padrões propostos em DDD. Esses padrões são chamados de blocos de construção e serão utilizados para representar o modelo abstrato. Estes blocos podem ser:

Entidades

Classes de objetos que necessitam de uma identidade. Normalmente são elementos do domínio que possuem ciclo de vida dentro de nossa aplicação: um Cliente, por exemplo, se cadastra no sistema, faz compras, se torna inativo, é excluído, etc.

Objetos de Valores

Objetos que só carregam valores, mas que não possuem distinção de identidade. Bons exemplos seriam strings, números ou cores.

Agregados

Compostos de entidades ou objetos de valores que são encapsulados numa única classe. Serve para manter a integridade do modelo. Elege-se uma classe para servir de raiz do Agregado. Quando algum cliente necessitar manipular dados de uma das classes que compõem o Agregado, essa manipulação só poderá ser feita através da raiz.

Fábricas

Classes responsáveis pelo processo de criação dos Agregados ou dos Objetos de Valores. Algumas vezes, agregados são relativamente complexos e não queremos manter a lógica de criação desses agregados nas classes que o compõem. Extraímos então as regras de criação para uma classe externa: a fábrica.

Serviços

Classes que cntém lógica de negócio, mas que não pertence a nenhuma Entidade ou Objetos de valores. Não guardam estado, ou seja, toda chamada a um mesmo serviço, dada uma mesma pré-condição, deve retornar sempre o mesmo resultado.

Repositórios

Classes responsáveis por administrar o ciclo de vida dos outros objetos, normalmente Entidades, Objetos de Valor e Agregados. Centralizam operações de criação, alteração e remoção de objetos. Em linguagens como java, são comumente implementados utilizando frameworks como o Hibernate.

Módulos

Abstrações que têm por objetivos agrupar classes por um determinado conceito de domínio. Em java, seriam os packages.



* Linguagem comum, com termos bem definidos, que fazem parte do domínio do negócio e que são usados por todas as pessoas que fazem parte do processo de desenvolvimento de software.

Fonte: http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/


Emergent Design

É um conceito criado por David Cavallo para descrever um framework teórico para a implementação de mudanças sistêmicas em ambientes de desenvolvimento e educação. Ele examina como a escolha da metodologia de design contribui para o sucesso ou a falha de reformas educacionais em estudos na Tailândia.

O Emergent Design é um tópico consistente no desenvolvimento ágil de software, como resultado do foco da metodologia em desenvolver pequenas peças de código com valor para o negócio. Com o Emergent Design, uma empresa de desenvolvimento começa entregando funcionalidade e deixa o design emergir. O Desenvolvimento vai pegar um pedaço de uma funcionalidade A e implementá-lo utilizando as melhores práticas e uma cobertura de testes apropriada e em seguida entregar a funcionalidade B. Assim que B for concluído, ou enquanto estiver sendo desenvolvido, a organização irá olhar o que A e B possuem em comum e refatorar esta parte comum, permitindo o design emergir. Esse processo continua à medida que a organização continuamente entrega as funcionalidades. No fim do ciclo de liberações das entregas, o desenvolvimento fica com a menor parcela do design necessária. O resultado final é uma base de códigos menor, que naturalmente possui menos espaço para erros e baixo custo de manutenção.








terça-feira, 22 de outubro de 2013

Disciplinas de Engenharia de Software

Requisitos


É um processo que engloba todas as atividades que contribuem para a produção de um documento de requisitos e sua manutenção ao longo do tempo. Deve ser precedido por estudos de viabilidade. Posteriormente ao levantamento, deve ser realizada a gestão dos requisitos. É composto por quatro atividades de alto nível:

Identificação dos Requisitos

    Tem como atividades envolvidas:
    • Compreensão do domínio;
    • Identificação das partes interessadas;
    • Captura;
    • Identificação e análise de problemas. 
    Tem como dificuldades:
    • Desconhecimento do requisito pelo cliente, ou dificuldade no repasse deste;
    • Requisitos que não são realistas;
    • Transmissão do mesmo requisito de formas diferentes por pessoas diferentes.

    Técnicas de levantamento de requisitos

    Entrevistas e questionários, que está condicionada aos seguintes fatores:
    • Influência do entrevistador nas respostas do cliente;
    • Relação pessoal entre os intervenientes da entrevista;
    • predisposição do entrevistado;
    • Capacidade para seguir umplano para a entrevista.

    Workshops de requisitos

    Técnica usada através de uma reunião estruturada  , da qual devem fazer parte um grupo de analistas e um grupo representando um cliente, para então obter um conjunto de requisitos bem definidos. Deve existir um membro neutro cujo papel será conduzir o workshop e promover a discussão entre os vários intervenientes. Outra técnica que pode ser bem utilizada é a do brainstorming.

    Cenários (Séries de Eventos Hipotéticos)

     Forma de levar as pessoas a imaginar o comportamento de sistemas, através de exemplos práticos descritivos do comportamento de um sistema. Assim, seus usuários podem comentar acerca do seu comportamento e da interação que esperam ter com ele. Os cenários devem incluir os seguintes elementos:
    • Estado do sistema no início do cenário;
    • Sequência de eventos esperada no cenário;
    • Listagem de erros que podem ocorrer no decorrer dos eventos do cenário e de como eles serão tratados;
    • Outras atividades que podem ser executadas ao mesmo tempo que as deste cenário;
    • Estado do sistema depois de o cenário terminar.


    Prototipagem

    Trata-se de uma versão inicial do sistema, baseada em requisitos ainda poucos definidos, que pode ajudar a encontrar desde cedo falhas que através da comunicação verbal não são facilmente identificáveis. 


    Estudo etnográfico

    E uma análise de componente social das atividades desempenhadas numa organização. Quando uma pessoa está muito habituada a uma tarefa, ela pode sentir dificuldade em detalhar o passo-a-passo de suas tarefas para o analista. Ele então fará uma observação do trabalho desta pessoa, buscando compreender os requisitos envolvidos.

    Análise e negociação 23/10/2013

    Atividades Envolvidas
    • Classificação: agrupamento dos requisitos em "módulos";
    • Resolução de confitos;
    • Priorização;
    • Confirmação: confirmar junto à parte interessada a completude dos requisitos, sua consistência e validade. 
    Dificuldade
    • Fatores externos (políticos);
    • Ambiente (econômico e/ou organizacional)

    Análise e negociação 

    Nesta fase se dá a produção propriamente dita do Documento de Especificação de Requisitos. Entre eles:

    • Requisitos Funcionais;
    • Requisitos não-funcionais.
    A documentação poderá ter diferentes destinatários e como tal diferentes objetivos. Podem-se distinguir três tipos de especificação:

    Especificação de requisitos do usuário ou utilizador

     Destinam-se aos vários níveis hierárquicos da organização na qual o sistema será implantado. São desenvolvidos utilizando apenas linguagem natura e simples diagramas. Assim, surgem algumas dificuldades como:
    • Ambiguidade;
    • Confusão;
    • Agrupamento de requisitos.

    Especificação de requisitos do sistema

     Têm caráter mais técnico, consistindo numa descrição detalhada dos requisitos do utilizador correspondentes recorrendo ao uso, para além da linguagem natura, de linguagens estruturadas e notações gráficas. 

    Especificação de design da aplicação

    Consiste num documento usado pela equipe de desenvolvimento de sistema no qual estão definidos pormenores, em um nível mais técnico, acerca da implementação do sistema e sua arquitetura. A partir deste documento, um elemento que entre para a equipe de desenvolvimento no meio do projeto deverá ser capaz de se situar quando começar a codificar.  

    Projeto

    É a parte que se encarrega de transformar os resultados da Análise de Requisitos em um documento ou um conjunto de documentos capazes de serem interpretados diretamente pelo programador. Para atingir este objetivo, o projetista deve mapear as estruturas e funcionalidades identificadas na análise de requerimentos dentro do contexto e das restrições da arquitetura, de forma a tornar possível a construção do software. Ao longo do tempo e nos diversos processos de software existentes, várias ferramentas foram idealizadas para facilitar e atingir ese objetivo:
    • Design por contrato;
    • Model Driven Architecture e Model Driven Design;
    • Design Patterns;
    • Refatoração;
    • Outras.

    Construção


    Teste

    É a investigação do software a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar. Isso inclui o processo de utilizar o produto para encontrar seus defeitos.


    Manutenção

    Gerência de Configuração 24/10/2013

    Também conhecida como Gestão de Configuração de Software, é responsável por fornecer o apoio para o desenvolvimento de software. Suas principais atribuições são o controle de versão, o controle de mudança e a auditoria das configurações.

    Para Roger Pressman é o conjunto de atividades projetadas para controlar as mudanças pela identificação dos produtos do trabalho que serão alterados, estabelecendo um relacionamento entre eles, definindo o mecanismo para o gerenciamento de diferentes versões destes produtos, controlando as mudanças impostas, e auditando e relatando as mudanças realizadas.

    Resumindo, tem como objetivo responder as seguintes perguntas:
    • O que mudou e quando?
    • Por que mudou?
    • Quem fez a mudança?
    • Podemos reproduzir esta mudança?
    Configuração de Software

    É o estado em que um sistema se encontra em determinado momento. Trata apenas dos elementos que se encontram em formato eletrônico e fazem parte dessa configuração. Varia com o tempo e arquivos existentes são alterados ou removidos.

    Linha base 

    Também chamada de baseline, é um conceito de GCS que nos ajuda a controlar as mudanças, sem impedir seriamente as mudanças justificáveis. Segundo Pressman, definimos uma linha-base como um marco de referência no desenvolvimento de um software, que é caracterizado pela entrega de um ou mais itens de configuração.

    Gerência de Mudanças

    É uma parte geralmente negligenciada pela GC. Como ela não traz resultados imediatos para desenvolvedores e engenheiros de software envolvidos, estes acabam por não perceber sua importância. Porém, ela é importante pois permite se saber o motivo de uma configuração ter sido mudada para outra.

    Gerência de Engenharia 

    Qualidade de Software 

    Objetiva garantir a qualidade do software através da definição e normatização de processos de desenvolvimento. Apesar dos modelos aplicados na garantia da qualidade de software atuarem principalmente no processo, o principal objetivo é garantir um produto final que satisfaça as expectativas do cliente, dentro daquilo que foi acordado inicialmente.

    Segundo a norma ISO 9000, a qualidade é o grau em que um conjunto de características inerentes a um produto, processo ou sistema cumpre os requisitos inicialmente estipulados para estes.

    Modelos de Qualidade
    • CMMI
    • MPS.BR
    • ISO 9126
    • ISO 15504
    • ISO 12207



    Conceitos Básicos sobre Engenharia de Software

    É uma área da computação voltada à especificação, desenvolvimento e manutenção de sistemas de software, com aplicação de tecnologias e práticas de gerência de projetos e outras disciplinas, visando organização, produtividade e qualidade.

    Atualmente, essas tecnologias e práticas englobam linguagens de programação, banco de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de Software.

    Áreas de Conhecimento (GGQM-TC-PR)
    • Requisitos;
    • Projeto;
    • Construção;
    • Teste;
    • Manutenção;
    • Gerência de Configuração;
    • Gerência de Engenharia;
    • Processos de Engenharia;
    • Ferramentas e Métodos de Engenharia de Software;
    • Qualidade de Software.

    TOGAF

    The Open group Architecture Framework

    É um framework de arquitetura corporativa que provê uma abordagem global ao design, planejamento, implementação e governança de uma arquitetura corporativa. É mantido pelos membros do The Open Group. Seu desenvolvimento original ocorreu em 1995, pelo Departamento de Defesa americano.

    O que é uma empresa?

    O TOGAF define como empresa como uma coleção de organizações que possuem objetivos comuns. Por exemplo: uma agência do governo, uma corporação inteira, uma divisão de uma corporação, um departamento ou uma cadeia de organizações geograficamente distantes, mas ligadas pelo mesmo proprietário.

    Por que eu preciso de uma arquitetura empresarial?

    Para otimizar dentro da empresa o fragmentado legado de processos, tanto os manuais, como os automatizados, dentro de um ambiente integrado que é receptivo a mudanças e possui suporte à entrega de estratégia de negócios.

    Referências

    DevOps



    É uma metodologia de desenvolvimento de sw que explora a comunicação, colaboração e integração entre desenvolvedores de software e profissionais de TI. É uma reação à interdependência de desenvolvimento de software e operações de TI. Busca auxiliar as organizações a desenvolver softwares e serviços com rapidez

    É conhecido como implementação contínua ou entrega contínua e é frequentemente associado com a metodologia Learn Startup

    Auxilia empresas no gerenciamento de lançamento de novas versões, ao padronizar ambientes de desenvolvimento. 

    O DevOps simplifica processos com objetivo de automatizar a maior quantidade possível de processos operacionais. 

    Integrações DevOps visam a entrega de produtos, testes de qualidade, desenvolvimento de características e releases de manutenção, de modo a incrementar a confiança e segurança, desenvolvimento rápido e ciclos de desenvolvimento. 
    Muitas organizações dividem Desenvolvimento e Administração de Sistemas em departamentos diferentes. Enquanto os departamentos de desenvolvimento são guiados pelas necessidades do usuário para entregar frequentemente novos recursos, os departamentos de operações focam mais na disponibilidade e estabilidade dos serviços de TI e eficiência de custos em TI. Esses dois objetivos contraditórios criam um abismo entre Desenvolvimento e Operações, o que desacelera a entrega dos valores nos negócios de TI.

    Em uma organização DevOps, o lançamento de aplicações é de baixo risco pelas seguintes razões:
    Escopo de mudança reduzido
    Mais lançamentos de novas versões. Menos mudanças.

    Priorização


    LÍNGUA PORTUGUESA (exceto para o Cargo 8: Analista Judiciário – Área: Apoio Especializado – Especialidade: Revisão de Texto): 1 Compreensão e interpretação de textos de gêneros variados. 2 Reconhecimento de tipos e gêneros textuais. 3 Domínio da ortografia oficial. 3.1 Emprego das letras. 3.2 Emprego da acentuação gráfica. 4 Domínio dos mecanismos de coesão textual. 4.1 Emprego de elementos de referenciação, substituição e repetição, de conectores e outros elementos de sequenciação textual. 4.2 Emprego/correlação de tempos e modos verbais. 5 Domínio da estrutura morfossintática do período. 5.1 Relações de coordenação entre orações e entre termos da oração. 5.2 Relações de subordinação entre orações e entre termos da oração. 5.3 Emprego dos sinais de pontuação. 5.4 Concordância verbal e nominal. 5.5 Emprego do sinal indicativo de crase. 5.6 Colocação dos pronomes átonos. 6 Reescritura de frases e parágrafos do texto. 6.1 Substituição de palavras ou de trechos de texto. 6.2 Retextualização de diferentes gêneros e níveis de formalidade. 7 Correspondência oficial (conforme Manual de Redação da Presidência da República). 7.1 Adequação da linguagem ao tipo de documento. 7.2 Adequação do formato do texto ao gênero.
    LÍNGUA INGLESA: 1. Compreensão de textos em língua inglesa. 2. Aspectos gramaticais relevantes para a compreensão de textos em língua inglesa.
    RACIOCÍNIO LÓGICO: (apenas para o Cargo 2: Analista Judiciário – Área: Apoio Especializado – Especialidade: Análise de Sistemas de Informação e o Cargo 9: Analista Judiciário – Área: Apoio Especializado – Especialidade: Suporte em Tecnologia da Informação): 1 Estruturas lógicas. 2 Lógica de argumentação: analogias, inferências, deduções e conclusões. 3 Lógica sentencial (ou proposicional). 3.1Proposições simples e compostas. 3.2 Tabelas-verdade. 3.3 Equivalências. 3.4 Leis de De Morgan. 3.5 Diagramas lógicos. 4 Lógica de primeira ordem. 5 Princípios de contagem e probabilidade. 6 Operações com conjuntos. 7 Raciocínio lógico envolvendo problemas aritméticos, geométricos e matriciais.
    NOÇÕES DE DIREITO CONSTITUCIONAL: 1Constituição da República Federativa do Brasil de 1988. 1.1 Princípios fundamentais. 2 Aplicabilidade das normas constitucionais. 2.1 Normas de eficácia plena, contida e limitada. 2.2 Normas programáticas. 3 Direitos e garantias fundamentais. 3.1 Direitos e deveres individuais e coletivos, direitos sociais, direitos de nacionalidade, direitos políticos, partidos políticos. 4 Organização político-administrativa do Estado. 4.1 Estado federal brasileiro, União, estados, Distrito Federal, municípios e territórios. 5 Administração pública. 5.1 Disposições gerais, servidores públicos. 6 Poder Executivo. 6.1 Atribuições e responsabilidades do presidente da República. 7 Poder legislativo. 7.1 Estrutura. 7.2 Funcionamento e atribuições. 8 Poder Judiciário. 8.1 Disposições gerais. 8.2 Órgãos do Poder Judiciário. 9 Funções essenciais à Justiça. 9.1 Ministério público, advocacia pública. 9.2 Defensoria pública.
    NOÇÕES DE DIREITO ADMINISTRATIVO: 1 Noções de organização administrativa. 2 Administração direta e indireta, centralizada e descentralizada. 3 Princípios básicos da administração. 4 Regime jurídico dos servidores públicos civis da União (Lei nº 8.112/1990 e suas alterações). 4.1 Provimento, vacância, remoção, redistribuição e substituição. 4.2 Direitos e vantagens. 4.3 Regime disciplinar: deveres, proibições, acumulação, responsabilidades, penalidades, processo administrativo disciplinar. 5 Carreira do Poder Judiciário da União. 5.1 Lei nº 11.416/2006 e alterações. 5.2. Regime de Previdência Complementar do Servidor Público Federal (Lei nº 12.618/2012). 6 Poderes administrativos. 6.1 Hierárquico, disciplinar, regulamentar e de polícia. 5.2 Uso e abuso do poder. 7 Licitação (Lei n° 8.666/1993 e suas alterações). 7.1 Princípios, dispensa e inexigibilidade. 7.2 Contratos administrativos: conceitos, princípios, aspectos gerais, peculiaridades, cláusulas necessárias, formalização, execução, fiscalização, sanções, alterações, dissolução e extinção. 8 Controle e responsabilização da administração. 8.1 Controles administrativo, judicial e legislativo. 8.2 Responsabilidade civil do Estado. 9 Processo Administrativo. 9.1 Lei nº 9.784/1999
    LEGISLAÇÃO ESPECÍFICA: 1 Código de Ética dos Servidores do Supremo Tribunal Federal. 1.1 Resolução STF nº 246/2002. 1.2 Resolução STF nº 249/2003. 2 Lei nº 12.527/2011 (Lei de Acesso à Informação).
    REGIMENTO INTERNO DO STF: 1 Organização e competência. 2 Serviços do Tribunal. 3 Disposições finais.
    13.2.1.2.2 CARGO 2: ANALISTA JUDICIÁRIO – ÁREA: APOIO ESPECIALIZADO – ESPECIALIDADE: ANÁLISE DE SISTEMAS DE INFORMAÇÃO
    FUNDAMENTOS EM TI: 1 Sistemas operacionais. 2 Redes de computadores.
    GOVERNANÇA E GESTÃO DE TI: 1 ISO 38500. 2 COBIT 5. 3 PMBOK 5. 4 Gestão ágil de projetos com Scrum. 5 Noções gerais sobre DevOps. 6 Arquitetura Corporativa (TOGAF).
    PROCESSOS DE NEGÓCIO:
    1 Conceitos básicos sobre processos de negócio. 2 Identificação e delimitação de processos de negócio. 3 Construção e mensuração de indicadores de processos de negócio. 4 Técnicas de mapeamento, modelagem e melhoria de processos de negócio. 5 Modelagem de processos em UML e BPMN.
    ENGENHARIA DE SOFTWARE:
    1 Conceitos básicos sobre engenharia de software. 2 Disciplinas de engenharia de software. 3 Processos e práticas ágeis de desenvolvimento de software. 4 Análise de requisitos funcionais e não funcionais. 5 Análise, projeto e modelagem orientada a objetos. 5.1 UML. 6 Modelagem de dados. 6.1 Modelo relacional. 7 Qualidade de software. 7.1 ISO 9126. 7.2 Métricas de qualidade de software. 8 Análise de Pontos de Função.
    ARQUITETURA DE SOFTWARE:
    1 Arquitetura de aplicações para ambiente web. 2 Arquitetura em camadas. 3 Arquitetura de microsserviços. 4 Arquiteturas de integração. 4.1 Service-oriented Architecture (SOA). 4.2 Webservices. 4.3 REST. 5 Domain-Driven Design. 6 Design Patterns. 7 Emergent Design. 8 Tunning. 9 Noções sobre Enterprise Content Managment (ECM). 10 Noções sobre automação de processos de negócio (BPM). 11 Noções sobre computação na nuvem (Cloud Computing).
    DESENVOLVIMENTO DE SOFTWARE:
    1 Lógica de programação. 2 Programação orientada a objetos. 3 Criptografia. 3.1 Conceitos básicos e aplicações. 3.2 Protocolos criptográficos. 3.3 Criptografia simétrica e assimétrica. 3.4 Principais algoritmos. 3.5 Assinatura e certificação digital. 4 Clean Code. 5 Integração contínua. 6 Desenvolvimento orientado a testes (TDD). 6.1 Automação de testes com Selenium. 7 Métricas de qualidade de código com Sonar. 8 Refactoring. 9 Teste de carga com JMeter. 9 Java SE. 10 Java EE. 11 Frameworks para camada de apresentação. 11.1 Struts. 11.2 JSF. 11.3 Richfaces. 12Frameworks para camada de persistência. 12.1 JPA. 12.2 Hibernate. 13 JBoss Seam. 14 HTML. 14.1 HTML5. 15 CSS3. 16 Java Script. 17 XML. 18 SQL. 18.1 PL/SQL. 19 JMS. 20 Spring Framework. 21 AngularJS. 22 JSON. 23 JUnit. 24 Maven Build Tool. 25 Jenkins CI. 26 Subversion. 27 Jasper. 28 SOAP Ui. 29 Artifactory. 30 Lucene. 31 Tomcat Application Server. 32 JBoss Application Server. 33 Apache Web Server. 34 Conceitos básicos sobre sistemas de suporte à decisão.

    Prioridade Alta
    Prioridade Média 
    Prioridade Baixa
    Estudado
    Aprofundar

    Matéria do Concurso



    ANALISTA JUDICIÁRIO
    LÍNGUA PORTUGUESA (exceto para o Cargo 8: Analista Judiciário – Área: Apoio Especializado – Especialidade: Revisão de Texto): 1 Compreensão e interpretação de textos de gêneros variados. 2 Reconhecimento de tipos e gêneros textuais. 3 Domínio da ortografia oficial. 3.1 Emprego das letras. 3.2 Emprego da acentuação gráfica. 4 Domínio dos mecanismos de coesão textual. 4.1 Emprego de elementos de referenciação, substituição e repetição, de conectores e outros elementos de sequenciação textual. 4.2 Emprego/correlação de tempos e modos verbais. 5 Domínio da estrutura morfossintática do período. 5.1 Relações de coordenação entre orações e entre termos da oração. 5.2 Relações de subordinação entre orações e entre termos da oração. 5.3 Emprego dos sinais de pontuação. 5.4 Concordância verbal e nominal. 5.5 Emprego do sinal indicativo de crase. 5.6 Colocação dos pronomes átonos. 6 Reescritura de frases e parágrafos do texto. 6.1 Substituição de palavras ou de trechos de texto. 6.2 Retextualização de diferentes gêneros e níveis de formalidade. 7 Correspondência oficial (conforme Manual de Redação da Presidência da República). 7.1 Adequação da linguagem ao tipo de documento. 7.2 Adequação do formato do texto ao gênero.
    LÍNGUA INGLESA: 1. Compreensão de textos em língua inglesa. 2. Aspectos gramaticais relevantes para a compreensão de textos em língua inglesa.
    RACIOCÍNIO LÓGICO: (apenas para o Cargo 2: Analista Judiciário – Área: Apoio Especializado – Especialidade: Análise de Sistemas de Informação e o Cargo 9: Analista Judiciário – Área: Apoio Especializado – Especialidade: Suporte em Tecnologia da Informação): 1 Estruturas lógicas. 2 Lógica de argumentação: analogias, inferências, deduções e conclusões. 3 Lógica sentencial (ou proposicional). 3.1Proposições simples e compostas. 3.2 Tabelas-verdade. 3.3 Equivalências. 3.4 Leis de De Morgan. 3.5Diagramas lógicos. 4 Lógica de primeira ordem. 5 Princípios de contagem e probabilidade. 6 Operações com conjuntos. 7 Raciocínio lógico envolvendo problemas aritméticos, geométricos e matriciais.
    NOÇÕES DE DIREITO CONSTITUCIONAL (exceto para o Cargo 10: Analista Judiciário – Área: Judiciária): 1Constituição da República Federativa do Brasil de 1988. 1.1 Princípios fundamentais. 2 Aplicabilidade das normas constitucionais. 2.1 Normas de eficácia plena, contida e limitada. 2.2 Normas programáticas. 3 Direitos e garantias fundamentais. 3.1 Direitos e deveres individuais e coletivos, direitos sociais, direitos de nacionalidade, direitos políticos, partidos políticos. 4 Organização político-administrativa do Estado. 4.1 Estado federal brasileiro, União, estados, Distrito Federal, municípios e territórios. 5 Administração pública. 5.1 Disposições gerais, servidores públicos. 6 Poder Executivo. 6.1 Atribuições e responsabilidades do presidente da República. 7 Poder legislativo. 7.1 Estrutura. 7.2 Funcionamento e atribuições. 8 Poder Judiciário. 8.1 Disposições gerais. 8.2 Órgãos do Poder Judiciário. 9 Funções essenciais à Justiça. 9.1 Ministério público, advocacia pública. 9.2 Defensoria pública.
    NOÇÕES DE DIREITO ADMINISTRATIVO (exceto para o Cargo 1: Analista Judiciário – Área: Administrativa e o Cargo 10: Analista Judiciário – Área: Judiciária): 1 Noções de organização administrativa. 2 Administração direta e indireta, centralizada e descentralizada. 3 Princípios básicos da administração. 4 Regime jurídico dos servidores públicos civis da União (Lei nº 8.112/1990 e suas alterações). 4.1 Provimento, vacância, remoção, redistribuição e substituição. 4.2 Direitos e vantagens. 4.3 Regime disciplinar: deveres, proibições, acumulação, responsabilidades, penalidades, processo administrativo disciplinar. 5 Carreira do Poder Judiciário da União. 5.1 Lei nº 11.416/2006 e alterações. 5.2. Regime de Previdência Complementar do Servidor Público Federal (Lei nº 12.618/2012). 6 Poderes administrativos. 6.1 Hierárquico, disciplinar, regulamentar e de polícia. 5.2 Uso e abuso do poder. 7 Licitação (Lei n° 8.666/1993 e suas alterações). 7.1 Princípios, dispensa e inexigibilidade. 7.2 Contratos administrativos: conceitos, princípios, aspectos gerais, peculiaridades, cláusulas necessárias, formalização, execução, fiscalização, sanções, alterações, dissolução e extinção. 8 Controle e responsabilização da administração. 8.1 Controles administrativo, judicial e legislativo. 8.2 Responsabilidade civil do Estado. 9 Processo Administrativo. 9.1 Lei nº 9.784/1999
    LEGISLAÇÃO ESPECÍFICA: 1 Código de Ética dos Servidores do Supremo Tribunal Federal. 1.1 Resolução STF nº 246/2002. 1.2 Resolução STF nº 249/2003. 2 Lei nº 12.527/2011 (Lei de Acesso à Informação).
    REGIMENTO INTERNO DO STF (apenas para o Cargo 1: Analista Judiciário – Área: Administrativa, o Cargo 2: Analista Judiciário – Área: Apoio Especializado – Especialidade: Análise de Sistemas de Informação, o Cargo 4: Analista Judiciário – Área: Apoio Especializado – Especialidade: Engenharia Elétrica, o Cargo 6: Analista Judiciário – Área: Apoio Especializado – Especialidade: Medicina – Ramo: Medicina do Trabalho, o Cargo 7: Analista Judiciário – Área: Apoio Especializado – Especialidade: Medicina – Ramo: Ortopedia e o Cargo 9: Analista Judiciário – Área: Apoio Especializado – Especialidade: Suporte em Tecnologia da Informação): 1 Organização e competência. 2 Serviços do Tribunal. 3 Disposições finais.
    13.2.1.2.2 CARGO 2: ANALISTA JUDICIÁRIO – ÁREA: APOIO ESPECIALIZADO – ESPECIALIDADE: ANÁLISE DE
    SISTEMAS DE INFORMAÇÃO
    FUNDAMENTOS EM TI: 1 Sistemas operacionais. 2 Redes de computadores.
    GOVERNANÇA E GESTÃO DE TI:
    1 ISO 38500. 2 COBIT 5. 3 PMBOK 5. 4 Gestão ágil de projetos com Scrum. 5 Noções gerais sobre DevOps. 6 Arquitetura Corporativa (TOGAF).
    PROCESSOS DE NEGÓCIO:
    1 Conceitos básicos sobre processos de negócio. 2 Identificação e delimitação de processos de negócio. 3 Construção e mensuração de indicadores de processos de negócio. 4 Técnicas de mapeamento, modelagem e melhoria de processos de negócio. 5 Modelagem de processos em UML e BPMN.
    ENGENHARIA DE SOFTWARE:
    1 Conceitos básicos sobre engenharia de software. 2 Disciplinas de engenharia de software. 3 Processos e práticas ágeis de desenvolvimento de software. 4 Análise de requisitos funcionais e não funcionais. 5 Análise, projeto e modelagem orientada a objetos. 5.1 UML. 6 Modelagem de dados. 6.1 Modelo relacional. 7 Qualidade de software. 7.1 ISO 9126. 7.2 Métricas de qualidade de software. 8 Análise de Pontos de Função.
    ARQUITETURA DE SOFTWARE:
    1 Arquitetura de aplicações para ambiente web. 2 Arquitetura em camadas.3 Arquitetura de microsserviços. 4 Arquiteturas de integração. 4.1 Service-oriented Architecture (SOA). 4.2 Webservices. 4.3 REST. 5 Domain-Driven Design. 6 Design Patterns. 7 Emergent Design. 8 Tunning. 9 Noções sobreEnterprise Content Managment (ECM). 10 Noções sobre automação de processos de negócio (BPM). 11 Noções sobre computação na nuvem (Cloud Computing).
    DESENVOLVIMENTO DE SOFTWARE:
    1 Lógica de programação. 2 Programação orientada a objetos. 3 Criptografia. 3.1 Conceitos básicos e aplicações. 3.2 Protocolos criptográficos. 3.3 Criptografia simétrica e assimétrica. 3.4 Principais algoritmos. 3.5 Assinatura e certificação digital. 4 Clean Code. 5 Integração contínua. 6 Desenvolvimento orientado a testes (TDD). 6.1 Automação de testes com Selenium. 7 Métricas de qualidade de código com Sonar. 8 Refactoring. 9 Teste de carga com JMeter. 9 Java SE. 10 Java EE. 11 Frameworks para camada de apresentação. 11.1 Struts. 11.2 JSF. 11.3 Richfaces. 12Frameworks para camada de persistência. 12.1 JPA. 12.2 Hibernate. 13 JBoss Seam. 14 HTML. 14.1 HTML5. 15 CSS3. 16 Java Script. 17 XML. 18 SQL. 18.1 PL/SQL. 19 JMS. 20 Spring Framework. 21 AngularJS. 22 JSON. 23 JUnit. 24 Maven Build Tool. 25 Jenkins CI. 26 Subversion. 27 Jasper. 28 SOAP Ui. 29 Artifactory. 30 Lucene. 31 Tomcat Application Server. 32 JBoss Application Server. 33 Apache Web Server. 34 Conceitos básicos sobre sistemas de suporte à decisão.


    TÉCNICO JUDICIÁRIO
    13.2.1.3 CONHECIMENTOS BÁSICOS PARA OS CARGOS DE TÉCNICO JUDICIÁRIO
    LÍNGUA PORTUGUESA: 1 Compreensão e interpretação de textos. 2 Tipologia textual. 3 Ortografia oficial. 4 Acentuação gráfica. 5 Emprego das classes de palavras. 6 Emprego/correlação de tempos e modos verbais. 7 Emprego do sinal indicativo de crase. 8 Sintaxe da oração e do período. 9 Pontuação. 10 Concordância nominal e verbal. 11 Regência nominal e verbal. 12 Significação das palavras. 13 Redação de Correspondências oficiais (Manual de Redação da Presidência da República). 13.1 Adequação da linguagem ao tipo de documento. 13.2 Adequação do formato do texto ao gênero.
    NOÇÕES DE DIREITO CONSTITUCIONAL (exceto para o Cargo 11: Técnico Judiciário – Área: Administrativa): 1 Constituição. 1.1 Conceito, classificações, princípios fundamentais. 2 Direitos e garantias fundamentais. 2.1 Direitos e deveres individuais e coletivos, direitos sociais, nacionalidade, cidadania, direitos políticos, partidos políticos. 3 Organização político-administrativa. 3.1 União, estados, Distrito Federal, municípios e territórios. 4 Administração pública. 4.1 Disposições gerais, servidores públicos. 5 Poder Legislativo. 5.1 Congresso nacional, câmara dos deputados, senado federal, deputados e senadores. 6 Poder Executivo. 6.1 atribuições do presidente da República e dos ministros de Estado. 7 Poder Judiciário. 7.1 Disposições gerais. 7.2 Órgãos do Poder Judiciário. 7.2.1 Competências. 7.3 Conselho Nacional de Justiça (CNJ). 7.3.1 Composição e competências. 8 Funções essenciais à Justiça. 8.1 Ministério público, advocacia e defensoria públicas.
    NOÇÕES DE DIREITO ADMINISTRATIVO (exceto para o Cargo 11: Técnico Judiciário – Área:Administrativa): 1 Noções de organização administrativa. 1.1 Centralização, descentralização, concentração e desconcentração. 1.2 Administração direta e indireta. 1.3 Autarquias, fundações, empresas públicas e sociedades de economia mista. 2 Ato administrativo. 2.1 Conceito, requisitos, atributos, classificação e espécies. 3 Agentes públicos. 3.1 Legislação pertinente. 3.1.1 Lei nº 8.112/1990. 3.1.2 Disposições constitucionais aplicáveis. 3.2 Disposições doutrinárias. 3.2.1 Conceito. 3.2.2 Espécies. 3.2.3 Cargo, emprego e função pública. 4 Poderes administrativos. 4.1 Hierárquico, disciplinar, regulamentar e de polícia.4.2 Uso e abuso do poder. 5 Licitação. 5.1 Princípios. 5.2 Contratação direta: dispensa e inexigibilidade. 5.3 Modalidades. 5.4 Tipos. 5.5 Procedimento. 6 Controle da administração pública. 6.1 Controle exercido pela administração pública. 6.2 Controle judicial. 6.3 Controle legislativo. 7 Responsabilidade civil do Estado. 7.1 Responsabilidade civil do Estado no direito brasileiro. 7.1.1 Responsabilidade por ato comissivo do Estado. 7.1.2 Responsabilidade por omissão do Estado. 7.2 Requisitos para a demonstração da responsabilidade do Estado. 7.3 Causas excludentes e atenuantes da responsabilidade do Estado. 8 Regime jurídico-administrativo. 8.1 Conceito. 8.2 Princípios expressos e implícitos da administração pública.
    RACIOCÍNIO LÓGICO
    : 1 Estruturas lógicas. 2 Lógica de argumentação: analogias, inferências, deduções e conclusões. 3 Lógica sentencial (ou proposicional). 3.1 Proposições simples e compostas. 3.2 Tabelas-verdade. 3.3 Equivalências. 3.4 Leis de De Morgan. 3.5 Diagramas lógicos. 4 Lógica de primeira ordem. 5 Princípios de contagem e probabilidade. 6 Operações com conjuntos. 7 Raciocínio lógico envolvendo problemas aritméticos, geométricos e matriciais.
    REGIMENTO INTERNO DO STF: 1 Organização e competência. 2 Serviços do Tribunal. 3 Disposições finais.
    LEGISLAÇÃO ESPECÍFICA: 1 Código de Ética dos Servidores do STF. 1.1 Resolução STF nº 246/2002. 1.2 Resolução STF nº 249/2003. 2 Lei nº 12.527/2011 (Lei de Acesso à Informação).
    13.2.1.4.3 TÉCNICO JUDICIÁRIO – ÁREA: APOIO ESPECIALIZADO – ESPECIALIDADE: TECNOLOGIA DA
    INFORMAÇÃO FUNDAMENTOS EM TI: 1 Sistemas operacionais. 2 Redes de computadores.
    GOVERNANÇA E GESTÃO DE TI: 1 Noções gerais sobre Governança de TI, ISO 38500 e COBIT 5. 2 Noções
    gerais sobre Gerenciamento de Serviços, ISO 20000 e ITIL v3. 3 Noções gerais sobre gerenciamento de projetos com PMBoK 5. 4 Gestão ágil de projetos com Scrum. 5 Noções gerais sobre DevOps.
    ENGENHARIA DE SOFTWARE: 1 Conceitos básicos sobre engenharia de software. 2 Conceitos básicos sobre disciplinas de engenharia de software. 3 Processos e práticas ágeis de desenvolvimento. 4 Análise de requisitos funcionais e não funcionais. 5 Conceitos básicos sobre análise, projeto e modelagem orientada a objetos. 5.1 UML. 6 Modelagem de dados. 6.1 Modelo relacional. 7 Qualidade de software. 7.1 Métricas de qualidade de software.
    ARQUITETURA DE SOFTWARE: 1 Noções sobre arquitetura de aplicações para ambiente web. 2 Noções sobre arquitetura em camadas. 3 Noções sobre arquit.etura de microsserviços. 4 Noções sobre arquiteturas de integração. 4.1 Noções sobre Service-oriented Architecture(SOA). 4.2 Noções sobre Webservices. 4.3 Noções sobre REST. 5 Noções sobre Domain-Driven Design. 6 Design Patterns. 7 Noções sobre Emergent Design. 8 Noções sobre Tunning. 9 Noções sobre Enterprise Content Managment (ECM). 10 Noções sobre automação de processos de negócio (BPM). 11 Noções sobre computação na nuvem (Cloud Computing).
    DESENVOLVIMENTO DE SOFTWARE: 1 Lógica de programação. 2 Programação orientada a objetos. 3 Criptografia. 3.1 Conceitos básicos e aplicações. 3.2 Protocolos criptográficos. 3.3 Criptografia simétrica e assimétrica. 3.4 Principais algoritmos. 3.5 Assinatura e certificação digital. 4 Clean Code. 5 Integração contínua. 6 Desenvolvimento orientado a testes (TDD). 7 Automação de testes com Selenium. 8 Métricas de qualidade de código com Sonar. 9 Refactoring. 10 Teste de carga com JMeter. 11 Java SE. 12 Java EE. 13 Frameworks para camada de apresentação. 13.1 Struts. 13.2 JSF. 13.3 Richfaces. 14 Frameworks para camada de persistência. 14.1 JPA, 14.2 Hibernate. 15 JBoss Seam. 16 HTML. 17 HTML5. 18 CSS3. 19 Java Script. 20 XML. 21 SQL. 22 PL/SQL. 23 JMS. 24 Spring Framework. 25 AngularJS. 26 JSON. 27 JUnit. 28 Maven Build Tool. 29 Jenkins CI. 30 Subversion. 31 Jasper. 32 SOAP Ui. 33 Artifactory. 34 Lucene. 35 Tomcat Application Server. 36 JBoss Application Server. 37 Apache Web Server.
    LÍNGUA INGLESA:1 Compreensão de textos em língua inglesa. 2 Aspectos gramaticais relevantes para a compreensão de textos em língua inglesa.