Models and Standards for Software Process Improvement

Models and standards for software at first look like something strange and unnecessary when you are working on your own, but these standards are helpful to evaluate the software quality and in this way you can see what areas of improvement you can work on and how to optimise your current project to make a better product.

There are some standards for ensure quality in software some of them are the following:

  • CMMI
  • TSP/PSP
  • ISO-15504

Capability Maturity Model Integration (CMMI):

CMMI was developed at Carnegie Mellon University. It is required by many U.S Government contracts, just by that you can see how important are these models to ensure that software being developed by certain company have all the requirements of quality needed, this model focus in the part of product and service development, service establishment, management and product and service acquisition, this is important as well because thanks to this best practices that this model propose is easier to maintain the software.

The Personal Software Process (PSP) provides a operational framework with the objective of helping a person in how they manage their own time, productivity. This help teams of managers and engineers to organize small projects or large projects. PSP has as objective to improve the levels of quality and productivity of the team developing those projects. In this framework or model each team manage itself, they do their own plans, how they track their work and are responsible of the quality of their work, but before someone can take part on a team is necessary to learn about TSP(Team Software process) because in each team there are roles to ensure the quality and organization of the team.

Software Process Improvement Capability Determination (ISO/IEC 15504) has the following objectives:

  • Create an standar to evaluate software processes.
  • Measure and evaluate customer-supplier, supporting, management.

Now this standard measure the following processes in the business organization, management, engineering, acquisition and supply, support and operations. This standard is a framework for continuous improvement, their analyze each process capability and see what areas of improvement are available and is divided in 6 levels.

  • Incomplete( Level 0): The process is not implemented or fails to achieve its purpose.
  • Performed(Level 1): The process is performed and achieves its purpose.
  • Manages(Level 2): The process is managed and results are specified, controlled and maintained.
  • Established(Level 3): A standard process is defined and used throughout the organization.
  • Predictable(Level 4): The process is executed consistently within defined limits.
  • Optimizing(Level 5): The process is continuously improved to meet current and projected business goals.

So as we can see these models are standards that can be used for ensure quality and a framework to always keep improving how the workflow, the processes and the organization of a business works together to create software that meets the criteria so in the future that software can be modified, scaleted and improved.

Software Testing

Hello everyone, in this new post we’ll be talking about software testing. This one will contain a little more content because this is a huge topic to talk about.

What is Software Testing?

It is defined as the process of executing a program or application with the intent of identifying bugs. Also the process of validating a piece of software meets its business and technical requirements.

A plan for adequate testing is always needed, no matter methodology.

Types and levels of testing

Levels of testing
Types of testing

To know more about levels and types for testing, click on it.

Activities and roles in testing

  • Test lead/manager
    • Defines the testing activities for subordinates.
    • Responsible for testing planning.
    • Checks if the team has all necessary resources.
    • Checks if testing is going hand in hand with software development.
    • Interaction with customer.
    • Status report of testing activities.
  • Test engineers/QA testers/QC
    • Read documents and understand what needs to be tested.
    • Decide how it is going to be tested.
    • Develop test cases and prioritize testing activities.
    • Execute all the test cases and report defects.
  • Software Tester and Test Manager Roles.
  • To know more of each one the roles click here.

Testing environments

A test environment is a server that allows you to run the test cases that are already defined. It also involves hardware and network configuration.

Types of testing environments

To get details about the testing environments click here.

Test Case Design techniques

Is a procedure for determining test conditions, test cases and test data during software testing.

Test design techniques always include test selection criteria determining when to stop designing more test cases. They differ from test creation, which are based on the test data adequacy criteria by selecting appropriate test data in order to reduce the risks to an acceptable level.

Test case techniques

To know more about Test Case Design techniques click here.

Process for control and management of defects in artifacts

Process for control and management of defects in artifacts

Click here to know more.

If you’ve reach until here, I want to thank you for taking the time of reading my blog.

Software Quality

Hi Everyone, it’s been a while since I talked to you, the truth is that the moment I finished the book we discussed in the previous posts, I felt a little empty, you know because of all the things that are going around the world right now, In case you are readind this post somewhere in the furute, by the time I am writting this we are still staying at home because of the COVID-19, but someway, somehow we have to keep moving forward.

Anyways, this time is going to be different from what we discussed on the previous posts, forget about project management, we already know that, this time we are going to talk about everything you need to become the greatest software engineer, from scratch to finish, from definitions to usable tools for your real life projects.

We are now going to be dividing the posts into one big post with little sub topics, to make sure that all relevant information to the sobject is directly connected to what you guys are looking.


Defining Software Quality

