Wednesday, July 22, 2015

Basics of Software Testing - Part-II : System/ Environment

A little background about this - Each person may have their own way of testing or finding issues. They may not necessarily find my method helpful to understand the basics, this is something i'm trying to generalize for the new comers in software/ firmware testing. My intention is to make a series out of it, if i can and get enough motivation to write the basic stuffs.



Few more basic things- On my previous post I tried to give an basic idea of Software Testing. It was mostly to get an idea what / how we do testing. This was meant for the people who does not have idea about software testing but more or less has some literacy about the Software.


the “System” /Environment for software to install and run:
I’m only going to describe about the following topic in details form software testing point of view and/or that are relevant to our testing (avoiding the technical jargons/ definitions).


Operating System (OS):
Most of us know that software runs on an operating system. We need to have some basic idea about the operating system as well. Windows is (one upon a time, used to be) one of the favorite platform for software. Now a days there are many other operating system like Linux, Android, Apple OS etc that allows to run software/ application to perform some functions. I’m more familiar with Windows operating system and thus will provide specific info on windows.    


  1. 32 or 64 bit: OS can also be a 32-bit or 64-bit operating system. Windows 7, 8, 8.1 all of these supports both 32 and 64 bit operating system.


  1. Installation Path: Depending on the 32/ 64 bit, it installs the software on different location. For Windows 32-bit OS, all the software goes under the “C:\Program Files\<software folder>”. Under this folder it copies all the executable files along with dependent library files.


For a 64 bit machine, if the software is a lagecy software (that is meant to be for 32 bit), then the installation will go under the “C:\Program Files(x86)\<software folder>”. If the software itself meant to be for the 64 bit on a 64 bit machine then it will be under “C:\Program Files\<software folder>”.


  1. Data files: Since WIndows 7, most of the programs data/ configuration file goes under some hidden folder “C:\Program data\<software folder>” or under “C:\Users\<UserName>\AppData\Roaming\<software folder>”. Small programs that does not use big databases may use this folder to put the data file.


It is important to know that, both these “C:\Program Files\” and “C:\Program Data\” folder requires Administrative Privilege to install / access.
  1. Sometimes the versions of the OS also plays a role. For windows they have Professional, Home, Enterprise etc versions. Depending on the nature of the software, it may be necessary to have an idea of different version of the operating system.


Hardware (H/W):
Basic ideas needed about the followings:
  1. Storage devices - Hard Disk Drive, Optical Drives, USB drives. Need to know how much data it can hold, how much free and how much occupied.


  1. Memory - Memory or RAM is needed to run programs on demand. RAM makes it easier/ faster to access program/ data as needed. The more the memory, usually, the better the performance would be (with some exceptions).


  1. Processor-  Need to know whether it’s a 32 bit or 64 bit Processor. Need to know the basic requirement to run a software on a machine. If a software requires to run on 64 bit machine, you won’t be able to install it on 32 bit machine and its operating system.


  1. Port - Again, depending on the nature of the program, it may needed to have an overall idea about using COM (Serial) Port, USB to Serial Port. Port is a path to communicate with the program and the external hardware.


DataBase:
In order to store data, software needs some form of structure to save and retrieve data. This could be file base or could be using database. Following are some common databases that are used for the software. As a software tester we might need some basic knowledge about the followings as well. To work with databases, one need to know the SQL. SQL is the query language that can be run on the relational databases. Each database may have their own syntax, but they will have the same basic idea.


  1. Oracle - By Oracle group. Relational Database, supports multiple user, supports network access, heavy weight, requires more dedicated hardware resources.


  1. MS SQL - By Microsoft. Relational Database, supports multiple user, supports network access, heavy weight, requires more dedicated hardware resources.


  1. MYSQL - Bought by Oracle, used to be open source program.Relational Database, supports multiple user, supports network access and lightweight.


  1. MS Access - Used to a popular database by Microsoft. It is vulnerable, does not support multi user, has to be one instance, does not support network access.


  1. Any other databases - there are few other databases. Depending on the nature of the job or the company's interest they might choose to use different database.


