Meeting Thinking And Coding - Internship Report

  • Uploaded by: Sasmito Adibowo
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Meeting Thinking And Coding - Internship Report as PDF for free.

More details

  • Words: 10,575
  • Pages: 48
Internship Report: Meeting, Thinking and Coding (MTC) Personal Edition

September 16, 2002

Sasmito Adibowo Faculty of Computer Science University of Indonesia

ABSTRACT MTC (Meeting, Thinking, Coding) is an activity monitoring software developed by PT Code Jawa to record the daily activities for computer-intensive workers. Targeted for business-Windows platforms, this program is developed initially for Code Jawa’s internal use. Further product path of the system will be commercial marketing of the system. This report describes the internship period in which the intern developed the MTC system. Along with the system description of MTC, the report also includes the company profile, project execution, impact analysis and it is finally terminated with several conclusions and suggestions by the intern. With courtesy of Code Jawa, this report is made available for the general public under the GNU Free Documentation License. A copy of this license is provided in the appendices.

2

PREFACE

The writer utters his praise and thanks to The One God since for only by His blessing and mercy that the writer was able to complete his internship in a software development company in Indonesia and to have completed this internship report. Within this opportunity, the writer would like to express his deepest thanks to those parties who had helped in the process. This gratitude especially goes to: 1. Mom and Dad, who have given the undying support and love for all this time, thank you for the support given during this internship. 2. Mr Dadan Hardianto, as the Academic Advisor who have given suggestions, criticism, direction and guidance both during the internship and the writing of this report. 3. Mr Iwan Tantra as the Chief Technology Officer for the opportunity and trust that he provides. Also for his understanding for the project’s overdue. 4. Mr Krishna W Karang as the Project Manager for his guidelines during this internship. 5. Dion, colleague and alumni whom at many opportunities gave the writer a ride home at late nights. 6. All colleagues at Code Jawa for their various help and support: Johan, Stephen, Isak, Denymon, Ryan and others. 7. All civitas academica of the Faculty of Computer Science, University of Indonesia without exemption. This internship realization is a part of the curriculum that applies at the Faculty of Computer Science, University of Indonesia, have given the writer a priceless experience. Thanks. Jakarta, September 2002

The Writer

3

This document may be freely distributed in terms of the GNU Free Documentation License, courtesy of Code Jawa

License statement: Copyright (c) 2002 Sasmito Adibowo. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

Amendment Record Version

Date

Author

Change

1.0

September 12, 2002

Adib

Initial Revision

1.1

September 11, 2002

Adib

File monitoring algorithms

1.5

December 23, 2002

Adib

Completing changes proposed by Krishna

1.6

January 09, 2003

Adib

Additional contents requested from Dadan Hardianto

1.7

April 30, 2003

Adib

Final corrections after examination.

4

TABLE OF CONTENTS 1

Foreword................................................................................................................................................ 7 1.1 Background ......................................................................................................................... 7 1.2 Job Description and Internship Objective........................................................................... 7 1.3 Report Organization............................................................................................................ 7 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5

2

Company Profile .................................................................................................................................................... 8 System Description ................................................................................................................................................ 8 Project Execution ................................................................................................................................................... 8 Impact Analysis...................................................................................................................................................... 8 Concluding Remarks.............................................................................................................................................. 8

Company Profile.................................................................................................................................... 9 2.1 Brief History ........................................................................................................................ 9 2.2 Mission ................................................................................................................................ 9 2.3 Core Strategy..................................................................................................................... 10 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5

2.4 2.5 2.5.1 2.5.2 2.5.3

Talent .................................................................................................................................................................... 10 Team ..................................................................................................................................................................... 10 Talk ....................................................................................................................................................................... 11 Tech....................................................................................................................................................................... 11 Trust ...................................................................................................................................................................... 11

Development Methodology................................................................................................ 11 Core Competencies ........................................................................................................... 12 Mobile Applications............................................................................................................................................. 12 Online Payment and Banking Solution............................................................................................................... 12 Custom Server-side Component Development .................................................................................................. 12

2.6 Company Culture .............................................................................................................. 12 2.7 Organization Chart ........................................................................................................... 13 3 System Description.............................................................................................................................. 14 3.1 Development Methodology................................................................................................ 14 3.2 Product Functions ............................................................................................................. 14 3.2.1

3.3 3.4 3.5 3.5.1 3.5.2

3.6

Use Cases.............................................................................................................................................................. 15

Scope ................................................................................................................................. 15 System Architecture........................................................................................................... 16 System Components........................................................................................................... 17 Agent..................................................................................................................................................................... 17 Client..................................................................................................................................................................... 19

Database Design ............................................................................................................... 19

3.6.1 Working Tables .................................................................................................................................................... 20 Project ................................................................................................................................................................................ 20 Application......................................................................................................................................................................... 21 project_application ............................................................................................................................................................ 21 project_status ..................................................................................................................................................................... 22 project_activity_type ......................................................................................................................................................... 22 project_activity .................................................................................................................................................................. 23 project_folder..................................................................................................................................................................... 23 project_file ......................................................................................................................................................................... 24 application_project_file..................................................................................................................................................... 24 3.6.2 Template Tables ................................................................................................................................................... 25 Project_template ................................................................................................................................................................ 25 Project_template_folder .................................................................................................................................................... 26 Project_template_activity_type......................................................................................................................................... 26

3.7

Behavioral Model and Description ................................................................................... 27

3.7.1 Application Events ............................................................................................................................................... 27 Application Switch ............................................................................................................................................................ 27 Power Change.................................................................................................................................................................... 27 5

Hide Popup ........................................................................................................................................................................ 27 File Write ........................................................................................................................................................................... 27 3.7.2 State-Transition Diagram..................................................................................................................................... 27 3.7.3 File Monitoring Algorithm .................................................................................................................................. 29

3.8

User Interface Design ....................................................................................................... 30

3.8.1 TFrmMain............................................................................................................................................................. 31 3.8.2 TFrmApplicationMgmt........................................................................................................................................ 32 3.8.3 TFrmEditApplication........................................................................................................................................... 32 3.8.4 TFrmGenReport ................................................................................................................................................... 33 3.8.5 TFrmProjectMgmt ............................................................................................................................................... 33 3.8.6 TFrmNewProjectWizard...................................................................................................................................... 34 Select Project Type............................................................................................................................................................ 34 Enter Project Information.................................................................................................................................................. 35 Define Project Activity Types........................................................................................................................................... 35 3.8.7 Define Project Folders.......................................................................................................................................... 36 Work on Project................................................................................................................................................................. 36 3.8.8 TFrmEditProject................................................................................................................................................... 37 Profile................................................................................................................................................................................. 37 Activity Types ................................................................................................................................................................... 37 Applications....................................................................................................................................................................... 38 Folders................................................................................................................................................................................ 38 TFrmEditProjectActivityType.......................................................................................................................................... 39 TFrmConfigDialog............................................................................................................................................................ 39 TFrmAboutDialog............................................................................................................................................................. 39 TFrmActivityPopup .......................................................................................................................................................... 40

3.9 Testing Environment ......................................................................................................... 40 3.10 Test Cases.......................................................................................................................... 41 4 Project Execution................................................................................................................................. 42 4.1 Materials Provided............................................................................................................ 42 4.1.1 4.1.2

