Title = “Rudiments of Ruby : Level Zero.Four” ; puts Title
This exercise is more on strings, so far we have seen two different ways of injecting variables into strings, first one use something called “string interpolation” where #{} used.
name1 = "Joe" name2 = "Mary" puts "Hello #{name1}, where is #{name2}?"
The second way is using formatted strings instead of “string interpolation”
name1 = "Dhanasekar" name2 = "Jack Sparrow" puts "Hellow %s, where is %s?" %[name1,name2]
Here was an exercise to type a whole bunch of strings, variables, formats and print them.
x = "There are #{10} types of people."
binary = "binary"
do_not = "don't"
y= "Those who know #{binary} and those who #{do_not}."
puts x
puts y
puts "I said : #{x}."
puts "I also said : '#{y}'."
hilarious = false
joke_evaluation = "Isn't that joke so funny?! "{hilarious}"
puts joke_evaluation
w = "This is the left side of...."
e= "a string with a right side."
puts w+e
What you should see
There are 10 types of people. Those who know binary and those who don't. I said : There are 10 types of people... I also said : 'Those who know binary and those who don't.'. Isn't that joke so funny?! false This is the left side of...a string with a right side.
Extra credits
1. Go through this program and write a comment above each line explaining it.
2. Find all the places where a string is put inside a string. There are four places
Lets carefully note the strings that were put inside a string, in each line
Line 1 : #{10} – (not a) string ??, as it’s not having quotes
Line 2 : just variable assignment
Line 3 : another variable assignment
Line 4 : Binary and Do_not So is count 2
Line 5 and 6 : variable assignments
Line 7 : x count is 3 now
Line 8 : y so count is 4, so does this mean #10 in line one is not a string
Line 9 : variable assignment
Line 10 : Variable assignment but there is an injection of variable to the string, but that’s non-string assignment
Nothing found after line 10.
So, there are four strings that were put inside a string
1. Binary
2. do_not
3. x
4. y
3. Are you sure there’s only four place? How do you know? Maybe I like lying.
Ha..ha..ha… so, does this mean 10 and hilarious are strings? By the way was he lying in extra credit two or three? ![]()
I decide to use my life line GG (Google God
)
I couldn’t come to a conclusion if those two were considered as strings… that needs to be explored later again.
4. Explain why adding the two string w and e with + makes a longer string
This is called string concatenation, here two strings are just combined, practically there would be many times where you may need to combine any two of many strings available, based on the resulting conditions.
x = "Happy" y= " Learning" puts x+y
puts “Rudiments of Ruby : Level Zero.Three”
Exercise 5 : More Variables and Printing
It’s about “format string”. Every time you put double-quotes around a piece of text you have made a string. You can print the string, save them to files, send them to web servers, all sorts of thing. This exercise was about making strings that have variables embedded in them.
my_name = 'Zed A. Shaw' my_age = 35 # Not a lie my_height = 74 #inches my_weight = 180 #lbs my_eyes = 'Blue' my_teeth = 'white' # not a liemy_hair = 'Brown' puts "Let's talk about %s" %my_name puts "He's %d inches tall" %my_height puts "He's %d pounds heavy" %my_weight puts "Actually that's not too heavy." puts "He's got %s eyes %s hair" % [my_eyes,my_hair] puts "His teeth are usually %s depending on the coffee" % my_teeth #this line is tricky, try to get it exactly right puts "If I add %d,%d and %d I get %d" %[my_age,my_height,my_weight,my_age+my_height+my_weight]
The tricky line here was the arithmetic operations can directly performed on variables, the result would be assigned to corresponding variables embedded in the formatted string.
Extra Credits
1. Change all the variable so there isn’t the my_ in front. Make sure you change them everywhere, not just the place where you used = to set them
This exercise was definitely to make the programmer to habituate renaming variables correctly, if done. Quite often programmers change variable names assignment or declaration, but fail to change them in other parts of the code. The better way would be to use the editors ‘Find and Replace’ feature, but should be careful while applying Replace All.

2. Try more format sequencing.
Now time to try %f – Float? nothing flashed other than floating point.
Lets try out a floating format