At this point on our field we have heard people saying that building a functional software is not the same as building a quality software, this is because when we are developing there is nothing that can stop us from thinking in new ways to solve problems, eventhough this new solutions may or not be as efficient as other ones, this is why making a software it actually harder than we use to think. This is why, in this subtopic are going to define what software quality is, and all of the attributes that englobes this topic.

Software quality is one ambiguous concept to define because there are many ways to determine wheter a software is or not quality qualified, this because some writers defines the quality of a software with its purpose, if the software does what the user wants it to do, then is a quality software, other writers define some software attributes that any software must own to be described as a quality software. In this post we are going to discuss about those attribues that a software must include in order to become quality software.

This a picture of some geometrical structures floating on sky – Elif Ayiter

Some of the key aspects that a good software must fullfill are:

  • Portability: That the software can be executed efficiently in every platform or device it is ran
  • Good design: The software is atractive, easy to understand and use by any user regardless of the user
  • Durability: The software life time must be long enough
  • Maintainability: Bugs can be fixed, new implementations can be made, the capability to make the software great again regardles of time
  • Reliability: The software must be able to work without any issues
  • Money gain: The developers of the software must feel that the money they are investing will be worth every coin
  • Testability: The software must be able to be tested in order to discover new bugs than can be fixed
  • Efiiciency: The software must be able to solve problems in a efficient way
  • Flexibility: The software mus be able to evolve, to solve new problems and become a better version of itself
This is a picture of some of the software quality keys- Beningo

There are different ways to meassure the quality of a software, some different process that can be executed and different methods than can validate the level of qualityness of a software, anyways these new conceps are going to be discussed in the next entries, this was only the introduction to quality software, but if you like to know a little bit more I recommend you to check these links:

Software quality is important because is what is going to make the difference bertween doing a mediocre software and doing an usefull software that can be reused over and over again.

Please make sure to check on those links, some really usefull information is going to be found on those, and if you have any kind of questions remember that all my information is going to be found in my main page, thanks for reaching out this far, see you next time.

A netflix recomendation

I decided to implement in every post a netflix recomendation, this because I want to make the blog a little more dynamic.

Lucifer. If you like crime related series and you are not sensitive to religious topics then Lucifer is the serie for you, The devil himself was tired of living a boring life reigning in hell, so he decided to move to the funnies place on earth, where crime is more fun and exciting, drugs are the daily basis and latinos and mafia live together, LA, will Los Angeles be too much for the devil?

This is a gif of Lucifer transforming into the devil – Giphy

A focus on process

Once defined the first step of the software building system, we need to order things and to define which processes are we going to focus on, this methodoly is known as focus on process, in which developers put all fo the atention into the process instead of the outcome, at a first look this may seem a little nonsense, but once I describes the benefits of this process it will come clear to all of you.

We are human, and as a human we tend to set goals in the proyects we make, this because the automatic method that we use to validate wheter a software is funtional or not is through its result, this kind of method seems to be a little untrusty, because trust what we see as a result not the process as we are going to see next.

This is an image of a man who seems to be focusing – ThoughCo

Did you know that focusing on a process is much better than on the result? Well this is why

  • By focusing on a process you will achieve a level of mastery that will never be achieved if focusing on results, you will understand every detail of the process and predict future outcomes without testing them.
  • When focusing on results developers are less exeptical to try long process analysis, so this is why by using focus on process helps thedevelopers to produce better outcomes without looking for them
  • Focusing on the process will make people to worry about the present instead of the future, which will lead to earn experience faster.
  • Makes the people independent thinking, instead of thinking about an specific result and rely on that developers will be predicting results instead of mysteries
  • Will grow developer´s confidence, because the future is not your business you care about what you do at the time

How do we focus on process?

  • Forget about the rewards, they will come when the time is rightt, focus on what you are doing and nothing more
  • Do not care about what others think about what you do, be independent you do things for yourself
  • Learn but do not get stuck from the past
  • Rate your performance, based on what you are doing instead of the outcome
  • Always keep doing work, never stop what you are doing even when is done there is more
  • Remember that every process is unique, every process must be treated as so

Once you start focusing on the process you will inmediatly start to enjoy the work you are doing, because no distractions will be around, and you are now the one who takes control of the process, and after that you will notice that positive results came by themselves because of thw work you did.

If you´d like to know a little more about focusing on the process check out these links :
https://medium.com/swlh/learn-to-focus-on-the-process-more-than-the-results-419245011592
http://www.howtolive.com/focus-on-process-not-outcome/#.X2UCZGgzbIU

A netflix recomendation

Baby Driver, if you like cars, action, a romantic love story and like to dance when you hear any special song, then this is the movie for you, the story is about Baby, our main character who has hearing problems but drives insanely good and with a really good taste of music, a good boy who did bad things and who´s only scape from a bad life is through driving.

This is a gif from the movie Baby Driver, Tenor