User Interface Narrations ..................................................................................................................................... 42 High-Level Description – System Requirements Specification......................................................................... 42

4.2 New Design........................................................................................................................ 42 4.3 Project Plan....................................................................................................................... 43 4.4 Project Realization ............................................................................................................ 43 5 Impact Analysis ................................................................................................................................... 45 6 Concluding Remarks........................................................................................................................... 46 6.1 Job Experience .................................................................................................................. 46 6.2 General Suggestions.......................................................................................................... 46 6.3 Suggestions Related to the Project.................................................................................... 47 7 Bibliography ........................................................................................................................................ 48

6

1 Foreword

1.1

Background

The need to measure a software development effort is increasing, proportional to the importance of software systems in today’s businesses. In such efforts, both employers and clients need to keep track their progress to ensure that they’re getting their money’s worth. But money spent in software development projects is often difficult to correlate with the effort given by the developers – let alone linking it with the project’s progress. Traditionally, the developers are required to hand in a periodic written report to their managers. Using these reports, the manager then relays the information to the clients or employers (depending on whether it is a contracted or in-house project). The system works well to some extent, but it has at least two drawbacks. First, the information contained in the reports is often incomplete, distorted and heavily filtered. Second, programmers often view writing reports as an overhead – and indeed it is – which sometime impedes productivity. As a software development company, Code Jawa attempts to address this issue by providing a software solution. It is an automated work-tracking software that logs a programmer’s day working in one or more software projects. Called MTC, the software may also be generalized for use by other computer-intensive knowledge-workers. 1.2

Job Description and Internship Objective

The intern was assigned to design and implement the MTC system. Design of the system was continued from a previous project that was postponed. As a temporary employee, the intern only receives an hourly wage, without additional benefits normally provided to full-time employees. 1.3

Report Organization

The report is written to fulfill one of the requirements imposed on all internship courses by the faculty. It serves the readers to gain an insight on the internship period done by the writer. Other than faculty requirements for the report, the organization on which the internship took place has another requirement. All written communication and documents within the company are in English. Therefore, this report is also written in the language. Following this section, organization of the report is as follows:

7

1.3.1

Company Profile

This section describes the organization in which the internship took place. It articulates a brief history of the organization, mission, strategies, core competencies and culture. 1.3.2

System Description

This section describes the product of the work that was done during the internship period. It is a subset of the System Description document produced during development. 1.3.3

Project Execution

This section describes the project’s execution during the internship. It provides the initial timeline when the project was planned and the actual timeline when it was executed. Provided along with the timelines are the grounds on why the timeline was set, taking human factors into account 1.3.4

Impact Analysis

This section provides an analysis by the writer on the impact of the project to the organization. 1.3.5

Concluding Remarks

This section articulates the writer’s opinion on the internship experience as an overall. Additionally, the writer provides several suggestions for both the organization and for further development of the product.

8

2 Company Profile This section describes the organization in which the internship took place. It articulates a brief history of the organization, mission, strategies, core competencies and culture. 2.1

Brief History

Code Jawa’s track record goes back to 1996, when it was founded as Infoskape by Iwan Tantra and some US-educated programmers fresh back from working in US software companies. Their idea was a classic case of entrepreneurial vision: Become the most advanced software design house in Indonesia. Infoskape's initial contract was with the country's largest mobile telecom company, Telkomsel, and the scope of that project was matched by a long-term relationship to create and enable an internet based subscriber recruitment management structure that would link hundreds of sales points across Indonesia's vast archipelago. From there evolved a variety of projects that involved a broad range of subscriber management functions, including SIM Card distribution, usage monitoring for fraud management, and projects involving sales channel management. Infoskape was also retained by pointAhead.com to create a major e-commerce platform that would enable "internet neophytes" to create stores online and sell their Indonesian artwork and handicrafts directly to the West without having several layers of middle men. In between these major contracts, Infoskape built for itself a reputation of being the best software house around, ranging from projects building web sites to wireless SMS products to server side business functions. Its next phase was to work as an offshore outsourcing staff for Spotcast Communications, which is how Iwan Tantra, the founder of Infoskape, met Craig Owensby, the founder of Spotcast. When Spotcast's technology and US team were sold to Leap Wireless in early 2001, the two realized that their team in Indonesia was now available for a new purpose - becoming a value-optimized option for offshore outsourcing. In its new form, and with its new mission, Code Jawa focuses on creating a business structure and corporate culture that meet the needs of US, European, Australian, and other developed economy companies seeking a strategy for low cost software development within a much leaner capital market and new pressures to generate "real" ROI for the capital already invested. 2.2

Mission

This is the mission statement of Code Jawa: 9

To provide a value-optimized software development outsourcing option, recognized for excellence throughout the world. It intends to fulfill its mission by: •

Combining Indonesia's most talented programmers with internationallytrained, highly- experienced Project Managers and Design Consultants;



Assembled and managed under proven high-tech leadership emphasizing a disciplined yet flexible development model;



Creating a collaborative, communications-oriented, client-vendor relationship that extends through the software development life-cycle;



Bridging the physical and conceptual distance between the East and West and leveraging the strengths of both in generating creative, effective, and inexpensive software solutions for the clients.

2.3

Core Strategy

Code Jawa relies on a unique “5 T” strategy: Talent, Team, Talk, Tech and Trust. Being the basis for its corporate culture and business approach, this strategy enables the company to be comparable to those in the US or Europe. Its Jawanese Magic combines the east to the west – utilizing Indonesia’s finest programmers and design consultants with US management and standards. 2.3.1

Talent

From design specialists to programmers, each staff’s talents are measured from his or her credentials, capability, and creativity. Credentials must include an international or local tier-one university degree in Computer Science/Engineering and proven development experience with a high technology company. Capabilities must include mastery of various programming technologies, and may require proven design and project management expertise with an international company. While creativity is defined as the skill that effectively uses knowledge in order to devise out-of-the-box solutions. This fuzzy factor differentiates a Code Jawa programmer from everyone else. 2.3.2

Team

Code Jawa teams combine talent and organization to create performance. Project teams are constructed to meet specific objectives. Using “best practices management,” each team member is focused to the client’s needs and project objectives. When the project’s schedule is agreed upon, the team recognizes that they need to put in more time should they fall behind. After the project, the team is rated both individually and collectively. This means that the team’s structure is not a way to avoid responsibility, but to generate greater productivity and accountability.

10

2.3.3

Talk

Communications are fundamental to Code Jawa. Clients are always engaged in active talk with the development team, through phone calls and other communication methods. Should the need arise, the team’s schedule will be adjusted to overlap the client’s time zone. In Code Jawa, communication skills are rated on a par with programming skills. Since a lot of talk avoids mistakes and helps in creating better software. 2.3.4

Tech

While creating software that meets client’s needs is the ultimate goal, Code Jawa also takes responsibility to make sure that it is on the cutting edge of technology. State-of-the-art technologies are combined with experience across a variety of functional needs to generate world-class software. It is done using a technique that they call the Jawanese Magic. 2.3.5

Trust

