Principles of Agile Testing through the Agile Manifesto

I am working on the Agile Testing article and had a hard time when it came to principles of Agile Testing. All the bloggers and websites have done a good job in listing various pointers as the principles. In this post, I have tried to understand the Principles behind the Agile Manifestothrough QA or Software Testing perspective:

1.    Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Each sprint in Agile must be a deliverable which satisfies the customer’s requirements. The value of the same is always appreciated much more when it’s bug free thus making through testing at each stage a mandatory. Regression testing is one area which generally takes a lot of time as the software starts evolving in later sprints. Automation of regression and unit test cases must be taken into consideration right from the beginning to curb this issue.
2.    Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
Changing requirements leading to issues in related functionalities is generally the top reason of defects and thus all deliverables must be tested thoroughly before UAT. At the same time, testers also need to make sure that their test suites are updated regularly. Getting the regular review of test cases from the users is also recommended to make sure the same is updated as expected.
3.    Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Many times, delivering a working product in shorter timescale leads to skipping the testing activities. This is one area; the teams need to sit together and find the possible solutions. Automated unit tests and regression tests combined with exploratory testing may be a savior in such situations. Automation does come along with maintenance cost but the same can drastically reduced when right automation framework with maximum shared objects and repositories is used thus making the individual scripts easy to maintain.
4.    Business people and developers must work together daily throughout the project.
Agile is all about evolving requirements. I think strong communication comes into picture in this principle. All the stakeholders: Development team, QA team, users/business analysts etc must be an integral part of core team and included in all communications in all cycles.
5.    Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
QA team in Agile are often ignored due to various factors – time being the most common. Just like all teams, the test team also need to be motivated and provided with required environments to perform their testing activities effectively.
6.    The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
This is one principle QA team also need to follow and understand properly. While there is a process for all the activities including raising bugs, but at the same time discussing the same with teams and providing their feedback on various details is equally important. Where-ever possible, all collaborating teams should be physically located together to save time and effort on emails and calls.
7.    Working software is the primary measure of progress.
All stakeholders must understand that a working software is primary goal of any project. The QA team should also focus more on getting the product deliverable instead of concentrating on breaking the system (which is the general mindset of testers). The data generated should be simple and easily understood by all stakeholders. Complicated reports with fancy metrics might look great on display but they do not guarantee client satisfaction. The only full proved method for client approval is a working software as per customer expectations.
8.    Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
The QA team should be included in all details and have the crucial responsibility of making sure that the test coverage is achieved to highest possible.
9.    Continuous attention to technical excellence and good design enhances agility.
The QA team must ensure that all testing activities starting from understanding and test case writing to execution and bug verification are performed properly. The development team also need to make sure that all inputs of test team are taken seriously. It’s is the joint responsibility of QA and development team which ensures excellence and quick delivery of quality products
10.  Simplicity–the art of maximizing the amount of work not done–is essential.
When I try to relate this with testing, ‘Unit Testing’ is the first term which comes to my mind instantly. Unit testing is the most basic of all and is often ignored the most. Making sure that the smallest unit of code is working fine is the first step to quality software.
11.  The best architectures, requirements, and designs emerge from self-organizing teams.
When I think of this principle with respect to testing, All the basics of testing seems to apply here. The QA teams need to ensure that the requirements are covered in the test suites, regression tests are regularly updated, right tools for automation are chosen and the team members are skilled enough to cope up with frequent changes in the requirements.
12.  At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

               The more frequently product is tested for its effectiveness, the more robust it becomes. Regression testing can play an important role while executing this principle.

See Also:

 
I tried my best to explain the principles with respect to QA or software testing mind. Please feel free to provide your inputs. I would be more than happy to edit or update any of the points.

Software Testing Abbreviations and Acronyms

Below is a list of Acronyms or Abbreviations I could collect from various sources on Google related to Software Testing

