IBM Rational Software Conference 2009 One Version of the Story: Using IBM® Rational® ClearQuest® as an SDLC Management Tool Jennifer McElroy Environment Management Analyst Allstate Insurance jen.mcelroy@allstate.com CRMA46 © 2009 IBM Corporation IBM Rational Software Conference 2009 Tracking Changes Question: Where are you tracking your changes, issues, risks, etc?? Microsoft Excel Word document on a share drive Database that was created for a specific application One or more ‘other’ defect/change tracking tools Posted as a ‘blog’ on a Windows SharePoint website Post-it Notes on a wall Now, how do you gather metrics on everything your Requirements, Development, Quality, Environment or Change Management teams are working on? Even bigger than that – how do you gather those metrics for globally distributed teams who are generating 40-50 releases per year? CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 2 IBM Rational Software Conference 2009 Agenda Background Allstate Implementation Details of Implementation DEMO Sample Timelines and Cost Lessons Learned/Conclusion Questions and Answers About the Speaker About Allstate Insurance Our Environment CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 3 IBM Rational Software Conference 2009 About the Speaker Certified as an IBM® Rational® ClearQuest® Administrator since 2006 An IBM® Rational® ClearQuest® Administrator for over eight years Working with IBM® Rational® ClearQuest® in both a multisite and non-multisite environments Written hook code in VB and PERL; most recently in PERL Everything in the schema being discussed today is written in PERL Working with IBM® Rational® ClearCase® for approximately six years developerWorks Articles: Enterprise Software Release Management (co-author) http://www.ibm.com/developerworks/rational/library/06/0925_lipien-haines-gan/ Accessing the ClearCase Automation Library from ClearQuest hooks (author) http://www.ibm.com/developerworks/rational/library/07/0410_haines/ Please feel free to stop me anytime to ask questions CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 4 IBM Rational Software Conference 2009 Allstate Insurance The Allstate Corporation is the nation’s largest publicly held personal lines insurer. A Fortune 100 company, with $156.4 billion in assets, Allstate® sells 13 major lines of insurance, including auto, property, life and commercial. Allstate® also offers retirement and investment products and banking services. Allstate® is widely known through the “You’re In Good Hands With Allstate®” slogan. Allstate is reinventing protection and retirement to help individuals in approximately 17 million households protect what they have today and better prepare for tomorrow. CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 5 IBM Rational Software Conference 2009 Our Environment Offshore servers for IBM® Rational® ClearQuest® running Windows 2003 with MS SQL Server 2005 Mastering site runs on MS SQL Server 2005 database cluster and has a separate Windows 2003 server to process IBM® Rational® ClearQuest® Multisite® jobs Each replica site has IBM® Rational® ClearQuest® Web running on a Windows 2003 server Each site has a team that range from 5-250+ people We are currently running version 7.0.1.0 with IBM® Rational® ClearQuest® Multisite® in the process of testing and upgrading to 7.1 IBM® Rational® ClearQuest® is integrated with IBM® Rational® ClearCase® CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 6 IBM Rational Software Conference 2009 Agenda Background Allstate Implementation Details of Implementation DEMO Sample Timelines and Cost Lessons Learned/Conclusion Questions and Answers Benefits of this type of implementation State-based Record Types Stateless Record Types CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 7 IBM Rational Software Conference 2009 Benefits Transfer records between teams Development > Environment Implement processes that provide a “natural flow” from one team to the next Multiple people working on one change Assists in Global Delivery Ensure that all work is accounted for in a release Track your issues and risks in the same place as your changes and defects – because one might affect the other Customizable choice lists Some choice list items may be applicable to more than one group – so why not reuse them? Choice list maintenance Problems using CQ dynamic choice lists Adding items Removing items Consistent processes and terminology between teams Granular Reporting Moves towards a more mature software configuration management process Support and enable regulatory requirements like Sarbanes/Oxley Act of 2002 (SOX) and the Capability Maturity Model Integration (CMMI) Producing consistent metrics Enforce repeatable processes Capture Audit Trails Increase speed-to-market CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 8 IBM Rational Software Conference 2009 Record Types Using a combination of stateful and stateless record types Stateful record types Using three stateful record types (Software Release, Incident and Work Request) Relate to each other (parent to child and sibling to sibling) Stateless record types Used to control the choice lists that are presented to users Using 26 stateless record types (too many to list here) Using only a few dynamic lists for lists that rarely, if ever, change Global PERL scripts are used to query for choice lists Can be marked ‘Inactive’ so users are unable to select from a choice list CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 9 IBM Rational Software Conference 2009 Stateless Record Types Each Stateless record type has two standard fields Business Unit Name Status (Active or Inactive) Can have relationship with other stateless record types For example: We have environment and application server Application server has a reference field to the environment record Create/modify of stateless records is restricted to the group who ‘owns’ it For example: Project Managers can create/update the Business Unit Project record type A member of the Administrator group can also update any look-up record CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 10 IBM Rational Software Conference 2009 Stateless Record Types (examples) Business Unit Name record Business Unit Application Server record CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 11 IBM Rational Software Conference 2009 Agenda Background Allstate Implementation Details of Implementation DEMO Sample Timelines and Cost Lessons Learned/Conclusion Questions and Answers Sample Choice List Script Record Relationships Stateful record type details State Transitions State based record field behavior Creating Work Requests Relating Records to each other - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Other fun featuresCRMA46 - Cloning Records, Archiving Attachments Tool 12 IBM Rational Software Conference 2009 Sample Choice List Script sub CL_Bus_Unit_Name { my @buchoices; my $PresentAllChoices = $session->GetNameValue("ALLOW_INACTIVE_VAL"); if ($PresentAllChoices eq "yes") { $is_active_value = "Active" } else { $is_active_value = "Inactive" } my $session = $entity->GetSession(); my $queryDef = $session->BuildQuery("Business_Unit"); $queryDef->BuildField("Bus_Unit_Name"); my $filter = $queryDef->BuildFilterOperator($CQPerlExt::CQ_BOOL_OP_AND); $filter->BuildFilter("State",$CQPerlExt::CQ_COMP_OP_EQ, [$is_active_value]); my $resultSet = $session->BuildResultSet($queryDef); $resultSet->Execute(); while ($resultSet->MoveNext == $CQPerlExt::CQ_SUCCESS) { my $busunit = $resultSet->GetColumnValue(1); push (@buchoices, $busunit); } return @buchoices; } CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 13 IBM Rational Software Conference 2009 Record Relationships Software Release Record (Parent) Incident Record (Child, Parent, or Sibling) Work Request (Child) CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 14 IBM Rational Software Conference 2009 Stateful record type details Software Release (parent or grand-parent) Specifies the release information Release Manager, Pre-Production Deployment Date, Production Deployment Date, Type of Release (Service Pack vs. Major Release), etc Can have many children (Incidents) CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 15 IBM Rational Software Conference 2009 Software Release Record State Transition Resubmit Submitted Duplicate Duplicate Deferred Declined Defer Assign Decline Assign Work On Worked On Deploy Deployed Close Closed CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 16 IBM Rational Software Conference 2009 Stateful record type details (cont…) Incident (the main record) Differentiated by a field - Incident Type Code An Incident can be a Defect, Change Request, Environment, Project, Issue, Risk, or Config Management Identifies the specifics about the request Headline, Description, Owner, State, etc.. Must be related to Software Release Record Can be related to other Incident records Can have many children records (Work Requests) Work Requests are created from an action (Create_Work_Request) on the Incident record Data is pre-populated from the Incident to the Work Request User has no other interaction with the WR during the creation Field behaviors are based on the Bus Unit Name and Incident Type Code CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 17 IBM Rational Software Conference 2009 State based record field behavior sub Incident_Field_Behavior { my $incidentType = $entity->GetFieldStringValue("Incident_Type_Code"); @Man_Defect = ("Bus_Unit_Line_of_Bus_Name", "Bus_Unit_Channel_Name", "Bus_Unit_Line_Number", "Geographical_State", "Bus_Unit_Company_Name", "Bus_Unit_Team_Name", "Identified_in_Build_Nbr", "Bus_Unit_App_Server_Name", "Bus_Unit_Environment_Name", "Identified_in_Iteration", "Identified_in_Test_Stage", "Bus_Unit_Project_Nbr", "Bus_Unit_Transaction_Type"); @Opt_Defect = ("Bus_Unit_Area_Impact_Name", "USD_Last_Update_Date", "Impacted_Files", "Bus_Unit_Inc_Source", "Risk_Category_Ind", "Help_Request_Code", "Risk_Impact_Code", "Risk_Mitigation_Text", "Next_Activity_Date", "Risk_Probability_Code", "Risk_Rank_Code", "Required_Date", "Severity_Code", "Inc_Typ_Code_Subcat", "Req_Team_Review_Ind", "Covered_in_Fixed_Price", "Deployment_Priority", "Impacts_UI_Ind", "Project_Active_Date", "Bus_Unit_IntroPhase"); ..... @Man_Issue = ("Bus_Unit_Line_of_Bus_Name", "Bus_Unit_Channel_Name", "Bus_Unit_Line_Number", "Geographical_State", "Bus_Unit_Company_Name", "Bus_Unit_Team_Name", "Next_Activity_Date", "Risk_Rank_Code", "Required_Date", "Severity_Code", "Bus_Unit_Transaction_Type"); @Opt_Issue = ("Bus_Unit_Area_Impact_Name", "Identified_in_Build_Nbr", "Bus_Unit_App_Server_Name", "Bus_Unit_Environment_Name", "Identified_in_Iteration", "Identified_in_Test_Stage", "USD_Last_Update_Date", "Impacted_Files", "Bus_Unit_Inc_Source", "Risk_Category_Ind", "Help_Request_Code", "Risk_Impact_Code", "Risk_Mitigation_Text", "Risk_Probability_Code", "Bus_Unit_Project_Nbr", "Inc_Typ_Code_Subcat", "Req_Team_Review_Ind", "Covered_in_Fixed_Price", "Deployment_Priority", "Impacts_UI_Ind", "Project_Active_Date", "Bus_Unit_IntroPhase"); ..... if ($incidentType eq "Defect") { foreach $field (@Man_Defect) { $entity->SetFieldRequirednessForCurrentAction($field, $CQPerlExt::CQ_MANDATORY)} foreach $field (@Opt_Defect) { $entity->SetFieldRequirednessForCurrentAction($field, $CQPerlExt::CQ_OPTIONAL)} } elsif ($incidentType eq "Issue") { foreach $field (@Man_Issue) {$entity->SetFieldRequirednessForCurrentAction($field, $CQPerlExt::CQ_MANDATORY)} foreach $field (@Opt_Issue) {$entity->SetFieldRequirednessForCurrentAction($field, $CQPerlExt::CQ_OPTIONAL)} ..... CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 18 IBM Rational Software Conference 2009 Incident Record State Transition Incident Record Incident Record Type = Change Request Type = Defect Incident Record Type = Defect This workflow is conditional – based on the Incident Type Code Incident Record Type = Change Request Clone Clone Submit Submit Resubmit Resubmit Submit Very hard to show a visual representation of it Duplicate Submitted Duplicate Deferred Duplicate Submitted Declined Declined Deferred Duplicate Analyzed Analyzed Duplicate Defer Defer Decline Client Review Decline Analyze Duplicate Analyzed Vs. Slot Ready for Review Client Review Approve Re-Review Approved Approved Re-Approve Slot Slotted Slotted Opened Open Open Opened Resolve Resolve Re-Open Re-Open Resolved Resolved Re-Open Test Test Tested Tested In_Progress In_Progress Close Close Test In Progress Closed Close Closed CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 19 IBM Rational Software Conference 2009 Stateful record type details (cont…) Work Request (Integrated with IBM® Rational® ClearCase® UCM®) Easily created Basically a disposable record since there is no interaction during submit Minimal workflow “Multiple owners” More than one person can be working to resolve a defect or a change request, this allows each developer to be able to check out/in code and have it associated with the task (incident). Captures all the change set information CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 20 IBM Rational Software Conference 2009 Work Request State Transition Re-Submit Declined Duplicated Submitted Duplicate Assign Reassign Decline Assigned Open Worked On Re-WorkOn Resolve Resolved Close Closed CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 21 IBM Rational Software Conference 2009 Creating Work Requests Used to track the individual work for a larger item Users create Work Requests from an action on the Incident record Makes sure the records are related to each other Doesn’t allow orphaned work requests out there Allows the record to be created very quickly No information to enter since it is contained in the parent record Basically just telling the developer – OK, go check out the code for this project Is used by the Business & System Analysts, Developers and Testers Does not need to be associated with IBM® Rational® ClearCase® related changes CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 22 IBM Rational Software Conference 2009 Relating Records An Incident must be related to a Software Release record when the user takes the “Slotted” action Incidents can be related to other Incidents, Software Releases or Work Requests Or a combination of all 3! A Work Request can only be related to a single Incident An Incident should only be related to a single Software Release We do not have this coded currently CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 23 IBM Rational Software Conference 2009 Cloning Executed via a button on the Related Records Tab Is a PERL script that uses the Build Entity feature Copies the values from all fields in the existing record to the new record Relates the records to one another If successful, tells user the entity was cloned and gives the new ID # If unsuccessful, tells the user why CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 24 IBM Rational Software Conference 2009 Archiving Attachments Regains used space IBM® Rational® ClearQuest® Multisite® copies each attachment to each site Improves Performance on queries Prevents changes from being made when they shouldn’t be Automated PERL script uses API Moves any associated attachments to NAS space Inserts a URL for each file into an “Attachment Log” field In case the file needs to be accessed Adds a note to indicate the attachment has been removed CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 25 IBM Rational Software Conference 2009 CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 26 IBM Rational Software Conference 2009 Sample Timelines & Cost Approximately 2 FTEs for 1500 hours Majority of time is spent gathering requirements Total Cost = hours * dollars/hour $300,000 = 3000 (hours) * $100 Conversion (from old schema) required data manipulation as some fields changed field types CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 27 IBM Rational Software Conference 2009 Lessons Learned Development team needs to understand the benefits of the Software Release record and integrated software tools, processes and project management discipline approach Use standards where possible Re-use things whenever possible Avoid duplicating data, processes or code Partner with an existing or establish a Governance Board for Software Tools and Processes Ensure the tool administrators understand the vision, the business environment and constraints Schedule requirements gathering sessions for several hours at a time Eliminates having to review what was discussed and decided at the last meeting Practice the conversion – document every step, every command before the actual move COMMUNICATE, COMMUNICATE, COMMUNICATE People are generally resistant to change, having a lot of communication will make your users feel more comfortable with what is about to happen Celebrate your successes! CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 28 IBM Rational Software Conference 2009 CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 29 IBM Rational Software Conference 2009 © Copyright IBM Corporation 2009. All rights reserved. The information contained in these materials is provided for informational purposes only, and is provided AS IS without warranty of any kind, express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, these materials. Nothing contained in these materials is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. References in these materials to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in these materials may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. IBM, the IBM logo, Rational, the Rational logo, Telelogic, the Telelogic logo, and other IBM products and services are trademarks of the International Business Machines Corporation, in the United States, other countries or both. Other company, product, or service names may be trademarks or service marks of others. CRMA46 - One Version of the Story: Using IBM(R) Rational(R) ClearQuest(R) as an SDLC Management Tool 30