Being a software development company that are often handed with highly confidential “proof-of-concept” prototyping projects, intellectual property rights is an important issue in Code Jawa. Often, temptations are imposed on the employees to recognize that a new idea that clients have entrusted to Code Jawa for development is a "big idea." Like programmers in the US and Europe, the temptation may at times are too great. Therefore, the company have very stringent policies on how coding is done to ensure that highly sensitive materials are handled only within its offices. Employees are routinely reminded of the results of any breach of client's confidentiality, including immediate dismissal and aggressive criminal action. 2.4

Development Methodology

Code Jawa focuses on a hybrid Iterative/Evolutionary SDLC that proceeds from specification to design through an iterative construction phase. Only when the final design is agreed upon, then they move on to final coding, qualifying and deployment. This ensures that lessons learned during prototyping can be incorporated as new specifications leading to needed design changes before final delivery. The goal is to deliver the software that clients actually need and then to be there for the next phase evolution.

• Figure 1 Code Jawa SDLC

11

2.5

Core Competencies

Code Jawa’s core competencies roots from its vast experience in developing IT solutions. Although most of its projects are rapid prototyping, proof-of-concept solutions, often clients renew the contract to include construction of the final system for deployment or commercial use. The following lists the main areas of Code Jawa’s core competencies: 2.5.1

Mobile Applications



Mobile portal with SMS, Interactive SMS, WAP and VRU delivery channels



Custom handheld applications on Palm and Pocket PC;



Mobile location personalization



Subscriber acquisition, management, and administration business processes



Third party rating processes - micro-billing



Profiling and dynamic content management and delivery

2.5.2

Online Payment and Banking Solution



End-to-end mobile banking based on WAP and SIM Toolkit



End-to-end Internet banking



Payment gateway solutions for banks and online/offline merchants

2.5.3

Custom Server-side Component Development

Server-side components are the heart of Code Jawa’s solution framework. Collectively called the Code Jawa Applications Framework (CJAF), they are loosely coupled components existing independently across multiple servers. Together they provide foundations for myriad solutions such as: •

E-Business and E-Commerce



Back-end, legacy system integration business information systems



Custom XML-based browser applications



Personalized content management and delivery systems

2.6

Company Culture

Code Jawa has a loosely-bound culture – office formality is not considered essential by its employees. To enhance creative atmosphere, the management does not pose artificial barriers to the programmers. As an element of its core strategy, Code Jawa emphasizes on strong internal communications in its 12

development team. The programmers are encouraged to discuss their issues with their colleagues; even those colleagues that are not directly related to his project. 2.7

Organization Chart

Code Jawa focuses on a team-based organization structure. This structure results in a compact chain of command with minimal bureaucracy. In correlation with the “talk” part of the 5 Ts strategy, each member of the team is freely able to consult freely to other members even though the consulted team member is not related to the particular project.

Iwan Tantra CTO

Stephen Tahjar Software Engineer

Craig Owensby CEO

Dion Software Engineer

Johan Cindra Software Engineer

Isak Rickyanto Software Engineer

Krishna W Karang Project Manager

Denymon Software Engineer

Ryan Wijaya Web Designer

The intern was placed in the team as a Software Engineer Intern. This position is equivalent to other software engineers only differing in terms of pay, work times, and benefit policies.

13

3 System Description This section describes the product of the work that was done during the internship period. It is a subset of the System Description document produced during development. The internship assignment in Code Jawa was to implement the prototype version of MTC. Regarded as a personal edition, this is proof-of-concept prototype is to be used internally in Code Jawa offices. On its success, Code Jawa will continue the development of the full-fledged enterprise version for commercial use. 3.1

Development Methodology

The development of MTC follows Code Jawa’s iterative evolutionary model. Initially, a Functional Description and System Requirements Specification document is written to establish the initial specification of MTC. Then the development continues iteratively in a bottom-up manner, developing the lowlevel components and core functionalities prior to other functionalities. 3.2

Product Functions

MTC is a system that allows a company to monitor its project resources. The term resources would be interpreted as human resources, time resources and information resources. MTC is not made to be a supervisor for each project team member, but it is made to optimize progress by monitoring some significant variables of an ongoing project, which are: • • •

Applications that are used by each team member within a day Time activities on employee’s workdays (how do they spend their working time?) At the end of each project, MTC would be able to create a report that shows the working pattern of each team member (what application that is mostly used, what kind of activity that they mostly spend), and another report to the client that include chargeable times for invoice purposes.

The goal of MTC is to provide reports that: • • •

Show the daily activities of the employee. Show how much time spent on each kind of activity. Show the activities done on a project and how much time spent in it.

This information would allow managers to gain input on efficiency improvement as well as justifying work product to clients. The main advantage of MTC compares to other project management tools or activity-tracking tools is that with MTC users are occasionally reminded to enter in ongoing activities as it happens. This feature overcomes the problem with traditional activity tracking system. With traditional tools, the users will have to intentionally open the system and manually enter in work information, which is done at the end of the day -- or worse, accumulated at the end of the week. Accuracy of this method is obviously questionable because most programmers 14

hate to document. With MTC, documentation is done subconsciously during work time. 3.2.1

Use Cases

Query Application Usage

Log current activity

<>

Creat e Project MTC System

Query Idle Time

generate

MTC User

view

Report

Project Profile

<>

Edit Project

The MTC system queries the user’s activities while he/she is working on the computer. It occasionally asks the user “What you were doing?” and records various states of the computer at the time. It also records the start/stop times of the activities and categorizes those activities. The user may also explicitly ask MTC to record the current activity. Activities are related to a project. Therefore, MTC provides basic functionalities to create and modify project data. This includes a project’s profile and other information regarding the project. The activity data are then used to generate reports in various views. It serves to assess the user’s activities on various projects. Reports may be generated at any time, and are based on the currently available data. 3.3

Scope

MTC Personal Edition focuses on monitoring the activities for an employee during work time. It is meant to be personal – placing the user at the center of the system, providing full control on it.

15

Pr oject Subdirectories

Initial Project Subdirectories

initialized by

0..*

0..*

works in

1..*

1 MTC User

1 Project Profile 1..*

0..*

has

Activities

1.. 1

1

initialized by

1..1

1 Profile Template 1

Specifies

0..*

consists of

(f rom Bu si ne ss Use -Case Mo del)

1

1

1

1

1

has

Project

An application may be used in more than one project.

0..*

Project Applications

Initial Activity Types

1

0..1

User Preferences 1..1

External Activities

Categorizes

Computer Activities utilized in 1

initialized by 1.. *

Activity Types

1..1

1..n

A user of MTC has a set of preferences that determines the system’s behavior for that user. The user works on one or more projects that are monitored by MTC. A minimum of one project must exist in the system; this default is referred to as the non-project project. Every project has a profile that determines the activity types, project applications, and directories that contains the project’s files. MTC store a list of known applications, some of which are used in one or more projects. Categorized by activity types, an activity may be an external activity or a computer activity. Not using computers, external activities are those that MTC are not able to specifically monitor. While computer activities are monitored directly by MTC. Each computer activity involves the use of an application. A project template defines the initial settings for a project. These predefined options are the activity types and subfolder names that will be used for keeping the project files. There are several pre-defined templates provided by the system. They are available for selection when the user creates a new project. 3.4

System Architecture

Physically, MTC is separated into two parts: a small agent module and a large client module. The agent module listens to system messages, while the client module implements the majority of MTC’s functionalities.

16

hook notifications

Agent

window messages

Windows System mtcagent.dll

process boundary