Ensuring software Quality

Before talking on how to ensure the quality of the software first lest define the quality of a software, we will quote something that Abdullah Muntasir defines in its blog, “Quality in software is an art, software quality is the degree of conformance to explicit or implicit requirements and expectations”, which he defines them as:

  • Explicit: clearly defined and documented
  • Implicit: not clearly defined and documented but indirectly suggested
  • Requirements: business/product/software requierements
  • Expectations: mainly end-user expectations

Now that software quality is defined we can talk about how to ensure the quality of our software, and this we can easily do it, because at our luck there is a process called Software Quality Assurance Plan, which is a serie of procedures and techniques that allows the developers to make sure that a specific product aligns with the requierements defined in the SRS, software requirements specification document, which is a document in which all the requierements must be delcared before building a proyect.

This is a diagram of the SQA method- Software Testing Help

The SQA is mainly dividen in four sections:

  • Development, in which Research and analysis are worked on
  • Baseline System, in which Prototype and design are worked on
  • Production, in which Testing and Planing are worked on
  • Release Market, in which Deliver and Support are worked on

Every section of the SQA is definen in the SQA document, which consists on:

  • Purpose
  • Reference
  • Software configuration management
  • Problem reporting and corrective action
  • Tools, technologies and methodologies
  • Code control
  • Records, collection and maintenance
  • Testing

This will help the developers to ensure the quality of a software, but in those cases where even the SQA was not enough to ensure the wuality of a software there is another process known as Software Quality Control, which goes side by side with SQA when SQA is not ensuring the quality. The main idea of the SQC is to focus on every requierement so that all of them adquire a high level of quality, this process is divided in some activities such as:

  • Reviews
  • Requirement Review
  • Design Review
  • Code Review
  • Deployment Plan Review
  • Test Plan Review
  • Test Cases Review
  • Unit Testing
  • Integration Testing
  • System Testing
  • Acceptance Testing
This is an image of the SQC method – Professional QA

Once makeing sure that all of the activies of SQA and SQC are followed then you can make sure that you have achieved a high level of software quality in your proyect, if after all this process you still think your software needs a little more what you can try is to divide the phases into little phases, and aply them to every requierement on the proyect, repeat until you feel the quality is excellent enough for you.

If you would like to know more about this, do not fotget to check this links:

A netflix recomendation

See you yesterday, this is an indepentent movie about two young kids who are about to discover how to time travel, injustice and discrimination will push them to travel, but time has another plans for them, a really good movie about sci-fi and unfairness.

This is a gif of the main characters of the movie preparing to trvael – Tumblr

The Role of Standars in Software Quality

Standars of software quality are models that categorizes the level desired of quality in software, there are many standars out there which everyone is specifically different from the other ones because they focus on different things.

These standars are actually divided on what their objetive is, there are testing standars which focuses on the testing area of the software, software quality standars, which focuses on the quality of the system, these kind of standars helps the user to get to know a structured model to follow depending on their desire of the software, there are so many standars in the field because each one satifies an specific need in the proyect.

These standars helps the user to answer the tipical questions when developing a software, How to, When to, What do we need to, which helps developers to bring a well designed system with all the requierementes needed and a little bit extra. These standars of software quality are going to be described deeply in the next post, thanks for reaching out.

Remember to check out this link to get more information about:

A netflix recomendation

The witcher, if you know about the witcher game series then you know about this netflix live action adaptation, if not, let me tell you what you were missing. The witcher narrates the story of three characters, Geralt, a withcer who kills monsters for money and has a destiny attached to, Ciri the princess of a land who has magic powers and who is connected to Geralt and finally Yennefer a powerfull witch whose desires are only to gain power but gets into Geralts life, these three characters will make their way into a world of magic, monstruous creatures and a lot of fights.

This is a gif of Geralt fighting a man – Giphy

This will do for software quality, the next topic that we are going to discuss is all the standars, how do they define and to learn when to use each standar in order to get the best profit of them, thanks for reading see you next time.

Version Control

What?

Version control systems are a category of tools of software that help a software team to manage changes in the source code through time. The version control tool tracks all of the changes and modifications that the code suffers inside a special type of database. If a developer makes a mistake inside the code one can easily go back to an earlier version of the code where the changes that broke the code didn’t exists yet. You can compare the code that existed before and more easily find where the error might be located.

For almost every software project, the source code is like the jewel of a crown. They are very precious and valuable. The source code is an invaluable source of knowledge and understanding of the specific domain that the developers have studied and perfected. Version control tools ensures the integrity of the source code against human errors and accidental mistakes.

Furthermore, the source code is alive, always changing and being edited continuously by numerous members of a team. Version control tools help resolve conflicts between all of these changes. Some changes that a developer might be working may be incompatible with the changes being made by another developer. This situation should be detected and resolved without blocking other team members.

