sábado, 26 de setembro de 2009

Entendendo o Extreme Program

Kent Beck, autor de Extreme Programming Explained, diz, "XP é uma metodologia peso-leve para equipes pequenas e médias que desenvolvem software a partir de requisitos vagos ou que mudam rapidamente".

Simplesmente declarado, XP é um conjunto de valores, direitos, e melhores práticas que se suportam mutuamente no desenvolvimento incremental de software.

Quando uma equipe está desenvolvendo software com XP, o cliente cria histórias que descrevem a funcionalidade do software. Estas histórias são casos de uso muito leves. Elas são pequenas unidades de funcionalidade que necessitam de menos de uma ou duas semanas para implementação. Os programadores estimam as histórias e, com base nessas estimativas, o cliente decide quais histórias serão construídas primeiro.

O desenvolvimento é feito iterativamente e de forma incremental. A cada duas semanas, a equipe de programação entrega ao cliente histórias que estejam funcionando.

Então o cliente escolhe mais duas semanas completas de trabalho. O sistema cresce em funcionalidade, pedaço por pedaço e dirigido pelo cliente. O progresso é monitorado e medido com base no comportamento observável da equipe.

XP se baseia em técnicas de design e testes evolutivos que mantêm um design de alta qualidade, enquanto novas funcionalidades estão sendo adicionadas. Estas técnicas evitam o caos de código não manutenível através de revisões contínuas, ênfase na simplicidade e a quase universal cobertura de testes.

Os programadores executam as suas tarefas de programação em pares. O par compartilha uma única estação de trabalho e trabalha junto para escrever uma única parte do código. Ambos estão igualmente empenhados na escrita. O teclado se move freqüentemente de um lado para o outro entre eles.

Os programadores XP praticam o Desenvolvimento Orientado a Testes (TDD - Teste Driven Development). Em suma, eles escrevem testes de unidade antes de escrever o código de produção. Entretanto, isso é feito em incrementos muito pequenos. Pequenas partes de um teste são escritas primeiro e, depois, é escrito apenas código de produção suficiente para fazer essas partes passarem no teste. Isto continua iterativamente até que tudo, que praticamente possa ser testado, tenha sido testado.

O XP foca na entrega contínua, do primeiro dia do projeto até o último, de software testado e que esteja funcionando. A entrega de software real, combinado com planejamento simples, mas freqüente, fornece aos Stakeholders uma visão clara do que foi feito e do que será feito. Isso permite que a empresa dirija o projeto para uma entrega pontual do melhor software possível que pode ser concluído no prazo disponível.

Fonte: Eclipse Process Framework Compose

sábado, 12 de setembro de 2009

Processos no linux

Um programa em execução é considerado um processo em qualquer sistema operacional. São os processos que consomem os recursos do computador (processador, memória e etc).

É o processador que fica responsável pela priorização da execução desses processos, porém existem programas que possibilitam a manipulação e o gerenciamento de processos.

O sistema operacional lida com uma infinidade de processos e, por isso, é necessário ter meios que permitam controlá-los. Para isso, os processos contam com um conjunto de características, dentre as quais:

- Proprietário do processo;
- Estado do processo (em espera, em execução, etc);
- Prioridade de execução;
- Recursos de memória.

PID e PPID

Um PID (Process Identifier) é um número de identificação que o sistema dá a cada processo. Para cada novo processo, um novo número deve ser atribuído, ou seja, não se pode ter um único PID para dois ou mais processos ao mesmo tempo.

Os sistemas baseados em Unix precisam que um processo já existente se duplique para que a cópia possa ser atribuída a uma tarefa nova. Quando isso ocorre, o processo "copiado" recebe o nome de "processo pai", enquanto que o novo é denominado "processo filho". É nesse ponto que o PPID (Parent Process Identifier) passa a ser usado: o PPID de um processo nada mais é do que o PID de seu processo pai.


UID e GID

Conforme já mencionado, cada processo precisa de um proprietário, um usuário que seja considerado seu dono. A partir daí, o sistema saberá, através das permissões fornecidas pelo proprietário, quem pode e quem não pode executar o processo em questão. Para lidar com os donos, o sistema usa os números UID e GID.

O Linux gerencia os usuários e os grupos através de números conhecidos como UID (User Identifier) e GID (Group Identifier).

Os números UID e GID variam de 0 a 65536. Dependendo do sistema, o valor limite pode ser maior. No caso do usuário root, esses valores são sempre 0 (zero). Assim, para fazer com que um usuário tenha os mesmos privilégios que o root, é necessário que seu GID seja 0.

Sinais de processos

Os sinais são meios usados para que os processos possam se comunicar e para que o sistema possa interferir em seu funcionamento. Por exemplo, se o usuário executar o comando kill para interromper um processo, isso será feito por meio de um sinal.

Quando um processo recebe um determinado sinal e conta com instruções sobre o que fazer com ele, tal ação é colocada em prática. Se não houver instruções pré-programadas, o próprio Linux pode executar a ação de acordo com suas rotinas.

Entre os sinais existentes, tem-se os seguintes exemplos:

  • STOP - esse sinal tem a função de interromper a execução de um processo e só reativá-lo após o recebimento do sinal CONT;
  • CONT - esse sinal tem a função de instruir a execução de um processo após este ter sido interrompido;
  • SEGV - esse sinal informa erros de endereços de memória;
  • TERM - esse sinal tem a função de terminar completamente o processo, ou seja, este deixa de existir após a finalização;
  • ILL - esse sinal informa erros de instrução ilegal, por exemplo, quando ocorre divisão por zero;
  • KILL - esse sinal tem a função de "matar" um processo e é usado em momentos de criticidade.

O kill também é um comando que o usuário pode usar para enviar qualquer sinal, porém, se ele for usado de maneira isolada, ou seja, sem o parâmetro de um sinal, o kill por padrão executa o sinal TERM.

A sintaxe para a utilização do comando kill é a seguinte:

kill -SINAL PID

Como exemplo, vamos supor que você deseja interromper temporariamente a execução do processo de PID 4220. Para isso, pode-se usar o seguinte comando:

kill -STOP 4220

Para que o processo 4220 volte a ser executado, basta usar o comando:

kill -CONT 4220

Se o sinal precisa ser enviado a todos os processos, pode-se usar o número -1 no lugar do PID. Por exemplo:

kill -STOP -1

Como já dito, usar o comando kill isoladamente - por exemplo, kill 4220 - faz com que este use o sinal TERM por padrão. Esse sinal, no entanto, pode ser ignorado pelos processos. É por isso que é boa prática usar o comando "kill -9 PID" para "matar" um processo, pois o número nove representa o sinal kill e este não pode ser ignorado. Isso deixa claro que se você conhecer o número que é atribuído a um sinal, você pode usá-lo no lugar de seu nome. Com exceção de alguns sinais, a numeração de cada um pode mudar de acordo com a distribuição ou com a versão do kernel.