Main Window

method calls

Business Logic

method calls

mtcclient.exe

DataAccess Objects

SQL queries

Local Database

BDE Engine

Placed in the dynamic-link library mtcagent.dll, the agent module listens to the system’s messages by inserting itself into Windows’ global hook chain. It is called by Windows at several events, and then the client module is notified of that event as requested. The client module receives agent notifications and then processes those messages. Located in the main executable, mtcclient.exe, it implements the entire user interface, the business logic, and the data access objects layers. Agent messages are received by the main window, processed by the business logic, which then may manipulate the database using the data-access objects. The main window listens for agent messages posted in its message queue. The agent messages are received in the form of a user-defined window message. Upon reception of this message, the main window decodes it and then calls the appropriate method in the business logic layer. The business logic layer contains the business-processing parts of MTC. Apart from receiving event notifications from the main window, it also runs autonomously as a different thread separate from the main user interface. The data access object layer manages the interaction between the business logic and the database. It handles data-manipulation requests from the business logic and implements them as SQL queries to the local database. The personal edition of MTC uses a local (file-based) database. This allows MTC to be used without requiring a database server. The local database uses the Borland Paradox database engine, the default engine provided with Borland C++ Builder, the development environment used in constructing MTC. Each user of MTC owns a copy of the schema instance. In this setup, database security is enforced by the operating system by protecting the data files that make up the database. 3.5

System Components

3.5.1

Agent

As previously described, the agent module is a dynamic-link library which implements callback functions that monitors events in the Windows global hook chain. It installs WH_CBT, WH_KEYBOARD and WH_MOUSE hooks.

17

The WH_CBT hook callback function monitors for window-activation events. While the WH_KEYBOARD and WH_MOUSE callback functions monitors for keyboard and mouse activities, respectively. When the agent receives a hook notification, it then posts it to the client window through a user-defined window message. Since a posted window message cannot carry much data with it, extra data that accompany the hook notification are placed in the agent’s data area organized as a queue. It is called the agent message data queue. The data items are then retrieved by the client window upon receiving notification from the agent. Being a global hook, the module may be called from within different processes, thus different address spaces. Therefore, it requires a shared data area to maintain its data across the different processes that it may be placed. The shared data is implemented as a fixed-size buffer in a file-mapping object. Access to the buffer is moderated through a mutex object, one of several synchronization methods provided by the operating system. Although mutex objects are suspected to be slower than critical section objects, the former is selected because it may be shared among processes. The shared data area contains the client’s window handle, the agent’s hooks handles, agent message data queue, and the number of references to the data area. The queue is implemented as a circular buffer which size is set at compile time of the agent. Initially, the queue is empty and the handles are set to zero. The client initializes the agent by calling the InstallHooks() function in the agent. This function takes a window handle of the client window that will receive the agent’s notifications. Only one window at a time may be listening to the agent; subsequent requests will be ignored. When the client is about to terminate, it should call the RemoveHooks() function in the agent so that it will remove itself from the Windows global hook chain. Removal of the hooks also allows another listener window to be registered with the agent. If the client terminates unexpectedly -- or otherwise its window handle becomes invalid -- the agent will detect this condition and automatically removes itself from the hook chain. The agent notifies the client by placing the message data in its internal queue and then posting a UWM_AGENT_NOTIFY user-defined window message to the client’s message queue. When the client receives this message, it must call GetAgentMessageData() function to retrieve the message data from the agent’s queue. Agent messages are of type AgentMessage struct. It contains the message type and a union containing the detailed data of the message. The following are the types of messages that may be sent by the agent. Message Type

Meaning

AM_NULL

This message has no meaning; therefore, it should not be handled.

AM_CBT_ACTIVATE

A topmost window has been activated.

AM_KEYPRESS

The keyboard was pressed. 18

The mouse was moved or its buttons was pressed.

AM_MOUSE

3.5.2

Client

The client receives agent notifications via its main window, TFrmMain. The main window processes the notifications and then calls the appropriate methods in the business logic layer. Classes in the business logic then manipulate the database through the classes in the data access object layer. 1.. 1

ActivityMonitor

TFrmMain 1

1.. 1

1

1

MonitoringState

State_A

State_C

State_B MonitoringState1

ActivityState

ActivityContext 1

State_E

State_D

State_F

MonitoringState3

MonitoringState2

MonitoringStateIdle

The business logic that interfaces with the main window is the ActivityMonitor class. It is a thin wrapper around an instance of ActivityContext, which the latter is an active class descended from the VCL TThread class. Business processing is primarily done in the ActivityContext class. It is an extended state machine implemented by employing the state pattern. The state machine runs in its own thread, separate from the user interface. Each of the state class is a singleton class, subclass of ActivityContext. These singleton classes stores their data not in their own instances, but as member variables in ActivityContext. The data access classes are ProjectDAO and ApplicationDAO. These classes perform the database manipulation upon request of the classes in the business logic layer. Their operation is supported by value objects that functions as objectoriented counterparts of the database records. 3.6

Database Design

This section describes the database schema of MTC. It lists the tables, its fields and the relations between those tables. The personal edition of MTC uses a local (file-based) database. This allows MTC to be used without requiring a database server. The local database uses the built-in Borland Paradox engine. The field types are specified using Paradox’s type names. 19

Each user of MTC owns a copy of the schema instance. In this setup, database security is enforced by the operating system by protecting the data files that make up the database. 3.6.1

Working Tables

This section describes the tables actively used by MTC during its operation. These tables are continuously updated while MTC is running. project project_id: AUTOINC project_status status_id: AUTOINC

status_id: AUTOINC (FK) project_name: VARCHAR(40) description: BLOB(1,1) project_start: Timestamp project_finish: Timestamp root_folder: Alpha(18) dt_lastchanged: Timestamp

status_name: VARCHAR(40) dt_lastchanged: Timestamp

project_application application_id: AUTOINC (FK) project_id: AUTOINC (FK)

folder_exists: BOOLEAN dt_lastchanged: Timestamp

activity_name: VARCHAR(40) description: BLOB(1,1) dt_lastchanged: Timestamp

executable_file: VARCHAR(255) application_name: VARCHAR(255) description: BLOB(1,1) file_exists: BOOLEAN dt_lastchanged: Timestamp

dt_lastchanged: Alpha(18)

project_folder project_id: AUTOINC (FK) folder_name: VARCHAR(255)

project_activity_type project_id: AUTOINC (FK) activity_type_id: AUTOINC

application application_id: AUTOINC

application_project_file application_id: AUTOINC (FK) project_id: AUTOINC (FK) folder_name: VARCHAR(255) (FK) file_name: VARCHAR(255) (FK) dt_lastchanged: Alpha(18)

project_activity project_id: AUTOINC (FK) activity_id: AUTOINC activity_type_id: AUTOINC (FK) application_id: AUTOINC (FK) folder_name: VARCHAR(255) (FK) file_name: VARCHAR(255) (FK) description: BLOB(1,1) activity_start: Timestamp activity_finish: Timestamp dt_lastchanged: Timestamp

project_file project_id: AUTOINC (FK) folder_name: VARCHAR(255) (FK) file_name: VARCHAR(255) file_exists: BOOLEAN dt_lastchanged: Timestamp

Project