Advantages of version control systems.

  • The first obvious advantage of using a vcs is a complete history of all the changes throughout time of all the files inside the project.
  • Branches and pull requests. One can create a branch and create and modify code without blocking other team members. If any error occurs one can easily rollback to an earlier version of the code
  • Tracking power. One can see who is responsible for the changes made inside a file. This is sometimes used to blame someone that broke the code.

Git

Git is probably the most common used vcs. The main difference between Git and any other VCS is the way that data is handled. Most of VCS store information as a list of file changes.

found at https://git-scm.com/book/en/v2/images/deltas.png

Git does no store information in this manner. Git stores a set of copies in a system of miniature files. Everytime you add a change or store the state of the git project, git takes a snapshot of how the files look in that point in time. And stores a reference for that snapshot. So git stores its data as a sequence of snapshots

Git stores data as snapshots of the project over time.

Bibliography

https://www.atlassian.com/es/git/tutorials/what-is-version-control

Tools for V&V

Tools for Version Control

Version control systems are software tools to help a team mange changes to source code over time. It keeps track of the modifications to the code in a special database. Developers can move through versions, compare and rolling-back changes, this helps minimizing the disruption of the code.

Some commonly used version control tools are:

Git

Git is free and open source, is compatible with protocols like HTTP, FTP and SSH. Is fast, cross platform. It is the most used version control tool out there, and the one that I use.

CVS

Another very popular version control tool. Is a client server repository model, it has cross platform support and it is also open source and free.

SVN (Apache Subversion)

Aims to be the successor to CVS. It is also a client server repository model, open source and free.

Tools for testing

There are many types of software testing tools each with their different objectives.

Test Management Tools

These tools help organize the end to end test Cycle.

XRay

One the most used Manual & Automated test management app for QA. It’s a full-featured that integrates with Jira. Helps improving the quality of products.

Features:

  • Traceability between requirements, tests, defects, executions
  • Define reusable preconditions and associate to tests
  • Organize tests in folders and test sets
  • Test plans for tracking progress
  • Test environments
  • Integrates with test automation frameworks (Selenium, JUnit, Nunit, Robot, …)
  • Built-in REST API
  • CI integrations (Bamboo, Jenkins)
  • Built-in reports

Automated Testing Tools

This category of tools helps automate functional and Regression Testing of your application under test.

Squish

Its a GUI test automation tool to automate functional regression tests and system test of their graphical user interface. It is cross-platform.

Some of its features are:

  • Test script recording
  • Powerful and reliable object identification and verifications (object-based and image based)
  • No dependency on screenshots or visual appearance
  • A wide range of popular script languages for test scripting
  • Full support for Behavior Driven Development (BDD)
  • Full control via command line tools
  • Integrations with Test Management and CI-Systems

Security Testing Tools

These tools detect security vulnerabilities in your Application Under Test.

Netsparker

Automatically scans websites, web applications and web services for vulnerabilities.

It has the following features:

  • Very configurable
  • Easily IntegrateS Web Security Scanning In SDLC
  • Supports Enterprise Level Collaboration

Tools for process and Administration for V&V

Jira

Jira is designed teams of all types manage work, it is a tool for management from requirements and test case management to agile software development. Jira has a robust set of features and widely used and because of that it can be integrated with many tools.

Software Testing Environments

Why?

There is a constant and growing concern from Software Companies to develop applications and systems that are of quality. Products that will satisfy the client’s needs. Companies will go the extra mile to meet these demands. That is why they spend large quantities of money into them.

Developers now have to deal with multiple teams working concurrently under tight schedules that are becoming even for stringent. The systems also have to work and communicate with a number of different systems and platforms. These circumstances make it really important to have protocols of quality assurance. Software Testing Environments become really important.

Optimal testing environments improve the efficiency in the testing phases. According to Gartner, the economic cost to fix bugs during the analysis phase is of around 70 USD, comparing this with fixing bugs in production there is a huge difference; 14,000 USD. Software testing environments play a big role mitigating these bugs in production and finding them during earlier phase of the development.

What?

There are two global tendencies that have started to emerge in the software world. These help us better understand how testing environments should be managed.

TEM (Test Environment Management):

This model proposes the creation of a unique centralized administration of testing environments, monitoring, maintaining and solving emerging situations, establishing a sole entity responsible inside the environment.

TDM (Test Data Management)

This model ensures that the testing environment databases contain all that is necessary to deliver good tests, ensuring speed, efficiency and the continuous deployment of the software.

Tools for Verification and Validation

Now that all the concepts are set, it is time to discuss the tools that can be used for the different stages that were mentioned in the previous entries.

Tools for version control