File Base:
For smaller software/ application, it may not be necessary to have a database for storing the data. It could be a flat file format, could be an XML format or could be any other filebase format.

Next Topics.... "Understanding of software"

Basics of Software Testing - Part-I : Basic Idea and Mindset

A little background about this - Each person may have their own way of testing or finding issues. They may not necessarily find my method helpful to understand the basics, this is something i'm trying to generalize for the new comers in software/ firmware testing. My intention is to make a series out of it, if i can and get enough motivation to write the basic stuffs.

Software Testing Basics:
A software is a program that takes some input, process it and then displays the output. That's the most generic statement for software. Software testing is to make sure it takes and displays the correct result and handles the invalid scenarios properly.

Example:
For example, lets imagine a software functionality that takes two input as A and B, then adds them up and display the result.
A + B = Result
Looking at it, you get the idea. Best case scenario would be : two inputs are 1 & 2 and then process the input with given operator and the outcome as 3. (1+2=3). 

And then you re-run the same program few times.


Testing ideas/ Mindset:
“Challenge” is the one of the key factor in testing.  When you were given software to test, you need to basically challenge the product to find out the issues out of it. Even that the expected outcome would be correct, our task to challenge it and try to break it from every possible angle.
It’s so simple. So what’s the big deal about it? From a testing point of view, first you have to have a mind- set that will tell you that the expected result will not always be equal to the input. Here are some things that I would consider:
  1. Two variable inputs- could be anything. Could be
    1. Empty/ Null- try with empty inputs
    2. Alphanumeric- try with non numeric inputs
    3. Numeric- try integer/ long numeric values,
    4. Real - try real/ big real number,
    5. Big floating point number - try floating point calculation,
    6. Negative number- try with negative number,
    7. Special characters - try different characters like space, !@#$%^&&*(_)


  1. Then comes the operator sign. It could be:
    1. Regular arithmetic operators  +, -, /,x,
    2. Empty/ Null,
    3. Numbers,
    4. String


  1. Then the result. It could be
    1. The expected result – may display the correct result,
    2. Unexpected result – on a 2nd run it may display the number with previous result,
    3. Error/ Exception – displays error/ exception (divide by zero, infinity etc)


  1. Output could be
    1. Nothing (not output at all, fall into infinite loop or something),
    2. Could crash the operating system,
    3. Output can cause out of memory,
    4. People can die
    5. Earthquake/ Tsunami may happen


These are some basic things that can happen on a simple software function. When you have the mind-set of challenging the outcome, you will figure out the ideas by yourself how you can break it. You have to think beyond the basic expectation. Even though the last point (4.d, 4.e) may or may not happen, but you have to prepare yourself with unthinkable.  
When a programmer writes the code, the first thing they do is to write the code to process the input and output. Then they write more lines of code just to protect from this kind of scenarios as mentioned above. And, as a human being and as a nature of the job, they will make mistake, may not think about all of the possible things an end user can possibly do. Tester’s task is  to think like the end user (with a bit of technical knowledge) and make the code less vulnerable to the unwanted scenarios.

Testing is challenging. It requires more patients and different angle to look at it. I personally take it as fun because programmers are little bit scare (or annoyed) of me. :-)

Next topics: System / Environment

Thursday, June 11, 2015

Do You Know Much It Cost to Open Up a Microsoft Account for a CHILD!!!

[Completely off the professional topic, but its a part of my QA life as well....]


My 3.5 yrs old like calling (video) using his tablet. He kind of expert now in this regard. I used to sign in with my skype account and he used to use it. Now a days, as its getting out of control a bit, i decided to open him one skype account for him so that he does not randomly call my contacts. When i went to create skype account, it tells me to signup for Microsoft account. So i went to create it, filling up all the info using his real birth date. After submitting info, Microsoft detected its a child account and thus they prompt with a screen where it says a parent has to login to verify this. So i did. Now comes the unexpected fun part. 



