Category Archives: Software Testing

Mutation Testing (WEEK 10)

The term mutation in software testing stand for modifying the test code and can check the existing test and detect or reject the change mutes. Mutation in Java is an additional class with a single modification compared to the original code, for example it can be the change of a logical operator  in a if section :

if( a && b ) {...} => if( a || b ) {...}

When detecting or rejecting a modification by the existing test in marked as killing a mutant. If we have a perfect test code no class mutant can survive. Testing with mutant testing can be very expensive so that is one reason why is better to write a perfect code. There are tools to create mutants and run all the tests against each of the mutants automatically. The mutation creation is based on mutation operators that are which can show typical programming errors.

This picture shows a report which list all the mutant killed by ruing the mutation testing.
Here are some of the benefits when we apply the mutation testing:

Can show all new errors to the developer
Can detect hidden defects in the structure of code
Can increase customer satisfaction index because the product can be less buggy.
Maintaining and debugging the product can be easier.


Mutation testing is very useful way to find errors and fix them and it can speedup the proses of finding bugs in the code.


Citation
http://www.codeaffine.com/2015/10/05/what-the-heck-is-mutation-testing/

From the blog Table of Code by Andon S and used with permission of the author. All other rights reserved by the author.

First Software Technical Review

This week in our Software Testing class; we were assigned the task of software technical reviewing some code that was provided by our professor. It was quite exciting since that was the first legitimate testing in a group I have done in my programming career. The concept of software technical review so fairly simple and straight to the point so it was not difficult to dissect what it was that we needed to do in order to effectively review the given code. The outline of the assignment was to first individually review the code by ourselves without discussing our results with other team members. Afterwards, you would then meet up as a whole team and discuss about what each other found in terms of errors and faults within the code. The designated recorder of the group records any changes made during the meeting and compiles together a master list of all of the members’ combined discovery.

Although the testing process itself was new and exciting, there were a couple of complaints I had. The only factor that made the assignment frustrating is that some team members did not individually review the code before the meeting. Due to this, instead of delegating time to discuss our findings, we spent most of the class time waiting for some members to look over the code so we barely had any time to actually discuss as a whole group. Besides that however, it was a fun and memorable new experience in which I learned a lot!

From the blog CS@Worcester – Tan Trieu's Blog by tanminhtrieu and used with permission of the author. All other rights reserved by the author.

Deadly Linux Commands