The project table contains the records about the various projects that are managed by MTC. Activities recorded by MTC will always be related to a project. Additionally there is a project called non-project that may be used to associate activities that are not normally related to a project. This default project has a project_id value of 0. Project Field Name

Type

Constraints

Description

project_id

Integer

Primary key

The project’s unique identification.

status_id

Integer

Foreign key to

The project’s current status. The status names are defined by the project_status table.

project_status (status_id) project_name

Varchar(40)

None

The name of the project. This name should be unique, but it is not required to be so.

Description

Blob(1,1)

None

A free-form text that describes the project. 20

project_start

Timestamp

None

The project’s start date.

project_finish

Timestamp

None

The project’s finish date.

root_folder

Varchar(255)

None

The root folder in the local computer which contains all of the data files relating to the project.

dt_lastchanged

Timestamp

None

The last time this project’s record was updated.

Application

The application table contains a list of applications that are used by the projects. This table always contains an application record called no application that has an application_id value of 0. Application Field Name

Type

Constraints

Description

application_id

Integer

Primary key

The application’s unique identification.

executable_file

Varchar(255)

None

The name of the application’s executable file, specified without a path specification. This field should be unique, but it is not required to be so.

application_name

Varchar(255)

None

The descriptive name of the application. This name should be unique, but it is not required to be so.

description

Blob(1,1)

None

A free-form text that describes the project.

file_exists

Boolean

None

Unused

dt_lastchanged

Timestamp

None

The last time this application’s record was updated.

project_application

The project_application table acts as a many-to-many link between the project table and the application table. This table lists which applications are used by which projects and vice-versa. project_application Field Name

Type

Constraints

Description

application_id

Integer

Primary key and foreign key to

Specifies the application involved in the relation. 21

application (application_id) project_id

Integer

Primary key and foreign key to

Specifies the project involved in the relation.

project (project_id) dt_lastchanged

Timestamp

None

The last time this record was updated.

project_status

The project_status table acts as a lookup table for project status. It defines the allowable values for a project’s status. project_status Field Name

Type

Constraints

Description

Status_id

Integer

Primary key

Uniquely identifies the status name.

Status_name

Varchar(40)

None

The text used to name the status. This field should be unique, but it is not required to be so.

dt_lastchanged

Timestamp

None

The last time this record was updated.

project_activity_type

The project_activity_type table defines the activity types available for each project. A project has its own types of activities. These activity types are used to categorize the various activities for MTC. For every project there is always a default activity type called uncategorized activity. This activity type as an activity_type_id value of 0. project_activity_type Field Name

Type

Constraints

Description

project_id

Integer

Primary key and foreign key to

Defines the project that this activity type belongs to.

project (project_id) activity_type_id

Integer

Primary key

Uniquely identifies this activity type.

activity_name

Varchar(40)

None

The name of the activity. This name should be unique, but it is not required to be so.

description

Blob(1,1)

None

Free-form text about the activity 22

type. dt_lastchanged

Timestamp

None

The last time that this activity type was updated.

project_activity

This table stores the basic unit of activity stored by MTC. Activities are categorized by an activity type, and are related with a project and an application. project_activity Field Name

Type

Constraints

Description

project_id

Integer

Primary key and foreign key to project

Defines the project that this activity belongs to.

(project_id) activity_id

Integer

Primary key

Uniquely identifies the activity

activity_type_id

Integer

Primary key and foreign key to

Defines the type of this activity.

project_activity_type (activity_type_id) application_id

folder_name

Integer

Varchar(255)

Foreign key to application (application_id)

States the current application during this activity.

Foreign key to

Unused

project_file (folder_name) file_name

Varchar(255)

Foreign key to

Unused

project_file (file_name) description

Blob(1,1)

None

Free-form text describing the activity.

activity_start

Timestamp

None

The starting date/time of the activity.

activity_finish

Timestamp

None

The ending date/time of the activity

dt_lastchanged

Timestamp

None

Unused

project_folder

The project_folder table is only partially used and is present to facilitate further development. project_folder 23

Field Name

Type

Constraints

Description

project_id

Integer

Primary key and foreign key to project

Defines the project that this folder belongs to.

(project_id) Folder_name

Varchar(255)

Primary key

The folder’s name

Folder_exists

Boolean

None

Unused

Dt_lastchanged

Timestamp

None

Unused

project_file

The project_file table is currently unused and is present to facilitate further development. project_file Field Name

Type

Constraints

Description

project_id

Integer

Primary key and foreign key to project

Defines the project that this file belongs.

(project_id) Folder_name

Varchar(255)

Primary key and foreign key to project_folder

Defines the folder that this file belongs.

(folder_name) File_name

Varchar(255)

Primary key

Unused

File_exists

Boolean

None

Unused

Dt_lastchanged

timestamp

None

Unused

application_project_file

The application_project_file table is currently unused and is present to facilitate further development. Application_project_file

Field Name

Type

Constraints

Description

Application_id

Integer

Primary key and foreign key to application (application_id)

Defines the application that this file belongs to.

project_id

Integer

Primary key and foreign key to project

Defines the project that this folder belongs.

(project_id) Folder_name

Varchar(255)

Primary key and foreign key to project_folder

Defines the folder that this file belongs.

(folder_name) 24

File_name

Varchar(255)

Primary key and foreign key to project_file (file_name)

Defines the file of the project file.

Dt_lastchanged

timestamp

None

Unused

3.6.2

Template Tables

This section describes the static template tables. These tables contain static data that are not normally updated.

project_template template_id: AUTOINC template_name: VARCHAR(20)

project_template_activity_type activity_type_id: AUTOINC template_id: INTEGER (FK)

project_template_folder folder_id: AUTOINC template_id: INTEGER (FK)

activity_name: VARCHAR(40)

folder_name: VARCHAR(255)

The project templates define the initial settings for a newly created project. Therefore, when new projects are created, several aspects of the project are already configured. Project_template

The project_template is the master table that stores the pre-defined project settings (project templates). Data contained in this and its detail tables are not meant to be updated. Project_template

Field Name

Type

Constraints

Description

project_template_id

Integer

Primary key

Uniquely identifies the project template.

template_name

Varchar(255)

none

The displayed name of the project template. This name should be unique. 25

Project_template_folder

The project_template_folder table defines the folder names of a project template. When a new project is created, the folders are auto-created based on the project template. project_template_folder

Field Name

Type

Constraints

Description

project_template_id

Integer

Primary key and foreign key to project_template

Defines which project template that this folder belongs.

(project_template_id)

folder_id

Integer

Primary key

Uniquely identifies the project template folder.

folder_name

Varchar(255)

None

Defines the folder’s name. This field should be unique. Subfolders are specified using a relative path name.

Project_template_activity_type

The project_template_activity_type defines the initial activity types for a new project. For each project template, there is always an activity type called uncategorized activity that has an activity_type_id value of 0. project_template_folder

Field Name

Type

Constraints

Description

project_template_id

Integer

Primary key and foreign key to project_template

Defines which project template that this activity belongs.

(project_template_id)

activity_type_id

Integer

Primary key

Uniquely identifies the activity type.

activity_name

Varchar(255)

None

The activity name. This field should be unique.

26

3.7

Behavioral Model and Description

This section describes the events responded by MTC and its internal state machine. These events are the primary inputs of the business logic layer, while the state machine comprises the majority of the layer. 3.7.1