ABI
Application Binary Interface
ACC
Attribute Component Capability
AIAT
Artificial Intelligence Applications Testing
ALM
Application Lifecycle Management
AMC
Average Method Complexity
AMDD
agile model-driven development
ANSI
American National Standards Institute
API
Application Programming Interface
ASCII
American Standard Code for Information Interchange
ASTF
Automated Software Test Framework
ATP
Acceptance Test Procedure
ATLM
Automated testing lifecycle methodology
AUT
Application Under Test
BDD
Business Driven Development
BERT
Bit Error Test (Diagnostic Tests)
BIST
Built-in self-test (Diagnostic Tests)
BITE
Browser Integrated Test Environment
BFV
Bug fix verification
BR
Business Requirement
BRD
Business Requirement Document
BRS
Business Requirement Specification
BVA
Boundary Value Analysis
CASE
Computer-Aided Software Engineering
CAST
Computer Aided Software Testing
CCB
configuration control board
CDR
Critical Design Review
CE
Critical Error
CHAP
Challenge Handshake Authentication Protocol
CID
Configuration identification
CM
Configuration management
CMM
Capability Maturity Model
CMMI
Capability Maturity Model Integrated
CMP
Configuration Management Plan
CMT
Configuration Management Tool
COF
Cost of Failure
COQ
Cost of Quality
COTS
Commercial Off-The-Shelf Software
CR
Change Request
CRUD
Create, Read, Update, Delete
CTP
Critical Testing Processes
DDP
Defect Detection Percentage
DFD
Data Flow Diagram
DOM
Document Object Model
DSDM
Dynamic Software Development Method
DRE
Defect Removal Efficiency
EP
Equivalence Partitioning
ERD
Entity Relationship Diagram
ETA
Estimated Time of Arrival
ETL
Extract Transformation Load
FAQ
Frequently Asked Questions
FDD
Functional Design Document
FDD
Feature Driven Development
FMEA
Failure Mode and Effect Analysis 
FPA
Function Point Analysis
FTP
File Transfer Protocol
FVT
Function verification test
GUI
Graphical User Interface
GTA
Google Test Analytics
HIPO
Hierarchy, Input, Processing, Output
HLD
High Level Design
HP QC
Hewlett Packard Quality Center
IDD
Interface design document
IDE
Integrated Development Environment
IDEAL
Initiating, Diagnosing, Establishing, Acting & Learning
IDL
Interface design language
IEEE
Institute of Electrical and Electronics Engineers
ISO
International Organization for Standards
ISAKMP
Internet Security Association and Key Management Protocol
ISDN
Integrated Services Digital Network
lSLE
Integrated Software Lifecycle Environment
ISTQB
International Standard Testing Quality Board (Certification)
JAD
Joint Application Development
JDBC
Java Database Connectivity
JTC1
Joint Technical Committee 1
KBSA
Knowledge-Based Software Assistant
KLOC
Thousands of lines of code
KM
Knowledge Management
LCL
lower control limit
LCSAJ
Linear Code Sequence And Jump (a software analysis method)
LOC
lines of code
LSRT
Long-Sequence Regression Testing
MDD
model-driven development
MTBF
Mean Time Between Failure
MTTF
Mean Time To Fail
MTTR
Mean Time To Repair
MTTCF
Mean time to critical failure
MVP
Minimum Viable Product
NCSA
National Cyber Security Alliance
NDA
Non-Disclosure Agreement
NFR
Nonfunctional requirements
NIST
National Institute of Standards and Technology
NBS
National British standard
OCM
Operational configuration management
ODBC
Open Database Connectivity
OKRs
Objectives and key results
OLAP
On Line Analytical Processing
OLTP
On Line Transactional Processing
ORD
Object Relationship Diagram
OS
Operating System
OSI
Open Systems Interconnection
PA
Physical Audit
PCA
Performance and Coverage Analysis
PDR
Preliminary design review
PERT
Program Evaluation and Review technique Diagram
PIR
Post Implementation Review
PCRTS
Problem and Change Request Tracking System
PIM
Platform-Independent Model
PIM
Platform-independent model
POC
Proof of Concept
POF
Probability of Failure
POI
Poor Obfuscation Implementation
POST
Power- On Self – Test (Diagnostic Tests)
PSI
Platform-Specific Implementation
PTR
Problem trouble report
QA
Quality Assurance
QC
Quality Control
QMS
Quality Management System
QoS
Quality of Service
QUES
Quality Evaluation System
RAD
Rapid Application Development
RAT
Real Application Testing
RCA
Root Cause Analysis
RFC
Request For Change/Comments
ROI
Return on Investment
RIB
Reflexive User Interface Builder
RFP
Request for Proposal
RMI
Remote Method Invocation
RPF
Record and Playback framework
RST
Reverse Semantic Traceability
RTM
Requirements traceability matrix