It prints the number in floating values with six digit precision.
3. Search online for all of the Ruby format sequences
Googling times. Googling “format sequences in ruby like %d %f” resulted http://www.ruby-forum.com/topic/131303. This forum has a list of format sequences
b | Convert argument as a binary number. c | Argument is the numeric code for a single character. d | Convert argument as a decimal number. E | Equivalent to `e', but uses an uppercase E to indicate | the exponent. e | Convert floating point argument into exponential notation | with one digit before the decimal point. The precision | determines the number of fractional digits (defaulting to six). f | Convert floating point argument as [-]ddd.ddd, | where the precision determines the number of digitsafter | the decimal point. G | Equivalent to `g', but use an uppercase `E' in exponent form. g | Convert a floating point number using exponential form | if the exponent is less than -4 or greater than or | equal to the precision, or in d.dddd form otherwise. i | Identical to `d'. o | Convert argument as an octal number. p | The valuing of argument inspect. s | Argument is a string to be substituted. If the format | sequence contains a precision, at most that many characters | will be copied. u | Treat argument as an unsigned decimal number. Negative integers | are displayed as a 32 bit two's complement plus one for the | underlying architecture; that is, 2 ** 32 + n. However, since | Ruby has no inherent limit on bits used to represent the | integer, this value is preceded by two dots (..) in order to | indicate a infinite number of leading sign bits. X | Convert argument as a hexadecimal number using uppercase | letters. Negative numbers will be displayed with two | leading periods (representing an infinite string of | leading 'FF's. x | Convert argument as a hexadecimal number. | Negative numbers will be displayed with two | leading periods (representing an infinite string of | leading 'ff's.
I tried out most of the above format, and here are the results.

4. Try to write some variables that converts the inches and pounds to centimeter and kilos. Do not just type in the measurements. Work out the math in Ruby.
How I converted inches into centimeter, pounds to kilos?
This exercise needed Googling to find the solution, it’s no more a straight forward simple exercises. Slowly started learning the hard way ?!
j= 'Learning' puts " Happy %s" % [j]
Rudiments of Ruby : Level i.j
i = Zero j = Two
Exercise 4: Variables and Names
Last exercise dealt with simple math, numbers and using IVB as calculator. This exercise was about Variable and Names, the first of real programming terminologies and concepts.
Variable: “Variable is nothing more than a name for something so you can use the name rather than the something as you code” . I was searching to define a variable something of this kind
.
Here is the code for this exercise
cars = 100
space_in_a_car = 4.0
drivers = 30
passengers = 90
cars_not_driven = cars-drivers cars_driven = drivers
carpool_capacity = cars_driven * space_in_a_car
average_passengers_per_car = passengers/cars_driven
puts "There are #{cars} cars available."
puts "There are only #{drivers} drivers available."
puts "There will be #{cars_not_driven} empty cars today."
puts "We can transport #{carpool_capacity}people today."
puts "We have #{passengers} passengers to carpool today."
puts "We need to put about #{average_passengers_per_car} in each car."
After correcting few typos got the output.
Extra Credit : “When I wrote this program the first time I had a mistake and ruby told me about it like this”
"ex4.rb:8:in `': undefined local variable or method `car_pool_capacity' for main:Object (NameError)"
Simple! there was a mismatch between declared variable name and variable name called in puts. More mistakes more confidence.
Here’s more extra credit :
1. Explain why the 4.0 is used instead of just 4.
2. Remember that 4.0 is a floating point number. Find out what that means.
The 4.0 is a way to represent numbers in floating point format, so after arithmetic operations the results will be decimal numbers instead of (rounding off to )whole numbers. Floating numbers are very critical while performing arithmetic in banking, medical, scientific applications.
3. Write comments above each of the variable assignments.
# Cars variable to store the number of cars available
cars = 100
# A variable to store the capacity of each car
space_in_a_car = 4.0
# A variable to hold the driver availability
drivers = 30
# A variable that has the total number of passengers
passengers = 90
# A calculation done using variables, cars - drivers result stored in new variable cars_not_driven
cars_not_driven = cars-drivers
# Cars driven based on number of drivers available, so drivers will be assigned to cars_driven
cars_driven = drivers
# Calculate car pool capacity, which is cars driven multiplied by capacity of each car
carpool_capacity = cars_driven * space_in_a_car
# Average passengers per car is calculate be dividing passengers with cars_driven, result is assigned to average_passengers+per_car
average_passengers_per_car = passengers/cars_driven
puts "There are #{cars} cars available."
puts "There are only #{drivers} drivers available."
puts "There will be #{cars_not_driven} empty cars today."
puts "We can transport #{carpool_capacity}people today."
puts "We have #{passengers} passengers to carpool today."
puts "We need to put about #{average_passengers_per_car} in each car."
4. Make sure you know what = is called(equals) and that it’s making names for things
This is a major difference in the programming world from maths world, here = assigns the value (or resultant value) to a variable. In Ruby = does not mean RHS is equal to LHS. Instead, the value or resultant value of RHS is assigned to variable in LHS.
5. Remember _ is an underscore character.
I never underscore in such exercises
6. Try running IRB as a calculator like you did before and use variable names to do your calculations. Popular variable names are i,x and j.
This exercise helped to understand how # used in assigning values to variable inside puts statement. Here i think # is still interpreted as a commenting, but the { followed by the # let Ruby know that the following is a place holder for value to print. So it gets the value stored in the variable and write to the terminal.
Footer = Happy Learning
Puts "#{Footer}!!!
Rudiments of Ruby : Level Zero.One
Exercise 3: Numbers and Math( The subject I love the most
)
This chapter is about math symbols, I loved the way the author encouraged the math-haters to try this exercise.
“Do not worry, programmers lie frequently about being math geniuses when they really aren’t. If they were math geniuses, they would be doing math, not writing ads and social network games to steal people’s money”
Now to some serious business, this exercise starts with familiarizing most commonly used math symbols. Figure what operation is performed by those symbol, for the below code.
No surprises, there were some typos so resulted in error.
It was expecting a comma instead of a dot, that’s the difference I can make out from other statements, let see if replacing the dot with comma executes the script without any error. Previous error was not shown now, but there was some other error this time.
Undefined method ‘Puts’, looking at the code I was able to spot the problem quickly as the puts with capital P colour differs. How did I miss at first place? The reason is I was more focusing on the maths part, my brain already got familiar with puts and assumes may not make mistakes with puts.
Important learning : Ruby statements are case-sensitive
Now correcting those statements, the execution was successful.
Extra Credits
1. Above each line, use the # to write a comment yourself what the line does.
This exercise looked interesting as it helped me to analyse the way precedence of each symbol. Also commenting helped me to observe the results
puts “Roosters”, 100-25*3%4 prints
Roosters
97
Not
Roosters, 97
or
Roosters 97
2. Remember in exercise 0 when you started IRB? Start IRB this way again and using the above characters and what you know, use Ruby as a calculator.
3. Find something you need to calculate and write a new .rb file that does it.
Did some interesting calculations interactively with Ruby, check out the below image
4. Notice the math seems “wrong” There no fractions, only whole numbers. Find out why by researching what a “floating point” number is.
Yes, it was clear while trying to get this 3+2+1-5+4%2-1/4+6 result to 7. After few permutation and combinations figured out that the result would be 7 only if 1/4 = zero and not 0.25. Floating point number is a way to represent the numbers decimal precision, this can float mean placing anywhere on the significant digits of the number
5. Rewrite ex3.rb to use floating point numbers so it’s more accurate (hint: 20.0 is floating point)
The hint looks more of reveling the result, so replacing integer with a floating numbers like 22.0/7 or 22/7.0 or 22.0/7.0 should be the solution, so let me check this with extra credit 3. Here is the result
And here is the output of the first exercise
So, this (3+2+1-5)+(4%2)-(1/4.0)+6 = (1)+(0) -(0.25)+6 = 6.75. So which confirms the precedence is correct.
–End of Zero.One –
Oops!!! This exercise started asking the readers to figure out operations performed by those symbol, for the below code.
+ Plus —–> Addition
- minus —–> subtraction
/ slash —–> Division
* asterisk —–> Multiplication
% percent —–> Modulus, returns whole number, the remainder after dividing
< less-than —–> checks if LHS is less than RHS, if yes returns TRUE else FALSE
> greater-than —–> checks if LHS is greater than RHS, if yes returns TRUE else FALSE
<= less-than-equal —–> checks if LHS is less than or equal to RHS, if yes returns TRUE else FALSE
>= greater-than-equal —–> checks if LHS is greater than or equal to RHS, if yes returns TRUE else FALSE
Happy Learning!!!!
Rudiments of Ruby : Level Zero
Learning Ruby was a long pending task. I bought Everyday scripting in Ruby book but yet to open it. TESTHEAD’s posts on learning the ruby hard way inspired me to learn ruby the TestHead Way
.
This exercise was about installing ruby, this book has instructions to install Ruby in OS X , Linux and Windows. Started learning ruby in OS X in my macbook pro.
I decided to follow each and every single instruction, which I rarely do
. This book impressed my at the very beginning. Next step was downloading and installing Gedit, followed by basic Terminal comments to create and navigate between folders. Since I have worked with terminal, it was much easier to find ruby and its version in OS X, which has Ruby 1.8.7 installed. This book introduced Gedit, a text editor to me, I drafted this post in Gedit, really a simple and elegant text editor.
This exercise ends saying “Anything else will only confuse you, so stick to the plan.” So I decided to stick with the plan.
Exercise 1 : A Good First Program
As expected the first step exercise was printing “Hello world!”
but the comment here in Ruby is puts, not print. A question appear suddenly, whether Ruby has Print statement too? I made a note of this and decided to explore later.(Stick to plan…)
This exercise was about printing(putting) the below lines into a single file and save it as ex1.rb, rb is ruby executable file.
puts “Hello World!”
puts “Hello Again”
puts “I Like typing this.”
puts ‘Yay! Printing’
puts “I’d much rather you ‘not’.”
puts “I “said” do not touch this.’