Version control is useful to keep track of the changes made to a code, is great for working in teams. It keeps the history of all the modifications, and can undo a change if necessary. Now, to discuss some of these tools.

1. Git

Probably the most widely used in current times. Is a free, cross-platform and open source distributed control tool. It is great for both small and big projects. It is fast, has a full history tree, that is also available offline, has a pretty good interface. It is robust and easily maintainable, and has a variety of commands, and even comes with its own command line. There are many cons to use git, although not everything is perfect, since the history log can be hard to understand, does not support keyword expansion and timestamp preservation, and is more limited for Windows users.

2. Concurrent Versions System (CVS)

It is another widely used revision control system, and has been the tool of choice for many developers since the 80s. Although it is not as feature rich as other tools (this doesn’t mean this tool is not robust), it is fairly easy to learn how to use it. It makes it pretty simple to keep all to date, can allow multiple developers to work on a project parallely, has a and even has a pretty big community that gives it support, since it is open source. However, it comes with its tolls; poor support for distributed source control, no integrity check for source code, it has expensive branch operations, and has no automatic check-outs and commits.

3. Subversion (SVN)

Free and open source, and a popular alternative to CVS, trying to fix all the problems that were found in it and at the same time still being compatible with it. It prevents corruption the the database using atomic operations, where all or none of the changes made to the source code are applied, but no partial changes will affect the original code. Also, SVN fixed the cost of branch operations. SVN has better support for Windows, and can use good GUI tools, and even has support for empty directories. It also is easy to administer and to integrate with IDE and Agile tools. But, it does not store the modification time of files, does not support signed versions, is not good for filename normalization, and is still slower than git.

4. Mercurial

It is a free, open-source distributed tool, written in python to directly compete with git. It has a high performance, robustness and scalability. It has advanced branching and merging capabilities, it is decentralized, easy to learn, lightweight, and simple, and handles both plain text and binary files robustly. It also has an integrated web interface. But, all the add-ons must be written in python, partial check-outs are not allowed, and can become problematic with additional extensions.

5. Bazaar

It is a free, open-source, and distributed tool (what a surprise), that scales and adapts according to the needs of the user. It is similar to git, and mercurial, and can be centrilized or decentralized. Provides free hosting services, it is easy to use, has a high efficiency, speed, and supports tracking of directories. Although, it doesn’t support partial check-outs, and does not preserve timestamps.

6. Monotone

It is a decentralized peer-to-peer tool that focuses on integrity over performance. It is intended for distributed operations. It employs cryptographic primitives to track file revisions and authentications. It can import CVS projects, and uses netsync, a very efficient and robust custom protocol. It requires very low maintenance, has good documentation, it is easy to learn, works great with branching and merging, and has a stable GUI. Although it suffers in performance for some operations, and cannot commit or check-out from behind a proxy (due to a non-HTTP protocol).

Tools for testing

Testing tools offer many options to be used: tools for automation, for functional testing, for non-functional testing, and even for agile testing. I will not discuss every single one of them, but I will put a link with a list of 50 of them (or you can check out the references for even more examples): https://www.guru99.com/testing-tools.html#7

1. Selenium

The number one testing framework, to perform various web application tests on many platforsm and operating systems. It can help to create tests for different programming languages: Java, PHP, C#, Python, Groovy, Ruby, and Perl. Offers record and playback features without the need of learning Selenium IDE. It is the base for most of the software testing tools. It is powerful,and supports multiple frameworks like Data-Driven, KeyWord Driven, Cucumber, JUNIT, NUNIT, and Test NG. And the best part is that it is free to use.

2. Eggplant

Alson known as Eggplant’s Digital Automation Intelligence, is primarily aimed at application testing and GUI testing. It offers an AI-driven test automation for functional, usability and performance testing. It can provide user and business focused metrics for quality and impact on the end-user. Eggplant uses and image based approach, so, by using a single script, test on multiple platforms can be performed (Windows, Mac, Linux, Solaris, among others). As a plus, it has a very intuitive interface, although it is not free. Also, it seems to work better on MacOS than Windows.

3. Katalon Studio

These test automation tool covers API, Web, Desktop and mobile testing. It has a nicely sorted set of features for recording actions, creating test case, generating and executing test scripts, reporting results, and many others. It runs on Windows, MacOS and Linux. Also can be integrated with other tools such as Jira, qTest, Kobiton, Git, Slack, etc. It is not free, although offers a free version for individual testers. It is very easy to learn, even for non-QA testers. For now, it is very limited on the programming languages it accepts.

4. SauceLabs

Is a selenium cloud based tool that offers automated testing over cross-browsers and multiple platforms. It has support for mobile and desktop apps. It has a reputation of reducing testing time to a huge extent (it is widely used by big companies). However, the cloud service is a bit slow, and outages in the software causes the odd test to fail. It is priced, but there are free licences for open source projects.