SA
Structured Analysis
SADT
Systems Analysis and Design Technique
SCA
Static Code Analysis
SC
Security Checklist
SCA
Source Code Analyzer
SC
Standards committee
SCR
Software Change Request
SDD
System and software Design Document
SDK
Software Development Kit
SDLC
Software Development Life Cycle
SDP
Software development plan
SEI
Software Engineering Institute
SEO
Search Engine Optimization
SIR
System Investigation Report
SIT
System Integration Testing
SLA
Service Level Agreement
SLC
Software life cycle
SOA
Service Oriented Architecture
SQL
Structural Query Language
SQS
Software quality system
SQSP
Software quality system plan
SRD
Specification Requirement Document
SRR
Software requirements review
SRS
Software Requirement Specification
SMARTS
Software Maintenance and Regression Test System
SSH
Secure Shell
STAF
Software testing automation framework
STEP
Systematic Test and Evaluation Process
START
Structured Testing and Requirements Tool
STR
Software trouble report
STR
System trouble report
SIM
Subscriber Identity Module
ST
State Table
Sc
Security
ST
System Testing
STLC
Software Testing Life Cycle
SUT
System Under test
SUMI
Software Usability Measurement Inventory
TCAT
Test Coverage Analysis Tool
TCB
Trusted Computing Base
TDD
Test Driven Development
TDGEN
Test filelData Generator
TLS
The Transport Layer Security
TMM
Test Maturity Model
TOE
Target of Evaluation
TPA
test point analysis
TPI
Test Process Improvement
TPT
Time Partition Testing
TQC
Total quality control
TTCN
Testing and Test Control Notation
TTM
Test Traceability Matrix
TRR
test readiness review
TSR
Test Summary Report
UAT
User Acceptance Testing
UCL
upper control limit
UDF
unit development folder
UDDI
Universal Description, Discovery and Integration
UML TP
UML Testing Profile
USM
User-based Security Model
UTC
Usability-Test Candidate
UI
User Interface
UML
Unified Modelling Language
URI
Uniform Resource Identifier
URL
Uniform Resource Locator
V & V
Verification and Validation
VE
Virtual Environment
VM
Virtual machine
VU
Virtual Users
WIP
Work In Progress
WSJF
Weighted Shortest Job First
XML
Extensible Markup Language
XP
eXtreme Programming
XSS
Cross Site Scripting

Whale Done!: The Power of Positive Relationships by Kenneth Blanchard Ph.D., Thad Lacinak, Chuck Tompkins and Jim Ballard

Whale-Done-The-Power-of-Positive-Relationships-by-Kenneth-Blanchard-Thad-Lacinak-Chuck-Tompkins-Jim-Ballard

The Blurb:
A compendium of straightforward techniques on how to accentuate the positive and redirect the negative, increasing productivity at work and at home.

What do your people at work and your spouse and kids at home have in common with a five-ton killer whale?

Probably a whole lot more than you think, according to top business consultant and mega-bestselling author Ken Blanchard and his coauthors from SeaWorld. In this moving and inspirational new book, Blanchard explains that both whales and people perform better when you accentuate the positive. He shows how using the techniques of animal trainers — specifically those responsible for the killer whales of SeaWorld — can supercharge your effectiveness at work and at home.

When gruff business manager and family man Wes Kingsley visited SeaWorld, he marveled at the ability of the trainers to get these huge killer whales, among the most feared predators in the ocean, to perform amazing acrobatic leaps and dives. Later, talking to the chief trainer, he learned their techniques of building trust, accentuating the positive, and redirecting negative behavior — all of which make these extraordinary performances possible. Kingsley took a hard look at his own often accusatory management style and recognized how some of his shortcomings as a manager, spouse, and father actually diminish trust and damage relationships. He began to see the difference between “GOTcha” (catching people doing things wrong) and “Whale Done!” (catching people doing things right).