This produced an error message shown below.
I Closed Gedit and took a break.
When I reopened .rb file this time the ruby code was in different format, that clearly showed the syntax errors, where as in the first image above it looked as normal text file even after saving the file.
Is this a bug with editor? This will be a separate investigation. (Made a note of it and Stick to plan…). These ‘Puts’ statements and the typo helped to understand single and doubt quotes usage. I correct the typo and then the script printed the correct output.
At one point I wanted to execute a different format file and see what happens. Ruby was able to execute even ex1.txt file. Interesting!!!
Some one help me to what files are supported by Ruby, does .rb has any advantages over other supported types like .txt? 
Here, I was distracted by Screenshot option I found in Preview application of Mac. So far I used SHIFT+COMMAND+3 option and Jing tool to take screenshot. After taking a screenshot of a window, I opened the picture in Preview and started exploring the options under File and found simplest ways to take screenshots.
The above two learning were out of plan but that is Cognitive Savvy – work with the rhythms of the mind, James Bach’s Learning Heuristics SACKED SCOWS
Extra Credits :
Every exercise has additional extra credits exercise with no solution provided, readers have to find the solution. First of the extra credits is to make the script to print another line. Simple! I added one more line to thank Yukihiro Matsumoto

Second was make your script print only one of the lines, does this to find the code commenting? I can do this by deleting all but one line, as I am not familiar with code commenting yet