Também é comum usar o kill da seguinte forma: kill -l PID. A opção "-l" (letra L minúscula) é usada para listar os processos que aceitaram o kill.

Agora, imagine que você não saiba qual o PID de um processo e tenha se esquecido que o comando ps (visto mais à frente) descobre tal informação. Neste caso, pode-se usar o comando killall, desde que você saiba o nome do processo. A sintaxe é:

killall -SINAL processo

Por exemplo:

killall -STOP vi

Estado dos processos

Quando um processo é criado, isso não significa que ele será imediatamente executado. Além disso, determinados processos podem ser temporariamente paralisados para que o processador possa executar um processo prioritário. Isso quer dizer que os processos, em certos momentos, podem estar em situações de execução diferentes. O Linux trabalha, essencialmente, com quatro tipos de situação, isto é, estados:

  • Executável: o processo pode ser executado imediatamente;
  • Dormente: o processo precisa aguardar alguma coisa para ser executado. Só depois dessa "coisa" acontecer é que ele passa para o estado executável;
  • Zumbi: o processo é considerado "morto", mas, por alguma razão, ainda existe;
  • Parado: o processo está "congelado", ou seja, não pode ser executado.

Comandos nice e renice

Ao abordarmos os comandos nice e renice é necessário entender o conceito de gentileza. Um processo pode ter prioridade em relação a outros em sua execução. Quando um processo é gentil, significa que ele "oferece a gentileza" de permitir que um processo com prioridade maior que a sua seja executado antes dele. Os níveis de gentileza, também chamados de nice, são determinados através de números. Quanto mais alto for o valor nice, mais gentil é o processo. Geralmente, o intervalo de números usados no nice são os inteiros entre -19 e 19.

Embora determinar a prioridade de um processo não seja uma prática comum, afinal, o próprio Linux faz muito bem essa tarefa, isso pode ser necessário em alguma situação. Para isso, utiliza-se um comando que recebe o mesmo nome do conceito: nice. A sintaxe é:

nice -n prioridade processo

Por exemplo:

nice -n -5 ntpd

No exemplo, o ntpd recebe prioridade -5. Trata-se de uma prioridade alta, afinal, como já dito, quanto menor o número menor sua gentileza.

Se um determinado processo está em execução, isso acontece com uma prioridade já definida. Para alterar um processo nessa condição, usa-se o comando renice, cuja sintaxe é:

renice prioridade opção processo/destino

As opções do renice são:

-u - a alteração ocorrerá nos processos do usuário informado;
-g - a alteração ocorrerá nos processos do grupo indicado;
-p - a alteração ocorrerá no processo cujo PID for informado.

Um exemplo:

renice +19 1000 -u infowester

Neste caso, o comando renice alterou a prioridade do processo 1000, assim como a prioridade dos processos do usuário infowester.

Verificando processos com o ps

O ps é um comando de extrema importância para o gerenciamento de processos. Por ele, é possível saber quais os processos em execução atualmente, quais os UIDs e PIDs correspondentes, entre outros.

Se somente ps for digitado na linha de comando, geralmente o sistema mostra quais os processos do usuário. É preciso usar uma combinação de opções para obter mais detalhes.

As opções mais importantes são os seguintes:

  • a - mostra todos os processos existentes;
  • e - exibe as variáveis de ambiente relacionadas aos processos;
  • f - exibe a árvore de execução dos processos;
  • l - exibe mais campos no resultado;
  • m - mostra a quantidade de memória ocupada por cada processo;
  • u - exibe o nome do usuário que iniciou determinado processo e a hora em que isso ocorreu;
  • x - exibe os processos que não estão associados a terminais;
  • w - se o resultado de processo não couber em uma linha, essa opção faz com que o restante seja exibido na linha seguinte.

Das opções acima, a combinação mais usada é aux:

ps aux

Usando a combinação lax, o resultado mostra mais detalhes:

ps lax

Essa combinação de comandos mostra uma série de informações sobre os processos, segue a descrição dos campos mostrados anteriormente e alguns que só são mostrados com a combinação lax:

  • USER - nome do usuário dono do processo;
  • UID - número de identificação do usuário dono do processo;
  • PID - número de identificação do processo;
  • PPID - número de identificação do processo pai;
  • %CPU - porcentagem do processamento usado;
  • %MEM - porcentagem da memória usada;
  • VSZ - indica o tamanho virtual do processo;
  • RSS - sigla de Resident Set Size, indica a quantidade de memória usada (em KB);
  • TTY - indica o identificador do terminal do processo;
  • START - hora em que o processo foi iniciado;
  • TIME - tempo de processamento já consumido pelo processo;
  • COMMAND - nome do comando que executa aquele processo;
  • PRI - valor da prioridade do processo;
  • NI - valor preciso da prioridade (geralmente igual aos valores de PRI);
  • WCHAN - mostra a função do kernel onde o processo se encontra em modo suspenso;
  • STAT - indica o estado atual do processo, sendo representado por uma letra: R - executável; D - em espera no disco; S - Suspenso; T - interrompido; Z - Zumbi. Essas letras podem ser combinadas e ainda acrescidas de: W - processo paginado em disco; < - processo com prioridade maior que o convencional; N - processo com prioridade menor que o convencional; L - processo com alguns recursos bloqueados no kernel.

Verificando processos com o top

O comando ps trabalha como se tirasse uma fotografia da situação dos processos naquele momento. O comando top, por sua vez, coleta as informações, mas as atualiza regularmente. Geralmente essa atualização ocorre a cada 10 segundos.

A sintaxe do comando top é a seguinte:

top -opção

Entre as opções, tem-se as que se seguem:

-d - atualiza o top após um determinado período de tempo (em segundos). Para isso, informe a quantidade de segundos após a letra d. Por exemplo: top -d 30;
-c - exibe a linha de comando ao invés do nome do processo;
-i - faz o top ignorar processos em estado zumbi;
-s - executa o top em modo seguro.

É possível manipular alguns recursos do comando top através de teclas de atalho. Por exemplo, para atualizar imediatamente o resultado exibido, basta pressionar a tecla de espaço. Se pressionar a tecla q, o top é finalizado. Pressione a tecla h enquanto estiver utilizando o top para ver a lista completa de opções e teclas de atalho.

Os recursos jobs, fg e bg, fuser, pstree, nohup

Para ter ainda mais controle sobre os processos executados no Linux, pode-se utilizar os seguintes comandos: jobs, fg e bg, fuser, pstree, nohup. Cada um é descrito a seguir:

jobs - serve para visualizar os processos que estão parados ou executando em segundo plano (background). Quando um processo está nessa condição, significa sua execução é feita pelo kernel sem que esteja vinculada a um terminal. Em outras palavras, um processo em segundo plano é aquele que é executado enquanto o usuário faz outra coisa no sistema. Uma dica para saber se o processo está em background é verificar a existência do caractere & no final da linha. Se o processo estiver parado, geralmente a palavra "stopped" aparece na linha, do contrário, a palavra "running" é exibida. A sintaxe do jobs é:

jobs -opção

As opções disponíveis são:

  • -l - lista os processos através do PID;
  • -r - lista apenas os processos em execução;
  • -s - lista apenas os processos parados.

Se na linha de um processo aparecer o sinal positivo (+), significa que este é o processo mais recente a ser paralisado ou a estar em segundo plano. Se o sinal for negativo (-), o processo foi o penúltimo. Note também que no início da linha um número é mostrado entre colchetes. Muitos confundem esse valor com o PID do processo, mas, na verdade, trata-se do número de ordem usado pelo jobs.

fg e bg: o fg é um comando que permite a um processo em segundo plano (ou parado) passar para o primeiro (foreground), enquanto que o bg passa um processo do primeiro plano para o segundo. Para usar o bg, deve-se paralisar o processo. Isso pode ser feito pressionando-se as teclas Ctrl + Z no teclado. Em seguida, digita-se o comando da seguinte forma:

bg +número

O número mencionado corresponde ao valor de ordem informado no início da linha quando o comando jobs é usado.

Quanto ao comando fg, a sintaxe é a mesma:

fg +número


fuser: o comando fuser mostra qual processo faz uso de um determinado arquivo ou diretório. Sua sintaxe é:

fuser -opção caminho (do arquivo ou diretório)

Entre as opções, tem-se:

  • -k - finaliza o processo que utiliza o arquivo/diretório em questão;
  • -i - deve ser usada em conjunto com a opção k e serve para perguntar se a finalização do processo deve ser feita;
  • -u - mostra o proprietário do processo;
  • -v - o resultado é mostrado em um padrão de exibição semelhante ao comando ps.

pstree: esse comando mostra processos relacionados em formato de árvore. Sua sintaxe é:

pstree -opção PID


Entre as opções, tem-se:

  • -u - mostra o proprietário do processo;
  • -p - exibe o PID após o nome do processo;
  • -c - mostra a relação de processos ativos;
  • -G - usa determinados caracteres para exibir o resultado em um formato gráfico.

Um detalhe importante: se ao digitar o comando pstree o PID não for informado, todos os processos serão listados.

nohup: o comando nohup possibilita ao processo ficar ativo mesmo quando o usuário faz logout. É da natureza dos sistemas baseados em Unix interromper processos caso seu proprietário não esteja mais ativo, por isso, o nohup pode ser muito útil. Sua sintaxe é:

nohup comando

Aparentemente, não utilizamos com muita frequência os comandos descritos aqui e caso o computador trave podemos utilizar ferramentas gráficas como o xkill, entretanto fiz questão de pesquisar o assunto e compartilho com vocês essa pesquisa.

Tchau!

quinta-feira, 10 de setembro de 2009

Permissões de acesso a arquivos e diretórios

A permissão de acesso protege o sistema de arquivos Linux do acesso indevido de pessoas ou programas não autorizados.

Donos, grupos e outros usuários

O princípio da segurança no sistema de arquivos do Linux é definir o acesso aos arquivos por donos, grupos e outros usuários.

O Dono é a pessoa que criou o arquivo ou o diretório. O nome do dono do arquivo/diretório é o mesmo do usuário usado para entrar no sistema. Somente o dono pode modificar as permissões de acesso do arquivo. As permissões de acesso do dono de um arquivo somente se aplicam ao dono do arquivo/diretório. A identificação do dono também é chamada de user id (UID).

A identificação de usuário e o nome do grupo que pertence são armazenadas respectivamente nos arquivos /etc/passwd e /etc/group.

Estes são arquivos textos comuns e podem ser editados em qualquer editor de texto, mas tenha cuidado para não modificar o campo que contém a senha do usuário encriptada (que pode estar armazenada neste arquivo caso não estiver usando senhas ocultas).

O grupo serve para permitir que vários usuários diferentes tenham acesso a um mesmo arquivo (já que somente o dono poderia ter acesso ao arquivo).

Outros é a categoria de usuários que não são donos ou não pertencem ao grupo do arquivo.

Um usuário pode fazer parte de um ou mais grupos e então acessar arquivos que pertençam ao mesmo grupo que o seu (mesmo que estes arquivos tenham outro dono).

Permissões de acesso a arquivos e diretórios

Cada um dos tipos acima possuem três tipos básicos de permissões de acesso:

  • r - Permissão de leitura para arquivos. Caso for um diretório, permite listar seu conteúdo (através do comando ls, por exemplo).
  • w - Permissão de gravação para arquivos. Caso for um diretório, permite a gravação de arquivos ou outros diretórios dentro dele. Para que um arquivo/diretório possa ser apagado, é necessário o acesso a gravação.
  • x - Permite executar um arquivo (caso seja um programa executável). Caso seja um diretório, permite que seja acessado através do comando cd.

As permissões de acesso a um arquivo/diretório podem ser visualizadas com o uso do comando ls -la.

As 3 letras (rwx) são agrupadas da seguinte forma:

-rwxrwxrwx gleydson users teste

A seguir uma explicação das 10 letras da esquerda para a direita:

A primeira letra diz qual é o tipo do arquivo. Caso tiver um “d” é um diretório, um “l” um link a um arquivo no sistema (veja ‘ln’ on page 70 para detalhes) , um “-” quer dizer que é um arquivo comum, etc.

  • O primeiro grupo(rwx) refere-se a permissão de acesso ao dono do arquivo.
  • O segundo grupo(rwx) refere-se as permissões de acesso ao grupo do arquivo.
  • O terceiro grupo(rwx) diz qual é a permissão de acesso para os outros usuários.
  • gleydson é o dono do arquivo.
  • users é o grupo do arquivo.
  • e teste é o nome do arquivo


OBSERVAÇÕES:

Para listar os arquivos, permissões e respectivos grupo e dono use o comando ls -la

O usuário root não tem nenhuma restrição de acesso ao sistema.

Se você tem permissões de gravação no diretório e tentar apagar um arquivo que você não tem permissão de gravação, o sistema perguntará se você confirma a exclusão do arquivo apesar do modo leitura. Caso você tenha permissões de gravação no arquivo, o arquivo será apagado por padrão sem mostrar nenhuma mensagem de erro (a não ser que seja especificada a opção -i com o comando rm).

Por outro lado, mesmo que você tenha permissões de gravação em um arquivo mas não tenha permissões de gravação em um diretório, a exclusão do arquivo será negada.

Isto mostra que é levado mais em consideração a permissão de acesso do diretório do que as permissões dos arquivos e sub-diretórios que ele contém. Este ponto é muitas vezes ignorado por muitas pessoas e expõem seu sistema a riscos de segurança. Imagine o problema que algum usuário que não tenha permissão de gravação em um arquivo mas que a tenha no diretório pode causar em um sistema mal administrado.