In Whale Done!, Ken Blanchard shows how to make accentuating the positive and redirecting the negative the best tools to increase productivity, instead of creating situations that demoralize people. These techniques are remarkably easy to master and can be applied equally well at home, allowing readers to become better parents and more committed spouses in their happier and more successful personal lives.

What I Felt About The Book

I saw this book on my manager’s desk and as usual was curious to know what he was reading. Honestly, when I first had a look on the cover, title and back page; I had the impression of another blabbering self help book. But still, I read the first few pages and was glad to find that the author(s) have chosen to teach the lessons through story telling.

ABC Of Performance
ABC Of Performance

What I Liked About The Book:
1. Short Book and thus short chapters having big font: Yes, the really like the books with font big enough to be read with naked eyes without much concentration. Full marks to the publishers for it.
2. Failure Scenarios: Generally, book like this skip the hardships people face while applying the underlying strategies or techniques. I really liked the part where Wes had trouble applying Whale Done Principles in his office. The detailing could have been better though.

What I Did Not Like About The Book:
Though it is a very very short book, I got the jest of all in less than half of pages. After that, everything was just the repetition of all excellent principles and it did get a bit boring.

In a very short book too, there were instances when I found myself nodding sharply and smiling at others. Picture below lines from the book:

Catching people doing things wrong is easy.

The very basic example is how we help and groom our kids with basic activities like walking. They never ever succeed in first attempt.

Good thing I didn’t spank the kids when they didn’t stand and walk perfectly the first time. We’d have had teenagers crawling around the house.

Another set of lines were around common gossip we all do when we see a person yelling for no reason – “must have got into a fight with the spouse”, “must have got a good hearing from the manager”and many more.

Ripple effect of GOTcha. The boss yells at one of his managers, that manager yells at one of his associates, who goes home and yells at his spouse, who yells at the kid, who kicks the cat.

And there were more:

When you’re dealing with an eleven-thousand-pound animal who doesn’t speak English, you do a lot of learning.

The more attention you pay to a behavior, the more it will be repeated.

You got to ac-cen-tuate the positive, e-lim-inate the negative, Latch on to the affirmative…

The one thing your competition can never steal from you is the relationship you have with your people, and the relationship they have with your customers.

And the final and most liked ones – i think;

Excel Error – Unable to read file followed by file format or extension is not valid

Sometime, the users suddenly start getting the error- “Unable to read file.”, every time a new excel sheet is opened.
In such situation, generally, the error appears every time the user opens an existing or even new excel file.

On clicking OK, another error is displayed as below.

When clicked Ok, the file opens fine.
Following is the solution which worked for me:
  1. Search for the “XLStart” folder in machine. It can also be at multiple locations.
  2. C:UsersAppDataRoamingMicrosoftExcelXLStart

  3. Delete the file – “~$Book.xltx”. or other corrupted file as displayed in the message.
  4. Open excel again to verify that the error message is not displayed now.

Enable ‘Create a new Excel report’ option in HP-ALM

Excel Reports in Quality Center or HP-ALM have always been quite useful in extracting various reports. One of the many advantages has been to export test cases from ALM to excel sheet for convenient use and reporting

From HP-ALM version 12, the option to ‘Create New Excel Report’ is disabled by default. It means, the user cannot create new excel report, but can view, edit and run existing reports (if any) from previous versions.

