CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
CS@Worcester CS-443
From the blog George C Blog by George Chude and used with permission of the author. All other rights reserved by the author.
Unit testing is a critical aspect of software development that ensures code reliability, maintainability, and efficiency. While often considered a developer’s responsibility, product managers (PMs) can benefit from understanding unit testing fundamentals to improve collaboration, enhance product quality, and streamline the development process.
Unit testing involves testing individual components or functions of a software application in isolation. By verifying that each unit of code performs as expected, teams can detect and resolve issues early in the development lifecycle. Typically, unit tests are automated and executed frequently to maintain code integrity.
Though unit testing is primarily a technical function, PMs should have a basic grasp of its significance. Here’s why:
TDD is a methodology where developers write tests before writing the actual code. This practice ensures that each piece of code is created with testability in mind, leading to more robust software.
Mocking involves creating simulated objects to mimic real dependencies in unit tests. This technique helps isolate the component under test, ensuring that external dependencies do not interfere with test results.
Code coverage measures the percentage of code executed by unit tests. While high coverage is beneficial, quality matters more than quantity—focusing on critical components rather than achieving 100% coverage.
Unit testing is a powerful practice that enhances software reliability and efficiency. While product managers may not write tests themselves, understanding their role in the development process fosters collaboration and contributes to delivering high-quality products. By embracing unit testing principles, PMs can help bridge the gap between technical teams and business goals, ultimately driving better outcomes for users and stakeholders alike.
From the blog CS@Worcester – Nguyen Technique by Nguyen Vuong and used with permission of the author. All other rights reserved by the author.
This week in class we learned about path testing, which is a white box method that examines code to find all possible paths. Path testing uses control flow graphs in order to illustrate the different paths that could be executed in a program. In the graph, the nodes represent the lines of code, and the edges represent the order in which the code is executed. Path testing appealed to me as a testing method because it gives visual representations of how the source code should execute given different inputs. I took a deeper dive into path testing after this week’s classes and found this blog that gave me a deeper understanding of path testing.
When you have decided that you want to perform path testing, you must create a control flow graph that matches up with the source code. For example, the split of direction between nodes should represent if-else statements and for while loops, the nodes towards the end of the program that have an edge pointed at an earlier node.
Secondly, pick out a baseline path for the program. This is the path you define to be the original path of your program. After the baseline is created, continue generating paths representing all possible outcomes in the execution.
For a lengthy source code, the possible outcomes could seem endless and could therefore end up being a difficult, time-consuming task to do manually. Luckily, there is an equation that determines how many test cases a program will need with path testing.
C = E – N + 2P
Where C stands for cyclomatic complexity. The cyclomatic complexity is equivalent to the number of linearly independent paths, which in turn equals the number of required test cases. E represents the number of edges, N is the number of nodes, and P is the number of connected components. Note that for a single program or source of code, P = 1 always.
Path testing reveals outcomes that otherwise may not have been known without examining the code. As stated before, it can be difficult for a tester to know all the possible outcomes in a class. Path testing provides a solution to that by using control flow charts, where the tester can examine the different paths. Path testing also ensures branch coverage. Developers don’t need to merge code with an existing repository because the developers can test in their own branch. Unnecessary and overlapping tests are another thing developers don’t have to worry about.
Path testing can also be time consuming. Quicker testing methods do exist and take less time off further developing projects. Also in many cases, path testing may be unnecessary. Path testing is used often by many DevOps setups that require a certain amount of unit coverage before deploying to the next environment. Outside of this, it may be considered inefficient compared to another testing method.
Blog: https://blog.testlodge.com/basis-path-testing/
From the blog Blog del William by William Cordor and used with permission of the author. All other rights reserved by the author.
I chose this blog because I was interested in learning how to optimize the selection of test cases without sacrificing thorough coverage. During my search, I came across an article on TestGrid.io on equivalence partitioning testing, which was fantastic in removing redundancy from testing. As I develop my programming and software testing skills, I have found this method especially useful in making the testing process simpler.
Equivalence partitioning is a testing technique applied to partition input data into partitions or groups based on the assumption that values in each partition will behave similarly. Instead of testing each possible input, testers choose a sample value from each partition and hope the entire group will result in the same output. This reduces the number of test cases but still provides sufficient coverage.
For example, if a program is able to accept input values ranging from 1 to 100, equivalence partitioning allows the testers to categorize them into two sets: valid values (1-100) and invalid values (less than 1 or more than 100). Rather than testing every number in the valid set, a tester would choose sentinel values like 1, 50, and 100. Similarly, they would test the invalid range with 0 and 101. This is time-efficient but identifies errors simultaneously.
I employed the TestGrid.io article because it explains equivalence partitioning in an understandable and systematic manner. Much other testing material is too complex or ambiguous for newcomers, but this article simplifies it and incorporates real-world examples. This allowed it to be simple not only to understand the theory, but also to apply the method to real-life situations.The article also discusses the advantages of equivalence partitioning, including reducing redundant test cases, being more efficient, and offering complete coverage. As an individual interested in improving my testing methods, I found this useful because it corresponds with my goal of producing better, more efficient test cases without redundant repetition.
Equivalence partitioning testing is a sound approach to maximizing test case selection. It enables the tester to focus on representative cases rather than testing all possible inputs, which is time- and effort-efficient. The TestGrid.io article provided a clear understanding of how to implement this method and why it is significant. For me, learning effective test methods like equivalence partitioning will make me more efficient in my coding, debugging, and software developing abilities, prepared for internships, projects, and software engineering positions.
Blog: https://testgrid.io/blog/equivalence-partitioning-testing/
From the blog CS@Worcester – Matchaman10 by tam nguyen and used with permission of the author. All other rights reserved by the author.