Comandos chmod,chgrp,chown e unmask


chmod (muda a permissão de acesso)

Muda a permissão de acesso a um arquivo ou diretório. Com este comando você pode escolher se usuário ou grupo terá permissões para ler, gravar, executar um arquivo ou arquivos. Sempre que um arquivo é criado, seu dono é o usuário que o criou e seu grupo é o grupo do usuário.


chmod [opções] [permissões] [diretório/arquivo]

Onde:

diretório/arquivo Diretório ou arquivo que terá sua permissão mudada.

opções

-v, –verbose Mostra todos os arquivos que estão sendo processados.

-f, –silent Não mostra a maior parte das mensagens de erro.

-c, –change Semelhante a opção -v, mas só mostra os arquivos que tiveram as permissões alteradas.

-R, –recursive Muda permissões de acesso do diretório/arquivo no diretório atual e subdiretórios.

ugoa+-=rwxXst • ugoa - Controla que nível de acesso será mudado. Especificam, em ordem, usuário (u), grupo (g), outros (o), todos (a).

• +-= - + coloca a permissão, - retira a permissão do arquivo e  define a permissão exatamente como especificado.

• rwx - r permissão de leitura do arquivo. w permissão de gravação. x permissão de execução (ou acesso a diretórios).

chmod não muda permissões de links simbólicos, as permissões devem ser mudadas no arquivo alvo do link.

