Evolução da Ferramenta dotProject para Suporte ao Encerramento
Transcrição
Evolução da Ferramenta dotProject para Suporte ao Encerramento
Suzana Vilas Boas Pescador Evolução da ferramenta dotProject para suporte ao encerramento de projetos 15 de Maio de 2012 Suzana Vilas Boas Pescador Evolução da ferramenta dotProject para suporte ao encerramento de projetos Trabalho de conclusão de curso apresentado ao departamento de Informática e Estatı́stica do curso de graduação da Universidade Federal de Santa Catarina como requisito final para obtenção do grau de Graduação em Ciência da Computação. Orientador: Prof. Dr.rer.nat.Christiane Gresse von Wangenheim,PMP U NIVERSIDADE F EDERAL DE S ANTA C ATARINA C ENTRO T ECNOL ÓGICO D EPARTAMENTO DE I NFORM ÁTICA E E STAT ÍSTICA 15 de Maio de 2012 Resumo O gerenciamento de projetos em micro e pequenas empresas é, tipicamente, realizado com os artifı́cios de ferramentas de gerenciamento, que oferecem suporte à determinados grupos de processo. Neste sentido, percebemos uma deficiência no grupo de processo de encerramento de projetos, uma fase importantı́ssima na melhoria do processo da empresa. Este processo provê ao gerente e a equipe, técnicas, dados e lições que representam oportunidades de melhoria, através da aprendizagem contı́nua com base nas experiências vivenciadas. Neste cenário, as ferramentas de gerenciamento open-source, em sua maioria, oferecem suporte mı́nimo ao encerramento de projetos. Portanto, este trabalho visa melhorar uma ferramenta de gerenciamento de projetos largamente usada no contexto de micro e pequenas empresas brasileiras, o dotProject, adicionando suporte definido ao grupo de processo de encerramento de projetos. A implementação é feita com base em um modelo alinhado ao PMBOK, também desenvolvido neste trabalho, que é focado para o contexto de micro e pequenas empresas. A evolução da ferramenta será testada e avaliada por um painel de especialistas a fim de validar seu uso prático. Sumário Lista de Figuras Lista de Tabelas 1 Introdução p. 9 1.1 Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 1.2.1 Objetivo geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 1.2.2 Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . . . p. 11 1.3 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12 1.4 Metodologia de pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . p. 13 1.5 Estrutura do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 14 2 Fundamentação Teórica p. 16 2.1 Micro e Pequenas Empresas . . . . . . . . . . . . . . . . . . . . . . . p. 16 2.2 Gerenciamento de projetos . . . . . . . . . . . . . . . . . . . . . . . . p. 17 2.2.1 Encerramento de projetos . . . . . . . . . . . . . . . . . . . . . p. 19 3 Estado da Arte e Prática p. 31 3.1 Definição do estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31 3.2 Avaliação das ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . p. 33 3.2.1 dotProject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 33 3.2.2 Project.Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 38 3.2.3 PhpCollab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 39 3.2.4 Track+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 40 3.2.5 Streber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 42 4 Modelo de um processo genérico de encerramento p. 46 5 Evolução da ferramenta dotProject para encerramento de projetos p. 50 5.1 A ferramenta dotProject . . . . . . . . . . . . . . . . . . . . . . . . . . p. 50 5.2 Análise de Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 52 5.2.1 Requisitos funcionais . . . . . . . . . . . . . . . . . . . . . . . p. 52 5.2.2 Requisitos não-funcionais . . . . . . . . . . . . . . . . . . . . . p. 52 5.3 Projeto e implementação . . . . . . . . . . . . . . . . . . . . . . . . . p. 53 5.3.1 Casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 53 5.3.2 Modelagem da solução . . . . . . . . . . . . . . . . . . . . . . p. 57 5.3.3 Implementação . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 59 5.4 Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 63 6 Avaliação p. 66 6.1 Avaliação por painel de especialistas . . . . . . . . . . . . . . . . . . . p. 66 6.2 Avaliação em relação ao alinhamento ao PMBOK . . . . . . . . . . . p. 70 6.2.1 Execução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 71 6.2.2 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 71 6.3 Discussão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 71 7 Conclusão p. 73 Referências Bibliográficas p. 75 Apêndice A -- Código-fonte do módulo desenvolvido p. 77 Apêndice B -- Formulário de avaliação p. 105 Apêndice C -- Roteiro de simulação de uso do novo módulo p. 108 Lista de Figuras 2.1 Grupos de processo de gerenciamento de projetos (PMI, 2008) . . . . p. 19 2.2 Fluxo de dados no encerramento de projetos . . . . . . . . . . . . . . p. 20 2.3 Processo de análise de pós-morte . . . . . . . . . . . . . . . . . . . . p. 22 2.4 Participante da reunião de pós-morte colando post its, em uma sessão de brainstorming (DINGSOYR; STALHANE; MOE, 2003) . . . . . . . p. 24 2.5 Ata de reunião de pós-morte do projeto Pizzaria on line . . . . . . . . p. 25 2.6 Interação dos seis passos do Paradigma de Melhoria da Qualidade (BASILI; CALDIERA; ROMBACH, 1994) . . . . . . . . . . . . . . . . . p. 27 2.7 Fábrica de Experiências (BASILI; CALDIERA; ROMBACH, 1994) . . . p. 29 3.1 Relatório Task end date . . . . . . . . . . . . . . . . . . . . . . . . . . p. 35 3.2 Relatório User performance . . . . . . . . . . . . . . . . . . . . . . . . p. 35 3.3 Relatório Project statistics . . . . . . . . . . . . . . . . . . . . . . . . . p. 36 3.4 Janela de edição de um projeto . . . . . . . . . . . . . . . . . . . . . . p. 36 3.5 Janela de visualização da empresa . . . . . . . . . . . . . . . . . . . . p. 37 3.6 Janela de atividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 37 3.7 Janela de relatório de acompanhamento de tempo (PROJECT.NET, 2011b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 38 3.8 Janela de atividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 40 3.9 Janela de atividade - Anexação de arquivos . . . . . . . . . . . . . . . p. 40 3.10 Janela de atividade do Track+ . . . . . . . . . . . . . . . . . . . . . . . p. 42 3.11 Janela de edição de projeto . . . . . . . . . . . . . . . . . . . . . . . . p. 43 3.12 Janela de log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 43 3.13 Janela de atividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 44 3.14 Janela de listagem de arquivos . . . . . . . . . . . . . . . . . . . . . . p. 44 4.1 Modelagem do processo . . . . . . . . . . . . . . . . . . . . . . . . . . p. 47 5.1 Casos de uso do encerramento de projeto no dotProject . . . . . . . . p. 54 5.2 Modelagem conceitual do módulo adicional de encerramento de projetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 58 5.3 Arquitetura da ferramenta dotProject com o módulo de encerramento p. 58 5.4 Diagrama de relacionamento de arquivos do módulo de encerramento p. 59 5.5 Diagrama de relacionamento das tabelas no módulo de encerramento p. 59 5.6 Tela de projetos, na aba de Arquivos . . . . . . . . . . . . . . . . . . . p. 60 5.7 Tela de seleção de relatórios . . . . . . . . . . . . . . . . . . . . . . . p. 61 5.8 Tela do projeto, com botão para adicionar uma nova ata . . . . . . . . p. 61 5.9 Tela de nova ata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 62 5.10 Tela de edição de ata . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 63 5.11 Tela da empresa, na aba Base de Experiências . . . . . . . . . . . . . p. 63 5.12 Tela de visualização da ata . . . . . . . . . . . . . . . . . . . . . . . . p. 64 6.1 Gráfico da avaliação da questão 1.1 . . . . . . . . . . . . . . . . . . . p. 68 6.2 Gráfico da avaliação da questão 1.2 . . . . . . . . . . . . . . . . . . . p. 68 6.3 Gráfico da avaliação da questão 1.3 . . . . . . . . . . . . . . . . . . . p. 69 6.4 Gráfico da avaliação da questão 1.4 . . . . . . . . . . . . . . . . . . . p. 69 6.5 Gráfico da avaliação da questão 1.5 . . . . . . . . . . . . . . . . . . . p. 70 Lista de Tabelas 2.1 Processos e áreas de conhecimento (PMI, 2008) . . . . . . . . . . . . p. 20 2.2 Agenda de uma reunião de pós-morte (DINGSOYR; STALHANE; MOE, 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 23 3.1 Avaliação dos critérios (PEREIRA; GONçALVES; WANGENHEIM, 2011) p. 32 3.2 Tabela de resultado da avaliação das ferramentas . . . . . . . . . . . p. 45 4.1 Entradas, técnicas e saı́das do modelo proposto . . . . . . . . . . . . p. 47 4.2 Detalhamento da etapa E1 . . . . . . . . . . . . . . . . . . . . . . . . p. 48 4.3 Detalhamento da etapa E2 . . . . . . . . . . . . . . . . . . . . . . . . p. 48 4.4 Detalhamento da etapa E3 . . . . . . . . . . . . . . . . . . . . . . . . p. 49 5.1 Tabela de execução dos testes . . . . . . . . . . . . . . . . . . . . . . p. 65 6.1 Tabela de resultado da avaliação das ferramentas, atualizado com o módulo de encerramento . . . . . . . . . . . . . . . . . . . . . . . . . p. 71 9 1 Introdução Vivenciamos uma sociedade altamente adaptada e dependente de serviços de software. Eles estão presentes nos bancos, no comércio, nas comunicações e até nas padarias. E com o crescimento do uso e da aplicação dos softwares, cresce também a demanda por estes produtos e também por idéias inovadoras, que tragam ainda mais comodidade ao cotidiano (SOFTEX, 2011). Tais fatores têm impulsionado o setor brasileiro de desenvolvimento de software e serviços, que no ano de 2010 teve um crescimento de 24%, alcançando o 11◦ lugar no ranking mundial, segundo dados da ABES (2011). Este desenvolvimento da indústria, movimentou neste mesmo ano - apenas no setor de software - cerca de 5,51 bilhões de dólares. Esta fatia de mercado é dividida entre cerca de 8.520 empresas, dentre as quais, 94% se caracterizam como micro ou pequenas empresas. Micro e Pequenas Empresas (MPEs), de acordo com a definição de SEBRAE (2011) são aquelas que possuem equipes de 0 a 9 pessoas (para micro empresas) e 10 a 49 (no caso de pequenas empresas). No caso especı́fico das brasileiras, outras caracterı́sticas marcantes destas empresas, segundo (CEZARINO; C., 2005), são a gestão informal, baixo nı́vel gerencial e escassez de recursos. Em termos de empresas de software, este baixo nı́vel gerencial pode interferir no sucesso de um projeto. Furtado (2011) afirma que a maioria das falhas nos projetos de software vêm da falta de aplicação de metodologias de desenvolvimento, orientações e boas práticas para planejar, construir e implantar software. Neste sentido, o gerenciamento de projetos, que segundo PMI (2008) é ”a aplicação de conhecimentos, habilidades, ferramentas e técnicas às atividades do projeto para alcançar os requisitos do projeto”, age no sentido de minimizar essas falhas. Faz parte do processo de gerenciamento de projetos identificar requisitos, atender às necessidades, expectativas e preocupações dos stakeholders (partes interessadas no projeto). Espera-se saber adequar e monitorar os recursos de acordo com as priori- 10 dades definidas, balanceadas entre as restrições de custo, escopo, tempo e qualidade (tripla restrição). O ciclo de vida de gerenciamento de um projeto é dividido em 5 grupos de processos: iniciação, planejamento, monitoramento e controle, execução e encerramento. Dentro desse ciclo de vida, o grupo de encerramento compreende basicamente as atividades de liberar uma versão final do produto ou serviço, encerramento administrativo, liberação da equipe, atualização de arquivos e retrospectiva do projeto. Nesta fase, é importante uma coleta de dados e lições aprendidas sobre o projeto e uma comparação entre o planejado e o executado para que, desta forma, possam ser levantados e corrigidos estimativas, deficiências, problemas, riscos, entre outros. Levantar estes dados e lições aprendidas é uma atividade crucial da parte de encerramento, que é feita tipicamente em reuniões de pós-morte (BIRK; DINGSOYR; STALHANE, 2005), onde se faz uma revisão do projeto, desde seu planejamento, a fim de identificar, analisar e armazenar pontos fracos e fortes ocorridos durante o projeto. Com estas informações devidamente levantadas e analisadas, pode-se criar, ao longo do tempo, uma fábrica de experiências (BASILI; CALDIERA; ROMBACH, 1994), que pode servir de base para planejar, executar e monitorar projetos futuros. Dessa forma, a realização do encerramento representa, também, um passo importante para a melhoria contı́nua. Para um gerenciamento mais eficiente e eficaz, são utilizadas ferramentas de software que auxiliam este processo. Dentre estas ferramentas, temos implementações e estilos dos mais variados tipos e gostos. Contam-se com opções de software livre, proprietário, especializadas em um processo ou mais genéricas, versões para dispositivos móveis, entre outros. Naturalmente, como MPEs que dispõe de recursos limitados, muitas empresas buscam soluções de software livre, onde não há custo de obtenção e de uso do software. Dentro deste cenário, o dotProject (2011a) é uma ferramenta web de gerenciamento de projetos freeware, distribuı́da sob licença GPL (GNU, 2011). Este software é largamente utilizado no contexto empresarial brasileiro, o que tornou o Brasil o paı́s top downloader desta ferramenta, segundo estatı́sticas de Sourceforge (2011). 11 1.1 Problema Muitas das ferramentas de gerenciamento de projetos oferecem um modelo e suporte bem definido para criação e acompanhamento de tarefas, cronograma, recursos e horas gastas na execução de cada tarefa, entre outros. Estas funcionalidades são comumente observadas nas ferramentas de gerenciamento, uma vez que constituem um controle mais básico e tem um impacto mais imediato na execução do projeto. Entretanto, em um contexto geral, encontra-se uma deficiência destas ferramentas em relação ao grupo de processo de encerramento de projetos, que é uma importante parte do gerenciamento quando se trata da melhoria contı́nua da empresa e da equipe. O suporte fornecido pelas ferramentas, atualmente, é incompleto e parcial, uma vez que as funcionalidades não foram criadas para o propósito de encerramento. Ou seja, podemos simular algumas atividades deste grupo, utilizando-se de funcionalidades originalmente criadas para outros grupos de processo. Porém, esta prática não é eficiente, uma vez que não há disponı́vel um modelo definido para uso destas funcionalidades, somada ao fato de elas não serem completas. Especificamente, a ferramenta dotProject, que é uma ferramenta open source bastante utilizada no contexto empresarial brasileiro (SOURCEFORGE, 2011) também não oferece este tipo de suporte completo, apresentando-se deficiente neste quesito. 1.2 Objetivos Os objetivos especı́ficos e o objetivo geral deste trabalho são detalhados a seguir. 1.2.1 Objetivo geral O objetivo geral deste trabalho é desenvolver um módulo de suporte ao encerramento de projetos na ferramenta de gerenciamento dotProject, alinhado ao conjunto de boas práticas definidas no PMBOK. 1.2.2 Objetivos especı́ficos Dentre os objetivos especı́ficos do trabalho estão: 12 • O1. Analisar a fundamentação teórica, em relação ao gerenciamento de projetos, ao encerramento de projetos, à ferramenta dotProject e às necessidades das MPEs. • O2. Analisar o estado da arte das principais ferramentas open source em relação ao suporte fornecido ao encerramento de projetos. • O3. Definir um processo genérico para encerramento, personalizado para MPEs e alinhado ao PMBOK. • O4. Evoluir o dotProject, baseando-se no modelo definido. • O5. Avaliar a utilidade da evolução desenvolvida e o alinhamento ao PMBOK. 1.3 Limites Os limites do escopo deste trabalho são: • L1. Estudo detalhado, modelagem e implementação de um módulo de gerenciamento de encerramento de projetos. Outros grupos de processo de gerenciamento não se encaixam no escopo deste trabalho. • L2. A implementação do módulo será feita especificamente para a ferramenta dotProject. Outras ferramentas serão usadas, no contexto deste trabalho, para fins de análise e comparação. • L3. O módulo a ser desenvolvido deve estar alinhado às boas práticas definidas no PMBOK, sendo que outros modelos de gerenciamento não serão considerados. • L4. O escopo deste trabalho está limitado ao encerramento do projeto. Encerramento de aquisições não será tratado. • L5. Serão levadas em consideração as necessidades de MPEs. Necessidades especı́ficas de empresas de maior porte estão fora do escopo do trabalho. 13 1.4 Metodologia de pesquisa A metodologia adotada para o desenvolvimento deste trabalho envolve estudo da literatura no contexto geral e especı́fico, desenvolvimento e avaliação da implementação realizada na ferramenta de gerenciamento de projetos dotProject. Na primeira etapa, é feito um estudo detalhado sobre o processo de gerenciamento de projetos, focando no grupo de processos de encerramento, suas atividades, entradas e saı́das. Também, segue um estudo e análise da ferramenta dotProject, novamente com foco no encerramento de projetos. Este estudo do processo de gerência e ferramentas é feito no contexto empresarial brasileiro, que compreende micro e pequenas empresas, e é guiado pelo PMBOK. O estudo é realizado em 3 etapas: • A1.1 Análise da gerência de projeto, com foco em encerramento de projetos • A1.2 Análise da ferramenta dotProject • A1.3 Análise das necessidades de micro e pequenas empresas brasileiras de software, no que diz respeito à encerramento de projetos A segunda etapa compreende uma revisão mais sistemática do suporte fornecido pelas principais ferramentas software livre de gerenciamento de projetos. São selecionadas as cinco principais ferramentas open source para análise e discussão, no que se refere à encerramento de projetos e alinhamento ao PMBOK. A seguir, as atividades desta etapa: • A2.1 Revisão da seleção das ferramentas e definição dos indicadores unificados • A2.2 Análise dos critérios de avaliação • A2.3 Documentação dos resultados e discussão Na terceira etapa é modelado um processo genérico de encerramento de projeto, voltada ao contexto de MPEs. A modelagem é feita definindo necessidades, etapas e objetivos pertinentes ao cenário adotado, visto que, não há um processo bem definido para a área de encerramento. Esta modelagem é feita com base em técnicas de modelagem de processo, definindo as etapas e sequência, onde, para cada etapa, são apontados os objetivos, atividades, entradas e saı́das. A terceira etapa é composta pela atividade: 14 • A3.3 Modelagem do processo A próxima etapa compreende o desenvolvimento do módulo de suporte à encerramento de projetos no dotProject. Para tal, é utilizado o framework de implementação do dotProject para o desenvolvimento da evolução da ferramenta. O processo de implementação compreende as seguintes atividades: • A4.1 Análise de requisitos • A4.2 Modelagem • A4.3 Implementação • A4.4 Testes A etapa final é a avaliação do processo e módulo implementado. Para tal, é realizada uma avaliação da utilidade prática do módulo, feita por um painel de especialistas composto por gerentes de projetos. Estas avaliações seguem um plano que define os objetivos, medidas e métodos de avaliação. Os dados são coletados, analisados e discutidos. Realiza-se, também, uma avaliação do grau de atendimento aos requisitos definidos no PMBOK. A etapa final é composta pelas atividades: • A5.1 Realização da avaliação por painel de especialistas A5.1.1 Definição da avaliação A5.1.2 Execução da avaliação A5.1.2 Coleta de resultados, análise e discussão • A5.2 Avaliação do alinhamento ao PMBOK 1.5 Estrutura do trabalho O trabalho está dividido em 7 capı́tulos: Introdução, Fundamentação Teórica, Estado da Arte & Prática, Modelo de um processo genérico de encerramento, Evolução da ferramenta para encerramento de projetos, Avaliação e Conclusão. No segundo capı́tulo, Fundamentação Teórica, estão agrupados os conhecimentos teóricos básicos 15 necessários para o desenvolvimento do trabalho. Também, estão detalhados os estudos realizados sobre o contexto empresarial brasileiro e os conceitos de gerenciamento de projetos, mais especificamente do grupo de encerramento. O próximo capı́tulo, Estado da Arte & Prática, apresenta um estudo comparativo das 5 principais ferramentas open-source de gerenciamento de projetos, levantadas com base em alguns critérios. Este estudo, tem o objetivo de identificar qualidades e deficiências de cada uma, quando utilizadas no cenário de micro e pequenas empresas. O quarto capı́tulo, Modelo de um processo genérico de encerramento, apresenta um modelo de um processo genérico de encerramento, construı́do a partir das definições de encerramento de projetos apresentadas no capı́tulo Fundamentação Teórica. O quinto capı́tulo, Evolução da ferramenta dotProject para encerramento de projetos, apresenta a ferramenta dotProject, a modelagem do módulo a ser desenvolvido e o detalhamento da implementação, assim como os testes de validação. O sexto capı́tulo detalha o processo de avaliação do módulo desenvolvido, sob os pontos de vista de utilidade e alinhamento ao PMBOK. Finalmente, o sétimo capı́tulo apresenta as conclusões do trabalho. 16 2 Fundamentação Teórica Este capı́tulo aborda em termos gerais as caracterı́sticas de Micro e Pequenas Empresas, conceitos de gerenciamento de projetos e detalhamento do processo de encerramento de projetos. 2.1 Micro e Pequenas Empresas Tanto as pequenas, quanto as médias ou grandes empresas de software enfrentam problemas comuns da indústria de software, tais como avanço rápido da tecnologia, melhoria do seu processo de desenvolvimento, acompanhamento do crescimento da indústria, entre outros. Porém, no contexto de micro e pequenas empresas há um foco menor em propostas de solução para estes problemas, apesar destas empresas representarem uma porcentagem, em alguns paı́ses, massivamente maior(RICHARDSON; WANGENHEIM, 2007). E este contexto empresarial possui algumas caracterı́sticas relevantes, muitas vezes diferentes das caracterı́sticas de empresas de maior porte(CEZARINO; C., 2005), tais como: • Baixo nı́vel gerencial. • Gestão informal. • Fraca maturidade organizacional. • Estratégia intuitiva. • Ausência de planejamento. • Inexistência de dados quantitativos. • Altas taxas de mortalidade. 17 No caso especı́fico de MPEs de software, ainda podem-se citar: • Equipes de desenvolvimento pequenas • Projetos de pequeno e médio porte • Menos nı́veis de hierarquia • Mais facilidade de comunicação • Maior proximidade entre os membros da equipe Estas caracterı́sticas podem ser aproveitadas para melhoria da empresa e da qualidade, se usadas da forma correta. Uma dessas formas é ter uma gerência de conhecimento estabelecida, pois - uma vez que a equipe se conhece, a comunicação flui mais fácil e rapidamente e o gerente está mais próximo da equipe - conhecer e saber lidar bem com as dificuldades e qualidades, pontos fortes e fracos da equipe pode ser decisivo no cumprimento de prazos, orçamentos e qualidade do produto oferecido. Neste cenário, estabelecer um processo de gerenciamento dos projetos e das experiências pode contribuir com a melhoria da empresa e dos produtos, e aumentar suas chances de sobreviver e competir no mercado (THIRY et al., 2006). Porém, as maiores normas e modelos nesta área estão focados em grandes empresas, e se faz necessária uma adaptação destas para o contexto de MPEs (ANACLETO et al., 2003). 2.2 Gerenciamento de projetos Para melhor entender o processo e o conceito de gerenciar projetos é necessário um esclarecimento sobre o que é um projeto e qual é o seu papel. Um projeto, de acordo com PMI (2008), é um esforço temporário empreendido no desenvolvimento de um produto, serviço ou resultado. Esta natureza temporária indica um inı́cio e fim definidos, onde este final se dá tanto pelo alcance dos objetivos, pelo cancelamento (por exemplo, não ser mais necessário) ou pelo insucesso. Cada projeto cria, necessariamente, um resultado único. Mas, apesar de serem únicos, os projetos podem ter elementos repetitivos sem afetar sua caracterı́stica de unicidade. São diferentes das operações, que são esforços dispendidos em atividades repetitivas, não únicos, que não possuem um fim definido. Por exemplo, a construção de uma casa é um projeto que possui similaridade com outros projetos de casas, mas que resulta 18 em um produto único. Enquanto isso, a secretária da empresa de construção, que atende telefonemas e anota recados, executa uma operação. Gerenciar um projeto, habitualmente compreende identificar os requisitos e gerenciálos junto às partes interessadas, para que as expectativas, preocupações e necessidades destes sejam atendidas. Da mesma forma, cabe ao processo de gerenciamento equilibrar as restrições do projeto, que geralmente se dividem em custo, escopo, tempo, qualidade e riscos. PMI (2008) divide as atividades de gerenciamento em cinco grandes grupos: • Iniciação: Compreende o processo de contato com partes interessadas, definição de um escopo e obtenção da aprovação formal para a execução do projeto. • Planejamento: Engloba as ações de planejar escopo, tempo, qualidade, custos, aquisições, comunicação, RH e riscos. • Execução: Para esta etapa estão previstas as ações de execução do planejamento. Por exemplo, realização de aquisições, gerenciamento da equipe e das partes interessadas, orientar a execução do planejamento, entre outras. • Monitoramento e controle: Este processo prevê ações para acompanhamento e controle do projeto, no que diz respeito ao planejamento. • Encerramento: Esta fase prevê o fechamento do projeto. Inclui atividades de arquivamento de artefatos do projeto e gerência de lições aprendidas. Projetos de software, contém especificidades que devem ser levadas em conta. (DIJKSTRA, 1979) comenta sobre a dificuldade de se programar e ser um bom programador. Também, sobre a dificuldade de se construir sistemas complexos, uma vez que programar é uma atividade essencialmente abstrata e intelectual. Neste sentido, uma correta aplicação do processo de execução do planejamento e monitoramento e controle precisam ser constantemente atualizadas, pois nestas fases são onde irão ser identificados requisitos mal avaliados ou desvios de estimativas. Outro fator importante, é que o processo de monitoramento e controle seja executado durante todo o projeto, desde a iniciação, até o encerramento. A figura 2.1, baseada no PMBOK PMI (2008) organiza os grupos de processos durante a vida do projeto. Os conceitos de gerenciamento de projetos são também divididos em 9 áreas de conhecimento. São elas: custo, escopo, tempo, recursos, riscos, aquisições, qualidade, comunicação e integração. Cada área de conhecimento destas, é utilizada por 19 Figura 2.1: Grupos de processo de gerenciamento de projetos (PMI, 2008) meio de um ou mais processos. Por exemplo, o gerenciamento de tempo é feito nos processos de planejamento e monitoramento e controle. O relacionamento completo entre as áreas de conhecimento e os grupos de processo é mostrado na tabela 2.1. As áreas destacadas serão o foco e o escopo deste trabalho. 2.2.1 Encerramento de projetos Visão Geral Encerrar o projeto ou a fase é o ponto do projeto onde é feita a validação do escopo e objetivos do projeto concluı́do, fechamento administrativo do projeto, finalização das atividades, entre outros (PMI, 2008). O PMBOK apresenta um processo de encerramento, onde são definidas entradas, saı́das, e ferramentas para a execução deste grupo de processo. As entradas são o plano de gerenciamento do projeto, as entregas aceitas pelo cliente e ativos de processos organizacionais, que podem ser diretrizes de encerramento, informações históricas, base de experiências e lições aprendidas, informações do esforço realizado, entre outros. As saı́das são a transição do projeto ao produto pelo qual o projeto foi criado e a atualização de ativos de processos organizacionais. Como ferramentas e técnicas temos a opinião especializada, que vai garantir padrões de qualidade no encerramento do projeto. O relacionamento entre os artefatos de 20 Tabela 2.1: Processos e áreas de conhecimento (PMI, 2008) entrada e saı́da neste processo são esquematizados na figura 2.2. Figura 2.2: Fluxo de dados no encerramento de projetos Adicionalmente, existem alguns métodos e processos que são executados nesta fase e que visam o usufruto dos dados e experiências do projeto para gerenciamento de conhecimento e aprendizagem e melhoria contı́nua. No contexto deste trabalho abordam-se duas: a análise de pós-morte e a fábrica de experiências (derivada do 21 conceito do paradigma de melhoria da qualidade). Para ilustrar o uso e práticas destes métodos, iremos utilizar ao longo deste trabalho um projeto de exemplo. O projeto exemplo ’Pizzaria On Line’ trata-se de um sistema de entrega de pizzas on line, onde cada entregador de pizza terá um smartphone, no qual ele terá acesso ao sistema central para pesquisar informações e comunicar-se com a pizzaria. Análises de pós-morte A análise de pós-morte, ou Post mortem analysis (PMA) é um método de gerenciamento de conhecimento, que captura experiências e lições aprendidas e as usa para melhoria do processo. Estas experiências e lições aprendidas (que são fatos ou fatores identificados como ensinamentos sobre o projeto) são utilizadas para o processo de aprendizagem organizacional, onde a história do planejamento e da execução do projeto permite que se conheçam defeitos, qualidades, pontos fracos e fortes do processo de desenvolvimento e também organizacional. A análise de pós morte é dividida em quatro etapas sequenciais(BIRK; DINGSOYR; STALHANE, 2005): • Preparação: Na preparação é feita uma revisão do projeto, para identificar o que aconteceu durante o projeto e assim refinar os focos da reunião. Nesta etapa são revistos documentos do projeto, relatório, plano de gerenciamento, entre outros. Documentos como relatórios de monitoramento do primeiro ao último dia podem ser gerados nesta etapa. • Coleta de dados: Esta etapa compreende a coleta de experiências e lições aprendidas durante o projeto. Estas informações não devem ser somente de aspectos negativos ou pontos fracos do projeto, mas sim, também, de pontos fortes e aspectos positivos. • Análise: Na análise, é conduzida uma sessão de feedback com os participantes, que são basicamente a equipe e o gerente de projeto. Na análise são discutidas as lições do que deu certo e que não deu certo no decorrer da execução do projeto. • Resultados e experiências: Nesta fase é criado um relatório do processo de análise de pós-morte que contém: Descrição do projeto, os principais sucessos e insucessos do projeto e um relatório da sessão de análise. 22 A segunda e a terceira etapas são executadas no contexto de uma reunião de pósmorte (DINGSOYR; STALHANE; MOE, 2003). Ao final desta reunião, deve existir um documento relatando as experiências e lições aprendidas levantadas na reunião, de uma forma clara e que possa ser reusado futuramente. A figura 2.3 esquematiza o processo de análise de pós-morte, baseando-se em Myllyaho1 et al. (2004) e Dingsoyr, Stalhane e Moe (2003) Figura 2.3: Processo de análise de pós-morte As reuniões de pós-morte acontecem habitualmente no intervalo de 5 horas e seguem uma agenda como a demonstrada na tabela 2.2 A etapa de Resultados e Experiências gera uma ata da reunião de pós-morte, que conterá as informações debatidas na análise de forma resumida. No nosso projeto de exemplo, esquematizaremos uma reunião de pós morte da seguinte forma: • Na parte 1 da reunião é apresentado a todos os membros da equipe e ao gerente presente, o projeto, os requisitos e o planejamento da reunião, de acordo com a tabela 2.2. • Na parte 2, são levantados os pontos fortes: Proximidade com o cliente, domı́nio de tecnologia e desenvolvimento web e fácil adaptação à plataforma de desen- 23 Tabela 2.2: Agenda de uma reunião de pós-morte (DINGSOYR; STALHANE; MOE, 2003) volvimento para smartphones MyPhone. Após este levantamento são priorizados os itens, de forma que cada item seja escrito em um post it e colocado em um quadro visı́vel para todos, de acordo com a figura 2.4. A priorização dos itens acontece na ordem de importância, ou seja, quais destes itens foram mais decisivos para o sucesso ou conclusão do projeto ou fase. • Após um intervalo, a reunião é retomada. O passo 3 é análogo ao passo 2, mas neste são levantados os pontos fracos e aspectos negativos. Do projeto exemplo, poderı́amos citar: atraso no fornecimento dos smartphones, dificuldade de testes e biblioteca gráfica de difı́cil manipulação. Neste caso, a priorização dos itens acontecerá no sentido de maior impedimento. Itens prioritários serão aqueles que apresentaram maior obstáculo ou dificuldade para o desenvolvimento do projeto. • Passado o intervalo, agora mais longo, a equipe e o gerente se reúnem novamente para debater as causas do itens priorizados no passo 2. Ao exemplo, temos que o smartphone MyPhone apresentou uma plataforma estabelecida e fácil de lidar, sendo um bom ambiente de desenvolvimento; os clientes estavam próximos e acessı́veis para eventuais reuniões e visualização de protótipos; a parte web do projeto já era de conhecimento dos membros da equipe e foi rapidamente concluı́da. • Após outra breve pausa, os itens priorizados no passo 3 são discutidos. No projeto exemplo, observou-se que a plataforma de desenvolvimento apresentou bom ambiente de desenvolvimento, porém, não apresentou estrutura de testes, tomando mais tempo para estas atividades que o planejado. Também, o atraso 24 Figura 2.4: Participante da reunião de pós-morte colando post its, em uma sessão de brainstorming (DINGSOYR; STALHANE; MOE, 2003) no fornecimento dos smartphones atrasou algumas atividades do caminho crı́tico do projeto. Constatou-se também, que a biblioteca gráfica escolhida possuia muitos bugs e foi de difı́cil manipulação, atrasando as atividades de interface. Com estes dados levantados, esclarecem-se possı́veis mal-entendidos sobre atrasos de cronograma, estouro de orçamentos, entre outros, tanto para a equipe quanto para o gerente. Adicionalmente, esta troca de experiências permitirá uma escolha mais acurada de tecnologias, processos ou técnicas no planejamento e execução de futuros projetos em domı́nio similar. Para fechar a reunião, é então coletadas as informações obtidas e resumidas na ata de pós-morte, como é mostrado na figura 2.5. PMA são frequentemente usadas em empresas de jogos (MYLLYAHO1 et al., 2004). O site Gamasutra(GAMASUTRA, 2011) disponibiliza algumas atas de PMAs de jogos conhecidos. Existem também, grupos de empresas grandes de jogos que executam mensalmente uma atividade similar à análise de pós-morte, são eles o 25 Figura 2.5: Ata de reunião de pós-morte do projeto Pizzaria on line San Francisco Post Mortem (SAN FRANCISCO POSTMORTEM, 2011) e Boston Post Mortem (BOSTON POSTMORTEM, 2011). Estes grupos, reúnem-se mensalmente em reuniões informais para conversar e trocar experiências sobre o desenvolvimento e uso dos jogos. Aplicar PMA da forma correta permite à organização uma forma de gerenciamento de conhecimento, aprendizagem contı́nua sobre o processo, documentação de boas práticas e problemas, além de prover à equipe uma maior integração, resolução de conflitos, aprendizagem, feedback sobre o trabalho de cada pessoa e do grupo, entre outros (BIRK; DINGSOYR; STALHANE, 2005). 26 Paradigma de melhoria da qualidade O Paradigma de melhoria da qualidade (QIP) é a base da Fábrica de Experiências, desenvolvida por Basili, Caldiera e Rombach (1994). É o resultado da aplicação de metodologias cientı́ficas para o problema do gerenciamento de qualidade de software e relaciona-se com o ciclo Planejar/Executar/Verificar/Agir (DEMING, 1986), muito usado na indústria na implementação de gerenciamento de qualidade. O QIP organizase em cima de seis passos: • Caracterizar: Este passo visa entender e caracterizar o ambiente, com base em modelos, intuição, dados, etc. Criam-se linhas de base com os processos existentes e caracterizam a criticalidade dessas baselines. • Definir metas: Uma vez caracterizada a organização, o próximo passo é definir metas quantificáveis para sucesso de projeto, melhoria de processo e desempenho. • Escolher processo: Com metas definidas, passamos ao passo de escolher um processo que melhor se adeque às metas e à caracterização levantada. Junto com o processo, são definidos também, métodos, ferramentas, e outros artefatos de suporte. • Executar: Este passo visa a execução do processo e consequentemente a construção de um produto. Adicionalmente, feedback do projeto deve ser coletado, com base nas metas definidas e atingidas. • Analisar: Ao final do projeto, este passo é executado a fim de analisar os dados coletados. Estes dados tem o poder de apontar possı́veis problemas, avaliar o processo e as práticas adotadas, pontos fracos e fortes do projeto, entre outros. • Empacotar: Finalizada a análise, as experiências aprendidas devem ser consolidadas em uma forma estruturada de conhecimento. Estes dados, novos ou atualizados, devem ser armazenados numa base de experiências e estar disponı́vel para consulta em projetos futuros. Estas seis etapas estão sequenciadas como mostra a figura 2.6. A caracterização deve ser feita de forma que cada projeto se encaixe em uma classe bem definida. Essa classificação irá permitir uma melhor definição de metas, avaliação e comparação com 27 Figura 2.6: Interação dos seis passos do Paradigma de Melhoria da Qualidade (BASILI; CALDIERA; ROMBACH, 1994) futuros projetos. Por exemplo, não faz sentido comparar dados de um projeto que inclui implementação de funcionalidades totalmente novas, com um projeto que visa a implementação de funcionalidades já conhecidas pela equipe. O contexo no qual o projeto está inserido, vai permitir uma definição de metas mais precisa. Como exemplos de metas mensurávies, poderı́amos ter, no contexto de projetos com funcionalidades já conhecidas, finalização das atividades dentro do tempo planejado, reusar/refatorar código já existente, entre outros. E com base nestas metas definir com mais segurança qual será o método, processo e ferramentas de suporte que melhor irão contribuir com o projeto. Ao final do projeto, a análise e empacotamento das informações coletadas durante a execução permitirá maior acurácia na definição e planejamento dos próximos projetos. Para o nosso projeto Pizzaria On Line, a execução dos 6 passos resultaria em: • Caracterizar: 1. O projeto se encaixa nas classes de desenvolvimento web e desenvolvimento para dispositivos móveis 2. A equipe é de 3 desenvolvedores e 1 gerente 3. Todo equipamento móvel deverá ser fornecido por terceiros 4. A duração estimada é de 3 meses, começando em março e terminando em maio 5. Contabilizam-se 8 horas de trabalho diário por desenvolvedor. 28 • Definir metas: 1. O software dos smartphones deve ter boa usabilidade 2. O desempenho dos servidores deve ser garantido 3. O suporte técnico deve ser facilmente contatado 4. O cronograma não pode ser atrasado em mais de 1 semana 5. O orçamento não deve ultrapassar o planejado em 10% • Escolher processo: 1. Será utilizado o smartphone MyPhone e a linguagem Cobra++ 2. Todo o desenvolvimento e teste será realizado na plataforma do MyPhone 3. O processo de gerenciamento será baseado no SCRUM 4. Será utilizada a biblioteca gráfica padrão da linguagem • Executar: Durante a execução do projeto, constatou-se, com base nas metas: 1. A usabilidade do software dos smartphones está sendo bem aceita 2. O desempenho dos servidores está como planejado 3. O suporte técnico ainda tem dificuldades de contato 4. O cronograma está atrasado 1 semana 5. O orçamento está controlado • Analisar: Ao final do projeto, constataram-se os seguintes pontos: 1. A equipe teve fácil adaptação à plataforma MyPhone 2. A linguagem Cobra++ mostrou-se complicada para o contexto do projeto 3. A biblioteca gráfica foi de difı́cil manipulação 4. O contato próximo ao cliente facilitou eventuais reuniões de replanejamento e resolução de dúvidas, em relação aos requisitos 5. A plataforma MyPhone apresentou deficiências no quesito testes automatizados • Empacotar: Os dados coletados vão para a base de experiências, e serão disponibilizados para consultas futuras. 29 Ou seja, com a execução deste processo, podemos levantar dificuldade e qualidades comuns à mesmas classes de projetos. Por fim, armazenar estas informações pode garantir que os mesmos erros não se repitam futuramente. Por isso, estas informações devem ser armazenadas em uma forma acessı́vel para futura consulta, e, neste sentido, automação pode se tornar necessária, pois podem-se lidar com uma quantidade grande de dados. Criação e manutenção de uma fábrica de experiências A Fábrica de experiências (BASILI; CALDIERA; ROMBACH, 1994) é uma organização lógica e/ou fı́sica, utilizando como metodologia o Paradigma de Melhoria da Qualidade, que age no sentido de minimizar os problemas de se construir software de alta qualidade, pela coleta e reuso de experiências de produtos de projetos. O QIP prevê uma separação do desenvolvimento do projeto (Organização do Projeto) da parte de aprendizado e empacotamento de experiências (Fábrica de Experiências). Como demonstrado na figura 2.7, a fábrica de experiências irá suprir o organização do projeto com a análise dos dados fornecidos, metas, ferramentas, etc. Para a execução correta do processo, a fábrica necessita de constante feedback de dados, lições aprendidas e caracterı́sticas de ambiente. O apoio ao projeto tem a função de manter, facilitar e gerenciar os dados e o acesso a estes. Figura 2.7: Fábrica de Experiências (BASILI; CALDIERA; ROMBACH, 1994) A análise e interpretacão dos dados e lições é feita com base nas metas. Estes dados podem ser usados para entender e caracterizar melhor a relação entre classe 30 de projetos e atributos (processo, métodos, ferramentas), servir de suporte para a melhoria do processo e ser base para comparações, avaliações, predições e controle. A base de experiências é um conjunto acessı́vel e integrado de experiências e lições aprendidas analisadas, sintetizadas e empacotadas. Por exemplo, no projeto Pizzaria On Line, uma das lições aprendidas foi que a biblioteca gráfica usada não foi fácil de manipular, ou seja, no próximo projeto similar, pode ser estudado o uso de uma biblioteca alternativa. Analogamente, como foi constatado atraso no fornecimento dos equipamentos, para os projetos futuros, pode ser planejado o pedido antecipado de equipamentos, troca de fornecedores, entre outros. Porém, o reuso de experiências necessita de uma estrutura organizacional que disponibilize um modelo de evolução de software que suporta reuso, processos de gerenciamento de experiências e um mecanismo de integração dentre o modelo e os processos. Neste contexto, a Fábrica de Experiências realiza este trabalho de integração, pois coleta estas lições e experiências e as armazena de forma organizada e facilmente recuperável. 31 3 Estado da Arte e Prática Este capı́tulo aborda o estado da arte das ferramentas de gerenciamento de projeto, assim como uma avaliação do grau de suporte das principais, no que diz respeito ao grupo de processo de encerramento de projetos. 3.1 Definição do estudo Para melhor avaliar, é necessário que se estabeleça uma metodologia e critérios de avaliação bem definidos, para que os resultados possam ser melhor compreendidos. Como definição dos critérios de avaliação, usam-se os principais modelos e normas na área de gerenciamento, o PMBOK e o CMMI-DEV. Porém, o CMMI-DEV não define práticas ou processos definidos para a área de encerramentos, então o guia base desta comparação é o PMBOK. Também, é avaliado nas ferramentas o suporte para as atividades de análise de pós-morte e criação e manutenção de uma fábrica de experiências. A avaliação é realizada no módulo core das ferramentas selecionadas, não sendo considerados plug in’s adicionais. Critérios de avaliação Com base nos estudos da fundamentação teórica, buscamos nas ferramentas, suporte para as principais atividades de encerramento administrativo, reunião de pósmorte e fábrica de experiências. Foram levantados os seguintes suportes: • S1. Monitoramento do andamento do projeto do primeiro ao último dia, comparado ao planejamento. • S2. Ata de reunião de pós-morte. • S3. Arquivamento do projeto e de artefatos do projeto (documentos, relatórios, links). 32 • S4. Consolidação de experiências facilmente recuperável e acessı́vel, na forma exata ou similar à uma Fábrica de Experiências. Cada um dos itens acima descritos serão avaliados conforme o grau de suporte oferecido pela ferramenta. Estes estão descritos na tabela 3.1 Tabela 3.1: Avaliação dos critérios (PEREIRA; GONçALVES; WANGENHEIM, 2011) Escolha das Ferramentas A escolha das ferramentas é baseada no trabalho de (PEREIRA; GONçALVES; WANGENHEIM, 2011), que efetuou a busca de ferramentas no repositório SourceForge (2011), um dos maiores sites de software open source. A busca foi efetuada a partir da frase project management na categoria ”Office/Business - Project Management”. A fim de filtrar somente as ferramentas web de gerenciamento de projetos, as palavras desktop e groupware foram usadas como critérios de exclusão. Como critérios de inclusão foram usados: • Atualização realizada depois de 2008: Diminuir o risco de selecionar um projeto inativo. • Taxa de downloads semanal maior que 50: Filtrar as mais populares. • Equipe de desenvolvimento maior que 4 pessoas: Diminuir o risco de descontinuidade. • Foco em suporte para gereciamento de projetos tradicional. Já como critério de exclusão foram levantados os seguintes itens: • Ferramentas desktop que não possuem suporte para troca de informações pela web. 33 • Suporte não exclusivo para gerenciamento de projetos. • Ferramentas com grau de generalidade grande. Ferramentas que possuam apenas uma funcionalidade especı́fica de um grupo de processo se encaixam neste critério. • Foco em metodologias ágeis. As cinco ferramentas que atenderam aos critérios de seleção foram as seguintes: 1. dotProject. 2. Project.net. 3. PhpCollab 4. Track+. 5. Streber. 3.2 Avaliação das ferramentas Uma vez escolhidas as ferramentas, analisamos cada uma, em relação ao suporte oferecido para o grupo de processos de encerramento, alinhado ao PMBOK. 3.2.1 dotProject O dotProject (DOTPROJECT, 2011a) é uma ferramenta web-based de gerenciamento de projetos, desenvolvida em PHP e usando o banco de dados MySQL. Encerrar um projeto na ferramenta dotProject corresponde à troca de situação do projeto, conforme a figura 3.4. Estas situações são úteis para classificar e separar os projetos, principalmente quando listados. São possı́veis 8 situações: Indefinido, Proposto, Planejamento, Execução, Aguardando, Completo, Modelo e Arquivado. Não somente no encerramento dos projetos, mas também durante a execução, podem ser gerados alguns relatórios, que podem atuar como monitoramento do projeto, oferecendo suporte para o item S1. Possı́veis relatórios a serem gerados são: 34 • Allocated user hours: Mostra quantas horas cada usuário alocou em um determinado perı́odo de tempo. • Completed: Tarefas completadas na semana passada. • Overall Report: Mostra uma visão geral de todos os projetos. • Overdue: Tarefas atualmente atrasadas. • Project Statistics: Estatı́sticas do projeto, com status das tarefas. • Tasks end date: Visualização da data de término real e teórica das tarefas. • Task List: Visualização da lista de tarefas do projeto. • Task Log: Visualização dos logs de tarefa do usuário. • Tasks sorted by user: Mostra as tarefas alocadas à cada usuário. • Upcoming: Tarefas a serem completadas na próxima semana. • User performance: Mostra a quantidade de horas trabalhadas por usuário, em comparação com a quantidade alocada para as tarefas. Os relatórios Projects Statistics, Task end date e User performance se mostraram interessantes para o contexto do trabalho. O relatório Task end date apresenta de uma forma visual bem organizada, as tarefas com seus respectivos responsáveis, horas alocadas, data final planejada, data da última atividade e se foi ou não concluı́do, como mostra a figura 3.1. Já o relatório User performance apresenta uma análise de desempenho de cada colaborador da seguinte forma: Exibe as horas alocadas e trabalhadas, a porcentagem do trabalho que foi de fato realizado (calculado com base na duração das tarefas) e a eficiência do usuário (esta calculada com base nas tarefas concluı́das). A figura 3.2 apresenta o relatório de usuário. Por sua vez, o relatório Project statistics é bem completo, apresentando uma visão geral sobre o projeto. Como exemplificado na figura 3.3, o relatório apresenta um gráfico de barras com dados do esforço do projeto: uma barra representa o esforço completo, em andamento e pendente, e a outra barra representa o esforço completo, atrasado e no prazo. Também, há um resumo das atividades, da situação geral do projeto e do espaço usado para armazenamento de arquivos de projeto. 35 Figura 3.1: Relatório Task end date Figura 3.2: Relatório User performance Estes três relatórios aliados ao diagrama de Gantt são muito úteis na realização de uma reunião de pós-morte, uma vez que apresentam dados resumidos sobre o andamento do projeto, das tarefas e dos colaboradores. Logo, com estes dados, é mais fácil de discutir problemas, potenciais e saber quais tarefas foram crı́ticas, quais foram menos complicadas, entre outros. Já as atividades (tasks), permitem adição de arquivos, registro de tempo trabalhado, progresso, registro de atividades (logs), como mostra a figura 3.6. Neste contexto, este formato de atividade, aliada aos relatórios, podem oferecer um suporte básico ao item S2, a reunião de pós-morte. A atividade da reunião poderá ter sua ata escrita no registro da atividade, e os relatórios acessados para coleta de alguns dados 36 Figura 3.3: Relatório Project statistics Figura 3.4: Janela de edição de um projeto do projeto. Porém, falta um acompanhamento melhor das tarefas e usuários desde o primeiro dia do projeto ao último. Além disso, o registro da atividade atuar como ata da reunião, pode dificultar o acesso aos dados e lições aprendidas. Também, a falta de um template pode gerar a não padronização dos dados. A ferramenta também permite o arquivamento de documentos e artefatos, e geração de diagramas Gantt. A figura 3.5 mostra a janela de visualização da empresa. Nela 37 encontram-se uma lista de projetos ativos e arquivados, arquivos, geração de diagramas de Gantt, entre outros. Portanto, em questões de encerramento administrativo (item S3), a ferramenta está adequada. Figura 3.5: Janela de visualização da empresa Figura 3.6: Janela de atividade Não foi encontrado nenhum tipo de suporte a uma fábrica de experiências, correspondente ao item S4, na ferramenta. Os únicos dados acessı́veis sobre os projetos estão na possı́vel geração de diagramas de Gantt, como mostrado na figura 3.5 e nos relatórios. 38 3.2.2 Project.Net O project.Net (PROJECT.NET, 2011c) é uma ferramenta web-based de gerenciamento de projetos. É open source, desenvolvida em Java com banco de dados Oracle. As tentativas de instalação da ferramenta apresentaram problemas na formação do banco de dados, portanto, não pode-se avaliar a ferramenta como usuário. A avaliação feita, então, é baseada em documentação e features encontradas no site da ferramenta. Com base nisso, avaliamos que a ferramenta apresenta suporte ao item S1, pois apresenta registro de tempo nas tarefas (como mostra a figura ??, e com essa informação, a possibilidade de: acompanhar horas gastas em cada tarefa, comparar tempo estimado contra tempo efetivo, identificar recursos sub ou sobre alocados, entre outros. Além disso, possui relatórios de acompanhamento de tempo, registros históricos do tempo atual de finalização do projeto com estimativas, entre outros. Estes relatórios podem ser exportados para formatos compatı́veis com Microsoft Excel e podem ser gerados para toda a organização, sub-organizações ou apenas projetos. A figura 3.7 mostra a janela de geração de relatórios de acompanhamento de tempo. Figura 3.7: Janela de relatório de acompanhamento de tempo (PROJECT.NET, 2011b) Já quanto ao item S2, assim como em outras ferramentas, a ata de reunião de retrospectiva deverá ser escrita na forma de atividades. Sendo assim, a ferramenta não possui suporte definido especificamente para este fim. Já para o arquivamento de artefatos, a ferramenta dispõe de funcionalidades de 39 upload de arquivos (PROJECT.NET, 2011a). Sendo assim, possui suporte ao item S3. Porém, como percebido em outras ferramentas, o suporte ao item S4 não foi encontrado na documentação da ferramenta. 3.2.3 PhpCollab A ferramenta open source PhpCollab (PHPCOLLAB, 2011), desenvolvida em PHP e distribuı́da sob licença GLP, é focada no gerenciamento de projetos do ponto de vista do time e do cliente. Seu diferencial está no fato de o cliente ter uma visão e acompanhamento do projeto. Encerrar um projeto nesta ferramenta, como visto nas outras, significa troca de estado. Os estados possı́veis de um projeto no PhpCollab são: Suspendido, Abrir, Não Começado, Completo e Cliente Completo. A ferramenta possui suporte para geração e arquivamento de relatórios do projeto. Estes relatórios listam as tarefas e suas prioridades, data de finalização, projeto, entre outros. Porém, este relatório não possui informações de tempo gasto em cada tarefa, tempo planejado de cada uma, entre outros. Por isso, apesar de possuir a geração de relatórios, a ferramenta possui suporte básico ao item S1, pelo fato de este relatório não centralizar informações gerenciais úteis no processo de encerramento, sendo que estas estarão disponı́veis apenas nas descrições das atividades. O formato de atividades que a ferramenta possui, permite o registro da ata de reunião de pós-morte, como mostra a figura 3.8. Além disso, a atividade permite a criação de sub-atividades, anexação de arquivos, registro de horas trabalhadas, progresso, tempo estimado e atual, entre outros. Logo, para o registro da ata, a ferramenta oferece suporte, apesar de não ser projeto para este fim. O arquivamento de artefatos do projeto é permitido através do upload de arquivos na ferramenta e persistência dos relatórios eventualmente gerados. Não foi encontrado um local centralizado de upload e listagem de arquivos, somente é possı́vel ver ou anexar um arquivo em uma atividade, como mostra a figura 3.9. Apesar de não haver este local centralizado para acesso aos arquivos, podemos dizer que a ferramenta possui suporte para arquivamento de artefatos do projeto, correspondente ao item S3. O suporte para o item S4, assim como nas outras ferramentas, não foi encontrado. 40 Figura 3.8: Janela de atividade Figura 3.9: Janela de atividade - Anexação de arquivos 3.2.4 Track+ Track+ (TRACK+, 2011) é uma ferramenta web-based de acompanhamento de projetos. A ferramenta tem foco no acompanhamento de problemas, atividades e riscos. É mais abrangente, e pode ser usada também para o desenvolvimento de 41 sistemas mecatrônicos e sistemas embarcados. Assim como as outras ferramentas estudadas, o encerramento ocorre com a troca de status do projeto. No Track+ os possı́veis estados são: aberto, analisado, nomeado, a processar, implementado, integrado, avaliando, fechado, suspenso. A ferramenta possibilita a geração de relatórios e gráficos dos projetos, as opções encontradas foram: • Relatório Filtered history : Apresenta um relatório de perı́odo configurável com as seguintes informações: adição/modificação/deleção de arquivos, módulos e comentários, custo, status, prioridade, entre outros. • Relatório Status over time: Relatório de problemas e tarefas, de acordo com seu status. • Gráfico Earned value chart: Gráfico de valor agregado • Gráfico Open vs. Closed Start: Gráfico e relatório de problemas abertos e fechados • Gráfico do número de artefatos abertos vs. Pessoa Responsável • Gráfico do número de itens nomeados (vs. estado do item) para vários Utilizadores • Gráfico do número de itens vs estado de vários projetos • Gráfico do número de items novos criados nas últimas 4 semanas • Gráfico de Gantt • Gráfico de estatı́sticas do estado Mas, estes relatórios não apresentam grande valor em termos de comparação de planejado vs. executado, no contexto global de gerenciamento de projetos. Como o foco da ferramenta é em tarefas e resolução de problemas, ela apresenta funcionalidades que atendem estes requisitos, mas deixam a desejar em outros. O fato de não poder se registrar o tempo trabalhado em horas é um destes. Portanto, quanto ao item S1, conclue-se que a ferramenta não possui o suporte adequado. As tarefas (também chamadas de issues), permitem o upload de arquivos, descrição da atividade, prioridade, datas de inı́cio e término, entre outros, como mostra a figura 42 3.10. Assim como as outras ferramentas, uma atividade de reunião de pós-morte pode ser realizada e ter sua ata escrita na descrição da atividade. Ou seja, para o item S2, a ferramenta está de acordo. Figura 3.10: Janela de atividade do Track+ Apesar de não encontrar um lugar centralizado para os arquivos, como nas outras ferramentas, o Track+ permite a anexação de arquivos às atividades. Portanto, para o item S3, está adequada. Não foi encontrado suporte para uma fábrica de experiências, correspondente ao item S4. 3.2.5 Streber A ferramenta Streber(STREBER, 2011) é uma ferramenta livre baseada em wiki de gerenciamento de projetos. Assim como as outras ferramentas avaliadas, ela encerra projetos, também, com a mudança de status. Os possı́veis são: template, undefined, upcoming, new, open, blocked, approved e done. A figura 3.11 mostra a janela de edição de projeto, onde pode-se alterar o status de um projeto. Quanto à dados de monitoramento do projeto, foi encontrado um log de mudanças do projeto, no formato mostrado na figura 3.12. Além disso, a ferramenta permite adi- 43 Figura 3.11: Janela de edição de projeto cionar estimativas de tempo, e pior caso, e registro de horas trabalhadas na forma de esforços(efforts). Porém, não foi encontrado um mecanismo de agrupamento destes esforços em uma forma de relatório ou similar, para comparação ao planejado, de forma que esta comparação deverá ser feita manualmente, e para cada atividade do projeto. Portanto, quanto ao item S1, a ferramenta não dispôs de suporte satisfatório, pois não ofereceu mecanismos eficientes de acompanhamento do projeto, principalmente no que diz respeito à comparação entre planejado e executado. Figura 3.12: Janela de log As atividades no Streber tem o formato demonstrado na figura 3.13. Permite o registro de estimativas de tempo e pior caso, esforços, descrição, comentários, entre outros. Similarmente às outras ferramentas, o formato da atividade permite que seja usada para reunião de pós-morte, permitindo o registro da ata e anexação de arquivos. 44 Figura 3.13: Janela de atividade A ferramenta permite o arquivamento de arquivos, através das atividades ou da aba Files. A figura 3.14 mostra a interface de listagem de arquivos do projeto. Esta funcionalidade atende ao suporte procurado no item S3. Figura 3.14: Janela de listagem de arquivos Não é encontrado nenhum tipo de suporte a uma fábrica de experiências, correspondente ao item S4, na ferramenta. 45 Discussão Os resultados da avaliação das cinco ferramentas escolhidas estão resumidos na tabela 3.2, de acordo com os critérios definidos na tabela 3.1. Através desta tabela, pode-se perceber que o suporte, principalmente ao item S4 (referente à fábrica de experiências) não é encontrado em nenhuma forma em nenhuma das ferramentas. Já itens como arquivamento de documentos e registro da ata através da estrutura de atividades sào encontrados, porém, não criados para o fim especı́fico de encerramento de projetos. Tabela 3.2: Tabela de resultado da avaliação das ferramentas Os relatórios de monitoramento foram encontrados com forte caracterı́stica em duas das ferramentas, project.Net e dotProject. Porém, o dotProject se sobressai neste quesito pelo fato de possuir a geração de diagramas Gantt, que são uma forma visual fácil e prática de acompanhamento do projeto, no que diz respeito à comparação entre planejado e executado. Com esta análise, fica claro que as ferramentas open source mais usadas não possuem foco nas atividades de encerramento. Com isso, reforça-se o objetivo deste trabalho, que irá somar valor ao uso da ferramenta dotProject e às experiências vividas durante o projeto. 46 4 Modelo de um processo genérico de encerramento Para evoluir a ferramenta no suporte ao encerramento, precisa-se, primeiramente, definir os passos dessa atividade. Para isso, é definido um modelo de encerramento para MPEs, alinhado ao PMBOK, independente de ferramenta. Este modelo tem como base as atividades definidas no capı́tulo 2. Por isso, parte de duas premissas: 1. A empresa possui uma base de experiências, que é usada no planejamento dos projetos. 2. Existem dados registrados sobre a execução e controle do projeto a ser analisado. Este modelo é proposto para que haja uma orientação para micro e pequenas empresas que desejam executar o grupo de processo de encerramento de projetos, alinhado ao PMBOK. O propósito deste modelo é passar por todos os passos necessários para esta execução de forma sistemática, atingindo os objetivos de aprendizagem contı́nua, gerenciamento de conhecimento e melhoria do processo. Unificando várias definições de encerramento de projetos, apresentadas no capı́tulo 2, definimos como entradas: os dados do projeto (vindo dos relatórios e diagramas gerados pela ferramenta, por exemplo) e arquivos, documentos, e artefatos em geral usados desde a etapa de planejamento do projeto. Como técnicas do processo temos a análise de pós-morte e o arquivamento de artefatos do projeto. Como saı́da temos dados da base de experiência atualizados, artefatos do projeto arquivados e a ata da reunião de pós-morte. A tabela 4.1 esquematiza entradas, técnicas e saı́das do modelo. O modelo é composto de três etapas, onde a primeira e a última devem ser exe- 47 Tabela 4.1: Entradas, técnicas e saı́das do modelo proposto cutadas pelo gerente e possı́veis assistentes e a segunda conta com o gerente e com a equipe do projeto: • E1. Arquivamento de artefatos do projeto e coleta de dados • E2. Reunião de pós morte • E3. Atualização da base de experiências A figura 4.1, esquematiza o modelo de processo proposto. Figura 4.1: Modelagem do processo A seguir, as etapas E1, E2 e E3 são descritas em detalhes nas tabelas 4.2, 4.3 e 4.4, respectivamente. 48 E1. Arquivamento de artefatos do projeto e coleta de dados Propósito O objetivo desta etapa é o arquivamento de relatórios, termo de abertura do projeto, termo de aceitação, atas de reuniões e outros documentos e artefatos produzidos durante o planejamento, execução e monitoramento do projeto. Com isso, tem-se um local centralizado de armazenamento de documentos, onde poderão ser acessados estes arquivos para consultas, pesquisas, entre outros. Entradas Artefatos do projeto Saı́das Artefatos do projeto revisados e arquivados Passos 1. Agrupar todos os artefatos do projeto. 2. Revisar os artefatos levantados, a fim de identificar possı́veis falhas, arquivos faltantes ou em excesso, versões corretas, entre outros. 3. Armazenar em um local definido. Responsável Gerente de projetos Participantes Gerente de projetos Tabela 4.2: Detalhamento da etapa E1 E2. Reunião de pós-morte Propósito O objetivo desta etapa é o levantamento de lições aprendidas. Este levantamento é realizado através de uma reunião de pós-morte com os integrantes da equipe e posterior registro da ata desta. A reunião de pós-morte é um passo fundamental de melhoria, tornando esta etapa de fundamental importância para a aprendizagem contı́nua. Entradas Relatório de status do projeto Saı́das Ata de reunião de pós-morte, como a mostra a figura 2.5, apresentada no capı́tulo 2. Passos 1. Com o relatório de status e a equipe, é realizada a reunião de pós-morte, de acordo com o definido no capı́tulo 2. 2. É registrada a reunião em uma ata de reunião de pós-morte Responsável Gerente de projetos Participantes Gerente de projetos, equipe de desenvolvimento e, possivelmente, stakeholders Tabela 4.3: Detalhamento da etapa E2 49 E3. Atualização da base de experiências Propósito O objetivo desta etapa é, com os dados do projeto (principalmente no que diz respeito à estimado versus executado) e lições aprendidas obtidas na reunião de pós-morte, executar a atualização da base de experiências. Neste momento, é importante o registro destes dados quantitativos, lições aprendidas e pontos fracos e fortes, para uso em planejamento de projetos e referências futuras. Este é o passo final do processo de encerramento. Entradas Ata da reunião de pós-morte e base de experiências Saı́das Base de experiências atualizada Passos 1. Com a ata da reunião de pós-morte, extrair as informações aprendidas 2. Com base nessas informações, atualizar a base de experiências Responsável Gerente de projetos Participantes Gerente de projetos Tabela 4.4: Detalhamento da etapa E3 50 5 Evolução da ferramenta dotProject para encerramento de projetos O objetivo deste trabalho é melhorar a ferramenta dotProject para suportar o processo de encerramento de projetos no contexto de MPEs, alinhado ao PMBOK. Após analisar a ferramenta, levantamos os requisitos e os casos de uso. Com estes dados, modelamos, implementamos e testamos a solução proposta. 5.1 A ferramenta dotProject O dotProject (DOTPROJECT, 2011a)é uma ferramenta web-based de gerenciamento de projeto que provê mecanismos de planejamento e controle para atividades, cronograma, comunicação e aquisições. Distribuı́da sob licença GPL1 , é composta por um módulo core que possui as funcionalidades acima citadas e mais módulos add-on, que são desenvolvidos e distrı́buidos pela comunidade. A ferramenta é desenvolvida na linguagem PHP e possui como banco de dados o MySQL. O módulo core possui funcionalidades para um gerenciamento básico de projetos. Isto inclui dotProject (2011b): • Backup: É um módulo recente de backup do banco de dados da ferramenta. Não se recomenda usar este módulo como único recurso de segurança por instabilidade. • Calendário: Este módulo permite a visualização de datas de tarefas e compromissos. 1 GNU General Public License é uma licença de software livre idealizada no contexto da Free Software Foundation, que permite ao usuário utilizar, modificar, redistribuir e aperfeiçoar o software. 51 • Organizações: As organização são as entidades que agrupam projetos, tarefas e usuários. É necessária a existência de pelo menos uma organização para se criar um projeto na ferramenta. • Contatos: Permite o cadastro de contatos com endereço, nome e outras informações. Estar na lista de contatos não permite à pessoa associada efetuar login no sistema. • Departamentos: São subconjuntos contidos nas organizações. Permitem um agrupamento mais refinado de usuários e tarefas. • Arquivos: Funções básicas de armazenamento de arquivos e controle de versão simples. • Fóruns: Permite a criação de fóruns do projeto para discussões, notas e informações. • Diagrama de Gantt: Fornece a criação de diagramas de Gantt baseados nas tarefas e atividades definidas. • História: É uma funcionalidade que provê um log histórico de mudanças e revisões. • Links: Fornece suporte à gravação e disponibilização de links (para sites ou locais internos/externos). • Projetos: Um projeto, no contexto do dotProject, é o elemento que contém as tarefas. • Recursos: É o módulo que incorpora recursos não-humanos ao projeto. • Procura inteligente: Esquema inteligente de procura pelos módulos do sistema. • Administração de sistema: Inclui as opções de configuração da ferramenta. • Tarefas: Tarefas são os componentes de trabalho. Nela são gravadas horas gastas, usuários responsáveis, logs, entre outros. • Administração de usuários: Esquema de gerenciamento de usuários. • Relatórios: Este módulo de relatórios provê uma gama de relatórios do projeto. Este módulo será detalhado no decorrer do trabalho, pois será utilizado no módulo a ser desenvolvido. 52 Já quanto aos módulos add-on, a ferramenta possui um framework de desenvolvimento, que dá suporte ao desenvolvimento destes módulos adicionais. Como exemplo destes temos: módulo de gerenciamento de riscos, gerenciamento de help desk, métricas, entre outros. Os módulos adicionais, por não necessariamente serem mantidos pela equipe de desenvolvimento, podem ter qualidade variável. Para distribuição dos módulos adicionais, a equipe da ferramenta sugere um conjunto padrões de codificação. A documentação pode ser encontrada em dotProject (2011b). 5.2 Análise de Requisitos Com base na ferramenta escolhida, são identificados os requisitos funcionais e não funcionais, para que possam ser definidas as funcionalidades e o escopo do trabalho. Abaixo estão listados os requisitos identificados. 5.2.1 Requisitos funcionais RF1. O módulo deve apresentar uma tela que agrupa todos os arquivos que foram anexados ao projeto. RF2. O módulo deve ter um relatório final de acompanhamento do primeiro ao último dia do projeto (relatório de status). RF3. O módulo deverá possuir uma funcionalidade de criar, modificar e deletar atas de reunião de pós-morte. RF4. O módulo cria uma base de experiências básica, inicialmente contendo todas as atas registradas. 5.2.2 Requisitos não-funcionais RNF1. O módulo deverá ser implementado usando o framework de desenvolvimento do dotProject. RNF2. Deverá ser usada a linguagem PHP e o banco de dados MySQL. RNF3. O tempo de resposta do sistema não deve ultrapassar 1 minuto. 53 5.3 Projeto e implementação Com base nos requisitos levantados e no modelo proposto, são identificados os casos de uso, e com base nestes, é modelada e implementada a solução a ser desenvolvida. 5.3.1 Casos de uso Neste cenário, são identificados os seguintes casos de uso, esquematizados na figura 5.1: 1. Arquivar artefatos do projeto 2. Preparar a reunião de pós-morte 3. Registrar a ata da reunião de pós-morte 4. Editar uma ata já registrada 5. Utilizar a base de experiências da empresa 6. Utilizar a base de experiências do projeto A seguir, são detalhados cada caso de uso. 1. Arquivar artefatos do projeto Atores Gerente de projeto Pré-condições O projeto foi encerrado. Fluxo de eventos 1. O gerente entra na página do projeto. 2. Clica na aba Arquivos. 3. O gerente confere os arquivos já organizados pela ferramenta. 54 Figura 5.1: Casos de uso do encerramento de projeto no dotProject 4. O gerente anexa possı́veis arquivos faltantes, clicando em ”novo arquivo”no canto superior direito da tela. Pós-condições Todos os arquivos do projeto estarão salvos, disponı́veis e agrupados na aba ”Arquivos”, do projeto. 2. Preparar a reunião de pós-morte Atores Gerente de projeto. Pré-condições Os dados do projeto já foram coletados e os arquivos do projeto agrupados. Fluxo de eventos 55 1. O gerente entra na página do projeto. 2. O usuário clica em ”relatórios”. 3. O usuário clica em ”Project Statistics”. 4. É gerado o relatório de estatı́sticas do projeto, que será usado na reunião. Pós-condições Os dados e arquivos do projeto continuam inalterados. 3. Registrar a ata de reunião de pós-morte Atores Gerente de projeto Pré-condições Aconteceu uma reunião de pós-morte Fluxo de eventos 1. O gerente navega até a página de projetos. 2. Clica na aba ”Análise de Pós-Morte”. 3. Clica em ”Nova pós-morte”. 4. Preenche os campos definidos. 5. Clica em ”submit”. 6. O sistema automaticamente atualiza a base de experiências com a ata recémregistrada. Pós-condições A ata registrada irá aparecer na lista de atas de reunião. 4. Editar uma ata já registrada Atores Gerente de projeto 56 Pré-condições Existe pelo menos uma ata registrada. Fluxo de eventos 1. O gerente navega até a página de projetos. 2. Clica na aba ”Análise de Pós-Morte”. 3. Clica no link da ata da reunião desejada. 4. Preenche os campos definidos. 5. Clica em ”submit”. Pós-condições A ata foi atualizada com os dados novos. 5. Utilizar a base de experiências da empresa Atores Gerente de projeto. Pré-condições O projeto está sendo planejado. Fluxo de eventos 1. O gerente acessa a aba de ”Base de experiências”na página da empresa. 2. É apresentada a lista de atas registradas sobre todos os projetos, separadas pelo nome do projeto, data de inı́cio e fim, data da reunião de pós morte e status do projeto. 3. O gerente acessa os dados que precisa para o planejamento. Pós-condições A base de experiências continua inalterada. 6. Utilizar a base de experiências do projeto 57 Atores Gerente de projeto. Pré-condições O projeto está sendo planejado. Fluxo de eventos 1. O gerente acessa a aba de ”Análise de pós-morte”na página do projeto. 2. É apresentada a lista de atas de reunião de pós morte, separadas por data e participantes da reunião. 3. O gerente acessa os dados que precisa para o planejamento. Pós-condições A base de experiências continua inalterada. 5.3.2 Modelagem da solução A modelagem da solução partiu de dois componentes a serem implementados, e dois a serem utilizados. A reunião de pós-morte utilizará os relatórios oferecidos pelo dotProject para obter dados de execução e controle do projeto. Como a reunião em si, não é uma funcionalidade oferecida pelo software, ela não será implementada. Porém, o registro da ata será um componente previsto neste módulo. Adicionalmente, o módulo contará com uma base de experiências e uma unidade agrupadora de arquivos do projeto, esta última já fornecida pelo módulo core da ferramenta. A figura 5.2 apresenta a modelagem conceitual do módulo proposto. Modelagem da implementação A modelagem da implementação foi realizada primeiramente, estudando-se a arquitetura do dotProject. Como demonstrado na figura 5.3, o sistema todo é baseado em módulos. Desta forma, pode-se desenvolver o modelo acima proposto como mais um módulo, a ser integrado à ferramenta pelo framework de desenvolvimento da ferramenta, que faz este trabalho. O resultado final é mostrado na figura 5.3, pela integração do módulo desenvolvido. 58 Figura 5.2: Modelagem conceitual do módulo adicional de encerramento de projetos Figura 5.3: Arquitetura da ferramenta dotProject com o módulo de encerramento Com esta arquitetura em vista, é utilizado o framework e a documentação oferecida pela ferramenta (DOTPROJECT, 2011b) para modelar a solução do módulo proposto. O diagrama de relacionamento de arquivos da figura 5.4 esquematiza a solução dos requisitos 3 e 4, referentes à atas de pós-morte e base de experiências, visto que os requisitos 1 e 2 (referentes a arquivamento de artefatos do projeto e geração de re- 59 latório de status) já são atualmente fornecidos pela ferramenta. De forma complementar, a figura 5.5 esquematiza as tabelas novas criadas com o módulo e as interações dela com a tabela já existentes dos projetos. Figura 5.4: Diagrama de relacionamento de arquivos do módulo de encerramento Figura 5.5: Diagrama de relacionamento das tabelas no módulo de encerramento 5.3.3 Implementação A evolução é desenvolvida com a linguagem de programação PHP e a interface é elaborada com a linguagem de marcação HTML, assim como os outros módulos da ferramenta e de acordo com o recomendado pelo framework. A persistência é feita 60 com o banco de dados MySQL, e o servidor utilizado foi o Apache. Todo o código da aplicação está presente no apêndice A. Abaixo, apresentam-se as telas de usuário, relacionadas com cada caso de uso acima especificado. As telas dos casos de uso ”Arquivar artefatos do projeto”e ”Preparar a reunião de pós-morte”, são provenientes dos módulos core da ferramenta. As telas dos outros casos de uso são provenientes da implementação das funcionalidades faltantes na ferramenta, para o módulo proposto. Caso de uso: Arquivar artefatos do projeto Ao entrar na página de projetos, navega-se até a aba ’Arquivos’, confere-se os arquivos já anexados e adicionam-se os arquivos faltantes, clicando em ’novo arquivo’ no canto superior direito da tela, de acordo com a figura 5.6. Figura 5.6: Tela de projetos, na aba de Arquivos Caso de uso: Preparar a reunião de pós-morte Ao entrar na página de projetos, navega-se até o link ”relatórios”, que irá redirecionar para a página de seleção de relatórios. Nesta página, clica-se em ’Project Statistics’ (como mostra a figura 5.7) e o relatório é então gerado. Caso de uso: Registrar a ata de reunião de pós-morte Ao entrar na página de projetos, clica-se na aba ”Reunião de pós-morte”. Nesta aba, clica-se em ”Nova pós-morte”, de acordo com a figura 5.8. Ao clicar neste botão, o usuário é redirecionado para tela de edição do projeto, que virá com os campos 61 Figura 5.7: Tela de seleção de relatórios vazios, à exceção do nome do projeto, datas de inı́cio e fim e orçamento planejados, conforme figura 5.9. Depois de preencher os campos da ata, clica-se em ’submit’ para salvar a ata. Figura 5.8: Tela do projeto, com botão para adicionar uma nova ata Caso de uso: Editar uma ata já registrada Ao entrar na página de projetos, clica-se na aba ’Análise de Pós-Morte’, como visto na figura 5.8. A aba irá listar todas as atas já registradas até o momento. Ao clicar no link da ata da reunião desejada, o usuário será redirecionado para a página de edição de ata, como mostra a tela na figura 5.10. Caso de uso: Utilizar a base de experiências da empresa 62 Figura 5.9: Tela de nova ata Ao entrar na página da empresa, clica-se na aba ’Base de Experiências’. Nesta aba irão estar listadas as atas registradas de todos os projetos, segundo a figura ??. O usuário escolhe a ata que deseja visualizar, clicando sob o link da mesma. A tela de visualização das atas é a apresentada na figura 5.12. Se o gerente deseja deletar a ata, basta clicar no link ’delete pós morte’ no canto superior direito. Caso de uso: Utilizar a base de experiências do projeto Ao entrar na página da empresa, clica-se na aba ’Análise de Pós Morte’. Nesta aba irão estar listadas as atas registradas de todos os projetos, segundo a figura 5.8. O usuário escolhe a ata que deseja visualizar, clicando sob o link da mesma. A tela de visualização das atas é a apresentada na figura 5.12. Se o gerente deseja deletar a ata, basta clicar no link ’delete pós morte’ no canto superior direito. 63 Figura 5.10: Tela de edição de ata Figura 5.11: Tela da empresa, na aba Base de Experiências 5.4 Testes Os testes, no nı́vel do sistema, são definidos de acordo com os casos de uso. O planejamento e execução dos testes está esquematizado na tabela da 5.1, que define o caso de uso a ser testado, pré e pós condições, o procedimento usado e o status da execução. 64 Figura 5.12: Tela de visualização da ata Com base nos testes executados, verifica-se que as funcionalidades estão de acordo com o esperado. 65 Tabela 5.1: Tabela de execução dos testes 66 6 Avaliação Este capı́tulo apresenta uma avaliação inicial do módulo desenvolvido, com o objetivo de: 1. Avaliar a utilidade e usabilidade do módulo desenvolvido 2. Avaliar o alinhamento ao PMBOK atingido Para realizar a avaliação os objetivos acima listados, respectivamente, são executados avaliação por painel de especialistas, definido na seção 6.1 e avaliação do alinhamento ao PMBOK atingido, definido na seção 6.2. 6.1 Avaliação por painel de especialistas Para a avaliação do módulo, foi adotado o método GQM (Goal/Question/Metric) (BASILI; CALDIERA; ROMBACH, 1994). Este método de medição de software é basicamente dividido em 6 passos: 1. Identificar objetivos 2. Formular questões que abrangem os objetivos identificados 3. Especificar métricas para coletar respostas para as perguntas formuladas 4. Desenvolver mecanismos de coleta de dados 5. Coletar e validar os dados 6. Analisar os dados, a ponto de identificar pontos fortes e fracos Com base nesse método, descrevemos a realização da avaliação a seguir. 67 Identificar objetivos Os objetivos identificados para a avaliação deste trabalho foram: • Objetivo 1: Analisar a utilidade e usabilidade do módulo desenvolvido no encerramento de projetos • Objetivo 2: Identificar os pontos fortes e fracos da solução proposta Formular questões A partir dos objetivos identificados, são derivadas as seguintes questões de medição: 1.1 O módulo é útil para encerrar os projetos da empresa? 1.2 O módulo é útil para documentar as reuniões de pós-morte do projeto? 1.3 O módulo é útil para gerenciar lições aprendidas durante os projetos? 1.4 O módulo é útil para identificar pontos fortes e fracos da empresa, através das lições aprendidas? 1.5 O módulo é de fácil manipulação e conteúdo intuitivo? 2.1 Quais foram os principais pontos fortes que você observou? 2.2 Quais foram as principais melhorias que você sugere? Especificar métricas Para responder as questões de 1 a 5, é adotada uma escala de likert de 5 pontos, de 1 (Discordo totalmente) até 5 (Concordo totalmente). Já para as questões de 6 a 8, é definido um campo textual aberto. Desenvolver mecanismos de coleta de dados Foi criado um formulário na ferramenta Google forms, conforme as métricas definidas acima. O formulário está presente no apendice B. Coletar e validar os dados Fizeram parte do painel de especialistas: gerentes e assistentes de gerência de pequenas empresas de software e gerentes de projeto de uma organização de 68 pesquisa em Florianópolis/SC. Por restrições de tempo, os participantes foram escolhidos pela proximidade. De 6 especialistas convidados, 4 realizaram a avaliação, que foi anônima e voluntária, e aconteceu no mês de abril do ano 2012. A avaliação ocorreu após a simulação de uso do novo módulo, de acordo com um roteiro definido (presente no apêndice C). Análise dos dados As respostas obtidas foram analisadas item a item, a fim de identificar pontos fortes e fracos da solução proposta. Questão 1.1 - O módulo é útil para encerrar os projetos da empresa? A figura 6.1, mostra que a maioria dos avaliadores considerou útil o módulo para encerrar os projetos. Figura 6.1: Gráfico da avaliação da questão 1.1 Questão 1.2 - O módulo é útil para documentar as reuniões de pós-morte do projeto? A figura 6.2, mostra que a maioria dos avaliadores considerou útil as funcionalidades de criação/edição/deleção de atas de pós-morte. Os comentários mostraram que melhorias no formato da ata foram identificadas, assim como cálculo e preenchimento automático de alguns campos da ata. Figura 6.2: Gráfico da avaliação da questão 1.2 69 Questão 1.3 - O módulo é útil para gerenciar lições aprendidas durante os projetos? A figura 6.3 demonstra a avaliação de gerência de lições aprendidas. Este item teve uma avaliação menos positiva, fato compreensı́vel uma vez que a base de experiências implementada é apenas uma base simples, que serve de fundação para desenvolvimento de mais funcionalidades. Sendo assim, pode-se considerar que o item teve uma avaliação positiva, com sugestões interessantes de funcionalidades para a base de experiências. Figura 6.3: Gráfico da avaliação da questão 1.3 Questão 1.4 - O módulo é útil para identificar pontos fortes e fracos da empresa, através das lições aprendidas? A figura 6.4 reflete um pouco do item discutido acima. Porém, este item teve uma avaliação mais positiva, dado que a ata de pós morte permite o registro e persistências dos pontos fortes e fracos identificados nas reuniões. Uma sugestão interessante foi a de categorizar as lições, para facilitar a consulta. Figura 6.4: Gráfico da avaliação da questão 1.4 Questão 1.5 - O módulo é de fácil manipulação e conteúdo intuitivo? A avaliação de usabilidade foi positiva, tendo apenas uma avaliação menos positiva. Foi destacado a boa integração com a interface, consistência e simplicidade. Em outra mão, foram sugeridas melhorias como prover uma forma de visualização da 70 ata onde possam ser visualizado mais do seu conteúdo, campos de preenchimentos maiores, entre outros. Figura 6.5: Gráfico da avaliação da questão 1.5 Questão 2.1 - Quais foram os principais pontos fortes que você observou? Neste item foi percebido que, o ponto forte do módulo está no registro/edição/deleção das atas. Também, foi destacada a utilidade real em projetos, simplicidade e boa integração com a interface e funcionalidade relevante e não existente na ferramenta. Questão 2.2 - Quais foram as principais melhorias que você sugere? As principais melhorias foram no formato de visualização da ata, cálculo e preenchimento automático de campos, envio da ata por e-mail, aprovação dos participantes na parte das atas de pós-morte. Foi citado também que seria interessante um aceite formal do encerramento do projeto, por parte do cliente. Já na parte de lições aprendidas, foram sugeridas, principalmente, a categorização de lições e a coleta da informações das atas e, com a manipulação destes dados, criar uma base de experiência mais complexa e completa. 6.2 Avaliação em relação ao alinhamento ao PMBOK A fim de avaliar se o módulo desenvolvido está alinhado com as boas práticas recomendadas pelo PMBOK para o encerramento de projetos, é realizada uma avaliação. Esta avaliação segue o mesmo procedimento adotado na revisão do estado da arte, conforme descrito no capı́tulo 3. 71 6.2.1 Execução Foi refeita a avaliação de atendimento aos suportes definidos no capı́tulo 3, a fim de avaliar se a ferramenta, com o módulo desenvolvido, caracteriza melhor o suporte ao grupo de processo de encerramento de projetos. A avaliação foi realizada pela autora do trabalho, em abril de 2012, após a execução dos testes. 6.2.2 Análise O resultado da avaliação dos módulos desenvolvido em relação ao alinhamento ao PMBOK é apresentado na tabela 6.1. O grau de suporte adotado está descrito na tabela 3.1 do capı́tulo 3. Tabela 6.1: Tabela de resultado da avaliação das ferramentas, atualizado com o módulo de encerramento Com essa avaliação, foi constatado que a ferramenta evoluı́da atende melhor às boas práticas definidas no PMBOK. Também, temos funcionalidades do grupo de encerramento de projetos, construı́das para este fim, não necessitando a adaptação de utilidades existentes para simular uma funcionalidade. 6.3 Discussão A partir das avaliações por painel de especialistas e avaliação em relação ao alinhamento ao PMBOK, pode-se perceber que o módulo desenvolvido teve boa aceitação 72 e adequação para implementação do grupo de processo de encerramento de projetos. Porém, a avaliação apresenta ameaças de validade, pois o projeto usado de exemplo foi um projeto fictı́cio sem continuidade e foi realizado envolvendo poucos especialistas e de proximidade com a autora do trabalho. Dessa maneira, a generalização dos resultados está limitada e outras avaliações com outros projetos, outros tipos de empresas e mais especialistas, precisam ser realizadas a fim de generalizar os resultados obtidos neste trabalho. Como meio de minimizar a ameaça à validade construtiva dos resultados das avaliações, foi utilizado o método GQM, que permite realizar a análise de forma sistemática. Sendo assim, o objetivo das avaliações realizadas não é ser uma avaliação nem subjetiva nem completa, mas sim apresentar primeiros indı́cios de que a evolução da ferramenta pode ser relevante e útil. 73 7 Conclusão Neste trabalho foi desenvolvida a análise da teoria referente à gerenciamento de projetos, com foco no encerramento de projetos. Foi analisado o estado da arte das ferramentas open source de gerenciamento de projetos, em relação ao suporte ao grupo de processo de encerramento de projetos. Foram comparadas as cinco ferramentas mais usadas, e escolhida uma ferramenta, na qual foi desenvolvida este trabalho. Partindo da fundamentação teórica e da análise do estado da arte foi modelado um processo genérico de encerramento de projetos, guiado pelo PMBOK, para utilização em MPEs. A partir deste modelo, foram analisados os requisitos, projetado, implementado e testado o módulo na ferramenta dotProject. Uma vez desenvolvido o módulo, foi definida e realizada uma avaliação com um painel de especialistas, a fim de validar o uso prático do trabalho desenvolvido e estudar o alinhamento ao PMBOK atingido. Com esse novo módulo, espera-se facilitar e viabilizar a implantação sistemática de encerramento de projetos aliada à gerência de lições aprendidas. Com isso, esperase que as experiências tenham usufruto máximo na aprendizagem contı́nua das micro e pequenas empresas brasileiras. Além disso, procura-se prover uma ferramenta que maximize os grupos de processos para um gerenciamento de projetos mais completo e eficaz. Para trabalhos futuros, com base nas sugestões de melhoria identificadas pela avaliação, podem-se citar no quesito da Fábrica de Experiências: o aperfeiçoamento da base de experiências (utilizando técnicas de manipulação de dados, para classificar projetos e analisar dados automaticamente), evolução da Fábrica atrelada a gerência de reutilização, a categorização de lições aprendidas. No quesito das atas de pósmortem, sugere-se a geração de relatórios personalizados (para acompanhamento dos projetos), o aceite formal do cliente (do encerramento do projeto), a aprovação da ata por parte de todos os participantes da reunião e o envio da ata por e-mail para 74 todos os participantes. 75 Referências Bibliográficas ABES. Associação Brasileira das Empresas de Software. 2011. Disponı́vel em: <http://www.abes.org.br/>. ANACLETO, A. et al. 15504mpe- desenvolvendo um método para avaliação de processos de software em mpes utilizando a iso/iec 15504. 2003. BASILI, V. R.; CALDIERA, G.; ROMBACH, H. D. The experience factory. 1994. BIRK, A.; DINGSOYR, T.; STALHANE, T. Post-mortem: Never leave a project without it. 2005. BOSTON POSTMORTEM. Boston Postmortem. 2011. Disponı́vel em: <http://www.bostonpostmortem.org/>. CEZARINO, L.; C., C. M. Micro e pequenas empresas: caracterı́sticas estruturais e gerenciais. 2005. DEMING, W. E. Out of the Crisis. [S.l.]: The MIT Press, 1986. . Upper Saddle River, NJ, DIJKSTRA, E. The humble programmer. In: USA: Yourdon Press, 1979. p. 111–125. ISBN 0-917072-14-6. Disponı́vel em: <http://dl.acm.org/citation.cfm?id=1241515% -.1241525>. DINGSOYR, T.; STALHANE, T.; MOE, N. B. Lightweight post mortem reviews. 2003. DOTPROJECT. dotProject - Project Management Software. 2011. Disponı́vel em: <http://www.dotproject.net/>. DOTPROJECT. dotProject Wiki. 2011. Disponı́vel em: <http://docs.dotproject.net/index.php?title=Main Page>. FURTADO, A. Pontas de iceberg do caos no desenvolvimento de software. 2011. Disponı́vel em: <http://www.microsoft.com/brasil/msdn/Tecnologias/Carreira/DesenvolvimentoSoftware.mspx>. GAMASUTRA. Gamasutra - The Art & Business of Making Games. 2011. Disponı́vel em: <http://www.gamasutra.com/>. GNU. GNU General Public License. 2011. Disponı́vel em: <http://www.gnu.org/copyleft/gpl.html>. MYLLYAHO1, M. et al. A review of small and large post-mortem analysis methods. 2004. 76 PEREIRA, A. M.; GONçALVES, R. Q.; WANGENHEIM, C. G. von. Comparação de ferramentas open source para gerência de projetos. 2011. PHPCOLLAB. PhpCollab. 2011. Disponı́vel em: <http://www.phpcollab.com/blog/>. PMI. A guide to the project management body of knowlegde - (PMBOK Guide). 4. ed. [S.l.]: Project Management Institute Inc, 2008. ISBN 978-1-933890-51-7. PROJECT.NET. Easy-to-Use Personal Dashboards. 2011. Disponı́vel em: <http://www.project.net/personal dashboard>. PROJECT.NET. Project Time Tracking Made Easy. 2011. Disponı́vel em: <http://www.project.net/time submittal reports>. PROJECT.NET. Project.net. 2011. Disponı́vel em: <http://www.project.net/>. RICHARDSON, I.; WANGENHEIM, C. G. von. Why are small software organizations different? 2007. Disponı́vel em: <http://www.computer.org/portal/web/csdl% -/doi/10.1109/MS.2007.12>. SAN FRANCISCO POSTMORTEM. San Francisco Postmortem. 2011. Disponı́vel em: <http://www.unknownworlds.com/postmortem>. SEBRAE. Serviço Brasileiro de Apoio às Micro e Pequenas Empresas. 2011. Disponı́vel em: <http://www.sebrae.com.br/>. SOFTEX. Mercado nacional de software cresce 21,3% em 2010. 2011. Disponı́vel em: <http://www.softex.br/ mercado/mercado.asp?id=3630>. SOURCEFORGE. dotProject. 2011. Disponı́vel em: <http://sourceforge.net/projects/dotproject/files/dotproject/stats/map?dates=2001-02-27+to+2011-10-21>. SOURCEFORGE. SourceForge. 2011. Disponı́vel em: <http://sourceforge.net>. STREBER. Streber. 2011. Disponı́vel em: <http://www.streber-pm.org/>. THIRY, M. et al. Uma abordagem para a modelagem colaborativa de processos de software em micro e pequenas empresas. 2006. TRACK+. Track+. 2011. Disponı́vel em: <http://www.trackplus.com/>. 77 APÊNDICE A -- Código-fonte do módulo desenvolvido 78 addedit.php 1 <?php / ∗ PROJECTS $ I d : a d d e d i t . php 5433 2007−10−17 1 5 : 0 2 : 4 6Z g r e g o r e r h a r d t $ ∗/ ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { if d i e ( ’ You should n o t access t h i s f i l e 3 directly ’ ) ; } 5 $pma id = dPgetParam ( $ GET , ’ pma id ’ , 0 ) ; 7 $project name = dPgetParam ( $ GET , 9 $project name = ’ ” ’ . $project name . ’ ” ’ ; 11 ’ project name ’ , 0) ; $perms =& $AppUI−>a c l ( ) ; / / check p e r m i s s i o n s f o r t h i s r e c o r d 13 $ c a n E d i t = $perms−>checkModuleItem ($m, ’ e d i t ’ , $pma id ) ; $canAuthor = $perms−>checkModuleItem ($m, 15 ( ( ! $ c a n E d i t && $pma id > 0 ) | | if ’ add ’ ) ; ( ! $canAuthor && $pma id == 0 ) ) { $AppUI−>r e d i r e c t ( ’m= p u b l i c &a= access denied ’ ) ; 17 } 19 / / l o a d t h e r e c o r d data $row = new CClosure ( ) ; 21 i f ( $pma id > 0 && ! $row−>l o a d ( $pma id ) ) { $AppUI−>setMsg ( ’ Post Mortem ’ ) ; 23 $AppUI−>setMsg ( ’ i n v a l i d I D ’ , UI MSG ERROR , t r u e ) ; 25 // $AppUI−>r e d i r e c t ( ) ; } 27 i f ( $pma id == 0 ) { 29 $q = new DBQuery ; $q−>addTable ( ’ p r o j e c t s ’ ) ; 31 $q−>addQuery ( ’ p r o j e c t t a r g e t b u d g e t , p r o j e c t s t a r t d a t e , p r o j e c t e n d d a t e , project name ’ ) ; $q−>addWhere ( ’ p r o j e c t n a m e = ’ . $project name ) ; 33 $res =& $q−>exec ( ) ; 35 $row−>planned budget = $res−>f i e l d s [ ’ p r o j e c t t a r g e t b u d g e t ’ ] ; $row−>p r o j e c t p l a n n e d s t a r t d a t e = $res−>f i e l d s [ ’ p r o j e c t s t a r t d a t e ’ ] ; 37 $row−>p r o j e c t p l a n n e d e n d d a t e = $res−>f i e l d s [ ’ p r o j e c t e n d d a t e ’ ] ; $row−>p r o j e c t n a m e = $res−>f i e l d s [ ’ p r o j e c t n a m e ’ ] ; 39 $ s t a r t d a t e = new CDate ( $row−>p r o j e c t p l a n n e d s t a r t d a t e ) ; 79 41 $end date = i n t v a l ( $row−>p r o j e c t p l a n n e d e n d d a t e ) ? new CDate ( $row−> project planned end date ) : n u l l ; 43 $meeting date = n u l l ; 45 $actual start date = null ; 47 $actual end date = null ; 49 echo $res−>f i e l d s [ ’ p r o j e c t s t a r t d a t e ’ ] ; 51 } else { 53 / / f o r m a t dates $ d f = $AppUI−>g e t P r e f ( ’SHDATEFORMAT ’ ) ; 55 $ s t a r t d a t e = new CDate ( $row−>p r o j e c t p l a n n e d s t a r t d a t e ) ; 57 $end date = i n t v a l ( $row−>p r o j e c t p l a n n e d e n d d a t e ) ? new CDate ( $row−> project planned end date ) : n u l l ; 59 $meeting date = i n t v a l ( $row−>p r o j e c t m e e t i n g d a t e ) ? new CDate ( $row−> project meeting date ) : null ; 61 $ a c t u a l s t a r t d a t e = i n t v a l ( $row−>p r o j e c t s t a r t d a t e ) ? new CDate ( $row−> project start date ) : null ; 63 $ a c t u a l e n d d a t e = i n t v a l ( $row−>p r o j e c t e n d d a t e ) ? new CDate ( $row−> project end date ) : null ; 65 $ p a r t i c i p a n t s = $row−>p a r t i c i p a n t s ; 67 } 69 / / setup t h e t i t l e b l o c k $ t t l = $pma id > 0 ? ’ E d i t Post Mortem ’ : ’New Post Mortem ’ ; 71 $ t i t l e B l o c k = new C T i t l e B l o c k ( $ t t l , 73 ’ c l o s e d . png ’ , $m, ”$m. $a ” ) ; $ t i t l e B l o c k −>addCrumb ( ’ ?m= c l o s u r e ’ , ’ p o s t mortem l i s t ’ ) ; i f ( $pma id ! = 0 ) { $ t i t l e B l o c k −>addCrumb ( ’ ?m= c l o s u r e& ; a=view& ; pma id= ’ . $pma id , 75 t h i s p o s t mortem ’ ) ; } 77 $ t i t l e B l o c k −>show ( ) ; ’ view 80 79 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ D i s p l a y ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ / r e q u i r e o n c e ( DP BASE DIR . ’ / c l a s s e s / CustomFields . c l a s s . php ’ ) ; $ c u s t o m f i e l d s = New CustomFields ( $m, $a , $row−>pma id , 81 $q 83 ’ edit ’ ) ; = new DBQuery ; $q−>addTable ( ’ p r o j e c t s ’ ) ; $q−>addQuery ( ’ p r o j e c t n a m e ’ ) ; 85 $p = $q−>l o a d L i s t ( ) ; $projects = array ( ) ; 87 $i = 0; f o r e a c h ( $p as $ p r o j e c t ) { 89 $ p r o j e c t s [ $ p r o j e c t [ ’ project name ’ ] ] = $ p r o j e c t [ ’ project name ’ ] ; 91 } 93 $q = new DBQuery ; $q−>addTable ( ’ c o n t a c t s ’ ) ; $q−>addQuery ( ’ c o n t a c t f i r s t n a m e , c o n t a c t l a s t n a m e ’ ) ; 95 $res =& $q−>exec ( ) ; 97 $pieces = explode ( ” , ” , $ p a r t i c i p a n t s ) ; 99 ?> <form name= ” e d i t F r m ” a c t i o n = ” ?m= c l o s u r e ” method= ” p o s t ”> 101 <i n p u t t y p e = ” hidden ” name= ” d o s q l ” v a l u e = ” d o c l o s u r e a e d ” /> <i n p u t t y p e = ” hidden ” name= ” pma id ” v a l u e = ”<?php echo dPformSafe ( $pma id ) ;?> ” /> 103 105 <p a l i g n = ’ c e n t e r ’ s t y l e = ” c o l o r : #000066; f o n t −s i z e : 12 p t ”><?php echo $AppUI −> ( ’ Meeting S e t t i n g s ’ ) ?></p> 107 <t a b l e a l i g n = l e f t w i d t h = ’100% ’ b o r d e r = ’ 0 ’ c e l l p a d d i n g = ’ 2 ’ c e l l s p a c i n g = ’ 1 ’ c l a s s = ’ s t d ’> <t r > <t d a l i g n = ’ l e f t ’>Meeting P a r t i c i p a n t s </ td ></ t r > 109 <t r > 111 <t d a l i g n = ’ l e f t ’ w i d t h = ’5% ’> <s e l e c t m u l t i p l e s i z e = ” 10 ” name= ” l i s t 1 ” s t y l e = ” w i d t h :150 ”> 113 <?php 115 $i = 0; f o r ( $res ; ! $res−>EOF; $res−>MoveNext ( ) ) { 81 $ c o n t a c t f i r s t n a m e = $res−>f i e l d s [ ’ c o n t a c t f i r s t n a m e ’ ] ; 117 i f ( a r r a y s e a r c h ( $ c o n t a c t f i r s t n a m e , $pieces ) === f a l s e ) { 119 ?> <o p t i o n v a l u e = <?php echo $ i ;?> > <?php echo $ c o n t a c t f i r s t n a m e ; ?> 121 </ o p t i o n > 123 <?php $ i ++; } 125 } 127 ?> </ s e l e c t > 129 </ td> <t d a l i g n = ’ l e f t ’> 131 <i n p u t t y p e = ” b u t t o n ” o n C l i c k = ” move ( t h i s . form . l i s t 2 , t h i s . form . l i s t 1 ) ” v a l u e = ”<<” /> <i n p u t t y p e = ” b u t t o n ” o n C l i c k = ” move ( t h i s . form . l i s t 1 , t h i s . form . l i s t 2 ) ” v a l u e = ”>>” /> 133 <s e l e c t m u l t i p l e s i z e = ” 10 ” v a l i g n = ” l e f t ” name= ” l i s t 2 ” s t y l e = ” w i d t h :150 ”> 135 <?php $p2 = ” ” ; 137 $ l i m i t = count ( $pieces ) ; 139 $i = 0; i f ( $ l i m i t > 1) { 141 f o r ( $ i = 0 ; $ i < $ l i m i t ; $ i ++) { $p2 143 = $p2 . $pieces [ $ i ] ; ?> <o p t i o n v a l u e = <?php echo $ i ;?> > <?php echo $pieces [ $ i ] ; ?> 145 </ o p t i o n > 147 <?php } 149 } else { i f ( $participants ){ ?> 151 <o p t i o n v a l u e = <?php echo $ i ;?> > <?php echo $ p a r t i c i p a n t s ; ?> 153 </ o p t i o n > <?php 155 } 157 } 82 ?> 159 </ s e l e c t > </ td> 161 163 </ t r > <t r > <t d a l i g n = ” l e f t ” ><?php echo $AppUI−> ( ’ Meeting Date ’ ) ?></td> <t d a l i g n = ” l e f t ” > 165 <i n p u t t y p e = ” hidden ” name= ” p r o j e c t m e e t i n g d a t e ” i d = ” p r o j e c t m e e t i n g d a t e ” v a l u e = ”<?php 167 echo ( ( $meeting date ) ? $meeting date−>f o r m a t ( FMT TIMESTAMP DATE ) : ’ ’) ; ?>” /> <!−− f o r m a t ( FMT TIMESTAMP DATE ) −−> <i n p u t t y p e = ” t e x t ” c l a s s = ” t e x t ” name= ” m e e t i n g d a t e ” i d = ” date0 ” 169 v a l u e = ”<?php echo ( ( $meeting date ) ? $meeting date−>f o r m a t ( $ d f ) : ’ ’ ) ; ?>” d i s a b l e d = ” d i s a b l e d ” /> 171 <a h r e f = ” # ” o n c l i c k = ” popCalendar ( ’ m e e t i n g d a t e ’ , ’ m e e t i n g d a t e ’ ) ; ” > <img s r c = ” . / images / c a l e n d a r . g i f ” w i d t h = ” 24 ” h e i g h t = ” 12 ” a l t = ” { 173 d P t r a n s l a t e word = ’ Calendar ’ } ” b o r d e r = ” 0 ” /> </a> </ td> 175 </ t r > 177 179 </ t a b l e > <p a l i g n = ’ c e n t e r ’ s t y l e = ” c o l o r : #000066; f o n t −s i z e : 12 p t ”><?php echo $AppUI −> ( ’ P r o j e c t Summary ’ ) ?></p> 181 <t a b l e a l i g n = l e f t w i d t h = ’100% ’ b o r d e r = ’ 0 ’ c e l l p a d d i n g = ’ 2 ’ c e l l s p a c i n g = ’ 1 ’ c l a s s = ’ s t d ’> <t d a l i g n = ’ r i g h t ’><?php echo $AppUI−> ( ’ P r o j e c t Name ’ ) ?></td> 183 <t d nowrap= ” nowrap ”> 185 <?php echo a r r a y S e l e c t ( $ p r o j e c t s , ’ p r o j e c t n a m e ’ , ’ s i z e = ” 1 ” c l a s s =” t e x t ” ’ , $row−> project name , t r u e ) ; ?> 187 189 191 </ td> <t r > <t d a l i g n = ” r i g h t ” nowrap= ” nowrap ”><?php echo $AppUI−> ( ’ P r o j e c t 83 Planned S t a r t Date ’ ) ?></td> <t d nowrap= ” nowrap ”> <i n p u t t y p e = ” hidden ” name= ” p r o j e c t p l a n n e d s t a r t d a t e ” i d = ” 193 p r o j e c t p l a n n e d s t a r t d a t e ” v a l u e = ”<?php echo ( ( $ s t a r t d a t e ) ? $ s t a r t d a t e −>f o r m a t ( FMT TIMESTAMP DATE ) : ’ ’ ) ; ?>” /> 195 <!−− f o r m a t ( FMT TIMESTAMP DATE ) −−> <i n p u t t y p e = ” t e x t ” c l a s s = ” t e x t ” name= ” p l a n n e d s t a r t d a t e ” i d = ” date1 ” v a l u e = ”<?php 197 echo ( ( $ s t a r t d a t e ) ? $ s t a r t d a t e −>f o r m a t ( $ d f ) : ’ ’ ) ; ?> ” d i s a b l e d = ” d i s a b l e d ” /> 199 <a h r e f = ” # ” o n c l i c k = ” popCalendar ( ’ p l a n n e d s t a r t d a t e ’ , ’ p l a n n e d s t a r t d a t e ’ ) ; ”> <img s r c = ” . / images / c a l e n d a r . g i f ” w i d t h = ” 24 ” h e i g h t = ” 12 ” a l t = ” { d P t r a n s l a t e word = ’ Calendar ’ } ” b o r d e r = ” 0 ” /> 201 </a> </ td> 203 <t d a l i g n = ” r i g h t ” nowrap= ” nowrap ”><?php echo $AppUI−> ( ’ P r o j e c t S t a r t Date ’ ) ?></td> 205 <t d nowrap= ” nowrap ”> <i n p u t t y p e = ” hidden ” name= ” p r o j e c t s t a r t d a t e ” i d = ” p r o j e c t s t a r t d a t e ” v a l u e = ”<?php 207 echo ( ( $ a c t u a l s t a r t d a t e ) ? $ a c t u a l s t a r t d a t e −>f o r m a t ( FMT TIMESTAMP DATE ) : ’ ’ ) ; ?> ” /> <!−− f o r m a t ( FMT TIMESTAMP DATE ) −−> 209 <i n p u t t y p e = ” t e x t ” c l a s s = ” t e x t ” name= ” s t a r t d a t e ” i d = ” date2 ” v a l u e = ”<?php echo ( ( $ a c t u a l s t a r t d a t e ) ? $ a c t u a l s t a r t d a t e −>f o r m a t ( $ d f ) : ’ ’ ) ;?> ” d i s a b l e d = ” d i s a b l e d ” /> 211 <a h r e f = ” # ” o n c l i c k = ” popCalendar ( ’ s t a r t d a t e ’ , ’ s t a r t d a t e ’ ) ; ”> <img s r c = ” . / images / c a l e n d a r . g i f ” w i d t h = ” 24 ” h e i g h t = ” 12 ” a l t = ” { d P t r a n s l a t e word = ’ Calendar ’ } ” b o r d e r = ” 0 ” /> 213 </a> </ td> 215 </ t r > 217 <t r > 219 <t d a l i g n = ” r i g h t ” nowrap= ” nowrap ”><?php echo $AppUI−> ( ’ P r o j e c t Planned End Date ’ ) ?></td> 84 <t d nowrap= ” nowrap ”> 221 <i n p u t t y p e = ” hidden ” name= ” p r o j e c t p l a n n e d e n d d a t e ” i d = ” p r o j e c t p l a n n e d e n d d a t e ” v a l u e = ”<?php 223 echo ( ( $end date ) ? $end date−>f o r m a t ( FMT TIMESTAMP DATE ) : ’ ’ ) ; ?> ” /> <!−− f o r m a t ( FMT TIMESTAMP DATE ) −−> <i n p u t t y p e = ” t e x t ” c l a s s = ” t e x t ” name= ” p l a n n e d e n d d a t e ” i d = ” date3 ” 225 v a l u e = ”<?php echo ( ( $end date ) ? $end date−>f o r m a t ( $ d f ) : ’ ’ ) ; ?>” d i s a b l e d = ” d i s a b l e d ” /> 227 <a h r e f = ” # ” o n c l i c k = ” popCalendar ( ’ p l a n n e d e n d d a t e ’ , ’ p l a n n e d e n d d a t e ’ ) ; ”> <img s r c = ” . / images / c a l e n d a r . g i f ” w i d t h = ” 24 ” h e i g h t = ” 12 ” a l t = ” { 229 d P t r a n s l a t e word = ’ Calendar ’ } ” b o r d e r = ” 0 ” /> </a> </ td> 231 233 <t d a l i g n = ” r i g h t ” nowrap= ” nowrap ”><?php echo $AppUI−> ( ’ P r o j e c t End Date ’ ) ;?></ td> <t d nowrap= ” nowrap ”> <i n p u t t y p e = ” hidden ” name= ” p r o j e c t e n d d a t e ” i d = ” p r o j e c t e n d d a t e ” 235 v a l u e = ”<?php echo ( ( $ a c t u a l e n d d a t e ) ? $ a c t u a l e n d d a t e −>f o r m a t ( FMT TIMESTAMP DATE ) : ’ ’ ) ; ?>” /> <!−− f o r m a t ( FMT TIMESTAMP DATE ) −−> 237 <i n p u t t y p e = ” t e x t ” c l a s s = ” t e x t ” name= ” end date ” i d = ” date4 ” v a l u e = ” <?php 239 echo ( ( $ a c t u a l e n d d a t e ) ? $ a c t u a l e n d d a t e −>f o r m a t ( $ d f ) : ’ ’ ) ;?> ” d i s a b l e d = ” d i s a b l e d ” /> <a h r e f = ” # ” o n c l i c k = ” popCalendar ( ’ end date ’ , ’ end date ’ ) ; ”> 241 <img s r c = ” . / images / c a l e n d a r . g i f ” w i d t h = ” 24 ” h e i g h t = ” 12 ” a l t = ” { d P t r a n s l a t e word = ’ Calendar ’ } ” b o r d e r = ” 0 ” /> </a> 243 </ td> 245 </ t r > 247 <t r > 249 <t d a l i g n = ’ r i g h t ’><?php echo $AppUI−> ( ’ P r o j e c t Planned Budget ’ ) ;?></ td> <td><i n p u t name= ’ planned budget ’ v a l u e = ”<?php echo dPformSafe ( $row−> planned budget ) ; ?>” /></ td> 251 <t d a l i g n = ’ r i g h t ’><?php echo $AppUI−> ( ’ P r o j e c t Budget ’ ) ;?></ td> 85 <td><i n p u t name= ’ budget ’ v a l u e = ”<?php echo dPformSafe ( $row−> planned budget ) ; ?>” /></ td> 253 </ t r > 255 </ t a b l e > 257 <p a l i g n = ’ c e n t e r ’ s t y l e = ” c o l o r : #000066; f o n t −s i z e : 12 p t ”><?php echo $AppUI−> ( ’ Lessons Learned ’ ) ;?></p> <t a b l e c e l l s p a c i n g = ” 1 ” c e l l p a d d i n g = ” 1 ” b o r d e r = ” 0 ” w i d t h = ” 100% ” c l a s s = ” s t d ”> 259 <t r ><t d a l i g n = ’ r i g h t ’><?php echo $AppUI−> ( ’ P r o j e c t S t r e n g t h s ’ ) ?></td> <td><t e x t a r e a name= ’ p r o j e c t s t r e n g t h ’ c o l s =80 rows=8 ><?php echo dPformSafe ( $row−>p r o j e c t s t r e n g t h ) ; ?></ t e x t a r e a > 261 L i s t here ( each t o p i c w i t h ’ ∗ ’ ) t e c h n o l o g i e s , processes , IDEs o r whatever t e c n i q u e s , t o o l s o r s e r v i c e s t h a t worked o u t f o r you i n t h i s project </ td> 263 <t r ><t d a l i g n = ’ r i g h t ’><?php echo $AppUI−> ( ’ P r o j e c t Weaknesses ’ ) ;?></ td > <td><t e x t a r e a name= ’ p r o j e c t w e a k n e s s e s ’ c o l s =80 rows=8 ><?php echo dPformSafe ( $row−>weaknesses ) ; ?></ t e x t a r e a > 265 L i s t here ( each t o p i c w i t h ’ ∗ ’ ) t e c h n o l o g i e s , processes , IDEs o r whatever t e c n i q u e s , t o o l s o r s e r v i c e s t h a t d i d n o t worked o u t f o r you in this project <t r ><t d a l i g n = ’ r i g h t ’><?php echo $AppUI−> ( ’ Improvement Suggestions ’ ) ;?></ td> 267 <td><t e x t a r e a name= ’ improvement suggestions ’ c o l s =80 rows=8 ><?php echo dPformSafe ( $row−>improvement suggestions ) ; ?></ t e x t a r e a > L i s t here ( each t o p i c w i t h ’ ∗ ’ ) t h e aspects o f t h e p r o j e c t t h a t need t o be improved 269 <t r ><t d a l i g n = ’ r i g h t ’><?php echo $AppUI−> ( ’ Conclusions ’ ) ;?></ td> <td><t e x t a r e a name= ’ c o n c l u s i o n s ’ c o l s =80 rows=8 ><?php echo dPformSafe ( $row−>c o n c l u s i o n s ) ; ?></ t e x t a r e a > 271 General c o n c l u s i o n s about t h e p r o j e c t 273 </ td> </ t r > 275 <i n p u t t y p e = ” hidden ” name= ’ p a r t i c i p a n t s ’ i d = ’ p a r t i c i p a n t s ’ v a l u e = ”<?php echo dPformSafe ( $row−>p a r t i c i p a n t s ) ; ?> ”> </ i n p u t > </ t a b l e > 277 279 <t a b l e c e l l s p a c i n g = ” 1 ” c e l l p a d d i n g = ” 1 ” b o r d e r = ” 0 ” w i d t h = ” 100% ”> 86 281 <t r > <td> <i n p u t t y p e = ” b u t t o n ” v a l u e = ”<?php echo $AppUI−> ( ’ back ’ ) ;?> ” 283 c l a s s = ” b u t t o n ” o n c l i c k = ” j a v a s c r i p t : h i s t o r y . back ( −1) ; ” /> </ td> 285 <t d a l i g n = ” r i g h t ”> <i n p u t t y p e = ” b u t t o n ” v a l u e = ”<?php echo $AppUI−> ( ’ submit ’ ) ;?> ” 287 c l a s s = ” b u t t o n ” o n c l i c k = ” move ( e d i t F r m . l i s t 1 , e d i t F r m . l i s t 2 ) ; s u b m i t I t H e r e ( ) ; ” /> </ td> 289 291 </ t r > </ t a b l e > 293 </ form> 295 <!−− i m p o r t t h e c a l e n d a r s c r i p t −−> < s c r i p t t y p e = ” t e x t / j a v a s c r i p t ” s r c = ”<?php echo DP BASE URL;? >/ l i b / c a l e n d a r / c a l e n d a r . j s ” ></ s c r i p t > 297 <!−− i m p o r t t h e language module −−> < s c r i p t t y p e = ” t e x t / j a v a s c r i p t ” s r c = ”<?php echo DP BASE URL;? >/ l i b / c a l e n d a r / l a n g / calendar −<?php echo $AppUI−>u s e r l o c a l e ; ?>. j s ” ></ s c r i p t > 299 < s c r i p t t y p e = ” t e x t / j a v a s c r i p t ” language= ” j a v a s c r i p t ”> 301 function setShort ( ) { 303 v a r f = document . e d i t F r m ; var x = 10; 305 i f ( f . p r o j e c t n a m e . v a l u e . l e n g t h < 11) { x = f . project name . value . length ; 307 } i f ( f . p r o j e c t s h o r t n a m e . v a l u e . l e n g t h == 0 ) { f . project short name . value = f . project name . value . substr (0 , x ) ; 309 } 311 } 313 var calendarField = ’ ’ ; v a r calWin = n u l l ; 315 f u n c t i o n popCalendar ( f i e l d ) { 317 calendarField = f i e l d ; i d a t e = e v a l ( ’ document . e d i t F r m . p r o j e c t ’ + f i e l d + ’ . v a l u e ’ ) ; 319 window . open ( ’ i n d e x . php?m= p u b l i c &a= c a l e n d a r& d i a l o g =1& c a l l b a c k = s e t C a l e n d a r& date= ’ + i d a t e , ’ c a l w i n ’ , ’ w i d t h =280 , h e i g h t =250 , s c r o l l b a r s =no ’ ) ; 87 } 321 /∗ ∗ 323 ∗ @param s t r i n g I n p u t date i n t h e f o r m a t YYYYMMDD ∗ @param s t r i n g Formatted date 325 ∗/ f u n c t i o n setCalendar ( idate , f dat e ) { f l d d a t e = e v a l ( ’ document . e d i t F r m . p r o j e c t ’ + c a l e n d a r F i e l d ) ; 327 f l d f d a t e = e v a l ( ’ document . e d i t F r m . ’ + c a l e n d a r F i e l d ) ; f l d d a t e . value = i d a t e ; 329 f l d f d a t e . value = fdate ; 331 / / s e t end date a u t o m a t i c a l l y w i t h s t a r t date i f s t a r t date i s a f t e r end date i f ( c a l e n d a r F i e l d == ’ s t a r t d a t e ’ ) { 333 i f ( document . e d i t F r m . end date . v a l u e < i d a t e ) { document . e d i t F r m . p r o j e c t e n d d a t e . v a l u e = i d a t e ; 335 document . e d i t F r m . end date . v a l u e = f d a t e ; } 337 } 339 } 341 function submitItHere ( ) { v a r f = document . e d i t F r m ; f . submit ( ) ; 343 } 345 347 f u n c t i o n move ( MenuOrigem , MenuDestino ) { 349 v a r arrMenuOrigem = new A r r a y ( ) ; 351 v a r arrMenuDestino = new A r r a y ( ) ; 353 v a r arrLookup = new A r r a y ( ) ; 355 var i ; 357 var s t r i n g T o P e r s i s t = ” ” ; 359 f o r ( i = 0 ; i < MenuDestino . o p t i o n s . l e n g t h ; i ++) { 361 arrLookup [ MenuDestino . o p t i o n s [ i ] . t e x t ] = MenuDestino . o p t i o n s [ i ] . 88 value ; arrMenuDestino [ i ] = MenuDestino . o p t i o n s [ i ] . t e x t ; 363 } 365 var fLength = 0; 367 v a r t L e n g t h = arrMenuDestino . l e n g t h ; 369 f o r ( i = 0 ; i < MenuOrigem . o p t i o n s . l e n g t h ; i ++) { 371 arrLookup [ MenuOrigem . o p t i o n s [ i ] . t e x t ] = MenuOrigem . o p t i o n s [ i ] . v a l u e ; 373 i f ( MenuOrigem . o p t i o n s [ i ] . s e l e c t e d && MenuOrigem . o p t i o n s [ i ] . v a l u e != ” ” ) { 375 arrMenuDestino [ t L e n g t h ] = MenuOrigem . o p t i o n s [ i ] . t e x t ; t L e n g t h ++; 377 379 } 381 else { 383 arrMenuOrigem [ f L e n g t h ] = MenuOrigem . o p t i o n s [ i ] . t e x t ; 385 f L e n g t h ++; } 387 389 } 391 arrMenuOrigem . s o r t ( ) ; 393 arrMenuDestino . s o r t ( ) ; 395 MenuOrigem . l e n g t h = 0 ; 397 MenuDestino . l e n g t h = 0 ; 399 var c ; 401 f o r ( c = 0 ; c < arrMenuOrigem . l e n g t h ; c ++) { 89 403 v a r no = new Option ( ) ; 405 no . v a l u e = arrLookup [ arrMenuOrigem [ c ] ] ; 407 no . t e x t = arrMenuOrigem [ c ] ; 409 MenuOrigem [ c ] = no ; 411 } 413 f o r ( c = 0 ; c < arrMenuDestino . l e n g t h ; c ++) { 415 v a r no = new Option ( ) ; 417 no . v a l u e = arrLookup [ arrMenuDestino [ c ] ] ; 419 no . t e x t = arrMenuDestino [ c ] ; 421 s t r i n g T o P e r s i s t += arrMenuDestino [ c ] ; 423 i f ( c ! = arrMenuDestino . l e n g t h −1) s t r i n g T o P e r s i s t += ” , ” ; 425 MenuDestino [ c ] = no ; 427 } 429 document . getElementById ( ’ p a r t i c i p a n t s ’ ) . v a l u e = s t r i n g T o P e r s i s t ; 431 } 433 </ s c r i p t > 90 closure.class.php <?php 2 ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { if d i e ( ’ You should n o t access t h i s f i l e directly ’ ) ; 4 } 6 r e q u i r e o n c e $AppUI−>getSystemClass ( ’ dp ’ ) ; r e q u i r e o n c e $AppUI−>getSystemClass ( ’ query ’ ) ; 8 c l a s s CClosure extends CDpObject { v a r $pma id = n u l l ; 10 v a r $project name = n u l l ; var $ p r o j e c t s t a r t d a t e = n u l l ; 12 var $project end date = n u l l ; var $ p r o j e c t p l a n n e d s t a r t d a t e = n u l l ; 14 var $project planned end date = n u l l ; var $project meeting date = n u l l ; 16 v a r $planned budget = 0 ; v a r $budget = 0 ; 18 var $ p a r t i c i p a n t s = n u l l ; var $ p r o j e c t s t r e n g t h = n u l l ; 20 v a r $pro ject weaknesses = n u l l ; v a r $improvement suggestions = n u l l ; 22 var $conclusions = n u l l ; 24 f u n c t i o n CClosure ( ) { p a r e n t : : CDpObject ( ’ p o s t m o r t e m a n a l y s i s ’ , ’ pma id ’ ) ; 26 } 28 f u n c t i o n load ( $oid= n u l l , $ s t r i p = t r u e ) { $ r e s u l t = p a r e n t : : l o a d ( $oid , $ s t r i p ) ; 30 i f ( $ r e s u l t && $ o i d ) { $q = new DBQuery ; 32 $q−>addTable ( ’ p o s t m o r t e m a n a l y s i s ’ , ’pma ’ ) ; $q−>addQuery ( ’ p r o j e c t n a m e ’ ) ; 34 $q−>addJoin ( ’ p r o j e c t s ’ , ’ p1 ’ , ’ p1 . p r o j e c t n a m e = pma . p r o j e c t n a m e ’ ) ; i f ( $oid != n u l l ) 36 $q−>addWhere ( ” p r o j e c t i d = $ o i d ” ) ; } 38 return $result ; 40 42 } function store ( ) { 91 $ t h i s −>d P T r i m A l l ( ) ; 44 $msg = $ t h i s −>check ( ) ; i f ( $msg ) { 46 r e t u r n g e t c l a s s ( $ t h i s ) . ” : : s t o r e −check f a i l e d − $msg ” ; 48 } 50 $ d e t a i l s [ ’ p r o j e c t n a m e ’ ] = $ t h i s −>p r o j e c t n a m e ; $ d e t a i l s [ ’ pma id ’ ] = $ t h i s −>pma id ; i f ( $ t h i s −>pma id ) { 52 $ r e t = db updateObject ( ’ p o s t m o r t e m a n a l y s i s ’ , $ t h i s , ’ pma id ’ , t r u e ); $ d e t a i l s [ ’ changes ’ ] = $ r e t ; 54 a d d H i s t o r y ( ’ p o s t m o r t e m a n a l y s i s ’ , $ t h i s −>pma id , ’ update ’ , $ d e t a i l s ) ; } 56 else { $ret = db insertObject ( ’ post mortem analysis ’ , $this , 58 a d d H i s t o r y ( ’ p o s t m o r t e m a n a l y s i s ’ , $ t h i s −>pma id , ’ pma id ’ ) ; ’ add ’ , $ d e t a i l s ) ; } 60 i f ( ! $ret ) { 62 r e t u r n g e t c l a s s ( $ t h i s ) . ” : : s t o r e f a i l e d <b r /> ” . d b e r r o r ( ) ; } 64 else { r e t u r n NULL ; 66 } 68 } 70 f u n c t i o n canDelete ( &$msg , $ o i d = n u l l ) { / / TODO: check i f user p e r m i s s i o n s are c o n s i d e r e d when d e l e t i n g a project g l o b a l $AppUI ; 72 $perms =& $AppUI−>a c l ( ) ; 74 r e t u r n $perms−>checkModuleItem ( ’ c l o s u r e ’ , ’ d e l e t e ’ , $ o i d ) ; 76 } 78 function delete ( ) { $ t h i s −>l o a d ( $ t h i s −>p r o j e c t i d ) ; 80 $ d e t a i l s [ ’ name ’ ] = $ t h i s −>p r o j e c t n a m e ; a d d H i s t o r y ( ’ p o s t m o r t e m a n a l y s i s ’ , $ t h i s −>project name , $details ) ; ’ delete ’ , 92 82 $q = new DBQuery ; $q−>s e t D e l e t e ( ’ p o s t m o r t e m a n a l y s i s ’ ) ; 84 $q−>addWhere ( ’ pma id = ’ . $ t h i s −>pma id ) ; 86 $ r e s u l t = ( ( ! $q−>exec ( ) ) ? d b e r r o r ( ) : NULL ) ; $q−>c l e a r ( ) ; 88 return $result ; } 90 92 } 94 ?> 93 companies tab.experience factory.php <?php / ∗ PROJECTS $ I d : companies tab . view . a c t i v e p r o j e c t s . php 4779 2007−02−21 1 4 : 5 3 : 2 8Z cyberhorse $ ∗ / 2 ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { if d i e ( ’ You should n o t access t h i s f i l e 4 } 6 /∗ ∗ directly ’ ) ; ∗ Companies : View A c t i v e P r o j e c t s sub−t a b l e ∗/ 8 g l o b a l $AppUI , $company id , $ p s t a t u s , $m; 10 $ p s t a t u s = dPgetSysVal ( ’ P r o j e c t S t a t u s ’ ) ; 12 i f ( $ s o r t == ’ p r o j e c t p r i o r i t y ’ ) { $ s o r t . = ’ DESC ’ ; 14 } 16 $ d f = $AppUI−>g e t P r e f ( ’SHDATEFORMAT ’ ) ; 18 $page = i s s e t ($ REQUEST [ ’ page ’ ] ) ?$ REQUEST [ ’ page ’ ] : 1 ; 20 $q = new DBQuery ; $q−>addTable ( ’ p o s t m o r t e m a n a l y s i s ’ , ’pma ’ ) ; 22 $q−>addQuery ( ’ d i s t i n c t pma . project name , p r o j e c t i d , pma id , p r o j e c t s t a t u s , pma . p r o j e c t s t a r t d a t e , pma . p r o j e c t e n d d a t e , p r o j e c t m e e t i n g d a t e ’ ) ; 24 $q−>addJoin ( ’ p r o j e c t s ’ , ’ p ’ , ’ p . p r o j e c t n a m e = pma . p r o j e c t n a m e ’ ) ; $q−>addWhere ( ’ p . project company = ’ . $company id ) ; 26 $q−>addOrder ( $ s o r t ) ; $rows = $q−>l o a d L i s t ( ) ; 28 $ d f = $AppUI−>g e t P r e f ( ’SHDATEFORMAT ’ ) ; 30 ?> 32 <t a b l e w i d t h = ” 100% ” b o r d e r = ” 0 ” c e l l p a d d i n g = ” 2 ” c e l l s p a c i n g = ” 1 ” c l a s s = ” t b l ”> <t r > 34 <t h w i d t h = ” 12 ” /> <t h w i d t h = ”30%”><?php echo $AppUI−> ( ’ Post Mortem Records by p r o j e c t ’ ) ; ?></th> 36 <t h w i d t h = ”20%”><?php echo $AppUI−> ( ’ P r o j e c t Meeting Date ’ ) ; ?></th> <t h w i d t h = ”20%”><?php echo $AppUI−> ( ’ P r o j e c t S t a r t Date ’ ) ; ?></th> 38 <t h w i d t h = ”20%”><?php echo $AppUI−> ( ’ P r o j e c t End Date ’ ) ;?></ th> <t h w i d t h = ”10%”><?php echo $AppUI−> ( ’ P r o j e c t S t a t u s ’ ) ;?></ th> 94 40 </ t r > <?php f o r e a c h ( $rows as $p ) { $meeting date = i n t v a l ( $p [ ’ p r o j e c t m e e t i n g d a t e ’ ] ) ? new CDate ( $p [ ’ 42 project meeting date ’ ] ) : null ; $ s t a r t d a t e = i n t v a l ( $p [ ’ p r o j e c t s t a r t d a t e ’ ] ) ? new CDate ( $p [ ’ project start date ’ ]) : null ; $end date = i n t v a l ( $p [ ’ p r o j e c t e n d d a t e ’ ] ) ? new CDate ( $p [ ’ 44 project end date ’ ] ) : null ; ?> 46 <t r > <t d w i d t h = ” 12 ” s t y l e = ” background−c o l o r : # { $row . p r o j e c t c o l o r i d e n t i f i e r } ”> <a h r e f = ” ?m= c l o s u r e& ; a= a d d e d i t& ; pma id=<?php echo $p 48 [ ’ pma id ’ ] ; ? > ”> <img s r c = ” . / images / i c o n s / p e n c i l . g i f ” a l t = ” E d i t p o s t mortem r e c o r d ” ></a> 50 </ td> <td> <a h r e f = ” ?m= c l o s u r e& ; a=view& ; pma id=<?php echo $p [ ’ pma id ’ ] ; ? > ”> <?php echo $p [ ’ p r o j e c t n a m e ’ ] ; ?> <a/> </ td> 52 <td> <?php echo $meeting date ? $meeting date−>f o r m a t ( $ d f ) : ’ ’ ; ?></td> 54 <td> <?php echo $ s t a r t d a t e ? $ s t a r t d a t e −>f o r m a t ( $ d f ) : ’ ’ ; ?></td> 56 <td> <?php echo $end date ? $end date−>f o r m a t ( $ d f ) : 58 <td> <?php echo $p [ ’ p r o j e c t s t a t u s ’ ] ; ?></td> 60 </ t r > <?php } ?> 62 </ t a b l e > ’ ’ ; ?></td> 95 do closure aed.php <?php / ∗ PROJECTS $ I d : d o p r o j e c t a e d . php 4779 2007−02−21 1 4 : 5 3 : 2 8Z cyberhorse $ ∗ / 2 ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { if d i e ( ’ You should n o t access t h i s f i l e 4 } 6 $ o b j = new CClosure ( ) ; directly ’ ) ; $msg = ’ ’ ; 8 ( ! $obj−>b i n d ( $ POST ) ) { if $AppUI−>setMsg ( $obj−>g e t E r r o r ( ) , UI MSG ERROR ) ; 10 $AppUI−>r e d i r e c t ( ) ; 12 } 14 r e q u i r e o n c e ( DP BASE DIR . ’ / c l a s s e s / CustomFields . c l a s s . php ’ ) ; 16 $ d e l = dPgetParam ( $ POST , ’ del ’ , 0 ) ; 18 / / prepare ( and t r a n s l a t e ) t h e module name ready f o r t h e s u f f i x i f ( $del ) { 20 $ p r o j e c t i d = dPgetParam ( $ POST , ’ pma id ’ , 0 ) ; $canDelete = $obj−>canDelete ( $msg , $pma id ) ; 22 if ( ! $canDelete ) { $AppUI−>setMsg ( $msg , UI MSG ERROR ) ; $AppUI−>r e d i r e c t ( ) ; 24 } 26 if ( ( $msg = $obj−>d e l e t e ( ) ) ) { $AppUI−>setMsg ( $msg , UI MSG ERROR ) ; $AppUI−>r e d i r e c t ( ) ; 28 } else { $AppUI−>setMsg ( ’ Post Mortem d e l e t e d ’ , UI MSG ALERT ) ; 30 $AppUI−>r e d i r e c t ( ’m= c l o s u r e ’ ) ; 32 } } else { 34 if ( ( $msg = $obj−>s t o r e ( ) ) ) { $AppUI−>setMsg ( $msg , UI MSG ERROR ) ; 36 } else { $isNotNew = @$ POST [ ’ pma id ’ ] ; 38 $ c u s t o m f i e l d s = New CustomFields ( $m, ’ a d d e d i t ’ , $obj−>pma id , ” e d i t ” ); $ c u s t o m f i e l d s −>b i n d ( $ POST ) ; 40 $ s q l = $obj−>s t o r e ( $obj−>pma id ) ; / / S t o r e Custom F i e l d s 96 $AppUI−>setMsg ( $isNotNew ? ’ Post Mortem updated ’ : 42 i n s e r t e d ’ , UI MSG OK ) ; } $AppUI−>r e d i r e c t ( ) ; 44 } 46 ?> ’ Post Mortem 97 index.php <?php 2 ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { if d i e ( ’ You should n o t access t h i s f i l e 4 } 6 $AppUI−>savePlace ( ) ; 8 $perms = $AppUI−>a c l ( ) ; directly ’ ) ; $ c a n E d i t = $perms−>checkModule ($m, ” e d i t ” ) ; 10 $ t i t l e B l o c k = new C T i t l e B l o c k ( ’ Closure ’ , ’ c l o s e d . png ’ , $m, ”$m. $a ” ) ; 12 i f ( $canEdit ) { $ t i t l e B l o c k −>a d d C e l l ( ’<i n p u t t y p e =” submit ” c l a s s =” b u t t o n ” v a l u e =” ’ . $AppUI−> ( ’ new p o s t 14 mortem a n a l y s i s ’ ) . ’ ”> ’ , ’ ’ , ’<form a c t i o n =”?m= c l o s u r e&a= a d d e d i t ” method =” p o s t ”> ’ , ’ </ form> ’ ); 16 } 18 $ t i t l e B l o c k −>show ( ) ; 20 $q = new DBQuery ; 22 $q−>addTable ( ’ p o s t m o r t e m a n a l y s i s ’ , ’pma ’ ) ; $q−>addQuery ( ’ d i s t i n c t pma . project name , pma . pma id , 24 pma . p r o j e c t s t a r t d a t e , pma . p r o j e c t e n d d a t e , pma . p r o j e c t m e e t i n g d a t e ’ ) ; 26 $rows = $q−>l o a d L i s t ( ) ; $ d f = $AppUI−>g e t P r e f ( ’SHDATEFORMAT ’ ) ; 28 ?> 30 <t a b l e w i d t h = ” 100% ” b o r d e r = ” 0 ” c e l l p a d d i n g = ” 2 ” c e l l s p a c i n g = ” 1 ” c l a s s = ” t b l ”> <t r > 32 <t h w i d t h = ”1%” ></th> <t h w i d t h = ” 10 ”><?php echo $AppUI−> ( ’ P r o j e c t Name ’ ) ; ?></th> 34 <t h w i d t h = ” 10 ”><?php echo $AppUI−> ( ’ P r o j e c t Meeting Date ’ ) ; ?></th> <t h w i d t h = ” 10 ”><?php echo $AppUI−> ( ’ P r o j e c t S t a r t Date ’ ) ; ?></th> 36 <t h w i d t h = ” 10 ”><?php echo $AppUI−> ( ’ P r o j e c t End Date ’ ) ;?></ th> </ t r > 38 <?php f o r e a c h ( $rows as $p ) { $meeting date = i n t v a l ( $p [ ’ p r o j e c t m e e t i n g d a t e ’ ] ) ? new CDate ( $p [ ’ project meeting date ’ ] ) : null ; 40 $ s t a r t d a t e = i n t v a l ( $p [ ’ p r o j e c t s t a r t d a t e ’ ] ) ? new CDate ( $p [ ’ 98 project start date ’ ]) : null ; $end date = i n t v a l ( $p [ ’ p r o j e c t e n d d a t e ’ ] ) ? new CDate ( $p [ ’ project end date ’ ] ) : null ; 42 ?> <t r > 44 <td> <a h r e f = ” ?m= c l o s u r e& ; a= a d d e d i t& ; pma id=<?php echo $p [ ’ pma id ’ ] ; ? > ”><img s r c = ” . / images / i c o n s / p e n c i l . g i f ” a l t = ” E d i t p o s t mortem a n a l y s i s ” </a> </ td> 46 <td> <a h r e f = ” ?m= c l o s u r e& ; a=view& ; pma id=<?php echo $p [ ’ pma id ’ ] ; ? > ”><?php echo $p [ ’ p r o j e c t n a m e ’ ] ; ?></a> </ td> 48 <td> <?php echo $meeting date ? $meeting date−>f o r m a t ( $ d f ) : 50 <td> <?php echo $ s t a r t d a t e ? $ s t a r t d a t e −>f o r m a t ( $ d f ) : 52 <td> <?php echo $end date ? $end date−>f o r m a t ( $ d f ) : </ t r > 54 <?php } ?> </ t a b l e > ’ ’ ; ?></td> ’ ’ ; ?></td> ’ ’ ; ?></td> 99 projects tab.post mortem analysis.php 1 <?php / ∗ PROJECTS $ I d : companies tab . view . a c t i v e p r o j e c t s . php 4779 2007−02−21 1 4 : 5 3 : 2 8Z cyberhorse $ ∗ / if ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { d i e ( ’ You should n o t access t h i s f i l e 3 directly ’ ) ; } 5 g l o b a l $AppUI , $ p s t a t u s , $ t p l , $m; 7 r e q u i r e o n c e ( $AppUI−>getModuleClass ( ’ f i l e s ’ ) ) ; 9 $ p s t a t u s = dPgetSysVal ( ’ P r o j e c t S t a t u s ’ ) ; 11 $ p r o j e c t i d = $ GET [ ’ p r o j e c t i d ’ ] ; 13 $ s o r t = dPgetParam ( $ GET , ’ o r d e r b y ’ , ’ pma id ’ ) ; i f ( $ s o r t == ’ pma id ’ ) { $ s o r t . = ’ DESC ’ ; 15 } 17 $ d f = $AppUI−>g e t P r e f ( ’SHDATEFORMAT ’ ) ; 19 $page = i s s e t ($ REQUEST [ ’ page ’ ] ) ?$ REQUEST [ ’ page ’ ] : 1 ; 21 $q = new DBQuery ; $q−>addTable ( ’ p o s t m o r t e m a n a l y s i s ’ , ’pma ’ ) ; 23 $q−>addQuery ( ’ pma id , pma . project name , p r o j e c t m e e t i n g d a t e , p a r t i c i p a n t s ’ ); $q−>addJoin ( ’ p r o j e c t s ’ , ’ p ’ , ’ p . p r o j e c t n a m e = pma . p r o j e c t n a m e ’ ) ; 25 $q−>addWhere ( ’ p . p r o j e c t i d = ’ . $ p r o j e c t i d ) ; $q−>addOrder ( $ s o r t ) ; 27 $rows = $q−>l o a d L i s t ( ) ; 29 $q−>addTable ( ’ p r o j e c t s ’ ) ; $q−>addQuery ( ’ count ( ∗ ) ’ ) ; 31 $q−>addWhere ( ’ p r o j e c t i d = ’ . $ p r o j e c t i d ) ; $count rows = $q−>l o a d R e s u l t ( ) ; 33 $q 35 = new DBQuery ; $q−>addTable ( ’ p r o j e c t s ’ ) ; $q−>addQuery ( ’ p r o j e c t n a m e ’ ) ; 37 $q−>addWhere ( ’ p r o j e c t i d = ’ . $ p r o j e c t i d ) ; $res =& $q−>exec ( ) ; 39 $project name = $res−>f i e l d s [ ’ p r o j e c t n a m e ’ ] ; 100 41 $ d f = $AppUI−>g e t P r e f ( ’SHDATEFORMAT ’ ) ; 43 ?> 45 <t a b l e w i d t h = ” 100% ” b o r d e r = ” 0 ” c e l l p a d d i n g = ” 2 ” c e l l s p a c i n g = ” 1 ” c l a s s = ” t b l ”> <t r > 47 <th> </ th> <t h w i d t h = ”50%”><?php echo $AppUI−> ( ’ P r o j e c t Meeting Date ’ ) ; ?></th> 49 <t h w i d t h = ”50%”><?php echo $AppUI−> ( ’ P a r t i c i p a n t s ’ ) ; ?></th> </ t r > 51 <?php f o r e a c h ( $rows as $p ) { $meeting date = i n t v a l ( $p [ ’ p r o j e c t m e e t i n g d a t e ’ ] ) ? new CDate ( $p [ ’ project meeting date ’ ] ) : null ; 53 ?> 55 <t r > <td><a h r e f = ” ?m= c l o s u r e& ; a= a d d e d i t& ; pma id=<?php echo $p [ ’ pma id ’ ] ; ? > ”><img s r c = ” . / images / i c o n s / p e n c i l . g i f ” a l t = ” E d i t p o s t mortem a n a l y s i s ” ></a> </ td> 57 <td> <a h r e f = ” ?m= c l o s u r e& ; a=view& ; pma id=<?php echo $p [ ’ pma id ’ ] ; ? > ”> <?php echo $meeting date ? $meeting date−>f o r m a t ( $ d f ) : ’ ’ ; ?> </a></td> 59 <td> <?php echo $p [ ’ p a r t i c i p a n t s ’ ] ; ?></td> 61 </ t r > 63 <?php } ?> <!−−< t r > 65 </ t r ><b r /> <td ></td> 67 <td ></td> <t d nowrap= ” nowrap ” a l i g n = ” r i g h t ”>−−> 69 </ td ></ t r > </ t a b l e > 71 <d i v a l i g n = ” r i g h t ”> <i n p u t c l a s s = ” b u t t o n ” t y p e = ” b u t t o n ” name= ” new p o s t mortem ” v a l u e = ”<?php echo ’ new p o s t mortem ’ ; ?>” o n c l i c k = ” l o c a t i o n . h r e f = ’ ?m= c l o s u r e& ; a= a d d e d i t& ; p r o j e c t n a m e=<?php echo $project name ; ? > ’ ; ” /> 73 </ d i v > 101 setup.php 1 <?php if ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { d i e ( ’ You should n o t access t h i s f i l e 3 directly ’ ) ; } 5 $config = array ( ’ mod name ’ => ’ Closure ’ , 7 ’ mod version ’ => ’ 1 . 0 . 1 ’ , ’ m o d d i r e c t o r y ’ => ’ c l o s u r e ’ , 9 ’ m o d s e t u p c l a s s ’ => ’ SClosure ’ , ’ mod type ’ => ’ user ’ , 11 ’ mod ui name ’ => ’ Closure ’ , ’ m o d u i i c o n ’ => ’ helpdesk . png ’ , 13 ’ m o d d e s c r i p t i o n ’ => ’ ’ , ’ p e r m i s s i o n s i t e m t a b l e ’ => ’ p o s t m o r t e m a n a l y s i s ’ , 15 ’ p e r m i s s i o n s i t e m f i e l d ’ => ’ pma id ’ , ’ p e r m i s s i o n s i t e m l a b e l ’ => ’ p r o j e c t n a m e ’ 17 ); 19 i f (@$a == ’ setup ’ ) { echo dPshowModuleConfig ( $ c o n f i g ) ; 21 } 23 c l a s s SClosure { 25 function i n s t a l l () { $ok = t r u e ; 27 $q = new DBQuery ; $sql = ” ( 29 pma id i n t e g e r n o t n u l l a u t o i n c r e m e n t , project name varchar (255) not n u l l d e f a u l t 31 ’’, p r o j e c t s t a r t d a t e datetime d e f a u l t n u l l , project end date datetime d e f a u l t n u l l , 33 p r o j e c t p l a n n e d s t a r t d a t e datetime d e f a u l t n u l l , project planned end date datetime d e f a u l t n u l l , 35 project meeting date datetime d e f a u l t n u l l , planned budget t e x t , 37 budget t e x t , participants text , 39 project strength text , project weaknesses text , 41 improvement suggestions t e x t , conclusions text , 102 p r i m a r y key ( pma id ) 43 )”; 45 $q−>c r e a t e T a b l e ( ’ p o s t m o r t e m a n a l y s i s ’ ) ; $q−>c r e a t e D e f i n i t i o n ( $ s q l ) ; 47 $ok = $ok && $q−>exec ( ) ; $q−>c l e a r ( ) ; 49 if 51 ( ! $ok ) return false ; return null ; 53 } 55 f u n c t i o n remove ( ) { $q = new DBQuery ; 57 $q−>dropTable ( ’ p o s t m o r t e m a n a l y s i s ’ ) ; $q−>exec ( ) ; 59 $q−>c l e a r ( ) ; 61 return null ; 63 } 65 f u n c t i o n upgrade ( $ o l d v e r s i o n ) { return true ; } 67 } 69 ?> 103 view.php 1 <?php if ( ! d e f i n e d ( ’ DP BASE DIR ’ ) ) { d i e ( ’ You should n o t access t h i s f i l e 3 directly ’ ) ; } 5 $config = array ( ’ mod name ’ => ’ Closure ’ , 7 ’ mod version ’ => ’ 1 . 0 . 1 ’ , ’ m o d d i r e c t o r y ’ => ’ c l o s u r e ’ , 9 ’ m o d s e t u p c l a s s ’ => ’ SClosure ’ , ’ mod type ’ => ’ user ’ , 11 ’ mod ui name ’ => ’ Closure ’ , ’ m o d u i i c o n ’ => ’ helpdesk . png ’ , 13 ’ m o d d e s c r i p t i o n ’ => ’ ’ , ’ p e r m i s s i o n s i t e m t a b l e ’ => ’ p o s t m o r t e m a n a l y s i s ’ , 15 ’ p e r m i s s i o n s i t e m f i e l d ’ => ’ pma id ’ , ’ p e r m i s s i o n s i t e m l a b e l ’ => ’ p r o j e c t n a m e ’ 17 ); 19 i f (@$a == ’ setup ’ ) { echo dPshowModuleConfig ( $ c o n f i g ) ; 21 } 23 c l a s s SClosure { 25 function i n s t a l l () { $ok = t r u e ; 27 $q = new DBQuery ; $sql = ” ( 29 pma id i n t e g e r n o t n u l l a u t o i n c r e m e n t , project name varchar (255) not n u l l d e f a u l t 31 ’’, p r o j e c t s t a r t d a t e datetime d e f a u l t n u l l , project end date datetime d e f a u l t n u l l , 33 p r o j e c t p l a n n e d s t a r t d a t e datetime d e f a u l t n u l l , project planned end date datetime d e f a u l t n u l l , 35 project meeting date datetime d e f a u l t n u l l , planned budget t e x t , 37 budget t e x t , participants text , 39 project strength text , project weaknesses text , 41 improvement suggestions t e x t , conclusions text , 104 p r i m a r y key ( pma id ) 43 )”; 45 $q−>c r e a t e T a b l e ( ’ p o s t m o r t e m a n a l y s i s ’ ) ; $q−>c r e a t e D e f i n i t i o n ( $ s q l ) ; 47 $ok = $ok && $q−>exec ( ) ; $q−>c l e a r ( ) ; 49 if 51 ( ! $ok ) return false ; return null ; 53 } 55 f u n c t i o n remove ( ) { $q = new DBQuery ; 57 $q−>dropTable ( ’ p o s t m o r t e m a n a l y s i s ’ ) ; $q−>exec ( ) ; 59 $q−>c l e a r ( ) ; 61 return null ; 63 } 65 f u n c t i o n upgrade ( $ o l d v e r s i o n ) { return true ; } 67 } 69 ?> 105 APÊNDICE B -- Formulário de avaliação Questionário de avaliação - Encerramento de projetos Este questionário é parte do nosso trabalho de desenvolvimento de um módulo para o encerramento de projetos, para a ferramenta de gerenciamento de projetos dotProject. O trabalho vem sendo realizado pela graduanda Suzana Pescador, sob a orientação da Prof. rer. nat. Christiane Gresse von Wangenheim, PMP do GQS – Grupo de Qualidade de Software do INCoD Instituto Nacional para Convergência Digital (http:// www.incod.ufsc.br). Nós gostaríamos de saber a sua opinião sobre a utilidade e usabilidade do módulo (acessível em: http://wwwexe.inf.ufsc.br/~suzana/dotproject/). A implementação atual representa um primeiro protótipo do módulo, que implementa as funções básicas deste processo. Nós gostaríamos de convidá-lo a registrar, editar, visualizar e deletar uma ata de pós-morte. Isto não deve tomar mais do que 15 minutos do seu tempo. Sua participação é totalmente voluntária. As informações obtidas deste questionário serão tratadas de forma acumulativa, não permitindo a identificação de respostas individuais. Os resultados serão utilizados para melhorar o módulo atual assim como para futuros trabalhos. O roteiro de execução desta atividade pode ser acessado em http://www.inf.ufsc.br/~suzana/roteiro_atividade_dotProject.html Se você tem algum questionamento, por favor, entre em contato conosco: Suzana Pescador ([email protected]). Agradecemos a participação no nosso trabalho, Suzana Pescador e Prof. rer. nat. Christiane Gresse von Wangenheim * Required Eu considero o módulo útil para encerrar os projetos da empresa * 1 2 3 4 5 Discordo totalmente Concordo totalmente Eu considero o módulo útil para documentar as reuniões de pós-morte do projeto * 1 2 3 4 5 Discordo totalmente Concordo totalmente Eu considero o módulo útil para gerenciar lições aprendidas durante os projetos * 1 2 3 4 5 Discordo totalmente Concordo totalmente Eu considero o módulo útil para identificar pontos fortes e fracos da empresa, através das lições aprendidas * 1 Discordo totalmente 2 3 4 5 Concordo totalmente Eu considero o módulo de fácil manipulação e conteúdo intuitivo * Em termos de usabilidade 1 2 3 4 5 Discordo totalmente Concordo totalmente Quais foram os principais pontos fortes que você observou? * Quais foram as principais melhorias que você sugere? * Outros comentários Submit Powered by Google Docs Report Abuse - Terms of Service - Additional Terms 108 APÊNDICE C -- Roteiro de simulação de uso do novo módulo Roteiro de avaliação do módulo de encerramento A execução deste roteiro faz parte da avaliação da implementação do módulo de encerramento de projetos na ferramenta dotProject. Para a realização das atividades, foi criado um projeto exemplo, chamado Pizzaria OnLine. Este projeto consiste em criar um aplicativo para smartphones, através do qual entregadores de pizza possam consultar endereços, pedidos, preços, entre outros. Além disso, o escopo do projeto inclui o desenvolvimento de uma página web onde poderão ser feitos os pedidos on-line das pizzas, consulta de cardápio e contato com os vendedores. A atividade pressupõe que o projeto acabou. Foi realizada uma reunião de pós-morte, com a participação da programadora Peach, o gerente Toad, o entregador de Pizza Yoshi e o atendente da pizzaria, Luigi. Na reunião foram levantados os seguintes tópicos: Pontos fortes: A linguagem de programação Cobra ofereceu abstrações que facilitaram o desenvolvimento do software dos smartphones O escopo foi facilmente alterado e gerenciado, uma vez que os clientes estavam próximos ao desenvolvimento e presentes em todas as reuniões marcadas O desenvolvimento da página web foi mais rápido que o previsto, uma vez que a tecnologia escolhida já era de pleno conhecimento dos programadores Pontos fracos: O fornecedor X dos smartphones atrasou a entrega dos produtos em 30 dias Foi necessário um treinamento dos programadores nas tecnologias móveis Os usuários finais do software (entregadores de pizza e atendente da pizzaria) tiveram dificuldade na instalação dos módulos Além disso, notou-se que: O cronograma atrasou em 35 dias O orçamento superou o previsto em 10% Com base nestas informações, pedem-se três tarefas: Primeiramente, logue no sistema com as credenciais: login: admin senha: passwd 1. Tarefa: Registro e edição da ata 1. Navegue até o projeto 'Pizzaria OnLine' 2. Vá até a ata 'Post Mortem Analysis' 3. Clique em 'new post mortem' 4. Registre a ata da reunião acima descrita* 5. Clique em 'submit' 6. Ao clicar no ícone, abre-se a página de edicão do projeto 7. Edite os campos desejados (adicione o contato 'Suzana' ao participantes, e altere o orçamento final, por exemplo). 8. Verifique, no canto superior esquerdo, que é possível visualizar esta ata deste ponto 9. Clique em 'submit' e veja as alterações 2. Tarefa: Visualizar uma ata 1. Repita os passos 1.1 e 1.2 2. Clique na data da reunião da ata que deseja visualizar 3. Verifique, no canto superior esquerdo, que é possível editar esta ata deste ponto 3. Tarefa: Visualizar a base de experiências da empresa 1. Navegue até a empresa 'Toad Software' e clique na aba 'Experience Factory' 2. Verifique que a aba apresenta a listagem de todas as atas dos projetos da empresa * O calendário do dotProject possui um bug para algumas datas, portanto, é bom verificar com cuidado as datas escolhidas no calendário e as datas adicionadas no campo Terminada a atividade, você poderá então responder ao questionário. Agradecemos a participação em nosso trabalho, Suzana Pescador e Prof. rer. nat. Christiane Gresse von Wangenheim