When it comes to Linux, I would say I know the overall basics of how it is ran, operated and how to use it but I certainly am not a professional of knowing the more advanced commands and functions that Linux has to offer. Knowing that Linux is a very useful OS, especially for programmers, I wanted to know a little bit more about its commands. I was browsing through a couple of sites, blogs and articles and there was one that immediately catch my attention. The title of the article was “Deadly Commands on Linux” (http://www.softwaretestingclub.com/profiles/blogs/deadly-commands-on-linux) and it talked about 6 commands that are dangerous in the sense that it could completely wipe out your system if it is unintentionally (or intentionally) used. To briefly demonstrate just how dangerous these commands could be, there is a command rm -rf / – that will delete any specific file on a hard drive and all connected devices or if you want, delete all the files on a hard drive and connected devices. That’s not even the worst part; the worst part about this command is that it does not even ask you if you are sure about deleting those files, it will do it without prompting you about it. To be honest, I thought that command was pretty cool but on the other hand, I’m just thinking to myself “Why would you even have a command like that in the first place…”. But hey, after reading this article, at least now I know which commands to avoid when working with Linux!

From the blog CS@Worcester – Tan Trieu's Blog by tanminhtrieu and used with permission of the author. All other rights reserved by the author.

Exploratory Testing

This week I was reading a book by James A. Whittaker called Exploratory Software Testing. The book, obviously, is about exploratory software testing.

The second chapter starts with a quote by Alan J. Perlis: There are two ways to write error-free programs: only the third one works. Basically he means that there is no way to write error free programs!

So if there is no way to write error free programs, is there a way to prevent bugs in programs? He goes on to discuss that all bug prevention techniques are generally developer-oriented like writing better specs, performing code reviews, running static analysis tools and performing unit tests. He argues that all of these techniques suffer from some fundamental issues: the “developer makes the worst tester” problem, the “software at rest” problem, and the “no data” problem. The “software at rest” problem brings to light the fact that code reviews and static analysis techniques try to test programs when there are at rest (not running). The problem with this approach is that most bugs only surface when they are running. What is the point of testing software when you cannot identify bugs?

The author goes on to argue that manual testing is more powerful than automated testing. Manual test techniques like exploratory testing allows the full power of the human brain to be used on finding bugs. This chapter is a prelude to the rest of the book which discusses the methods and wisdom used for exploratory testing.

From the blog Software Testing – The blog about software by Sudarshan and used with permission of the author. All other rights reserved by the author.

How Good Are Your Test Cases?

An important and on-going question that QA testers always ask is how good their test cases are. This can be measured in many ways; one way being code coverage. Code coverage is a good method to check if all parts of your code was executed; although it still would not tell much of how good your tests are even if your program has good code coverage.

An alternative to test how good your test cases are is through mutation testing. This was an interesting read for me because I had just read an article that briefly touched upon mutation testing last week so it was a cool follow-up article. Mutation testing is a technique that is used to assess how well your test cases react to faults that are intentionally injected into your code. This can be useful to evaluate how efficient your test cases can handle those faults and how it reacts to any unexpected issues.

Article: http://www.softwaretestingmagazine.com/videos/evaluating-test-cases-quality-with-mutation-testing/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+SoftwareTestingMagazine+%28Software+Testing+Magazine%29

From the blog CS@Worcester – Tan Trieu's Blog by tanminhtrieu and used with permission of the author. All other rights reserved by the author.

Selenium IDE

This week I decided to play a bit with the selenium IDE. So what is selenium IDE? Selenium IDE was developed to allow testers and developers to record their actions as they follow the workflow that they need to test.

The Selenium IDE is basically an add-on to the Firefox browser. You could download it from http://seleniumhq.org/download/. Once it is installed, you can use Alt+Ctrl+s to start selenium.

Once the selenium IDE is open, you could enter the URL of the website you want to test and could click on record. The IDE will now record every action you make on the website. Once you are done, you could stop the recording and click on the play entire test suite button on the IDE  and Selenium would now replay everything you did.

From the blog Software Testing – The blog about software by Sudarshan and used with permission of the author. All other rights reserved by the author.

Levels of testing (Week 8)

There are
different levels in a testing  process. Levels of testing include different methodologies which can be used during
the process of software testing. There are two main levels of testing :
functional testing and non-functional testing. One of my
previews posts talks about black-box testing, functional testing
is a type of black-box testing which is based on the specifications of the
software that has to be tested. The software can be tested by providing input
and then the results are examined in order to conform to the functionality
which it was meant for. Functional testing of a software is conducted on a
complete, integrated system to evaluate the system’s compliance with its
specified requirements. 
Functional testing includes five steps : 
Step 1 The
determination of the functionality that the intended application is 
intended to perform.
Step 2 The
creation of test data based on the specifications of the application.
Step 3 The
output based on the test data and the specifications of the application.
Step 4 The
writing of test scenarios and the execution of test cases.
Step 5 The
comparison of actual and expected results based on the executed test cases.
In order to have an effective testing process
all the above steps have to be followed and applied to the testing
policies of every organization for this reason it will make sure that the
organization maintains the strictest of standards when it comes to software
quality.
This part is about testing an application from its non-functional
attributes. Non-functional testing includes testing a software from the
requirements which are nonfunctional.  Performance, Security, User
interface are some requirements examples of non-functional testing. Performance
testing is one important and mandatory testing type in terms of the following: Speed, Capacity, Stability and Scalability. Performance
testing can be either qualitative or quantitative. Security testing includes
testing a software in order to identify any gaps from security.


Security testing should ensure the below list of features: 

Confidentiality, Integrity, Authentication, Availability, Authorization, Non-repudiation, Software
data is secure, Software is according to all security
regulations, Input checking and validation, SQL insertion
attacks, Injection flaws, Session management issues, Cross-site
scripting attacks, Buffer overflows vulnerabilities and Directory
traversal attacks.
The levels of testing are important because in order to meet the functional and technical specifications  we have to follow all the steps and features that I listed above. 

Citation
https://www.tutorialspoint.com/software_testing/software_testing_levels.htm

From the blog Table of Code by Andon S and used with permission of the author. All other rights reserved by the author.

Levels of testing (Week 8)

There are
different levels in a testing  process. Levels of testing include different methodologies which can be used during
the process of software testing. There are two main levels of testing :
functional testing and non-functional testing. One of my
previews posts talks about black-box testing, functional testing
is a type of black-box testing which is based on the specifications of the
software that has to be tested. The software can be tested by providing input
and then the results are examined in order to conform to the functionality
which it was meant for. Functional testing of a software is conducted on a
complete, integrated system to evaluate the system’s compliance with its
specified requirements. 
Functional testing includes five steps : 
Step 1 The
determination of the functionality that the intended application is 
intended to perform.
Step 2 The
creation of test data based on the specifications of the application.
Step 3 The
output based on the test data and the specifications of the application.
Step 4 The
writing of test scenarios and the execution of test cases.
Step 5 The
comparison of actual and expected results based on the executed test cases.
In order to have an effective testing process
all the above steps have to be followed and applied to the testing
policies of every organization for this reason it will make sure that the
organization maintains the strictest of standards when it comes to software
quality.
This part is about testing an application from its non-functional
attributes. Non-functional testing includes testing a software from the
requirements which are nonfunctional.  Performance, Security, User
interface are some requirements examples of non-functional testing. Performance
testing is one important and mandatory testing type in terms of the following: Speed, Capacity, Stability and Scalability. Performance
testing can be either qualitative or quantitative. Security testing includes
testing a software in order to identify any gaps from security.


Security testing should ensure the below list of features: 

Confidentiality, Integrity, Authentication, Availability, Authorization, Non-repudiation, Software
data is secure, Software is according to all security
regulations, Input checking and validation, SQL insertion
attacks, Injection flaws, Session management issues, Cross-site
scripting attacks, Buffer overflows vulnerabilities and Directory
traversal attacks.
The levels of testing are important because in order to meet the functional and technical specifications  we have to follow all the steps and features that I listed above. 

Citation
https://www.tutorialspoint.com/software_testing/software_testing_levels.htm

From the blog Table of Code by Andon S and used with permission of the author. All other rights reserved by the author.

Levels of testing (Week 8)

There are
different levels in a testing  process. Levels of testing include different methodologies which can be used during
the process of software testing. There are two main levels of testing :
functional testing and non-functional testing. One of my
previews posts talks about black-box testing, functional testing
is a type of black-box testing which is based on the specifications of the
software that has to be tested. The software can be tested by providing input
and then the results are examined in order to conform to the functionality
which it was meant for. Functional testing of a software is conducted on a
complete, integrated system to evaluate the system’s compliance with its
specified requirements. 
Functional testing includes five steps : 
Step 1 The
determination of the functionality that the intended application is 
intended to perform.
Step 2 The
creation of test data based on the specifications of the application.
Step 3 The
output based on the test data and the specifications of the application.
Step 4 The
writing of test scenarios and the execution of test cases.
Step 5 The
comparison of actual and expected results based on the executed test cases.
In order to have an effective testing process
all the above steps have to be followed and applied to the testing
policies of every organization for this reason it will make sure that the
organization maintains the strictest of standards when it comes to software
quality.
This part is about testing an application from its non-functional
attributes. Non-functional testing includes testing a software from the
requirements which are nonfunctional.  Performance, Security, User
interface are some requirements examples of non-functional testing. Performance
testing is one important and mandatory testing type in terms of the following: Speed, Capacity, Stability and Scalability. Performance
testing can be either qualitative or quantitative. Security testing includes
testing a software in order to identify any gaps from security.


Security testing should ensure the below list of features: 

Confidentiality, Integrity, Authentication, Availability, Authorization, Non-repudiation, Software
data is secure, Software is according to all security
regulations, Input checking and validation, SQL insertion
attacks, Injection flaws, Session management issues, Cross-site
scripting attacks, Buffer overflows vulnerabilities and Directory
traversal attacks.
The levels of testing are important because in order to meet the functional and technical specifications  we have to follow all the steps and features that I listed above. 

Citation
https://www.tutorialspoint.com/software_testing/software_testing_levels.htm

From the blog Table of Code by Andon S and used with permission of the author. All other rights reserved by the author.

Levels of testing (Week 8)

There are
different levels in a testing  process. Levels of testing include different methodologies which can be used during
the process of software testing. There are two main levels of testing :
functional testing and non-functional testing. One of my
previews posts talks about black-box testing, functional testing
is a type of black-box testing which is based on the specifications of the
software that has to be tested. The software can be tested by providing input
and then the results are examined in order to conform to the functionality
which it was meant for. Functional testing of a software is conducted on a
complete, integrated system to evaluate the system’s compliance with its
specified requirements. 
Functional testing includes five steps : 
Step 1 The
determination of the functionality that the intended application is 
intended to perform.
Step 2 The
creation of test data based on the specifications of the application.
Step 3 The
output based on the test data and the specifications of the application.
Step 4 The
writing of test scenarios and the execution of test cases.
Step 5 The
comparison of actual and expected results based on the executed test cases.
In order to have an effective testing process
all the above steps have to be followed and applied to the testing
policies of every organization for this reason it will make sure that the
organization maintains the strictest of standards when it comes to software
quality.
This part is about testing an application from its non-functional
attributes. Non-functional testing includes testing a software from the
requirements which are nonfunctional.  Performance, Security, User
interface are some requirements examples of non-functional testing. Performance
testing is one important and mandatory testing type in terms of the following: Speed, Capacity, Stability and Scalability. Performance
testing can be either qualitative or quantitative. Security testing includes
testing a software in order to identify any gaps from security.


Security testing should ensure the below list of features: 

Confidentiality, Integrity, Authentication, Availability, Authorization, Non-repudiation, Software
data is secure, Software is according to all security
regulations, Input checking and validation, SQL insertion
attacks, Injection flaws, Session management issues, Cross-site
scripting attacks, Buffer overflows vulnerabilities and Directory
traversal attacks.
The levels of testing are important because in order to meet the functional and technical specifications  we have to follow all the steps and features that I listed above. 

Citation
https://www.tutorialspoint.com/software_testing/software_testing_levels.htm

From the blog Table of Code by Andon S and used with permission of the author. All other rights reserved by the author.