Application Events

This section lists the application-defined events of MTC. These events are the primary triggers of the activity monitor state machine transitions. Application Switch

This event is raised when the user switches to another application. It is obtained by the agent from the CBT hook chain and then relayed to the client. Idle User

This event is raised when the user is idle. It is inferred when the keyboard and mouse has not been used for a prolonged amount of time. Keyboard and mouse activities are sent by the agent, and then the client will decide whether a significant amount of inactivity has occurred. Power Change

This event is raised when the computer is entering suspend or hibernate mode. It is obtained from a window message -- WM_POWER -- that is broadcasted to all toplevel windows upon power state changes. Hide Popup

This event is raised when the popup window – TFrmActivityPopup – has been dismissed by the user. The window reports this event to the activity monitor. File Write

This event is raised when a file located within the current project’s directory (or its subdirectories) is written. File writes are detected by the TDirectoryMonitor component, and notified to the activity monitor via the main form. 3.7.2

State-Transition Diagram

This section provides the state-transition diagram of the activity monitor. It is implemented in the ActivityContext class as an extended state machine. In order for the diagram to be comprehensible, it only depicts the significant state transitions of the machine.

27

The last known currentApplication is automatically recorded as an activity

MTC Start up

application switch

Monitoring 1 no application switch for tpShortApp seconds

(B) note currentApplication

The popup dialog displays the last known currentApplication application switch no application switch for tpLongApp Monitoring (C) display seconds 2 application popup user is idle

(F) record idle time

popup dialog answered

application switch

(A) Record currentApplication

(D) record application usage activity answer popup dialog

user is idle

(E) Record last activity before going idle

tpPeriodicPopup elapsed

Monitoring 3

Monitoring Idle time (popup displayed) user is idle

There are three time parameters involved in the state machine: tpShortApp, tpLongApp, and tpPeriodicPopup. These parameters are configured at run-time, and must consist of increasing values in the order listed. That is, tpShortApp < tpLongApp < tpPeriodicPopup. Initially, the system is in the Monitoring 1 state. At this state, it waits for the user to switch application. When another application becomes active, it records the application in the (A) Record currentApplication state. The system will then automatically return to Monitoring 1. When any one application have been active for tpShortApp seconds, the system will assume that the user is working on the application. It then proceeds to state (B) note currentApplication to record the current application as active and being worked on. Afterwards, the system will move to state Monitoring 2. When in Monitoring 2 and the user have not switched applications for tpLongApp seconds, it is assumed that he/she is doing a significant activity in the application. Therefore, a popup window is displayed asking the user about the activity in progress. The system moves to state (C) display application popup in order to show the popup window. On the contrary, if the user is only using an application for a short time – thus switch to another application – the system will move back to state (A) record currentApplication. Since the state Monitoring 2 assumes that an activity is taking place, it is expected that the keyboard or mouse is being used – there are key presses and/or mouse clicks/movements. If that is not the case, then the user is considered idle. The system then proceeds to state (E) record last activity bofore going idle and then to the Monitoring Idle Time state. In this state, the popup window is displayed along with a timer that shows how long the user has been idle. When the user answers the popup window and then closes it, the system will be in state (F) record idle time and then goes to state (B) note currentApplication. 28

When the system is in state (C) display application popup, it will display a popup window which prompts the user to enter information about his/her current activity. Should the user fills in the activity information then closes it, the system will move to state (D) record application usage activity to record the information given by the user. On the other hand, if the popup window is displayed for a very long time and there is no keyboard/mouse activity, the user is considered idle. In this condition, the system moves to state (E) record last activity before going idle. After recording the activity information in state (D) record application usage activity, the system will then proceed to the Monitoring 3 state. Should the user switches to another application, the system will go back to state (A) record currentApplication. If the system remains in this state for longer than tpPeriodicPopup (which by default is set to one hour), the system will move to state (C) display application popup to periodically ask the user what he/she is doing. As in most other states, if there is no keyboard mouse/activities for a significant amount of time, the system will move to state (E) record last activity before going idle. The following table maps the state names in the previous state diagram to each of the implementing state classes pictured in the class diagram in section 3.5.2. Each class that implements a state is a leaf class (lowest in the inheritance hierarchy). State Name

Implementing Class

Monitoring 1

MonitoringState1

Monitoring 2

MonitoringState2

Monitoring 3

MonitoringState3

(A) Record currentApplication

State_A

(B) note currentApplication

State_B

(C) display application popup

State_C

(D) record application usage activity

State_D

(E) record last activity before going idle

State_E

(F) record idle time

State_F

Monitoring idle time (popup displayed)

MonitoringStateIdle

3.7.3

File Monitoring Algorithm

The file monitoring code is done in the TDirectoryMonitor component. This component watches a directory for file-write events in the directory and its subdirectories. When one or more file are written, the component generates an OnLastWrite event for each file, providing the event handler with the full path name of the file, along with its timestamps of before and after the write had happened. 29

: Activ ityMonitor

: TFrmMain

: TDirectoryMonitor

: TFile Wr iteMonitor

Current Project Selected

get Current Project directory

Activate file monitoring on the Current Project Directory

Create TFileWriteMonitor thread instance

Start TFileWriteMonitor thread

Initialize table of file timestamps for the files in the monitored directory

Waiting for file writes thread terminated a file was written

Begin directory scan

For all files, compare the last-write timestamp to the one in the table. Record the modified file as the current file being worked on

Notify the activity monitor that a file write has occurred Activity monitor notified

Generate an OnFileWrite event for each modified file Event Generated

End directory scan Clean-up thread instance

File Monitoring Algorithm

TDirectoryMonitor relies on the Windows API function FindFirstChangeNotification

to monitor the directory. When called with a directory name, the function provides a handle that can be blocked upon until there are certain types of events happened to the files within the directory. The component creates a thread (an instance of TFileWriteMonitor) that block on this object to wait for file-write events. Prior to blocking on the returned handle, the thread records the timestamps of all files within the monitored directory. Then it blocks on the given handle, waiting for file-write events to occur. When it unblocks, it then re-scans the files for changes in its last-write timestamp. When the timestamp change, the component raises the OnLastWrite event for the file.

3.8

User Interface Design

This section describes the general user-interface flow of MTC. It provides the state diagrams of the user interface, along with sample screenshots of each state. Since 30

the user interface consists of Windows-based forms, the state diagram is drawn without explicit returning state transition lines. Add... Manage|Applications...

TFrmApplicationMgmt

TFrmEditApplication Edit...

Manage|Report...

Settings|Application List... TFrmGenReport

Startup

Project|New...

Report|By Project

Report|By Period

TFrmNewProjectWizard

TFrmProjectMgmt Project|Edit...

TFrmMain

Manage|Projects... Settings|Preferences

Manage|Exit

TFrmEditProject

TFrmConfigDialog Manage|Preferences

shutdown

Edit...

TFrmAboutDialog

Add...

Help|About MTC...

Help|About MTC... TFrmActivityPopup

TFrmEditProjectActivityType

Log Activity

Figure 2 MTC User Interface States

3.8.1

TFrmMain

This is the main form that is presented at MTC startup. It displays the current project and provides a set of commands to access more functionalities of MTC. The current project drop-down box also serves to set the current project. Activities that are being monitored by MTC are related to this project. This form is automatically hidden when it loses keyboard focus. Clicking on MTC’s tray icon will re-display the form, which by default will be placed on the upper-right quadrant of the screen.