5. OWASP

The Open Web Application Security Project (OWASP) is a tool for security testing, to help projects to be reliable and trusted. It helps to verify security, validate all types of inputs, implement authentication controls and all the appropriate access controls. It is an open source framework, and it offers many guides and documentation to assit the execution of tests.

6. LAMBDATEST

A scalable cloud-based browser testing platform to perform manual and automated tests on a widely number of desktop and mobile browsers. It supports parallel testing.

Tools for process administration of V&V

Here is the awkward moment, in which a lot of time was spent on a topic that is not very specific (first I found an article from 2006, which means that is not going to have an updated list). These tools are used not only for administrating processes, since most of them have more features than just keeping track of all the tasks that were, are, or will be performed. But they are very useful, and widely used, also, since the trend right now is agile development, most of these tools have a focus on agile:

Jira

Jira is a great software management tool that is widely used in many companies. It is very robust and offers many features that help the management of tasks and processes, and it can be integrated with other tools.

Notion

A very innovative tool that serves as a all-in-one workspace. It supports many features, for productivity, design, and of course, task management. An alternative to Jira, and great for managing the status of processes. It also supports markdown.

References

Version Control Tools. (2020). Top 5 Free and Open-Source Version Control Tools in 2020. GeeksforGeeks. Retrieved from https://www.geeksforgeeks.org/top-5-free-and-open-source-version-control-tools-in-2020/

Version Control Tools. (2020). 15 BEST Version Control Software (Source Code Management Tools). Software Testing Help. Retrieved from https://www.softwaretestinghelp.com/version-control-software/

Version Control Tools. (2015). Top 5 open source version control tools for system admins. FileCloud. Retrieved from https://www.getfilecloud.com/blog/2015/02/top-5-open-source-version-control-tools-for-system-admins/#.X7xSG2hKiUk

Testing Tools. (2020). Top 50 Software Testing Tools in 2020. Guru99. Retrieved from https://www.guru99.com/testing-tools.html#7

Satasiya, P. (2019). Top 10 Automated Software Testing Tools. DZone. Retrieved from https://dzone.com/articles/top-10-automated-software-testing-tools

Testing Tools. (2020). Top 20 Best Automation Testing Tools In 2020 (Comprehensive List). Software Testing Help. Retrieved from https://www.softwaretestinghelp.com/top-20-automation-testing-tools/

Boog, J. (2020). 10 Latest Software Testing Tools QAs Are Using In 2020. QA Lead. Retrieved from https://theqalead.com/tools/software-testing-tools/

Process Administration Tools. (n.d.). A story of tools and the future of work. Notion. Retrieved from https://www.notion.so/about

Process Administration Tools. (n.d.). Jira Software. Atlassian. Retrieved from https://www.atlassian.com/software/jira?&aceid=&adposition=&adgroup=109687540304&campaign=10332064761&creative=443576046641&device=c&keyword=jira&matchtype=e&network=g&placement=&ds_kids=p55122863591&ds_e=GOOGLE&ds_eid=700000001550060&ds_e1=GOOGLE&gclid=CjwKCAiA2O39BRBjEiwApB2Iku6tiVe8LVTlnp_BSWfHFts3jV44ueKHzvrTlWiNrZi4Fi5RQeV_OxoCw9EQAvD_BwE&gclsrc=aw.ds

Software Testing

Software testing has been described previously, but only by name, and maybe the stages at which it should be applied; however, this post will be dedicated to it (as if it wasn’t implied by the title). Software Testing can be defined as:

“Process to check if software meets requirements and its devoid of defects by executing software components and/or using automated tools”

Software testing, is great to make a product cost-effective, secure, of quality, and to assure that meets the customers expectations.

Software Testing Process

The stages of process testing can be diffetent for each project, but it can be broke down into 5 basic ones:

  • Planning: the scope of the test is determined, impact analysis is performed, all resources are listed, and dates for testing are planned (of course they are estimates).
  • Creation of Scenarios: expected outputs are prepared. And test scenarios are created.
  • Preparation of Test Environment and Data Creation: all preparations are made in order to start the test. Basically, setting all up.
  • Run the Scenarios: the created test scenarios are run.
  • Reporting the Results: Pretty self-explanatory, check the results and compare them to the expected output, to design the next test cycle.

I should be noted that this is a process that should be applied on all stages of the Software Development Life Cycle (SDLC).

Types of Testing

There are three main categories:

  • Functional Testing: testing the components that are essential for the functional requirements. This includes Unit testing, Integration testing, User acceptance testing, among others.
  • Non-Functional Testing: testing the components that are essential for the non-functional requirements. This includes Performance testing, Endurance testing, Load testing and so on.
  • Maintenance Testing: testing the product in order to keep it functional or improve it. This includes Regreesion testing and Maintenance testing.