It prompt me with another thing- wants me to verify that i'm an adult. A page was displayed with credit card purchase option. They want to charge my credit card $0.50 (even though they will donate this money to charity). To open a child account, Microsoft basically charge money! I have not seen it for the adult. (I personally would not mind donating money for good cause. )




Why i'm screaming about it? It does not make any sense, at least for me. For a 3.5yrs old 
- it required to read all those text on screen
- and fill up all those fields, 
- with the capcha security question, 
- then, read the instruction again and tell their parent to come over have them log-in to this PC - and submit the credit card info! 

Really! Microsoft ! what a genius way to verify its an adult who is creating an account for his child. 

I understand that Microsoft wants to make sure it was not created without parents permission, but does not make sense either of their adult verification process. Btw, i had no issue creating a google account for my 3.5 yrs old.   

Wednesday, June 3, 2015

User inputs and App crash - hard to dealt with!

Input character sets are not impossible to define theoretically but in real world how many character set would we define to make test data is a question. With two recent issues in the real world makes it a common scenario that testing was done with limited number of sets.  

If an app is set to be used for a specific purpose or by specific group of people, it is little bit easier to define the guessable sets. When an app is open to use to the world, target audience is, to me, infinite (not theoretical infinite). It is pretty much unobtainable to go through different sets - symbols, group of symbol, symbols in specific sequence, combination of different symbols. Here I’m referring the symbols for letters and symbols. 

Little bit backtrack why I started to write this …. Within a week, I came to know two incidents – one with iPhone message app and another is skype app on windows. 

Skype is used for sending messages, which used to be their primary use at earlier time, now days like smart phone, skype has many other features. On the latest version of skype, if anyone sends a message with the characters “http://:” from a windows pc, it crashes skype and receiving a message with those characters make it crash as well. Then the option is to uninstall the skype and reinstall it. It MAY work as long as you did not have the history turned on at the time of sending/receiving message. If the history is on, skype will crash and will not run. There could be some other ways to handle it, but that surely is not desirable by the end user


Picture curtesy: http://venturebeat.com/ If you want you can read more in details from this link

Another similar thing happened recently with the iPhone message app. Someone received a text from a group message with some symbols/ letters (non-English) and when they open the message, the messenger app stopped working.  Users who receive a mysterious string of characters in a text are noticing their Messages app will consequently crash, and in some cases, the phone will automatically reboot, according to9to5.



Now, if we look into the Skype message again you will see there is a “:” after the http:// which makes it really unusual to type. User may accidently type it and this (can) happen.  Based on the probability it’s had much lower chances, but it happened. 

For the iPhone message, this is hard to understand any meaning of the symbols, all the Greek to me and it may be greek to the Greek people as well. Chances of such message may be <.00001% or even less. But it happened. 

There will be bugs and it may happen. I understand that as well. But the problem is, things like this is spreading on the internet. Some curious people are trying having some fun sending the text to other people. And as it crashes whoever is receiving this message making it a problem. 

Both of the companies are aware of this issue and most probably dealt with it already, from my point of view, how can I prevent it from happening. How can I predict such things so that it does not happen (or reduces the chance of happening) it the real world. This is an input for me and for the people working on my line. I might not have any exact way to deal with it now, but surely i'll try something different while testing considering these scenarios. 

Thursday, April 16, 2015

Battery drain issue with a cell phone case

Can you ever think about you installed a cell phone case and coincidently you are seeing the worst performance with your cell phone battery. Did it ever occur to you? I know it sounds *Different* and most cases it is not true but somehow I was experiencing something like that.


I bought a beautiful case for my big cell phone and I was excited to use the features the case offers.  It allows doing some activity through the cover’s upper part without actually flipping to the actual screen. Some common information like Clock, Date/Time, Weather, Steps count, Camera etc. Those are some common features that I can easily check without going flipping the cover. And it does few other things which are also awesome, but not related to this writing.