ALM: Create New Excel Report Option Missing
ALM: Create New Excel Report Option Missing
ALM: Existing Excel Reports
ALM: Existing Excel Reports
 However, the option to ‘Create New Excel Report’ can be enabled by site configuration parameter – ‘ENABLE_CREATE_LEGACY_EXCEL_REPORT’. Following are the steps to do so:
  1. Login to ALM site administration.
  2. Navigate to ‘Site Configuration’ tab.
    ALM: Site Admin Site Configuration
    ALM: Site Admin Site Configuration
  3. Look for the parameter – ‘ENABLE_CREATE_LEGACY_EXCEL_REPORT’. Double click to configure it.
  4. If the above parameter is not found, the site admin can create it by clicking ‘New’. Enter the details as below.
    ALM: Site Admin Site Configuration New Parameter
    ALM: Site Admin Site Configuration New Parameter

  5. Please note that the parameter name is case sensitive and must be entered in all Capital letters.
  6. Click Ok.
ALM: Site Admin Site Configuration Excel Report Parameter
ALM: Site Admin Site Configuration Excel Report Parameter

The users must log off and login again in order to see the changes being effective.
ALM: Create New Excel Report Option Enabled
ALM: Create New Excel Report Option Enabled

SAP Warning Message – “A script is attempting to access/attach SAP GUI” Upon Running Automated Script

While running an automated script on SAP GUI, a warning message – “A script is attempting to access SAP GUI” is displayed.