31

3.8.2

TFrmApplicationMgmt

This form functions as the user interface in managing the list of applications known by MTC. It provides functionalities to add, modify, and remove application records. The form is displayed as a modal dialog box. 3.8.3

TFrmEditApplication

This form is used to add or modify an application’s record.

32

3.8.4

TFrmGenReport

This form is used to generate reports about the activities that are monitored by MTC. It may generate three types of report. They are annual report, daily project report, and summarized project report. 3.8.5

TFrmProjectMgmt

The project management form is used to create new projects, modify existing projects, and access most of MTC’s functionalities.

33

3.8.6

TFrmNewProjectWizard

This form serves to assist users in creating a new project. It guides the user stepwise in creating the project. Select Project Type

In this step, the user is presented with a list of pre-defined project templates. These templates will determine the default settings for the next steps in the project creation.

34

Enter Project Information

This step instructs the user to enter the project’s name, it’s status, start/finish dates, and enter a description about the project. Define Project Activity Types

A list of available activity types of the project is displayed. This list is populated according to the selected project template. The user may add, modify, or remove these activity types before continuing to the next step.

35

3.8.7

Define Project Folders

This step defines the project’s root folder and its subfolders. The root folder by default is derived from the project’s name and placed under the user’s My Documents folder. The list of subfolders is obtained from the project template specified earlier in the project. Upon completion of this step, the project’s folder and subfolders are automatically created. Work on Project

This is the final step of the wizard. The user is provided with an option to make the newly created project as the current project.

36

3.8.8

TFrmEditProject

This form allows the user to modify the information about a project. They are the project’s profile, activity types, applications, and its folders. Profile

Activity Types

37

Applications

Folders

38

TFrmEditProjectActivityType

This form allows the user to add or modify an activity type of a project. TFrmConfigDialog

This form allows the user to modify the time parameters of MTC’s activity monitor and its database path. TFrmAboutDialog

39

This form displays MTC’s version and copyright information. TFrmActivityPopup

This form serves to gather information about the user’s current activity. Apart from being invoked by user-interface commands, it may also be occasionally displayed by the activity monitor. 3.9

Testing Environment

MTC was tested on three personal computers aside from the inter’s own development PC. They are, the CTO’s notebook, the project manager’s notebook and one of the software engineer’s workstation. Specifications of the computers are as follows: FIC Notebook • • • •

Windows 2000 Professional Edition, service pack 2 Pentium II 366 Mhz 128MB RAM 5.9GB Harddrive

Toshiba Notebook • • • • •

Windows 2000 Professional Edition, service pack 1 Pentium II 200 Mhz 128MB RAM 10GB Harddrive Dell Notebook

Dell Notebook 40

• • • •

Windows XP Professional Edition Pentium III 700Mhz 128MB RAM 10GB Harddrive

Mugen Workstation • • • •

Pentium III 800Mhz Windows 2000 Server, service pack 2. 256MB RAM 40GB Harddrive

3.10 Test Cases Test Name

Flow Description

Test Result

Remarks

Create Project

Open the project window and chose New Project Wizard

Success

A new project was created.

Edit Project

Open the project window and double-click on a project

Success

The Project’s data was displayed, ready for editing.

Log Activity

Open the MTC main window and click on log activity.

Success

The Log Activity dialog was displayed.

Hibernate Computer

Start MTC in debugging mode. Use other applications for a while and then hibernate the computer.

Success

The activity monitoring engine moved to State_A just before the computer hibernates.

Generate Report

Open the project window then choose Report|By Project...

Success

The project report is displayed on-screen ready for printing.

41

4 Project Execution This section describes the project’s execution during the internship. It describes how the project was re-opened, and timelines its continuation. Provided along with the timelines are the grounds on why the timeline was set, taking human factors into account 4.1

Materials Provided

Being a postponed project, the design of MTC was partially worked on. Code Jawa provides the intern with several documents that elicits the ideas for MTC as a software product. The following describes those documents. Because of copyright restrictions, they cannot be included here in the report. 4.1.1

User Interface Narrations

Alternatively called user stories within Code Jawa, these documents describe in a storytelling manner on how a user will use MTC in his or her day-to-day activities. These stories are arranged chronographically from the time the user starts MTC until he or she shuts down the system. There are several versions of this document, each provided by different members of the Code Jawa team. 4.1.2

High-Level Description – System Requirements Specification

HLD-SRS documents are provided to the client as part of Code Jawa’s software development methodology. It contains abstract description for the system. Since HLD-SRSs are made prior to the agreement on a Letter of Intent, they are deliberately made vague to inhibit copyright infringements in case the client decides to employ other software development firm. In case of MTC, the HLD-SRS document is made for internal use only. Included in the document are the general description, functional description, technical description, and release plan. 4.2

New Design

Continuing the preliminary design by Code Jawa’s team, the intern produced a Functional Description – System Requirements Specification document. In Code Jawa’s methodology, FD-SRSs are provided to the client when a contract has been agreed. They build on the previous HLD-SRS to provide a more detailed description of the system. The intern wrote an FD-SRS document for MTC. The FD-SRS of MTC details those sections that are still vague in the HLD-SRS. In addition to those contained in HLD-SRS, the document includes sections such as system design architecture, behavioral model and description, and database table definitions.

42

4.3

Project Plan

Initially, the project schedule is set optimistically. The schedule was based on the intern’s previous experiences working in academic assignments and several software development projects. A small amount of buffer time was always provided at the end of each phase to anticipate minor setbacks. The development of the system was to be divided into three phases. They are the planning, construction, and documentation stages. Not much analysis was done since the project is primarily a proof-of-concept prototype. The first phase was to establish a preliminary design of the system that also serve as a plan for its implementation. In this phase, a document entitled Functional Description and System Requirements Specification was written. This document was to act as a guide in the implementation process that followed. The second phase is the system construction. Further divided into two subphases, it consists of primarily writing and debugging program code. Coding in a bottom-up manner, the first sub-phase was to construct the lower-level functionalities that will be required to test the rest of the system. The second subphase was to implement the rest of the functionalities while continuing the testing of the system. ID 1

Task Name Design/Planning

2

Requirements Specification

3

System Architecture Plan

4 5

W

Feb 3, '02 S T M

F

Feb 17, '02 T S W

Mar 3, '02 S T M

F

Mar 17, '02 T S W

Mar 31, '02 S T M

F

Apr 14, '02 T S

W

Apr 28, '02 S T M

F

May 12, '02 T S W

May 26, '02 S T M

Ju F

Evaluate System Architecture Implementation / Debugging

6

Low-Level System Components

7

User Interface Components

8

Complete Prototype

9

Evaluate Design

10

Re-design architecture

11

Implement re-design

12

Alpha testing

The final phase was system documentation. In this phase, the source code was to be cleaned up and augmented with comments that would be the source of the generated documentation. Additionally, a System Description document was to be written. This document, along with the documentation automatically generate the source code, serves to assist programmers in the maintenance and further developments of the system. 4.4

Project Realization