So, after installing it on my phone, my first day with the S View case was not quite pleasant. Usually, my cell phone runs down to around 70% after charged in the morning. On my first day, I charged it as usual and then when I was leaving office I pulled out my cell phone from my pocket and found it off. It was turned off. I tried to turn on, did not come up. I plugged the charger and found the battery was totally drained to 0%.


 I could not figure it out at the first place, was looking on the process and trying to understand what app was
draining the battery. Could not find anything that I can immediately recognize. So, I googled it like any others, found some forum post. People over there was discussing about the issue. Some of the reply was as full of sarcasm saying a case cannot drain battery. It’s the process that is taking the battery. Duh! I know it is the process but what process it could be that drains the battery- nobody replied or guessed.


So I looked into the process and found one process is draining more battery than anything and it’s a core process, not an app.
Some process name “Undefined Daemon (EUR)” was running which I could not recognized. All other apps were operating system app. I restarted the phone several times, no luck.



I was kind of noticing something after starting to use the case, it was displaying a message very frequently -“Searching using GPS”.  I thought it was trying to find the GPS and will be done once it finds it. I did not pay attention to that time.  I kept digging in different methods and places online. Finally found some post that started makes more sense, something that I can relate what I was seeing. It was about the GPS searching issue. Some process is trying to use the GPS and GPS could not find the location and kept trying until it drained the juice out of my cell phone.



Remember the features that I mentioned at the starting of my writing. So many wow features like “Weather”….. Weather, weather app uses the GPS and I chose to display that info with this new case that I bought. I explicitly turned on which features I want to see. I have chosen those displayed on my first picture.  I turned off my weather widget and there you go….  I solved it (not entirely me, people were discussing the possibilities are credited for it).


So many things to learn about and from… Something was not right with the firmware that I was using. I was using android 5.0.2 and when this case was originally introduced, was running on different version. Now there is a new version of android came out recently. Also, it could be very well specific feature by Samsung as well. I’m not sure whether it was fixed on the recent updates or not, at least somebody missed to test this features (probably assumed that very few people would use it or some other assumption). My learning from this is, when tester misses to test all the possible scenarios, it very much effect end users.  



Tuesday, March 3, 2015

De-motivating factors in Software Testing

People does not like reading negative stuff by nature. I'm not that happy as well writing about it.  I'm not the expert guy, nor I have seen all sorts company within this related industry, still, while working in this profession, I came to list few things that actually work as negative input for software testing.

Little background of writing this. Ever since I started this blog, many people around the world tries to access my blog contents. Some tries to read it for pleasure, some tries to find standards/ templates and some tries to motivate themselves in this Software Testing. From my blog statistics, I can get few ideas about those people who are looking over here. Few of the search criteria, actually, made me to write this new topic. For example, one person searched with "I feel useless in Software Testing". I felt little upset/concerned  about this. Why anyone in this field would feel something like this. That means, we have some factors that led us to have feelings like this. If I'm not that capable person in software testing, I would have find some other job. When anyone is searching with a topic like that, that means s/he wants to be in Software Testing and want to be good about it. 

So, going back to the main topic....What is causing us to feel like that? Following would be some of many factors that I was able to identify.

1. Person's Mentality- THIS I felt to be the first most factor for de-motivation. Not all people actually come from same background, nor mentality to accept negative things about themselves/ their work. We software tester are, by profession, bound to find negative things about the software. People who are building software, managing the software and testing the software must all have the mentality to accept negative comments about their creation ("Baby"). Developers must know that we will be working to find issues and not necessarily we will find everything. When we find something, trivial or critical, they should be honoring our task. Software tester works without the inner knowledge of the software. So, instead of criticizing them for not being able to find bigger issue than the one they reported, honor them by fixing their reported issues (as assigned/ prioritized by Manager). We work with the highest risk. We double check Developers creation. So they have a bit relaxed position that someone else will be picking up their mistakes.  QA person does not have that. Whatever he verifies goes to user and if anything happens in the field, QA will have to take the heat. 

QA person should also be sense-able about their task. They will have to use their brain to make things easier for the person who will be fixing this. 