Exemplos de permissões de acesso:

  • chmod g+r * Permite que todos os usuários que pertençam ao grupo dos arquivos (g) tenham (+) permissões de leitura (r) em todos os arquivos do diretório atual.
  • chmod o-r teste.txt Retira (-) a permissão de leitura (r) do arquivo teste.txt para os outros usuários (usuários que não são donos e não pertencem ao grupo do arquivo. teste.txt.
  • chmod uo+x teste.txt Inclui (+) a permissão de execução do arquivo teste.txt para o dono e outros usuários do arquivo.
  • chmod a+x teste.txt Inclui (+) a permissão de execução do arquivo teste.txt para o dono, grupo e outros usuários.


chgrp (muda o grupo)

Muda o grupo de um arquivo/diretório.

chgrp [opções] [grupo] [arquivo/diretório]

Onde:

  • grupo Novo grupo do arquivo/diretório.
  • arquivo/diretório Arquivo/diretório que terá o grupo alterado.

opções

-c, –changes Somente mostra os arquivos/grupos que forem alterados.

-f, –silent Não mostra mensagens de erro para arquivos/diretórios que não puderam ser alterados.

-v, –verbose Mostra todas as mensagens e arquivos sendo modificados.

-R, –recursive Altera os grupos de arquivos/sub-diretórios do diretório atual.



chown (muda o dono)

Muda dono de um arquivo/diretório. Opcionalmente pode também ser usado para mudar o grupo.

chown [opções] [dono.grupo] [diretório/arquivo]

onde:

  • dono.grupo Nome do dono.grupo que será atribuído ao diretório/arquivo. O grupo é opcional.
  • diretório/arquivo Diretório/arquivo que o dono.grupo será modificado.

opções

-v, –verbose Mostra os arquivos enquanto são alterados.

-f, –supress Não mostra mensagens de erro durante a execução do programa.

-c, –changes Mostra somente arquivos que forem alterados.

-R, –recursive Altera dono e grupo de arquivos no diretório atual e sub-diretórios.



O dono.grupo pode ser especificado usando o nome de grupo ou o código numérico correspondente ao grupo (GID).

Você deve ter permissões de gravação no diretório/arquivo para alterar seu dono/grupo.

Exemplos:

  • chown joao teste.txt - Muda o dono do arquivo teste.txt para joao.
  • chown joao.users teste.txt - Muda o dono do arquivo teste.txt para joao e seu grupo para users.
  • chown -R joao.users * - Muda o dono/grupo dos arquivos do diretório atual e subdiretórios para joao/users (desde que você tenha permissões de gravação no diretórios e sub-diretórios).



Modo de permissão octal

Ao invés de utilizar os modos de permissão +r, -r, etc, pode ser usado o modo octal para se alterar a permissão de acesso a um arquivo. O modo octal é um conjunto de oito números onde cada número define um tipo de acesso diferente.

É mais flexível gerenciar permissões de acesso usando o modo octal ao invés do comum, pois você especifica diretamente a permissão do dono, grupo, outros ao invés de gerenciar as permissões de cada um separadamente.

O uso de um deste números define a permissão de acesso do dono, grupo ou outros usuários. Um modo fácil de entender como as permissões de acesso octais funcionam, é através da seguinte tabela:

  • 0 = Nenhuma permissão de acesso
  • 1 = Executar
  • 2 = Gravar
  • 4 = Ler
Para Dono e Grupo, multiplique as permissões acima por x100 e x10.

Basta agora fazer o seguinte:

  • Somente permissão de execução, use 1.
  • Somente a permissão de leitura, use 4.
  • Somente permissão de gravação, use 2.
  • Permissão de leitura/gravação, use 6 (equivale a 2+4 / Gravar+Ler).
  • Permissão de leitura/execução, use 5 (equivale a 1+4 / Executar+Ler).
  • Permissão de execução/gravação, use 3 (equivale a 1+2 / Executar+Gravar).
  • Permissão de leitura/gravação/execução, use 7 (equivale a 1+2+4 / Executar+Gravar+Ler).

Exemplos: chmod ogd

"chmod 764 teste"

Os números são interpretados da direita para a esquerda como permissão de acesso aos outros usuários (4), grupo (6), e dono (7). O exemplo acima faz os outros usuários (4) terem acesso somente leitura (r) ao arquivo teste, o grupo (6) ter a permissão de leitura e gravação (w), e o dono (7) ter permissão de leitura, gravação e execução (rwx) ao arquivo teste.

"chmod 40 teste"

O exemplo acima define a permissão de acesso dos outros usuários (0) como nenhuma, e define a permissão de acesso do grupo (4) como somente leitura (r). Note usei somente dois números e então a permissão de acesso do dono do arquivo não é modificada.

"chmod 751 teste"

O exemplo acima define a permissão de acesso dos outros usuários (1) para somente execução (x), o acesso do grupo (5) como leitura e execução (rx) e o acesso do dono (7) como leitura, gravação e execução (rwx).

Umask

A umask (user mask) são 3 números que definem as permissões iniciais do dono, grupo e outros usuários que o arquivo/diretório receberá quando for criado ou copiado. Digite umask sem parâmetros para retornar o valor de sua umask atual.

A umask tem efeitos diferentes caso o arquivo que estiver sendo criado for binário (um programa executável) ou texto (‘Arquivo texto e binário’ on page 23) .

Um arquivo texto criado com o comando umask 012;touch texto.txt receberá as permissões -rw-rw-r--, pois 0 (dono) terá permissões rw-, 1 (grupo), terá permissões rwe 2 (outros usuários) terão permissões r--. Um arquivo binário copiado com o comando umask 012;cp /bin/ls /tmp/ls receberá as permissões -r-xr--r-x

Por este motivo é preciso um pouco de atenção antes de escolher a umask, um valor mal escolhido poderia causar problemas de acesso a arquivos, diretórios ou programas não sendo executados. O valor padrão da umask na maioria das distribuições atuais é 022. A umask padrão no sistema Debian é a 022 .

A umask é de grande utilidade para programas que criam arquivos/diretórios temporários, desta forma pode-se bloquear o acesso de outros usuários desde a criação do arquivo, evitando recorrer ao chmod.

Aqui listamos os comandos relativo a permissionamento de arquivos no Linux no próximo post falaremos sobre os comandos relacionados a processos.

Um abraço!

quarta-feira, 9 de setembro de 2009

Administrando usuários e grupos no linux

Dando continuidade aos estudos de linux, veremos aqui os comandos para administração de usuários e grupos nesse sistema operacional.

Como no Windows, os usuários no Linux são organizados em grupos.

Para criar um grupo digite o comando:

  • groupadd novo_grupo

para alterar o nome de um grupo ja criado:

  • groupmod novo_nome nome_antigo
para deletar um grupo

  • groupdel nome_grupo 

Como tudo que se cria no linux é gravado em arquvos de configuração, o arquivo de configuração dos grupos fica em /etc/group.

Grupo criado, iremos agora ver como criar e deletar usuários do sistema.

Para criar um usuário de modo simples no Linux utilizamos os seguintes comandos:

  • adduser usuarioX - cria o usuário
  • passwd  usuarioX - cria a senha do usuário

Assim o usuário usuarioX será criado, e por padrão ja que não especificamos o diretório home, o shell, e nem o ID, esse usuário ficará em /home/usuarioX, o seu shell será o /bin/bash e um ID disponível foi criado para ele.Mas nós podemos específicar todos esses parametros com o seguinte comando:

  • adduser -m -c 'usuarioX da Silva' -d /home/usuarioX -s '/bin/sh' usuarioX -g usuários

Assim, estamos dizendo que o diretório home de usuarioX será em /home/usuarioX,com o parâmetro -d, que o shell padrão para esse usuário será o /bin/sh,com o parâmetro -s, e que ele será criado no grupo usuários, com o parâmetro -g.

Para deletarmos um usuário utilizamos o seguinte comando:
  • userdel usuarioX- deleta o usuário
  • userdel -r usuarioX - deleta o usuário  junto com o diretório home.

Modificando uma conta de usuário

Para você modificar uma conta você tem que editar o arquivo /etc/passwd

Original (nome da conta = usuarioX)

usuarioX:x:591:502:usuarioX:/home/usuarioX:/bin/bash

Modificar para: (nome da conta = usuarioX)

usuarioX:x:591:502:Joao Carlos:/home/usuarioX:/bin/bash

usuarioX é o nome da conta
x indica que está sendo utilizado o método shadow de encriptação de senhas
591 é o ID do usuário (UID = user identification)
502 é o ID do grupo (GID = group identification)
Joao carlos é o nome completo
/home/usuarioX é o diretório home do usuário usuarioX
/bin/bash  é o shell padrão do usuário usuarioX

Listando os usuários de um grupo

  • cat /etc/group

Exemplo de retorno
...
firebird:x:1001:
bind:x:104:
administrativo:x:1002:angelica,paul o,luizosni
fotos:x:1003:angelica,paulo,luizosn i,joyce,rafael
dados:x:1004:angelica,paulo,luizosn i,joyce
...

Ou se preferir você pode fazer:

  • egrep "nome_do_grupo" /etc/group

vai retornar somente o grupo escolhido.

Aqui mostramos os comandos para administração de usuários e grupos no Linux.

Inté!!!

segunda-feira, 7 de setembro de 2009

Comandos do Linux

Sempre tive o linux e o Windows instalado no meu note, porém nunca usava o Linux até ter um problema com a partição que continha o Windows.

Por conta da preguiça de reinstalar o windows, e devido a estudar para um concurso no qual vai cair o referido assunto, resolvi que ia começar a aprender um pouco mais sobre o maldito sistema operacional. Que fique bem claro que não tenho nada contra o Linux. Não usava esse sistema operacional por falta de costume.

Aqui eu vou listar os comandos que vão permitir a um usuário "se virar" com o sistema.

Interpretador de comandos

Também conhecido como shell. É o programa responsável em interpretar as instruções enviadas pelo usuário e seus programas ao sistema operacional (o kernel). Ele que executa comandos lidos do dispositivo de entrada padrão (teclado) ou de um arquivo executável.

O Linux possui diversos tipos de interpretadores de comandos, entre eles posso destacar o bash, ash, csh, tcsh, sh, etc. Entre eles o mais usado é o bash.

O interpretador de comandos do DOS é o command.com.


Entendendo os diretórios

No linux, não existe o conceito de unidades que temos no Windows (Ex. C:.D:, etc.). Existe na verdade um diretório raiz ("/") no qual constam uma série de outros subdiretórios sobre os quais explanamos abaixo:

/bin - Armazena os executáveis de alguns comandos básicos do sistema (su, tar,cat, rm, pwd, etc)

/usr - É onde fica o grosso dos programas instalados. O subdiretório /usr/bin é o diretório mais populado (cerca de 2000 programas), ou seja, se você não souber aonde encontrar um programa, use esse subdiretório como ponto de partida para a procura.

/usr/lib -  contem as bibliotecas (parecidas com as dlls do Windows) utilizadas pelos programas. Existem dois tipos de bibliotecas: As utilizadas por um programa apenas (extensão .a) e as que são compartilhadas por vários programas (extensão .so).

/dev - contem os devices (links para os dispositivos do sistema CD, HD, Floppydisks, etc)

/etc - concentra os arquivos de configuração do sistema (é como se fosse o registry do Windows).

/mnt - é o subdiretório que serve de ponto de montagem para os dispositivos.

/home - é a pasta meus documentos do linux. Esse subdiretório é criado para cada usuário do sistema, visto que o linux é multiusuário. Para usuários que não seja o root, o linux só permite a escrita em arquivos que estão dentro desse subdiretório.

Utilizando o terminal (o modo console do Linux)

O teminal no linux é equivalente ao modo console do Windows (executar > cmd), mas antes de explanarmos sobre o uso do terminal é importante listarmos fazermos algumas ponderações.

O Linux é Case Sensitive ou seja, ele diferencia letras maiúsculas e minúsculas nos arquivos.

O arquivo "historia" é completamente diferente de "Historia". Esta regra também é válido para os comandos e diretórios. Prefira, sempre que possível, usar letras minúsculas para identificar seus arquivos, pois quase todos os comandos do sistema estão em minúsculas.

Um arquivo oculto no Linux é identificado por um “.” no início do nome (por exemplo,.bashrc). Arquivos ocultos não aparecem em listagens normais de diretórios. Para listar esses arquivos use o comando ls -a.

Existem duas formas de se chamar o terminal:
  • CTRL + ALT + F1 - abre um terminal puro
  • ALT + Fn - alterna entre terminais
Quando abrimos um terminal, o prompt se apresenta com um $ a partir do qual podemos digitar os comandos.

O aviso de comando do usuário root é identificado por uma # (tralha), e o aviso de comando de usuários é identificado pelo símbolo $. Isto é padrão em sistemas UNIX. Para alternar entre esses usuários digite o comando su ou sudo su.

O comando gimp imagem.jpg abre o programa gimp que é um editor de imagens com o arquivo imagem.jpg carregado.

Digitar comandos é um saco, porém o linux possui um recurso do tipo auto-completar. Para fazer uso deste recurso devemos digitar parte do nome do comando e pressionar a tecla TAB.

Alguns atalhos úteis

Você pode retornar comandos já digitados pressionando as teclas Seta para cima / Seta para baixo.

A tela pode ser rolada para baixo ou para cima segurando a tecla SHIFT e pressionando PGUP ou PGDOWN. Isto é útil para ver textos que rolaram rapidamente para cima.

Abaixo algumas dicas sobre a edição da linha de comandos (não é necessário se preocupar em decora-los):

  • Pressione a tecla Back Space (<--) para apagar um caracter à esquerda do cursor.
  • Pressione a tecla Del para apagar o caracter acima do cursor.
  • Pressione CTRL+A para mover o cursor para o inicio da linha de comandos.
  • Pressione CTRL+E para mover o cursor para o fim da linha de comandos.
  • Pressione CTRL+U para apagar o que estiver à esquerda do cursor. O conteúdo apagado
  • é copiado para uso com CTRL+y.
  • Pressione CTRL+K para apagar o que estiver à direita do cursor. O conteúdo apagado é
  • copiado para uso com CTRL+y.
  • Pressione CTRL+L para limpar a tela

Extensão dos  arquivos

A extensão serve para identificar o tipo do arquivo. A extensão são as letras após um “.” no nome de um arquivo, explicando melhor:

  •  relatório.txt - O .txt indica que o conteúdo é um arquivo texto. script.sh - Arquivo de Script (interpretado por /bin/sh).
  • system.log - Registro de algum programa no sistema.
  • arquivo.gz - Arquivo compactado pelo utilitário gzip.
  • index.html - Página de Internet (formato Hypertexto). 
A extensão de um arquivo também ajuda a saber o que precisamos fazer para abri-lo. Por exemplo, o arquivo relatório.txt é um texto simples e podemos ver seu conteúdo através de um editor de textos kedit, já o arquivo index.html contém uma página de Internet e precisaremos de um navegador para poder visualiza-lo (como o lynx, Firefox ou o Konqueror).

A extensão (na maioria dos casos) não é requerida pelo Linux, mas é conveniente o seu uso para determinarmos facilmente o tipo de arquivo e que programa precisaremos usar para abri-lo.

Navegando entre os diretórios


Quando se utiliza um sistema operacional, essencialmente navega-se entre os diretórios e subdiretórios, edita-se arquivos e abre-se programas. Abaixo vamos falar sobre os comandos que nos permite realizar essas atividades.

  • pwd - para saber em que diretório o usuário se encontra;
  • cd (change diretory) - utilizado para navegar entre diretórios;
  • ls ou dir - permite listar os arquivos que constam em um diretório;
  • cp - permite copiar arquivos de um diretório para outro;
  • mv - move arquivos de um diretório para outro; o mv também é utilizado para renomear arquivos (na verdade o Linux move) um arquivo para outro.
  • rm - serve para remover um arquivo;
  • mkdir - permite criar um diretório;
  • rmdir - remove diretórios;
  • locate - busca em base de dados por um arquivo ou diretório (updatedb é utilizado para atualizar a base);
  • find - também utilizado para buscar arquivos ou diretórios. Só que desta vez no sistema de arquivos;
Todos esses comandos podem ser executados em sequência utilizando-se o ";" entre os comandos.

Outra observação importante a ser feita é que os comandos podem vir seguido s de argumentose/ou parâmetros  que mudam o comportamento dos mesmos.

O comando CAT permite visualizar o conteúdo de um arquivo: cat nome_arquivo 

Utiliza-se o pipe "|"  para combinar comandos. Exemplo: (comando1|comando2 > arquivo.txt  ) neste caso o resultado dos comandos 1 e 2 estão sendo redirecionados para um arquivo.

O Comando grep permite filtrar a saída de um comando. Por exemplo: O Linux mantem um histórico dos últimos 500 comandos digitados. Caso você queira visualizar apenas os comandos cp digitados nesta lista, basta digitar history | grep cp para mostrar todas as entradas onde foi usado o comando cp.

Criando links  (atalhos do windows)

Existem dois tipos de atalho no Linux: os hard links e o links simbólicos.

A diferença entre eles é que se o arquivo muda de lugar o link simbólico fica quebrado. Já o hard link não, este continua funcionando. Os dois links são criados através do comando ln:

  • hard link - ln /home diretorioHome
  • link simbólico - ln -s  /home diretorioHome (note que a diferença tá no argumento -s)
Você pode ainda criar links que podem ser evocados a partir de qualquer diretório. Basta que esse seja criado no diretório /usr/bin. No windows fazemos isso editando a variável PATH.

Reiniciando e desligando o micro

Existem comandos para desligar ou reiniciar o micro, mas por uma questão de segurança é necessário estar logado como root para que esses comandos funcionem. Para isso use o comando su ou sudo (a diferença entre os dois é que o primeiro pede senha e o segundo não).
  • reboot - reinicia o micro;
  • halt - desliga o micro;
  • shutdown -h now - permite um desligamento programado idêntico a um timer.


Os comandos mencionados aqui estão relacionados a manipulação de arquivos e diretórios. Em outro post falarei sobre outros comandos.

Até lá!

sábado, 5 de setembro de 2009

O SCRUM

SCRUM é um processo ágil e leve que pode ser utilizado para gerenciar e controlar o desenvolvimento de software utilizando práticas iterativas e incrementais.

Baseado em práticas de gerenciamento já fundamentadas no Extreme Programming e no RUP, o SCRUM produz os benefícios do desenvolvimento ágil com a vantagem de ser uma implementação bem simples.

O SCRUM aumenta significativamente a produtividade e reduz o tempo para obter resultados, pois facilita a adaptação a processos empíricos de desenvolvimento de sistemas.

Elementos do SCRUM


O SCRUM como qualquer outra metodologia é baseada em papéis e responsabilidades, porém, os papéis do SCRUM são bem abrangentes e direcionados para um propósito comum: O SUCESSO DO PROJETO.

Papeis

Product Owner
  • Define as funcionalidades do produto;
  • Concentra as informações vindas de usuários, stakeholders ou do mercado de maneira que se obtenha uma visão única dos requisitos do sistema;
  • Sua maior responsabilidade é o ROI do projeto
  • Prioriza o Product Backlog
  • Pode alterar as prioridades fora do Sprint
  • Aceita ou rejeita os resultados dos trabalhos
O Time (Team)

O Time é o grupo de pessoas diretamente ligadas ao trabalho a ser feito que garantirá que o projeto seja entregue com todas as funcionalidades necessárias. Suas características são:

  • Multi-functional 
  • Formado por até 7 pessoas 
  • Define o objetivo do Sprint e especifica os resultados dos trabalhos
  • Faz aquilo que é necessário dentro das diretrizes do projeto para alcançar o objetivo do Sprint 
  • Auto-organizável 
  • Demonstram o resultado do Sprint (ver definição abaixo) para o Product Owner e outros Stakeholders
A idéia por trás dos conceitos MULTI-FUNCIONAL e AUTO-ORGANIZÁVEL é que o time deve ter a capacidade e o conhecimento técnico sobre TODO o processo de desenvolvimento do produto. No caso de um projeto de desenvolvimento de software, o time deve ter pessoas capazes de analisar a solução, codificá-la e testá-la sem necessitar de outros times ou outras pessoas.

SCRUM Master

O SCRUM Master desempenha um papel de liderança, gerenciando os interesses do Product Owner mediante o Time. Numa abordagem tradicional de gerenciamento de projetos, o SCRUM Master seria um Gerente de Projetos, porém, essa nomenclatura foi substituída para diferenciar o foco de liderança necessário para que um processo empírico funcione. Um SCRUM Master eficiente deve:

  • Melhorar a vida e a produtividade do time de desenvolvimento promovendo a criatividade e o conhecimento
  • Estimular uma comunicação e cooperação muito próxima entre todas as pessoas do time
  • Proteger o time de interferências externas
  • Remover Impedimentos ("Impediments")
  • Garantir que o processo está sendo respeitado
  • Convidar pessoas apropriadas para as reuniões de acompanhamento (Daily SCRUM, Sprint Review e Sprint Retrospective)
  • Remover barreiras entre o desenvolvimento e o cliente para garantir que realmente é o cliente que está direcionando as funcionalidades desenvolvidas
  • Auxiliar o Product Owner a maximizar o ROI atingindo os seus objetivos com o SCRUM
  • Promover práticas de engenharia para que cada pedaço de funcionalidade seja potencialmente implantável.
Fases

O SCRUM também possui fases para definição da visão do projeto e também para um estudo de viabilidade.

Nível Estratégico (Product Owner)

1.Definir os problemas a serem resolvidos
2.Estabelecer a visão e um escopo de alto nível
3.Investigar a viabilidade do projeto
4.Fornecer esforço e prazo preliminares
5.Conseguir recursos como financiamento

Produto: visão e backlog inicial

Nível Tático (SCRUM Master)


1.Planejar Objetivos dos Sprints
2.Resolver Impedimentos
3.Liderar a Equipe
4.Promover a Comunicação


Produto: Backlog

Nível Operacional (team)


1.Realizar Objetivos dos Sprints
2.Aplicar Boas Práticas de Engenharia
3.Adequar mudanças
4.Garantir a Qualidade
Produto: Sprint Backlog e Software funcionando

Sprint (a iteração do SCRUM)

No SCRUM, a iteração é chamada de SPRINT. Durante esse período o TIME trabalha nos objetivos determinados para o SPRINT. Esse período de tempo pode variar, mas geralmente é um período de 30 dias.

Um projeto é composto por vários sprints do mesmo tamanho.

TIME-BOXING: Período Fechado de Tempo

Outro conceito importante para as práticas do SCRUM é o TIME-BOXING. Um SPRINT de 30dias é um TIME-BOX. O planejamento que ocorre no primeiro dia do SPRINT ocorre num TIME-BOX de 1 dia. As reuniões diárias com a equipe devem demorar no máximo 15 minutos. Tudo que acontece dentro da metodologia SCRUM tem o espaço de tempo definido e cronometrado.

Todos os Sprints possuem uma estrutura exatamente igual, o primeiro dia você planeja,durante o Sprint você cumpre o planejamento, no último dia você avalia o resultado e ajusta o processo buscando uma melhoria contínua. A simplicidade do modelo de papéis, artefatos e estrutura do processo SCRUM é uma das razões da sua eficácia.

O Planejamento do Sprint

No primeiro dia do Sprint é feito o planejamento do trabalho a ser desenvolvido. Esse planejamento é feito através de uma reunião composta de duas partes.

Na primeira parte da reunião de planejamento o SCRUM Master reúne-se com o Product Owner para verificar qual é o Product Backlog. O Product Backlog é um artefato do SCRUM, uma planilha onde constam todas as funcionalidades de alto nível do sistema. Lá estão todas as funcionalidades desejadas pelos Stakeholders ordenadas pela prioridade. Aquilo que é mais prioritário está no topo da lista, e aquilo que é menos prioritário vai para o fim da lista.

Abaixo um exemplo de Product Backlog.



Na segunda parte do dia do planejamento, o SCRUM Master se reúne com o time e com o Product Owner (opcionalmente) para planejar o Sprint baseado no Product Backlog criado ou atualizado. O trabalho nessa segunda parte é estabelecer e firmar os objetivos do Sprint, selecionando quais itens prioritários do Backlog serão implantados completamente até o fim do Sprint.

Para isso, métricas são adotadas para quantificar o esforço de cada item do Backlog a fim de estimar a velocidade da equipe.

Note que é importante ressaltar que o Product Owner e o SCRUM Master somente definiram a ordem das coisas, mas não cabe a eles definir os prazos. Os prazos, como boa prática de todas as metodologias de gerenciamento de projeto, são dados pelo Time que é responsável pela parte produtiva do projeto.

Após ter selecionado quais itens potencialmente implantáveis serão resolvidos neste Sprint, o Time quebra cada item selecionado em tarefas menores que podem ser cumpridas em um dia (desejável). Esta quebra de cada item é chamado SPRINT BACKLOG e o time define que cada uma dessas tarefas menores esclarece tudo que é necessário ser feito para implantar os itens do
PRODUCT BACKLOG selecionados para esse Sprint.

Abaixo o sprint backlog



Com o Sprint Backlog definido a idéia é que os integrantes do Time peguem tarefas para realizar. Isso consiste em retirar o post-it da coluna “Pendente” e colocá-lo na coluna “Alocado”,
conforme a figura a seguir:

Como os itens estão ordenados de acordo com a prioridade do Product Backlog, é importante que os itens no topo da lista sejam resolvidos primeiro. Se o foco é resolver os itens em ordem, seria estranho que um post-it do item “Integração com ERP” estivesse alocado no início do Sprint.

Uma característica importante é que o membro do Time é quem seleciona a tarefa que ele vai fazer. Isso permite que as pessoas tenham um maior controle e comprometimento sobre o
próprio trabalho, sem que alguém esteja delegando tarefas repetidamente de uma maneira prescritiva. Um time multi-funcional e auto-organizável traz um ótimo ambiente de trabalho e uma melhor performance no desenvolvimento.

Reunião Diária (Daily SCRUM)

Um evento importante que ocorre todos os dias durante o Sprint é a REUNIÃO DIÁRIA. A reunião diária (Daily SCRUM) é um encontro entre o SCRUM Master, o Time e qualquer pessoa interessada no projeto. As reuniões diárias ocorrem num TIME-BOX de 15 minutos no máximo. É comum ocorrer algumas reuniões com menos de 5 minutos, porém, faça todos se concentrarem naquilo que realmente é importante para que esse encontro não dure 2 ou 3 horas comprometendo a produtividade da equipe.

A reunião diária são 15 minutos onde cada membro da equipe dará as suas impressões a respeito do projeto, respondendo a três perguntas importantes:
  1. O que eu fiz desde a última reunião diária?
  2. O que eu pretendo fazer até amanhã?
  3. Tem alguma coisa impedindo o meu trabalho?

É aconselhável que a reunião diária ocorra todo o dia no mesmo horário. Neste momento o SCRUM Master verifica o andamento do trabalho, observando problemas, verificando a continuidade do processo, resolvendo mal-entendidos e principalmente liderando as pessoas.

Esses 15 minutos diários são preciosos para manter a comunicação e a sincronização do status do projeto entre os membros da equipe. A reunião diária promove a auto-organização, um maior comprometimento das pessoas e um compartilhamento das responsabilidades.


O estado de pronto

Quando as tarefas constantes na coluna alocado passarem para a coluna pronto (ver figura abaixo), finalizamos aquele item do backlog.


A definição de “pronto” é um importante aspecto para avaliação no andamento do projeto, isso porque a metodologia SCRUM não considera as funcionalidades 50% realizadas como é comum nas abordagens tradicionais de gerenciamento de projeto. Para o SCRUM, um item só está pronto quando atende à definição de “pronto” do time e o projeto só avança quando itens são dados como completamente “prontos” no Product Backlog. No SCRUM, 20% da codificação feita não significa nada para o andamento do projeto.

Sprint Review


Ao final do Sprint é feito o Sprint Review. A Revisão é um importante ponto de inspeção da metodologia SCRUM. Esta reunião ocorre no último dia do Sprint e representa o momento que a equipe e o SCRUM Master demonstram as funcionalidades potencialmente implantáveis executadas para o Product Owner.

Sprint Retrospective

O SCRUM é um conjunto de práticas focadas em melhoria contínua do processo. O SCRUM, como um controle empírico, não prega uma rigidez do processo, ao invés, o SCRUM promove a constante adaptação das práticas mesmo durante o projeto. O processo pode mudar de um Sprint para o outro sempre buscando uma melhoria na produtividade ou qualidade do produto final. A retrospectiva do Sprint é uma reunião entre SCRUM Master e a equipe onde duas perguntas são feitas:
  1. O que foi bom durante o Sprint?
  2. O que pode ser melhorado?

Nessa reunião o objetivo é a transparência interna da equipe. O SCRUM Master deve avaliar friamente os pontos apresentados e prover os recursos necessários para que as mudanças ocorram.

Um dos problemas mais comuns é a equipe não buscar ou não se empenhar para que essas
mudanças no processo ocorram. A adaptação contínua é um fundamento importante para controlar
projetos críticos e esses pontos de melhorias devem ser valorizados.

As lições aprendidas é um fundamento em muitas metodologias de gerenciamento de projeto. Elas representam a memória corporativa e promovem uma maneira para que os projetos não sofram sempre dos mesmos problemas. Se sua empresa tem muitos projetos ou projetos
simultâneos essas lições aprendidas devem ser compartilhadas em toda a organização.

Neste post tentamos  mostrar a essência do SCRUM.

Até a próxima!

Metodologias Ágeis de desenvolvimento

Nos últimos posts eu venho falando do RUP que é considerado um processo pesado por conta da quantidade de elementos envolvidos nele. 
Existem outras formas de se pensar e por conta disso, acho importante avaliar outras formas de se gerenciar o trabalho de desenvolvimento de software.


O método ágil é um conjunto de metodologias de desenvolvimento de software. O desenvolvimento ágil, tal como qualquer metodologia de software, providencia uma estrutura conceitual para reger projetos de engenharia de software. Entre elas podemos citar o SCRUM, Programação Extrema, FDD, OpenUP, DSDM, Crystal entre outras.


Nos próximos posts, além do RUP, falaremos também sobre o SCRUM.


Grande abraço!

sexta-feira, 4 de setembro de 2009

As fases e disciplinas do RUP

O ciclo de vida de desenvolvimento de software proposto pelo RUP é composto por 4 fases (Iniciação, Elaboração, Construção e Transição).

Cada fase é basicamente um intervalo de tempo entre dois marcos principais. Ao final de cada fase é executada uma avaliação (Atividade: Revisar Marcos do Ciclo de Vida) para determinar se os objetivos da fase foram alcançados. Uma avaliação satisfatória permite que o projeto passe para a próxima fase.

Uma passagem pelas quatro fases é um ciclo de desenvolvimento; cada passagem pelas quatro fases produz uma geração do software. A menos que produto "desapareça", ele irá se desenvolver na próxima geração, repetindo a mesma seqüência de fases de iniciação, elaboração, construção e transição, mas agora com ênfase diferente nas diversas fases. Esses ciclos subseqüentes são chamados de ciclos de evolução. À medida que o produto atravessa vários ciclos, são produzidas novas gerações.


Em cada uma dessas fases é realizada um série de atividades agrupadas por disciplinas. A intensidade dessas atividades varia de acordo com a fase em que esta é realizada.

O RUP conta com 10 disciplinas. São elas: Modelagem de Negócios, Requisitos, Análise e Design, Implementação, Teste,Implantação,Ambiente,Gerenciamento de Projeto,Gerenciamento de Configuração e Mudança

Uma disciplina mostra todas as atividades que você deve realizar para produzir um determinado conjunto de artefatos. Essas disciplinas são descritas em nível geral — um resumo de todos os papéis, atividades e artefatos envolvidos.

Também é mostrado, em um nível mais detalhado, como ocorre a colaboração entre papéis e de que forma eles usam e produzem artefatos. Os passos nesse nível detalhado são chamados de "detalhamentos do fluxo de trabalho".

O passo seguinte é detalhar as fases e disciplinas presentes no RUP.

Até lá