The first few weeks, the project was ahead of schedule. The requirements specification phase was done without much problem. Development continued smoothly to the low-level components, and the data-management functionalities smoothly. Unfortunately, at the end of March, the project schedule was disrupted because of an incident -- unrelated to the project -- that was experienced by the intern. Although not impacting any physical damage, this incident heavily affects the intern’s schedule and morale. Therefore, the project is intermittently disrupted. Rough periods occurred at April-May, where the development continued out-ofsite. At the start of April, this method of work went well. At mid April, a milestone 43

release was made. This release revealed that an extensive modification of the activity monitor was required. Development then continued to adjusting the activity monitor and completing the last set of features. During the final phases of development, the people at Code Jawa were occupied with another project. Therefore, the out-of-site method was a bit difficult because of communications barriers. Although the gross period was more than expected, when calculated on an hourly period the project was completed on time. Finally, the project was completed at September 2002. The project results a working prototype of the MTC system, and its documentation that will assist Code Jawa’s developers to further extend and maintain the system. The System Description documentation consists of two parts: •

Human-written document that provides a global overview of the system.



Generated documentation from the source code comments that provides detailed descriptions of each classes, methods, and functions.

ID 1

Task Name Initial Briefings

2

Draft System Requirements

3

Studying Code Jawa Methodologies

4

Project Planning

5

System Requirements

6

Study Code Jawa Frameworks

7

Code Preliminary Frameworks

8

System Requirements

9

Agent Module and Framework

10

Entity-Relationship Diagram

11

Agent Module and Framework

12

User Interface and Project Management func

13

Activity Management functions

14

Preliminary Business Logic

15

Idle Session Monitoring

16

Application Switch Monitoring

17

Research Low-level API functions

18

Business Logic Redesign

19

Re-implement new design

20

Re-implement activity monitor

21

Stabilize Agent Module

22

Bug fixes

23

Feedback

24

Bug Fixes

25

Plan for New Project Wizard

26

Implement New Project Wizard

27

Implement Project Reports

28

Meeting for New Project Wizard

29

Implement Project Reports

30

Implement Configuration Dialog

31

Bug fixes

32

New requirement on reporting

33

Debugging Reporting

34

Testing

35

System Description

36

Source Code Documentation

37

Code File Monitoring component

38

Integrate File Monitoring component

39

System Description

40

Debugging

41

Testing

6, '02 T

S

Feb 3, '02 W S

Mar 3, '02 T M

F

Mar 31, '02 T S

Apr 28, '02 W S T

May 26, '02 M F

Jun 23, '02 T S W

Jul 21, '02 S T

M

Aug 18, '02 F T

Sep 15, '02 S W

44

5 Impact Analysis The advent of MTC enables Code Jawa to more closely monitor the progress of its programmers. Some of the reports generated by MTC may be given to the client in order to keep track of the progress of the project and to justify the costs associated with the project. This prototype of MTC will initially be used by Code Jawa’s Chief Technology Officer to ensure that the activity monitor state machine implemented in the system is suitable for the typical workflow of a programmer or an analyst. Should the system proved effective, it will be used by the programmers of Code Jawa. The flexibility of the state pattern implemented in the machine allows for easy modification of its behavior. After Code Jawa’s internal use of the system, MTC is planned to be extended into an enterprise version. In this more advanced version, the system will comprise of a client-server system in which it will act as a project-management system as well as a monitoring tool. The product will be one of Code Jawa’s mass-market packaged products intended for companies that possess a large amount of workers whom intensively work with computers. These companies will not only include other software development organizations, but also consultants, advertising companies, Internet-content companies and publishing companies. Any computer-intensive, project-based organizations will benefit from the use of MTC.

45

6 Concluding Remarks In this section, the intern provides some conclusions that are obtained from the internship period. These are personal opinions of the intern, and do not reflect any of the company’s views. Additionally, the intern also provides some suggestions both to the company and to other interns of the faculty. 6.1

Job Experience

Working in a small company as a software developer has the advantage of freedom and independence. It allows one to interact better with other employees in the office, and there is less bureaucratic overhead to comply. The hacker environment that is common in small companies allows one to use the preferred development tools better suited for the job, instead of the tools dictated by management because of company policies. On the other hand, a small company may not possess the rigidity of more mature organizations. The lack of procedures and standards sometimes require the programmer to invent his/her own, which may conflict with others. These include the style of source code comments, documentation formats, and especially development methodology. What may be a professional trait as a programmer is the lack of diversity in the job. Since coding is the main job function, most work time is spent in front of a PC, churning out or correcting program code. This may be the cause of the lack of social and communication skills pertinent in most programmers. Different from those open-source hackers that are also required to document their code and communicate with users, it seems that a running software and extensive feature set are the topmost priorities for closed-source, small-company programmers. Past successes may also become an obstacle for naïve software developers. Being over-confident, the intern did not anticipates that the amount of stress and the interference of other problems external to the project might hinder the productivity of the developer. Attending to classes full-time at 18 credits, having an internship (which officially worth three credits, but in reality takes at least 20 hours a week not including transport overhead), and teaching a class for three credits a week seemed like an easy thing to do at first. Now it is apparent that the amount of activity incurred (although still being manageable), lead to a significant amount of stress. The carelessness caused by the intense pressure in turn allows an accident to occur, which eventually disrupts the whole activities of the intern. 6.2

General Suggestions

It would be advantageous if new programmers to the company are given a quickstart guide to ease their adaptation to the organization’s practices and norms. This guide should introduce the company’s standards, methodologies, and the facilities provided (such as the company’s LAN and groupware system). 46

In the areas of development methodology, it may be useful to provide a CASE system that guides both programmers and project managers in the course of each project. The methodology should be augmented with standardized forms and guidelines for the documents involved in the project, including the requirements specification and system description documents. 6.3

Suggestions Related to the Project

Currently adhering to the work patterns of Code Jawa’s CTO, the state machine of MTC’s activity monitor may not suite to other employee’s work habits. Ideally, research should be done to elicit common work patterns of computer-intensive workers, including their use of applications, patterns of keyboard/mouse activities, and the time spent between read/think/write cycles during work. Acknowledging that this type of psychological research may be expensive, it may be worthwhile in order to perfect MTC’s monitoring engine, which in turn enables the system to provide better reports about the employee’s activities.

47

7 Bibliography Austern, Matthew H. Generic Programming and the STL: Using and Extending the C++ Standard Template Library. Addison Wesley Longman, Inc, 1999. Borland. Borland C++ Builder Help. Inprise Corporation, 2000. Booch, Grady, et. al. The Unified Modeling Language User Guide. Addison-Wesley Longman, Inc, 1999. Cormen, Thomas H, et. al. Introduction to Algorithms. The Massachusetts Institute of Technology, 1990. Gamma, Erich, et. al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Publishing Company, 1995. Microsoft. Microsoft® Win32® Programmer's Reference. Microsoft Corporation, 1996. Pressman, Roger S. Software Engineering: A Practitioner’s Approach Fifth Edition. McGraw-Hill Higher Education, 2001. Solomon, David A, Mark E Russinovich. Inside Microsoft Windows 2000 Third Edition. Microsoft Press, 2000. Telles, Matt. High Performance Borland C++ Builder. The Coriolis Group, Inc, 1997. Whitten, Bentley, et.al. System Analysis and Design Methods. McGraw-Hill, 1999.

48

Related Documents


More Documents from ""