2. ProcessNot every company has a structural process that follows the standard/ steps of SDLC. What method of SDLC used entirely depend on the company. At least some process of software development has to be followed. Company who produces software only, may have more proven structured process than the one who uses firmware on devices or a bank who developed/ maintain their banking software. I have mixed experience working on two types of those companies. I have seen a common pattern. Process is always hard to follow. Process make more side work and it may be less flexible. If we all follow the process, there will be less miss-communication

My experience tells me that people involved in this process, sometimes tends to work outside the process. And when people see that management is not that strict about it, it becomes more of a practice. For example, I have been assigned many times to test software and not to record them as official process (no entry in bug tracking system, verbal communication, email, word doc list etc.). Why I have been assigned like that in the first place is a different question. My point is, my management allowed developer to have that out of system work. For the sake of the product deadline, I did not argue about this. 

Another experience is, I tested one product, entered all the bugs in bug tracking. Seat together with management and developers. Assigned and Prioritized the bugs. Everything was looking promising. Then after a while, due to shortage of man power, priority of bug fixing became lowest and rhythm is gone. Personally, I like to pursue the bugs that I reported (no matter whether anyone likes it or not). I reported bugs and I want it to be fixed or at least my indication that someone will work on it.  

Not all the companies have complete specs to begin with, which actually leads to all miss-communication. If the gray area is not defined properly, then it makes some useless communication whether identify the reported issue as Bug or Issue or Enhancement. Think out all the possible scenarios or at least when testing team comes with those scenarios make a decision with involving developers. 

3. Environment - people, mentality, process, top management and other relates things makes the environment. When the environment does not understand the significance of testing, it starts to create all sorts of problem. Some examples below:

A quote from management "What is the status of the software?" asked in a meeting. Answer was given discussing the status with developer. Development is near to complete. So the top management getting the idea its complete and they were discussing the release/ marketing plan. I felt like I do not exists! Nobody cares whether that developed software is usable or not? Whether its tested or not! That's what I have seen multiple times in multiple companies.

Another example, another quote from management "Do not worry. You don't have test it to death. Nobody will be killed with this software". I do not test it just the shake of testing. I know and understand deadlines. I test the software so that people has less chance to get hurt. People may not get killed but they can be hurt by the software and those people even may sue the company for that. So, it is DAMMMN important to test the software even no one will be killed. 

4. Industry  - 20% less salary. and Its project basis mostly (3/6/12 months). 

I have seen companies who does not prefer to hire full time tester as according to them we don't have work all the time through out the entire SDLC. Philosophy is when you have some software build, then tester can work. Else he will just be a idle resource. Hence they don't need a full timer.

At the very end, it's more about  money than anything else. I'm sorry to say it this way, but that's the truth. Having the same background of education and experience in software industry, just for the demanded role, other people (especially in development) gets more importance, security and money. 

As a tester, when I have to give same effort and time, if I have to think about other things - job tenure/ security it automatically diverts myself from concentrating on testing. I'm not saying other people does not have to got through this, they does; it happens more frequent to us than others.   


I have not worked for Google or Microsoft or Facebook etc big companies. I do not know how they work. But I'm quite sure that no one from those companies will every search with "I feel useless in QA". Its the small to medium sizes, where most of us work and gets the feeling like this. I would not say i have seen many/ everything... these are some of my experience in this field. 


Okay, too much of negative words. At the very end, I would like to share one story ....
There was a company who build different devices, and usages software/firmware to run those equipment. It was a small company. Did not have that many employees. They had a development team working on.  Some people were testing their product as an ad-hoc basis. After a while they decided to hire a "Tester" as a contractor to see how it goes for 3 months as an experiment. They interviewed and hired a person. That person came from a different part of the world. That tester proved himself and company decided to hire him full time as "Test Engineer" before his contract end. Then after 3 years of that he was promoted to "Sr. Test Engineer". The job that started with a 3 months one did not end up there, it continued. 

Don't feel bad/ down, if you can prove yourself, you will be rewarded. 


Communication - it's very important in recruiting people

One of the common part of our professional life is we get mails from recruiters time to time regardless whether you are looking for job o...