Although some examples were given, there are hundreds of different types of testing. Here is a list of them: https://www.guru99.com/types-of-software-testing.html

Levels of Testing

Lists are always welcomed, so of course the different levels of testing are going to be listed. But before it should be noted that this is not a strict set of levels that should always be followed, this is more of a list of most relevant levels that provide a comple testing process:

  • Unit Testing (Level 1): Testing by small blocks of code. For this to work these blocks should be able to be tested separately, and in a considerable small amount of time.
  • Integration Testing (Level 2): Test groups of blocks of code to check if their functionality as a whole meets the requirements.
  • System Testing (Level 3): Test the system as a whole.
  • Acceptance Testing (Level 4): Test user scenarios, to confirm that the user accepts the product.
Activities and Roles in Testing

There is a designated testing team, or at least it should be, that is divided in different roles, the two main ones are, the test lead and the testers. But here, 3 roles will be given:

  • Software Tester Role: designs test case scenarios, conducts them, analyses the results and reports the observations. Interacts with clients to better understand the product, and do modifications, and also creates the documentation. Ensures that all tests are carried out accordingly to standards and procedures. There are many different roles for a software tester, thus, why so many responsabilities were listed.
  • Software Test Manager Role: represent the team, interact with customers, recruit software test staff, supervise all testing activities, schedule testing activities, select test tools, improve test processes with the help of metrics, and check the quality of the requirements.
  • Software Test Automator Role: design procedures and test cases for automated software testing, design reusable automated scripts, and ensure that all automated processes are done by the defined standards.
Testing Environment

A test environment enables the creation of identical environments for testing, in order to control the most variables in the testing stage. A controlled test enviroment can provide useful feedback to the behavior of the application. There are some key elements that should be completed to create the test environments:

  1. Implementation of test beds (data created and inserted to the environment)
  2. Setup of the database
  3. Configure the environment
  4. Select hardware and software to run the application
  5. Configure the network
  6. Document all actions

There is a difference between test environment and staging environment, since stanging environment is the exact replica of the production level of the application, so is used to check if it is ready for deployment. Basically, a test environment is used to test specific parts of the producto while staging environment is for the product as a whole.

To manage the test environment there is also a checklist

  1. A repository with all the updated versions of the environments
  2. Create new environments as required
  3. Monitoring the environment
  4. Updating/Deleting outdated environments
  5. Check for errors in the environments
  6. Coordinate to solve all the errors in the environments
Test Case Design Techniques

There are three main types of design techniques:

  • Specification-Based Technique: a black box technique. These tests are done to know how the system behaves. This is more about creating test cases based on the output.
  • Structure-Based Technique: a white box technique. Tests that are done to have a level of coverage of control flows. Done by code analysis.
  • Experience-Based Technique: this is entirely based on the tester’s expertise. The tester designs tests based on previous experiences, guesses, and different known techniques.

From these 3 types, many techniques can be chosen, such as, error guessing, boundary value analysis, equivalence class partitioning, decision table based testing, state transition, and many others.

Defect Management

Defects, or bugs, are very relevant to software testing, since one of the main objectives of software testing is to reduce them. The defect management process goes as:

  • Discovery: the team tries to discover as many bugs as possible.
  • Categorization: all the bugs are classified, in order to decide the priorities of the team. A critical error should be fixed immediately. A high level error is the next priority, since it affects the main features. A medium level error causes damage that is not urgent, but no insignificant. Finally, a low level bug is very minor.
  • Defect resolution: a process to fix the bugs, divided in four stages:
    • Assignment: assing the bug to a developer to solve it
    • Schedule fixing: schedule by when it should be fixed
    • Fixing: fix the bug, while tracking the progress
    • Report resolution: report what the solution was.
  • Verification: verify that the bug is resolved.
  • Closure: Change bug status to close.

During all process, the bug should reported to the management team for feedback. Now, to measure the quality test execution, there are to parameters: Defect Rejection Ratio (Number of defects rejected over total of defects raised) and Defect Leakage Ratio (Number of defects missed over total defects of software). The value of these measures is better the smaller it is.

References

Software Testing. (n.d.). What is Software Testing? Definition, Basics & Types. Guru99. Retrieved from https://www.guru99.com/software-testing-introduction-importance.html#1

Testing Environment. (n.d.). Test Environment for Software Testing. Guru99. Retrieved from https://www.guru99.com/test-environment-software-testing.html#:~:text=A%20testing%20environment%20is%20a,of%20the%20Application%20Under%20Test.