In some cases, the message can also be – “A script is trying to attach to GUI“. The solution to both is same.
This warning can be disabled with following steps:
  1. Launch to your SAP GUI application manually.
  2. Navigate to ‘Options’ as below or press “Alt F12” and click ‘Options.
    1. Select “Accessibility & Scripting”.

        1. Expand ‘Accessibility & Scripting’ and select “Scripting”.
        2. If the warning message is being thrown, the option “Notify when a script attaches to SAP GUI” would be checked. Un-check following options:
          1. Notify when a script attaches to SAP GUI
          2. Notify when a script opens a connection. Click “Apply” followed by “OK”.

        3. Please note that since the notification is now disabled, care must be taken to prevent the system from plausible threats and unwanted applications.

        Difference between “=” and “==” in Java

        One liner answer to this question would be:
        “=” operator is for assigning a value to a variable whereas “==” operator compares the objects’ location(s) with respect to memory.
        Thus,
        “=” is an simple Assignment Operator which assigns values of variable on it’s right side variable to the left side operand.
        “==” is a Relational Operator which checks if the values of two variables are equal or not. If yes then condition returns true otherwise, it returns false.
        For example, below code explain the operators on primitive variables like int, float etc.
        Primitive types are the most basic data types available within the Java language. There are 8: boolean , byte , char , short , int , long , float and double . These types serve as the building blocks of data manipulation in Java.
        public voidtestMain(Object[] args)
        {
                        int a = 5;
                        int b = 5;
                        int c = a+b;
                        System.out.println(“c=” + c); //This statement would print 10
                        int d = a;
                        System.out.println(“d=” + d); //This statement would print 5
                        int e = c;
                        System.out.println(“e=” + e); //This statement would print 10
                        if(a==b)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);
                        //The above would print True: a=b=5
                                                       
                        if(a==c)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);
                        //The above would print False: a=5 & c=10
                                                       
                        if(a==d)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);                 
                        //The above would print True; a=5, d=a=5(as initialized above), thus a=d
        }
        Thus, output of above piece of code is:
        c=10
        d=5
        e=10
        True
        False
        True
        Let’s learn some basics on ‘char’ first before proceeding to the example with ‘char’ variables. ‘char’ is a primitive type, and it can hold a single character or a Unicode/ASCII value.
        public void testMain(Object[] args)
        {
                        char a = ‘5’;
                        System.out.println(“Value of variable a=” + a);
                        System.out.println(“ASCII value of variable a=” + (int) a);
                                                       
                        char b = ‘5’;
                        System.out.println(“nValue of variable b=” + b);
                        System.out.println(“ASCII value of b=” + (int) b);
                        char c = ‘j’;
                        System.out.println(“nValue of variable c=” + c);
                        System.out.println(“ASCII value of c=” + (int) c);
                                                       
                        char d = (char) (a+b); //first adds the ASCII values of variables a and b which is 53+53=106; and then convert that ASCII value to it’s corresponding character which is ‘j’.
                        System.out.println(“nValue of variable d=” + d);
                        System.out.println(“ASCII value of d=” + (int) d);
                        char e = a;
                        System.out.println(“nValue of variable e=” + e); //This statement would print 5
                                                       
                        if(a==b)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);
                        //The above would print True: a=b=’5′
                                                       
                        if(a==c)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);
                        //The above would print False: a=’5′ & c=’j’
                                                       
                        if(a==e)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);                 
                        //The above would print True; a=’5′, e=a=’5′(as initialized above), thus a=e
        }
        Here is the output of above piece of code:
        Value of variable a=5
        ASCII value of variable a=53
        Value of variable b=5
        ASCII value of b=53
        Value of variable c=j
        ASCII value of c=106
        Value of variable d=j
        ASCII value of d=106
        Value of variable e=5
        True
        False
        True
        Below code explains the operators on reference variables like string.
        public void testMain(Object[] args)
        {
                        String a = “Smile”; //This statement creates a String Literal which points to a memory location in the String pool (which is shared) if it already exists. If it does not exists, it createsanew.
                        String b = new String(“Smile”); //This statement creates a String Object in the heap memory which is not shared.
                                       
                        if(a==b)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);
                        //this prints “False” because variable a and b are pointing to different memory locations.
                                       
                        String c = “Smile”; //This statement would store variable c in the same memory location as variable a
                        if(a==c)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);
                        //Since both a and c points to same memory location, thus having same data, it prints True
                                       
                                                                       
                        if(c==“5”)
                                        System.out.println(“True”);
                        else
                                        System.out.println(“False”);
                        //This comparisioncreates a new memory location for undeclared data “5”. Thus it would print false                                                          
                                       
        }
        Below is the output of above piece of code
        False
        True
        False
        Thus, the statement we gave in the beginning is actually correct but incomplete. The key to understanding here is the last word ‘memory’.
        So, the complete one line answer to the question would be:

        “=” operator is for assigning a value to a variable whereas “==” operator compares the objects’ location(s) in memory (Not the value).

        HP QC/ALM Create Project – ‘failed to get tablespace info’

        This is the second time I faced this issue and actually scolded myself for not documenting before. Here goes the problem.

        When when the user click ‘Next’ on following step:

        Following error message is displayed:

        This is generally because of the password mismatch for ‘System’ user in corresponding Database.

        The user need to contact the Database Administrator ion order to get the issue resolved (DBA team generally does not share the password for ‘System’ user.).

        Following information is needed while contacting the DB:
        1. Server Name – Displayed on the window above.

        Sometimes. the DBA might also ask for the connection string or the ‘SID’ for the Database server. The same can be fetched from:
        QC SiteAdmin -> DB Servers

        Following are the steps to update the password:
        1. Select the required DB server from left panel.
        2. Click on ‘Database Administrator Password’. Following window would be displayed.
        HP-QC-ALM-Update-Datadase-Admistrator-Password
        3. Ask the DBA to input latest DB password for System user and click OK.
        4. Click at ”Connection String’. Following window would be displayed.
        5. Click on ‘Test Connection’. Following window would be displayed.

        6. Do not update the password (It would be automatically updated) and click OK.
        7. If the password is correct and connection is established, message ‘The Connection String is Ok’ is displayed as below: 
                                                              
        8. Click OK, Close the ‘Ping DB Server’ popup and Connection string editor window.
        9 Go back to ‘Site Projects’ and try creating a project again. HP-ALM should now successfully pass through the erroneous step as mentioned above.

        Apache POIXML Exception: InvalidFormatException:Package should contain a content type part [M1.13]

        Problem:
        I received following error while using “Apache POI(XSSF API)” for reading xlsx file”.
        Exception occurred during playback of script [TC002_Login] [CRFCN0019E: RationalTestScriptException on line 45 of script TC002_Login – org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13].].
        Below is the error displayed in log file:
        • exception_name = org.apache.poi.POIXMLException
        • exception_message = org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
        • script_name = TC002_Login
        • script_id = TC002_Login.java
        • line_number = 45
        exception_stack = at org.apache.poi.util.PackageHelper.open(PackageHelper.java:41)
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:204)
        at SuperHelperClass.SuperScriptHelperlibrary.updateExcelReportScriptname(SuperScriptHelperlibrary.java:1018)
        at TC002_Login.testMain(TC002_Login.java:45)

        at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
        at org.eclipse.core.launcher.Main.main(Main.java:34)
        at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:178)
        at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:662)
        at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:269)
        at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39)
        Line number 45 read:
        updateExcelReportScriptname(DestReport); //DestReport is a string variable with path+filename
        The function ‘updateExcelReportScriptname’ is defined as below:
        public void updateExcelReportScriptname(String DestReport)
        {
                                FileInputStream file;
                                try {
                                            file = new FileInputStream(DestReport);
                                            XSSFWorkbook workbook;
                                            try {
                                                        workbook = new XSSFWorkbook(file); //Line NUmber 1018
                                                        XSSFSheet mySheet1 = workbook.getSheetAt(0);
                                                        XSSFRow myRow1 = null;
                                                        XSSFCell myCell1 = null;
                                                        XSSFCellStyle style = workbook.createCellStyle();
                                                        style.setAlignment(CellStyle.ALIGN_JUSTIFY);
                                                        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
                                                        style.setBorderBottom(CellStyle.BORDER_THIN);
                                                        style.setBorderTop(CellStyle.BORDER_THIN);
                                                        style.setBorderRight(CellStyle.BORDER_THIN);
                                                        style.setBorderLeft(CellStyle.BORDER_THIN);
                                                        style.setWrapText(true);
                                                        String excelData1[][] = new String[500][500];
                                                        int row = mySheet1.getPhysicalNumberOfRows();
                                                        excelData1[row][0] = getScriptName();
                                                        myRow1 = mySheet1.createRow(row);
                                                        myCell1 = myRow1.createCell(0);
                                                        myCell1.setCellValue(excelData1[row][0]);
                                                        style.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
                                                        myCell1.setCellStyle(style);
                                                        for(int cellNum = 1; cellNum <= 19; cellNum++)
                                                        {
                                                                    XSSFCell myCell = null; 
                                                                    myCell = myRow1.createCell(cellNum);
                                                                    myCell.setCellValue(“”);
                                                        }
                                                        file.close();       
                                                        FileOutputStream outFile =new FileOutputStream(DestReport); 
                                                        workbook.write(outFile);  
                                                        outFile.close();
                                            } catch (IOException e) {
                                                        // TODO Auto-generated catch block
                                                        e.printStackTrace();
                                            }   
                                } catch (FileNotFoundException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                }
                    }
        Solution:
        There are two reasons I could analyse which may cause this error:
        1. When I try to read ‘.xls’ file with my code and for ‘.xlsx’ files. There are different classes for xls and xlsx files namely:
        Classes to be used for XLS file: HSSFWorkbook & HSSFSheet
        Classes to be used for XLSX file: XSSFSheet & XSSFSheet
        Required one must be used accordingly.
        2. Sometimes, the same error is thrown even when the correct file format is used. The reason for this could be any of the below:
        • File is password protected
        • File is corrupted. For me, this was the case and I realized it when I tried to open the file and got bellow error. 

        Microsoft Excel Error for Corrupt File
         Hope this helps solve the problem. 

        Adding or Removing Site administrators in HP ALM

        Users of HP ALM can be added as site administrators. This can only be done by other site administrators. The first site administrator is created at the time of installation. Before adding the user as site administrator, it must be made sure that the user is added in HP-ALM. If the user is not added to HP-ALM, the site administrator window would not list the same in it’s find section.
        Following are the steps to add site administrators in HP ALM.
        1. Login to HP ALM Site Administrator URL.
        2. Click on ‘Site Users’ tab.
        3. Click on ‘Site Administrators’ button.
        4. Site Administrators window with list of existing site administrators is opened.
        5. Click on add button
        6. ALM users can be found by typing their names in find box. Once the match is found, the username would be highlighted in gray color.
        7. Click on ‘Add Selected Item’ button on top. The user would be added as Site Administrator.
        8. Similarly, the already added Site Administrators can be removed by selecting the user and clicking Remove button from the top.