Third, put a # character at the beginning of a line, so let me check what happens. This was for commenting the lines, so with this I can solve my second exercise.
Commenting all but one line.
–End of Extra credits–
Now the exploration of print statement, used a print statement. This is how the output was without a carriage return.
This encouraged to try print statements at the beginning and in between. Yes! Print displays the output without a carriage return.
Later googled to confirm my understanding of print statement is correct.
Exercise 2 : Comments and Pound Character
The extra credits helped to find the commenting character # Hash, octothorpe or pound character. This exercise is dedicated to commenting. Commenting helps to understand what really a code does, also helps to block a part of the code from executing. I appreciate for bringing a exercise on commenting very early in the book.
This exercise is to type the below code and examine the output
# A comment, this is so you can read your program later. # Anything after the # is ignored by Ruby. puts "I could have code like this." # and the comment after is ignored # You can also use a comment to "disable" or comment out a piece of code: # print "This won't run." puts "This will run."
Here is the output
Extra Credits
1. Find out if your are right about # character.
Yes, the learning so far is correct, # is used to comment the part of code from executed. Not sure if there are any exception or additional functionality for #. But hash with in quotes acts as a normal character, it doesn’t comment the code.

The most interesting part was the next three extra credit exercise
- Take your ex2.rb file and review each line going backwards. Start at the last line, and check each word in reverse against what you should have typed.
- Did you find more mistakes? Fix them.
- Read what you typed above out loud, including saying each character by its name. Did you find more mistakes? Fix them.
In each of the above exercise I was found many mistakes and corrected. Generally, I would start proof reading stressing each and every word slowly, not more than first few lines. I would loose focus and brain starts to read the words correctly even if there were mistakes. Reading backwards has definitely helped me to find more mistakes.
–End Of Level Zero–
This book not only thought me some rudiments of ruby, but also rudiments of proof reading and the importance of code comments.
Most importantly it helped me to come out of writer’s block. (It’s been a while since my last blog post)
Definitely TESTHEAD and Learn code the hard way has instilled a desire to learn ruby.
Toughest Testing Challenge 1.2 : Patch 1.0
There was a major bug in Toughest Testing challenge 1.2 .
Bug Details:
Management realized later that a simple module (dialogue box) like this can’t be tested forever, also they don’t have any idea about how far or how long to test this module.
Fix:
So, the management decides to give the project to two different vendors.
First one was asked to generate test ideas that can be executed within 15 minutes.[Time is non negotiable here]
A second vendor was asked to estimate the time required to test this module and generate test ideas for the time estimated.
What would be your test strategies if you are Vendor one?
What would be your test strategies if you are Vendor two?
And more over you should convince the client with your test strategy and estimates.
A Hint : Test Framing.
Happy Testing!
Dhanasekar S.
Norie’s Neat Nostrum :
“There’s no such thing as quick and dirty; if you want a quick job, make it a neat job” – Jerry Weinberg
Toughest Testing Challenge 1.2
Most software were developed by highly skilled programmers. But still none of them are bug free and many of them are very buggy.
“If builders built buildings the way programmers write programs, the first woodpecker that came along would destroy civilization.” – Jerry Weinberg
Software is a very volatile product, so it’s practically impossible to build bug free software even by the best of the programmers. So there exist testers to test the product. Testers look into a product with different perspective to inform management about the health of the product, thus helping management to take decisions better and faster. Most releases will go smooth and there will be failures in between (or vice versa
). Everything looks awesome until something goes wrong, then everything comes under the scanner. There will be a high-profile meeting to discover that THE problem was testing not done properly and THE reason was lack of time and THE solution is automation.
Now some testers who had talked about automation earlier will become automation test coders. These testers will evaluate automation tools and select the tool that has more voting in a polling conducted by ***interviews.com forum. A framework that Google shows first would be chosen as the best suited one. A PoC that automates the login page of their application. Now stage is set to automate 90% of test cases. NOTE: 100% is not possible!!!
This is something similar to a sip test and home use test of an edible products, there was an interesting analysis about the failure of New coke in the book Blink. I too had many snap judgment failures and one among them was selecting a gaming console. In one of my earlier jobs where I was a game tester, was given an option to join either Xbox or PS2 team on my comfort with the consoles. I tried both for about ten minutes and I felt comfortable with Xbox, so moved to Xbox team. But later when I played for more than 2 hours continuously, I realized it is not comfortable at all, later found PS2 was more comfortable for longer time duration.
Without anticipating all such problems, a set of testers who were either bored by the kind of testing they do or misguided about automation testing, would become an automation engineer without much programming skills. They would then write buggy codes to find bugs in an application that was developed by skilled programmers , read the blog title again.
In Kung Fu Panda II, Po finally stops the thing that stops kung Fu after finding a secret . The secret here is to invest in developing thinking, analytical skills of testers not just on automation tool.
Automation can help to solve the problem, but that is not the solution for all problems.
PS : kung fu panda 2 – An abandoned villain threatens, there exists an unknown secret, Po sets out a mission to understand the secret to defeat the villain and bring peace. It is twice filled with attractiveness and awesomeness …
Marching to Moolya :-)
March turns out to be a wonderful month for me third time in succession.
March 2009 : Celebrating A R Rahman Oscar winning moments. He and his music keeps inspiring me.
March 2010 : I featured in James Bach’s blog, which I consider as one of the greatest achievements in my professional career. His writings fuel the urge I have in me to learn the testing craft better.
March 2011 : The most important move in my career. Very proudly and loudly announcing “I am joining Moolya” (read this in font size 72
)
The marching started when I got to know Pradeep Soundararajan through his blog. From then we had regular interactions both online and also in person. I was impressed and inspired by his passion towards software testing. One fine day Pradeep shared the news about he co-founding a testing services company along with Santhosh Tuppad. From that moment on I started dreaming that I should join them. But I was not sure what their plans were then. We used to meet now and then, to discuss and fill
a lot. Later one day Pradeep asked about my interest in joining Moolya. I immediately expressed my interest to join. Because I had already decided to join them anytime.
It was one of the easiest plus the most important decisions I had taken so for. It was easy because I knew them very well for close to two years by now. They kept me updated about the progress they made in-terms of setting up the office. They also shared the dreams, plans and the visions they have for the future. I was so happy to be present in the inauguration function. Though I was ready to join any time, They were very clear in hiring. They hire only if, they are very sure about keeping the employees happy both in terms of work and compensation. If you want to know more reasons why I join Moolya read further else start sending your test reports!
. Then one fine evening I was asked to come down to their office and Pradeep said they are in a position to hire me. The moment I was waiting for!!!!
Why Moolya?
They are passionate about testing, so they care about the quality, customers, employees and also bugs
. This is the place where you’ll get freedom to work over tracking employees by numbers and metrics. Place where you get responsibilities and opportunities to try and learn new ideas over running the same test cases again and again. Place were purpose motto is respected over business motto. And more importantly they don’t count the head, they count the brain. I love to be part of Moolya’s future success story from the start. I am thrilled and excited to work for\with such passionate and wonderful people. I thank Moolya for the faith and confidence they have in me, we will rock for sure.
Future looks promising and Beautiful!!!!
Also, I like to thank James Bach and Weekendtesting, they played a vital role in getting to know Pradeep Soundararajan and Santhosh Tuppad. I will not do justice to myself, if I miss to thank Pragmatist, the blog which I believe is the starting point for all this happenings. Dear testers please start blogging and let the world know who you are.
“Life begins at the end of your comfort zone. “- Neale Donald Walsch.
(BTW, Pradeep already promised that he will push me out of my comfort zone.)
To,
Dear Gladiators and Spartans, ![]()
Without doubt, so for this is the best team I worked with, in terms of commitment, fun and bonding. I’ll miss you all and the amazing fun we had together
. Thanks for all the fun, enjoyment and work we achieved together. Fifteen months with this team is the period where I laughed and enjoyed the most in my entire office life.
“But I have promises to keep, and miles to go before I sleep” – Robert Frost
Think different but keep it simple :)
There is content below, I can read can’t you? oh! Think different to see the content, but keep it simple
This is the most common problem we testers encounter quite often, it works in developer machine but not in test machine.
Once an interesting incident happened in one of the web application I was testing, application was working fine in developer’s environment but not in test environment.
The most likely reasons could be either the test servers do not have the latest code or there is conflict in environment. Quick check revealed that both the environments had the same code.
Now the focus was on to investigate the configuration of the servers.
As a tester how will you investigate such situations?
Few tips to nail down such problems. Please share your tips as well.
1. Test in another test machine\server
2. Test in another dev machine\server
This will help to narrow down if there the problem is at client side or server side.
3. Check if that machine is also hosting the web server.
Time out issues and session management related issues may not be reproducible, if the machine you are testing in is a server machine.
4. Check for additional softwares installed.
Generally developer box will have lot of additional softwares installed, like debug tools, development related softwares that may prevent from the bug to be reproduced. Even the web browser in dev box will be loaded with tons of additional tools and utilities. Such additional installation may also prevent from some bugs being reproduced.
It is not enough to check if required softwares were installed, it is equally important to make sure no additional unwanted softwares were installed.
Coming back to the issue, following those above mentioned approaches by pairing with developer helped to nail down the problem in few hours. The issue was, a bulk data extraction component used (it was ETL project) will work only in localhost, that does not have the capability to connect with external host. In the developer machine and dev server both web server and DB server was hosted in the same machine, so that worked perfecly fine.But test environment had DB and Web server running in different machine, so this caused the problem. An important lesson learned from the incident is it is always good to have the test environment mimic the production. Keeping the test environment similar to production helped in finding the problem very earlier in the cycle.
Another good practice to follow, at any given time at least one test environment should be in sync with production server, so any production issues reported can be easily replicated and analysed in a test environment. Having only one test environment means most time that will be updated with enhancements going on, that may also prevent from reproducing production issues because of code changes applied in the test environment.
How many of you have set up the test environments? No, I didn’t mean double clicking an installer provided by the developer. As a tester I learned a lot, by setting up test environment and maintaining it, setting up test environments will help to understand your application better, it will help to get better test ideas, analyzing of bugs can be done effectively .
Understanding test environment improves testing.
——————————————————————End of Post—————————————————————————–






