Test Case Design Techniques. (n.d.). Software Testing Techniques with Test Case Design Examples. Guru99. Retrieved from https://www.guru99.com/software-testing-techniques.html

Software Testing. (n.d.). Defect Management Process in Software Testing (Bug Report Template). Guru99. Retrieved from https://www.guru99.com/defect-management-process.html

Öztürk, M. (2020). Software Testing Process and Levels of Testing. The Startup. Retrieved from https://medium.com/swlh/software-testing-process-and-levels-of-testing-4274904ce655

Software Testing Roles. (n.d.). Software Testing Roles and Responsibilities. Test Institute. Retrieved from https://www.test-institute.org/Software_Testing_Roles_And_Responsibilities.php#:~:text=Test%20engineers%2FQA%20testers%2FQC%20testers%20are%20responsible%20for%3A&text=Develop%20test%20cases%20and%20prioritize,the%20code%20to%20fix%20defects.

Test Environment. (2019). What Is a Test Environment? A Guide to Managing Your Testing. testim. Retrieved from https://www.testim.io/blog/test-environment-guide/

Test Case Design Techniques. (2016). Test Case Design and Testing Techniques. RapidValue. Retrieved from https://es.slideshare.net/Rapidvaluesolutions/whitepaper-test-case-design-and-testing-techniques-factors-to-consider

Software Review

Software review is an essential part to maintain software quality. Before, the processes, standards and models for assuring software quality were presented, but now, it is time to delve into the actual tasks for verification and validation. Starting with the title of this blog post. As always, the definiton of the topic will be needed in order to continue. Software Review can be defined as:

“It is a systematic inspection of code in order to find errors, enhance the product, and to validate its vital features and components”

This serves the purpose of checking if the software is meeting its requirements, and to adjust development accordingly. There are many benefits that come with applying software reviews to all the stages of the Software Development Life Cycle (SDLC), including the necessary software quality, reduction in the time of production and making testing time & cost effective.

There are three main types of software review, that have different roles and are applied in different stages of the SDLC.

Software Peer Review

These reviews are done by the creator of the code, along with other developers. This helps to check the quality of the software, to find defects and solve then. It is the most basic model of review, and that is why is the most used one. There many types of software peer review.

  • Code Review: a systematic evaluation of the code structure is done, against software standards and procedures.
  • Pair Programming: two or more developers work together, and review each other’s code.
  • Informal: a review that is conducted without the need of a large group or the documentation.
  • Walkthrough: this is a well structured review conducted by a lead team member, usually from the quality assurance department. It is done to detect errors in the code. There are diffetent roles in this review:
    • Author: the creator of the code, acts as an observer and answers questions
    • Presenter: is the one that presents the product, and usually develops the agenda.
    • Moderator: the one that in charge of making everyone follow the agenda, and encourages participation from reviewers.
    • Reviewers: they evaluate the work, to make sure that the standards and guidelines are followed, the requirements are met, and the product is on the right track.
    • Scribe: in charge of taking notes, record the detected errors, comments, suggestions, and unsolved questions.
  • Technical Review: a team of qualified personnels examine the software.
  • Inspection: a formal type of peer review, where defined processes are used in order to review the code.
Software Management Review

This review is applied at the later stages of the development by the management representatives. This is to check the work status, and it is done in order to decide the next major steps of the project.

Software Audit Reviews

It is an external review , where auditors that are not part of the development team do an examinatio of the code. This is done by managerial level people.

Process of Software Review

The IEEE defined a standard for the steps that are required in order to create a complete software review process:

  • Entry Evaluation: a check-list by entry criteria tha ensures that all conditions are met to have a successful review.
  • Management Preparation: a management representative checks that the software review has all the required resources.
  • Review Planning: an objective is set, and the team of resources is formed based on it.
  • Preparation: the reviewrs prepare the reviewing tasks.
  • Examination nad Exit Evaluation: the evaluation is done, and reviewers share their results, and verify that all review tasks are done.
Review Key Products

There are important parts of the software development process that should be evaluated: plans, requirements, design, and code. For these for key work products exist different standards that can be applied to each one of them. Although eviews can be distributed diffetently for each key product:

Key ProductPeer to Peer ReviewWalkthrough ReviewInspection ReviewManagement Review
Plans✔✔✔✔
Requirements✔✔
Code✔
Design✔✔
References

Software Review. (2020). Software Review. ProfessionalQA. Retrieved from https://professionalqa.com/software-review

Melo, W., Shull, F., Travassos, G. (2001). Software Review Guidelines. Coppe/UFRJ. Retrieved from https://www.cos.ufrj.br/uploadfile/es55601.pdf

LalSingh, A. (2009). Guidelines to review Work Products. Rass Tools Limited. Retrieved from https://es.slideshare.net/AshokKumar1213/guidelines-to-review-work-products