<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Maria Delia &#8211; CS@Worcester</title>
	<atom:link href="https://cs.worcester.edu/author/maria-delia/feed/" rel="self" type="application/rss+xml" />
	<link>https://cs.worcester.edu</link>
	<description>Worcester State University Computer Science Department</description>
	<lastBuildDate>Mon, 08 Dec 2025 04:08:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
<site xmlns="com-wordpress:feed-additions:1">236835116</site>	<item>
		<title>Improving API Documentation</title>
		<link>https://mariadelia.blog/2025/12/07/improving-api-documentation/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Mon, 08 Dec 2025 04:08:35 +0000</pubDate>
				<category><![CDATA[CS-343]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Quarter-4]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=83</guid>

					<description><![CDATA[OpenAPI and Swagger are huge tools that software developers use every day. It is extremely important to use when it comes to building clear, maintainable, and interactive API documentation. The name of the article I chose was “How to improve API documentation with Swagger and OpenAPI”. According to this article, APIs are central to modern […]]]></description>
										<content:encoded><![CDATA[</p>
<p>OpenAPI and Swagger are huge tools that software developers use every day. It is extremely important to use when it comes to building clear, maintainable, and interactive API documentation. The name of the article I chose was “How to improve API documentation with Swagger and OpenAPI”. According to this article, APIs are central to modern software design, and their documentation plays a critical role in ensuring that developers can consume them and maintain them correctly. &#8220;Using the OpenAPI Specification with the Swagger ecosystem offers the much-needed standardization to REST API documentation&#8221;. Besides, it explains that the OpenAPI Specification is human- and machine-readable, it clearly states the structure of the API, its endpoints, parameters, responses, and data models. This in turn helps reduce ambiguity, which often results from loosely documented APIs.</p>
<p>Besides these, there are several tools that come with Swagger, including the editor, UI, codegen, and inspector. It allows developers to design and edit OpenAPI definitions in JSON or YAML with built-in validation so syntax errors can be caught right there and then. The UI presents OpenAPI definitions as documentation that users can try API endpoints from within their web browser. Codegen produces client libraries, server stubs, and SDKs that facilitate rapid development on multiple platforms. Finally, the inspector is a tool for testing APIs directly and generating an OpenAPI definition based on existing APIs.</p>
<p>There&#8217;s also an updated version, allowing for more modularity and an approach to defining the surface area of an API, with the official release of OpenAPI 3.0. This provides even greater flexibility in describing the request and response model of an API. Good schema and component reuse are emphasized in the most recent version, and handling of multipart documents. Advertisements.The reason I chose this topic was because we have been doing a lot of work with swagger and APIs, and I wanted to look closely into how vital it is to be a software developer in the real world. I also wanted to look closer into how swagger can improve my design skills. After reading this article, I started to see why proper documentation isn&#8217;t just something nice and handy but a necessity in being a skilled developer. From now on, I plan to strengthen my understanding of swagger and APIs because I think it will also help me in improving my coding skills and future project.</p>
<p>Resources: <a href="https://www.techtarget.com/searchapparchitecture/tip/How-to-improve-API-documentation-with-Swagger-and-OpenAPI?utm_source=chatgpt.com">https://www.techtarget.com/searchapparchitecture/tip/How-to-improve-API-documentation-with-Swagger-and-OpenAPI</a></p></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">46120</post-id>	</item>
		<item>
		<title>Understanding Software Architecture Through Martin Fowler’s Lens</title>
		<link>https://mariadelia.blog/2025/11/16/understanding-software-architecture-through-martin-fowlers-lens/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Sun, 16 Nov 2025 05:22:09 +0000</pubDate>
				<category><![CDATA[CS-343]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Quarter-3]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=80</guid>

					<description><![CDATA[Software architecture is one of those concepts that students hear often but rarely get a clear definition of. This week, I chose to read Martin Fowler’s Software Architecture Guide because it went into depth beyond surface-level definitions of architectural thinking that we usually hear. Since our course is so strongly focused on building maintainable and […]]]></description>
										<content:encoded><![CDATA[</p>
<p>Software architecture is one of those concepts that students hear often but rarely get a clear definition of. This week, I chose to read Martin Fowler&#8217;s Software Architecture Guide because it went into depth beyond surface-level definitions of architectural thinking that we usually hear. Since our course is so strongly focused on building maintainable and scalable systems, this resource fit perfectly with the themes we have discussed around design decisions and long-term maintainability in software projects.</p>
<p>Fowler opens the guide by addressing one of the most debated questions in the software community: What, really is architecture? He explains how many definitions focus on “high-level components” or “early design decisions,” but argues these views are incomplete. Referring to an email exchange with Ralph Johnson, Fowler insists that architecture is about “the important stuff.” Architecture is not about big diagrams or an early-stage structural choice; it is about experienced developers having a common understanding of the parts of a system that matter for its long-term health. This makes architecture dynamic and changing rather than merely static documentation.</p>
<p>Fowler also describes why architecture matters, even when end users never directly see it: A poor architecture leads to “cruft,” or the buildup of confusing, tangled code that slows down development. Instead of enabling fast delivery, weak internal quality ultimately hurts productivity. The argument here by Fowler is that paying attention to internal structure actually increases delivery speed because developers spend less time fighting the codebase and more time building features. What struck a chord for me in this is how architecture is coupled with practical results: maintainability, reliability, and team productivity.</p>
<p>I chose this article because I really enjoy the topic and wanted to learn more about software architecture in depth. Fowler&#8217;s explanation really helped me understand that architectural thinking is something developers grow into by learning to identify what is truly important in a system. This directly connects with the principles we&#8217;ve discussed in class around clean code, modularity, and design patterns. Reflecting on the material, I realized that in future software projects, including class assignments, internships, I will have to think about how my design decisions today will affect my ability-and my team&#8217;s ability-to maintain or extend the system later. Good architecture supports future evolution, as Fowler put it, and this is something I want to actively apply as I head toward more complex development work.</p>
<p>Resource: <a href="https://martinfowler.com/architecture/">https://martinfowler.com/architecture/</a></p></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">44318</post-id>	</item>
		<item>
		<title>Understanding Concurrency from a Beginner’s Point of View</title>
		<link>https://mariadelia.blog/2025/10/26/understanding-concurrency-from-a-beginners-point-of-view/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Mon, 27 Oct 2025 00:32:13 +0000</pubDate>
				<category><![CDATA[CS-343]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Quarter-2]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=76</guid>

					<description><![CDATA[Concurrency is one of those computer science topics that, in theory, makes sense but somehow manages to be a little confusing in practice. In Concurrency 101: From a Beginner’s Point of View, Mrinal gives a straightforward and step-by-step discussion on how languages such as Python, JavaScript, and Go handle more than one thing simultaneously. My […]]]></description>
										<content:encoded><![CDATA[</p>
<p>Concurrency is one of those computer science topics that, in theory, makes sense but somehow manages to be a little confusing in practice. In Concurrency 101: From a Beginner&#8217;s Point of View, Mrinal gives a straightforward and step-by-step discussion on how languages such as Python, JavaScript, and Go handle more than one thing simultaneously. My favorite was the way the author explained concurrency not as &#8220;doing multiple things at the same time,&#8221; but rather as making progress on more than one task without getting in each other&#8217;s way.</p>
<p>The article starts by explaining the distinction between concurrency and parallelism, a difference that is essential for authors of responsive programs to understand. Mrinal then discusses the mechanisms that support concurrency: processes, threads, and event loops. Each of these has trade-offs, processes are heavier weight but safer, threads are lighter weight with the risk of race conditions, and event loops (like JavaScript&#8217;s) rely on non-blocking operations to stay efficient.</p>
<p>There&#8217;s a large section on synchronization and how programmers prevent &#8220;chaos&#8221; when threads are reading and writing shared data. I liked the presentation of mutexes and semaphores. The chef example for describing deadlocks made it easy to see how two threads might be waiting for each other forever. Mrinal does discuss practical solutions such as lock ordering, timeouts, and try-locks, all patterns we&#8217;ve discussed in CS-343 when we&#8217;ve talked about safe concurrent design.</p>
<p>The post then moves to lock-free programming and message passing and explains how atomic operations and the Actor Model can eliminate many synchronization problems altogether. I liked how Mrinal mapped these concepts to real systems like Go&#8217;s concurrency model and Apache Spark&#8217;s distributed processes, and how scaling depends on understanding which workloads are benefitted by which model.</p>
<p>I picked this resource because concurrency has been one of the more daunting topics for me. Having the opportunity to read a post that was written from the perspective of another student made it that much more relatable. The analogies, along with real engineering explanations, bridged the gap between textbook theory and real implementation.</p>
<p>I took away from this blog to conceptualize concurrency as orderly cooperation between tasks rather than chaos waiting to happen. It opened my eyes to how careful design choices, like tidy lock ordering or message passing, can make programs more correct and speedier. In the coming times, I will apply these lessons when I am working on multithreaded assignments or any program that demands responsiveness, like my Android application that I made this summer which communicates with a Flask backend. Having the fundamentals of concurrency under my belt will allow me to write cleaner, safer, and more scalable code.</p>
<p>Resources: <a href="https://mrinalxdev.github.io/mrinalxblogs/blogs/concurrency.html">https://mrinalxdev.github.io/mrinalxblogs/blogs/concurrency.html</a></p></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">42939</post-id>	</item>
		<item>
		<title>Polymorphism in Object-Oriented Programming</title>
		<link>https://mariadelia.blog/2025/10/02/polymorphism-in-object-oriented-programming/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Fri, 03 Oct 2025 01:35:17 +0000</pubDate>
				<category><![CDATA[CS-343]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Quarter-1]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=72</guid>

					<description><![CDATA[Polymorphism was one of those programming words that used to sound scary the first time I ever heard of it. It literally means “many forms” but in OOP, it’s not as scary-sounding as it is. It’s basically when the same method or function can be something different based on what object it’s being called from. […]]]></description>
										<content:encoded><![CDATA[</p>
<p>Polymorphism was one of those programming words that used to sound scary the first time I ever heard of it. It literally means &#8220;many forms&#8221; but in OOP, it&#8217;s not as scary-sounding as it is. It&#8217;s basically when the same method or function can be something different based on what object it&#8217;s being called from. As soon as I started reading over some examples, it made a lot more sense.</p>
<p>Think of it like this: an individual might be a class student, a home sibling, and maybe a work employee. Same person, various role depending on context. In programming, polymorphism enables us to do one thing with one function that changes its behavior depending on the object.</p>
<p>There are two main forms of polymorphism. Compile-time polymorphism (or static) is solved before the program ever runs. That generally happens with method overloading, where you have multiple versions on the same method name with different parameters. The compiler figures out which one to invoke. Operator overloading is another example, like using &#8220;+&#8221; for numbers and strings too.</p>
<p>Then there is runtime polymorphism (dynamic), resolved as the program is running. That is what happens with method overriding. A case in point is a parent class Shape that has a method draw(). Subclasses such as Circle and Square override draw() to do something else. When you call draw(), the program picks one that matches the actual object.</p>
<p>First of all, I used to confuse this with inheritance. They definitely go hand in hand, but they are not one and the same. Inheritance is when you are copying another class&#8217;s code. Polymorphism is when you have the same method name but have different action. </p>
<p>A lot of people also think that using polymorphism, especially the runtime kind, makes programs really slow. I used to believe that too, but it turns out that’s not really the case anymore. Modern compilers are built to handle this kind of thing quickly with tricks like virtual tables, so the performance hit is tiny. The trade-off is worth it because you get cleaner code and way more flexibility, so worrying about speed here feels kind of outdated.</p>
<p>I&#8217;ve read about this and it struck me how many times I&#8217;ve made my own code overly complicated. In Java, for example, I used to create a whole bunch of methods with unique names when I could have done overloading. I also blocked overriding in subclasses because I believed that it would be slow. Now I know that not just is that fine, it&#8217;s the correct thing to do most of the time.</p>
<p>In the future, I&#8217;d like to use polymorphism more intentionally, especially in my Android applications. It&#8217;ll be a tremendous assistance if new functionality is introduced in the future because I won&#8217;t need to begin anew. That, to me, is the beauty of OOP, it&#8217;s not just about making things function, but making them simpler to maintain and extend in the long run.</p>
<p>Resources:</p>
<p><a href="https://www.cincom.com/blog/smalltalk/polymorphism-in-object-oriented-programming/">https://www.cincom.com/blog/smalltalk/polymorphism-in-object-oriented-programming/</a></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">41490</post-id>	</item>
		<item>
		<title>Maria’s Blog</title>
		<link>https://mariadelia.blog/2025/09/08/marias-blog/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Tue, 09 Sep 2025 00:19:47 +0000</pubDate>
				<category><![CDATA[CS-343]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=62</guid>

					<description><![CDATA[
Hi everyone my name is Maria and this is my introductiory post for CS343!




]]></description>
										<content:encoded><![CDATA[<p>Hi everyone my name is Maria and this is my introductiory post for CS343!</p></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">38704</post-id>	</item>
		<item>
		<title>Understanding Smoke Testing in Software Development</title>
		<link>https://mariadelia.blog/2025/04/17/understanding-smoke-testing-in-software-development/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Fri, 18 Apr 2025 01:44:00 +0000</pubDate>
				<category><![CDATA[CS-443]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Week 12]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=54</guid>

					<description><![CDATA[In software development, a build has to be stable before further more comprehensive testing in a project so that the project is successful. One of the ways of guaranteeing this is smoke testing, which is otherwise known as Build Verification Testing or Build Acceptance Testing. Smoke testing is an early check-point to verify that the major features of the software are functioning as desired before other more comprehensive testing is done. What is Smoke Testing?Smoke testing is a form of software testing that involves executing a quick and superficial test of the most crucial features of an application to determine whether the build is stable enough for further testing. It […]]]></description>
										<content:encoded><![CDATA[<p>In software development,&nbsp;a build&nbsp;has&nbsp;to be&nbsp;stable before&nbsp;further&nbsp;more&nbsp;comprehensive&nbsp;testing&nbsp;in&nbsp;a&nbsp;project&nbsp;so that&nbsp;the project&nbsp;is successful. One&nbsp;of&nbsp;the&nbsp;ways&nbsp;of guaranteeing&nbsp;this is&nbsp;smoke testing,&nbsp;which&nbsp;is otherwise&nbsp;known as Build Verification Testing or Build Acceptance Testing.&nbsp;Smoke&nbsp;testing&nbsp;is&nbsp;an early&nbsp;check-point&nbsp;to verify&nbsp;that&nbsp;the&nbsp;major&nbsp;features&nbsp;of the software&nbsp;are&nbsp;functioning&nbsp;as&nbsp;desired&nbsp;before&nbsp;other&nbsp;more&nbsp;comprehensive&nbsp;testing&nbsp;is&nbsp;done.</p>
<p>What is Smoke Testing?<br />Smoke testing is a&nbsp;form of&nbsp;software testing&nbsp;that involves&nbsp;executing&nbsp;a quick and&nbsp;superficial&nbsp;test&nbsp;of the most&nbsp;crucial&nbsp;features of an application to determine whether the build is stable enough for further testing. It is a&nbsp;minimum&nbsp;set of tests&nbsp;created&nbsp;to&nbsp;verify&nbsp;if&nbsp;the&nbsp;core&nbsp;features&nbsp;of the application&nbsp;are&nbsp;functioning. Smoke tests are&nbsp;generally&nbsp;executed&nbsp;once&nbsp;a new build is&nbsp;promoted&nbsp;to a quality assurance environment, and they act as an early&nbsp;warning&nbsp;system&nbsp;of whether the application is ready for&nbsp;further&nbsp;testing or&nbsp;requires&nbsp;correction&nbsp;immediately.</p>
<p>Important&nbsp;Features&nbsp;of Smoke Testing</p>
<p>-Level of Testing: Smoke tests&nbsp;are&nbsp;interested&nbsp;in&nbsp;the most important and&nbsp;basic&nbsp;features of the software, without&nbsp;exploring&nbsp;each&nbsp;and&nbsp;every&nbsp;functionality.<br />-Automation:&nbsp;Automated&nbsp;smoke testing&nbsp;is a common&nbsp;routine,&nbsp;especially&nbsp;in&nbsp;the&nbsp;case&nbsp;of&nbsp;time&nbsp;limitations,&nbsp;to&nbsp;perform&nbsp;quick, repeatable tests.<br />-Frequency: Smoke testing is&nbsp;normally&nbsp;run&nbsp;after every build or significant&nbsp;change in&nbsp;code&nbsp;in&nbsp;order&nbsp;to allow&nbsp;early&nbsp;identification&nbsp;of major issues.<br />-Time Management:&nbsp;The&nbsp;testing&nbsp;itself&nbsp;is quick&nbsp;in nature,&nbsp;so&nbsp;it is a&nbsp;valuable time-saver&nbsp;by&nbsp;catching&nbsp;critical issues early.<br />-Environment: Smoke testing is typically&nbsp;performed&nbsp;in an environment that&nbsp;mimics&nbsp;the production environment&nbsp;so&nbsp;that&nbsp;test results are as realistic as possible.</p>
<p>Goal of Smoke Testing</p>
<p>The primary objectives of smoke testing&nbsp;are:</p>
<p>-Resource Optimization:&nbsp;Don&#8217;t&nbsp;waste&nbsp;resources&nbsp;and&nbsp;time&nbsp;on testing if core functionalities are broken.<br />-Early Detection of Issues:&nbsp;Identify any&nbsp;significant&nbsp;issues&nbsp;early&nbsp;so&nbsp;that they can be fixed at a quicker pace.<br />-Refined&nbsp;Decision-Making:&nbsp;Present&nbsp;an&nbsp;open&nbsp;decision&nbsp;schema&nbsp;on whether&nbsp;or not&nbsp;the build is ready&nbsp;to&nbsp;go to thorough,&nbsp;detailed&nbsp;testing.<br />-Continuous Integration:&nbsp;Make&nbsp;every&nbsp;new build&nbsp;meet&nbsp;basic quality&nbsp;standards&nbsp;before it is&nbsp;added&nbsp;to&nbsp;the&nbsp;master&nbsp;codebase.<br />-Pragmatic&nbsp;Communication:&nbsp;Give&nbsp;rapid&nbsp;feedback to development teams,&nbsp;allowing&nbsp;them to communicate&nbsp;clearly&nbsp;about&nbsp;build stability.</p>
<p><strong>Types of Smoke Testing</strong><br />There are several types of smoke&nbsp;tests&nbsp;based on&nbsp;methodology&nbsp;chosen&nbsp;and&nbsp;setting&nbsp;where&nbsp;it&nbsp;is&nbsp;put&nbsp;to practice:<br />-Manual Testing:&nbsp;Test&nbsp;cases&nbsp;are&nbsp;written&nbsp;and&nbsp;executed&nbsp;manually&nbsp;for each build&nbsp;by testers.<br />-Automated Testing:&nbsp;Automation&nbsp;tools&nbsp;make&nbsp;the&nbsp;process&nbsp;work&nbsp;by&nbsp;itself&nbsp;best&nbsp;used in situations of&nbsp;tight&nbsp;deadline projects.<br />-Hybrid Testing:&nbsp;Combines&nbsp;a&nbsp;mixture&nbsp;of&nbsp;automated&nbsp;as&nbsp;well&nbsp;as&nbsp;manual&nbsp;tests&nbsp;for&nbsp;capitalizing&nbsp;on both&nbsp;the&nbsp;pros&nbsp;of&nbsp;each&nbsp;methodology.<br />Daily Smoke Testing: Conducted&nbsp;on a&nbsp;daily&nbsp;basis, especially in projects&nbsp;with&nbsp;frequent builds and continuous integration.<br />Acceptance Smoke Testing:&nbsp;Specifically&nbsp;focused on verifying whether the build meets the&nbsp;key&nbsp;acceptance criteria&nbsp;defined&nbsp;by stakeholders.<br />UI Smoke Testing: Tests only the user interface&nbsp;features&nbsp;of an application to&nbsp;verify&nbsp;whether&nbsp;basic&nbsp;interactions are working.</p>
<p><strong>Applying Smoke Testing at&nbsp;Various&nbsp;Levels</strong><br />Smoke testing can be applied at various levels of software testing:<br />Acceptance Testing Level:&nbsp;Ensures&nbsp;that the build meets&nbsp;minimum&nbsp;acceptance criteria&nbsp;established&nbsp;by the&nbsp;stakeholders&nbsp;or&nbsp;client.<br />System Testing Level: Ensures that the&nbsp;system&nbsp;as&nbsp;a whole behaves&nbsp;as expected&nbsp;when&nbsp;all modules&nbsp;work&nbsp;together.<br />Integration Testing Level:&nbsp;Ensures&nbsp;that&nbsp;modules that have been&nbsp;integrated&nbsp;work&nbsp;and&nbsp;communicate&nbsp;as&nbsp;expected&nbsp;when combined.</p>
<p><strong>Advantages of Smoke Testing</strong><br />Smoke testing&nbsp;possesses&nbsp;several advantages, including:<br />Quick Execution: It is easy and&nbsp;quick&nbsp;to&nbsp;run,&nbsp;and&nbsp;hence&nbsp;ideal for frequent builds.<br />Early Detection: It helps in&nbsp;defect&nbsp;detection&nbsp;in the initial stage, preventing&nbsp;wasting&nbsp;money&nbsp;on faulty builds.<br />Improved&nbsp;Quality of&nbsp;Software: By detecting&nbsp;the&nbsp;issues at&nbsp;the&nbsp;initial&nbsp;stage, smoke testing&nbsp;allows&nbsp;for&nbsp;improved&nbsp;software&nbsp;quality.<br />Risk&nbsp;of&nbsp;Failure&nbsp;is&nbsp;Minimized:&nbsp;Detecting&nbsp;core&nbsp;faults&nbsp;in&nbsp;earlier&nbsp;phases&nbsp;minimizes&nbsp;failure&nbsp;risk&nbsp;at&nbsp;subsequent&nbsp;testing&nbsp;phases.<br />Time and Effort&nbsp;Conservation:&nbsp;Time&nbsp;as&nbsp;well&nbsp;as&nbsp;effort&nbsp;is&nbsp;conserved&nbsp;as&nbsp;it prevents futile&nbsp;testing&nbsp;within&nbsp;unstable builds.</p>
<p><strong>Disadvantages of Smoke Testing</strong><br />Although&nbsp;smoke testing&nbsp;is&nbsp;useful in&nbsp;many&nbsp;respects, it&nbsp;has&nbsp;some disadvantages too:<br />Limited Coverage: It&nbsp;checks&nbsp;only&nbsp;the most critical functions&nbsp;and&nbsp;doesn&#8217;t cover&nbsp;other potential issues.<br />Manual Testing Drawbacks:&nbsp;Manually, it&nbsp;could&nbsp;be time-consuming, especially for larger projects.<br />Inadequate for Negative Tests: Smoke testing&nbsp;typically&nbsp;doesn&#8217;t&nbsp;involve&nbsp;negative testing or invalid input scenarios.<br />Minimal Test Cases: Since it&nbsp;only&nbsp;checks&nbsp;the&nbsp;basic&nbsp;functionality, it may&nbsp;fail&nbsp;to&nbsp;identify all possible issues.</p>
<p>Conclusion<br />In conclusion, smoke testing is an&nbsp;important&nbsp;practice&nbsp;at&nbsp;the early stages of software development. It&nbsp;decides&nbsp;whether a build is stable enough&nbsp;to go&nbsp;for further testing, saving time and resources. By identifying major issues early in the development&nbsp;stage, it&nbsp;facilitates&nbsp;an&nbsp;efficient and&nbsp;productive&nbsp;software testing process. However, it&nbsp;should&nbsp;be&nbsp;remembered&nbsp;that smoke testing is not exhaustive and&nbsp;has&nbsp;to&nbsp;be&nbsp;supported&nbsp;by other&nbsp;forms of&nbsp;testing&nbsp;in&nbsp;order&nbsp;to ensure&nbsp;complete&nbsp;quality assurance.&nbsp;</p>
<p><strong>Personal Reflection</strong></p>
<p>Looking&nbsp;at&nbsp;the concept of smoke testing, I&nbsp;view&nbsp;the importance of catching issues early in the software development process.<br />It&#8217;s easy to get&nbsp;swept&nbsp;up in the excitement of&nbsp;rolling&nbsp;out&nbsp;new features and&nbsp;fully&nbsp;testing them, but if the foundation&nbsp;is&nbsp;unstable, all the subsequent tests and&nbsp;optimizations&nbsp;can&nbsp;be&nbsp;pointless. Smoke testing, in this sense, serves as a safety net,&nbsp;getting&nbsp;the critical functions&nbsp;running&nbsp;before&nbsp;delving&nbsp;further&nbsp;into&nbsp;more&nbsp;rigorous&nbsp;tests.&nbsp;I think the idea of early defect detection resonates with my own&nbsp;working&nbsp;style.</p>
<p>As I like to&nbsp;fix&nbsp;small issues&nbsp;as&nbsp;they&nbsp;arise&nbsp;rather than letting them&nbsp;escalate&nbsp;into&nbsp;big&nbsp;problems, smoke testing allows development teams to&nbsp;solve&nbsp;&#8220;show-stoppers&#8221;&nbsp;early on,&nbsp;preventing&nbsp;wasted&nbsp;time, effort, and resources&nbsp;in&nbsp;the&nbsp;future.&nbsp;Though&nbsp;it&nbsp;does&nbsp;not&nbsp;pick up&nbsp;everything, its simplicity and&nbsp;the&nbsp;fact that it executes fast&nbsp;can&nbsp;save&nbsp;developers&nbsp;from&nbsp;wasted&nbsp;time&nbsp;spent&nbsp;on testing a&nbsp;defective&nbsp;product,&nbsp;thus&nbsp;ending&nbsp;up with&nbsp;a&nbsp;smooth&nbsp;and efficient workflow.&nbsp;The&nbsp;process, especially in a&nbsp;scenario&nbsp;where&nbsp;there are frequent&nbsp;new builds&nbsp;being&nbsp;rolled&nbsp;out, seems&nbsp;imperative&nbsp;to&nbsp;maintain&nbsp;a&nbsp;rock-solid and&nbsp;healthy&nbsp;product.<br />The benefits of early problem detection not only&nbsp;make&nbsp;software&nbsp;better,&nbsp;but also&nbsp;stimulate&nbsp;a positive&nbsp;feedback&nbsp;loop&nbsp;of&nbsp;constant&nbsp;improvement&nbsp;between&nbsp;the development team.&nbsp;</p></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">CS@Worcester – Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">31674</post-id>	</item>
		<item>
		<title>Understanding Mocking in Software Testing</title>
		<link>https://mariadelia.blog/2025/04/11/understanding-mocking-in-software-testing/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Fri, 11 Apr 2025 22:03:00 +0000</pubDate>
				<category><![CDATA[CS-443]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Week 11]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=50</guid>

					<description><![CDATA[Software testing is crucial to ensure that the system acts as expected. However, when dealing with complex systems, it can be challenging to test components in isolation since they rely on external systems like databases, APIs, or services. This is where mocking is used, a technique that employs test doubles. Mocking allows developers to simulate the behavior of real objects within a test environment, isolating the components they want to test. This blog post explains what mocking is, how it is applied in unit testing, the categories of test […]]]></description>
										<content:encoded><![CDATA[<p class="has-text-align-left">Software testing is crucial to ensure that the system acts as expected. However, when dealing with complex systems, it can be challenging to test components in isolation since they rely on external systems like databases, APIs, or services. This is where mocking is used, a technique that employs test doubles. Mocking allows developers to simulate the behavior of real objects within a test environment, isolating the components they want to test. This blog post explains what mocking is, how it is applied in unit testing, the categories of test doubles, best practices, and more.</p>
<p>What is Mocking?<br />Mocking is the act of creating test doubles, which are copies of real objects that behave in pre-defined ways. These fake doubles stand in for actual objects or services and allow the developers to isolate chunks of code. Mocking also allows them to simulate edge cases, mistakes, or specific situations that could be hard to replicate in the real world. For instance, instead of conversing with a database, a developer can use a mock object that mimics database returns. This offers greater control of the testing environment, increases testing speed, and allows finding issues early.</p>
<p>Knowing Test Doubles<br />It is important to know test doubles to completely comprehend mocking. Test doubles are mock objects that replace actual components of the system for the purpose of testing. Test doubles share the same interface with the actual object but act in a controlled fashion. There are different types of test doubles:</p>
<p>Mocks: Mocks are pre-initialized objects that carry expectations for being called. Mocks are used to force particular interactions, i.e., function calls with specified arguments, to occur while the test runs. When interactions are  not up to expectations, then the test would fail.</p>
<p>Stubs: Stubs do not care about interactions. They simply provide pre-defined responses to method calls so that the test can just go ahead and not worry about the actual component behavior.</p>
<p>Fakes: They are more evolved test doubles with smaller implementations of real components. For example, an in-memory database simulating a live database can be used as a fake to speed up testing without relying on external systems.</p>
<p>Spies: Spies are similar to mocks but are employed to log interactions against an object. You can verify the spy after a test to ensure that the expected methods were invoked with the correct parameters. Unlike mocks, spies will not make the test fail if the interactions are unexpected.</p>
<p>The Role of Mocking in Unit Testing<br />Unit testing is testing individual pieces, such as functions or methods, in isolation. But most pieces rely on external services, such as databases or APIs. These dependencies add complexity, unpredictability, and outside factors that can get in the way of testing.</p>
<p>Mocking enables developers to test the unit under test in isolation by substituting external dependencies with controlled, fake objects. This ensures that any problems encountered during the test are a result of the code being tested, not the external systems it depends on.</p>
<p>Mocking also makes it easy to test edge cases and error conditions. For example, you can use a mock object to throw an exception or return a given value, so you can see how your code handles these situations. In addition, mocking makes tests faster because it avoids the overhead of invoking real systems like databases or APIs.</p>
<p>Mocking Frameworks: Mockito and Beyond<br />Various mocking libraries are utilized by programmers in order to craft and manipulate the mocks for unit testing. Among the most commonly used libraries used in the Java community is Mockito. Mockito makes it easy for one to write mock objects, specify their behavior, and confirm interactions in an easy-to-read manner.</p>
<p>Highlights of Mockito include:</p>
<p>Behavior Verification: One can assert that certain methods were called with the right arguments.<br />Stubbing: Mockito allows you to define return values for mock methods so that various scenarios can be tested.<br />Argument Matchers: It provides flexible argument matchers for verifying method calls with a range of values.<br />Other than Mockito, other libraries like JMock, EasyMock, and JUnit 5 can also be used. For Python developers, the unittest.mock module is utilized. In the.NET ecosystem, libraries like Moq and NSubstitute are commonly used. For JavaScript, Sinon.js is the go-to library for mocking, stubbing, and spying.</p>
<p>Best Practices in Mocking<br />As terrific as mocking is, there is a best-practice way of doing it and having meaningful, sustainable tests. Here are a few rules of thumb to bear in mind:</p>
<p>Mock Only What You Own: Mock only entities you own, such as classes or methods that you have created. Mocking third-party APIs or external dependencies will lead to brittle tests, which will be broken when outer dependencies change.</p>
<p>Keep Mocks Simple: Don&#8217;t overcomplicate mocks with too many configurations or behaviors. Simple mocks are more maintainable and understandable.</p>
<p>Avoid Over-Mocking: Over-mocking your tests can make them too implementation-focused. Mock only what&#8217;s required for the test, and use real objects when possible.</p>
<p>Assert Behavior, Not Implementation: Tests must assert the system&#8217;s behavior is right, not how the system implements the behavior. Focus on asserting the right methods with the right arguments are called, rather than making assertions about how the system works internally.</p>
<p>Use Mocks to Isolate Tests: Use mocks to isolate tests from slow or flaky external dependencies like databases or networks. This results in faster and more deterministic tests.</p>
<p>Clear Teardown and Setup: Ensure that the mocks are created before each test and destroyed thereafter. This results in tests that are repeatable and don&#8217;t produce any side effects.</p>
<p>Conclusion<br />Mocking is an immensely valuable software testing strategy that provides developers with a way to segregate and test separate components isolated from outside dependencies. Through the use of test doubles like mocks, stubs, fakes, and spies, programmers are able to fake out actual conditions, test on the boundary, and make their tests more reliable and quicker. Good practices must be followed, like mock only what you own, keep mocks as plain as possible, and assert behavior and not implementation. Applied in the right way, mocking is a great friend in creating robust, stable, and quality software.</p>
<p>Personal Reflection</p>
<p>I find mocking to be an interesting approach that enables specific and effective testing. In this class, Quality Assurance &amp; Testing, I&#8217;ve gained insight into how crucial it is to isolate the units being tested in order to check their functionality in real-world settings. Precisely, I&#8217;ve understood how beneficial mocking can be in unit testing in order to enable the isolation of certain interactions and edge cases.</p>
<p class="has-text-align-left">I also believe that, as developers, we tend to over-test or rely too heavily on mocks, especially when working with complex systems. Reflecting back on my own experience, I will keep in mind that getting the balance right, mocking when strictly required and testing behavior, not implementation, is the key to writing meaningful and sustainable tests. This approach helps us ensure that the code is useful and also adjustable when it encounters future changes, which is, after all, what any well-designed testing system is hoping for.</p>
<p class="has-text-align-left">Reference:</p>
<p>What is Mocking? An Introduction to Test Doubles by GeeksforGeeks,  Available at: <a href="https://www.geeksforgeeks.org/mocking-an-introduction-to-test-doubles/" rel="nofollow">https://www.geeksforgeeks.org/mocking-an-introduction-to-test-doubles/</a>.</p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">31444</post-id>	</item>
		<item>
		<title>Basis Path Testing in Software Testing</title>
		<link>https://mariadelia.blog/2025/04/02/basis-path-testing-in-software-testing/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Thu, 03 Apr 2025 00:33:00 +0000</pubDate>
				<category><![CDATA[CS-443]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Week 10]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=45</guid>

					<description><![CDATA[Software testing is a significant part of confirming the functionality, reliability, and performance of software products. Out of all the diverse types of tests, Basis Path Testing is one essential technique for confirming the control flow of a program. In this blog, we share the concept of Basis Path Testing, its importance, and how it is applied in software testing. What is Basis Path Testing?Basis Path Testing is a white-box testing method that focuses on software control flow. It was formulated by Thomas […]]]></description>
										<content:encoded><![CDATA[<p>Software testing is a significant part of confirming the functionality, reliability, and performance of software products. Out of all the diverse types of tests, Basis Path Testing is one essential technique for confirming the control flow of a program. In this blog, we share the concept of Basis Path Testing, its importance, and how it is applied in software testing.</p>
<p>What is Basis Path Testing?<br />Basis Path Testing is a white-box testing method that focuses on software control flow. It was formulated by Thomas J. McCabe as a part of the Cyclomatic Complexity metric, which calculates the amount of linearly independent paths in a program&#8217;s control flow. The approach is designed to test the software by executing all the independent paths through the program at least once to provide complete coverage of the code.</p>
<p>The goal of Basis Path Testing is to locate all the potential paths within a program and ensure that each of them is tested for possible issues. It helps in determining logical defects that are not obvious through other testing techniques, such as functional or integration testing.</p>
<p>Key Elements of Basis Path Testing<br />Control Flow Graph: The first step in Basis Path Testing is to design a control flow graph (CFG) for the program. This graph represents the control structure of the program, including decision points, loops, and function calls.</p>
<p>Cyclomatic Complexity: The second step is to compute the cyclomatic complexity of the program, which is the number of independent paths. The metric is calculated as:<br />V(G) = e &#8211; n + 2*P</p>
<p>Where, e is number of edges, n is number of vertices, P is number of connected components.<br />The cyclomatic complexity provides the minimum number of test cases required to exercise all the independent paths.</p>
<p>Independent Paths: After calculating the cyclomatic complexity, the independent paths in the control flow graph must be determined. These are paths that don&#8217;t reuse any other path&#8217;s sequence of execution.</p>
<p>Test Case Design: Once independent paths are identified, test cases are created to execute each path such that all aspects of the program&#8217;s logic are exercised.</p>
<p>Importance of Basis Path Testing<br />Basis Path Testing is particularly useful in revealing intricate logical errors that can result due to intricate control flow. By carrying out all independent paths, it ensures that nothing in the program is left untreated, and this reduces the chances of undiscovered defects.</p>
<p>The approach is used widely in unit testing and integration testing, especially for programs with intricate decision structures and loops. It is also a good approach to use in regression testing, where changing the codebase can probably introduce flaws into previously tested paths.</p>
</p>
<p>Conclusion<br />Basis Path Testing is a highly valuable method for thorough testing of software using independent paths through the control flow of a program. By understanding and applying this method, software developers are able to improve the quality of applications, reduce errors, and deliver improved software to end-users.</p>
<p>Personal Reflection<br />Having studied Basis Path Testing, I can see how this approach is essential to checking the strength of software systems. As a computer science major, what I have learned from my studies is that testing is not just about checking if the code runs but, more importantly, that the logic and correctness of running are checked. Basis Path Testing&#8217;s focus on cyclomatic complexity provides a clear, mathematical way to ensure that all possible execution paths are considered.</p>
<p>My experience is that application of this technique detects logical flaws in programs which would otherwise not be easily seen through normal debugging or functional testing. </p>
<p>Citation:<br />&#8220;Basis Path Testing in Software Testing.&#8221; GeeksforGeeks, <a href="https://www.geeksforgeeks.org/basis-path-testing-in-software-testing/" rel="nofollow">https://www.geeksforgeeks.org/basis-path-testing-in-software-testing/</a>. </p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">31232</post-id>	</item>
		<item>
		<title>Learning Boundary Value Analysis in Software Testing</title>
		<link>https://mariadelia.blog/2025/03/24/learning-boundary-value-analysis-in-software-testing/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 03:29:00 +0000</pubDate>
				<category><![CDATA[CS-443]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<category><![CDATA[Week 9]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=39</guid>

					<description><![CDATA[One of the most significant ways of ensuring that an application is reliable and efficient before deployment is through software testing. One of the most powerful functional testing techniques that focuses on testing the boundary cases of a system is Boundary Value Analysis (BVA). Boundary Value Analysis finds potential defects that are apt to show […]]]></description>
										<content:encoded><![CDATA[</p>
<p>One of the most significant ways of ensuring that an application is reliable and efficient before deployment is through software testing. One of the most powerful functional testing techniques that focuses on testing the boundary cases of a system is Boundary Value Analysis (BVA). Boundary Value Analysis finds potential defects that are apt to show themselves on input partition boundaries.</p>
<p>What is Boundary Value Analysis?</p>
<p>Boundary Value Analysis is a black-box testing method which tests the boundary values of valid and invalid partitions. Instead of testing all the possible values, the testers focus on minimum, maximum, and edge-case values, as these are the most error-prone. This is because defects often occur at the extremities of the input ranges rather than at any point within the range.</p>
<p>For example, if a system accepts values between 18 and 56, instead of testing all the values, testers would test the below-mentioned values:</p>
<p>Valid boundary values: 18, 19, 37, 55, 56</p>
<p>Invalid boundary values: 17 (below minimum) and 57 (above maximum)</p>
<p>By running these primary test cases, the testers can easily determine boundary-related faults without unnecessary repetition of in-between value testing.</p>
<p>Implementing BVA: A Real-World Example</p>
<p>To represent BVA through an example, let us take a system processing dates under the following constraints:</p>
<p>Day: 1 to 31</p>
<p>Month: 1 to 12</p>
<p>Year: 1900 to 2000</p>
<p>Under Single Fault Assumption, where one of the variables is tested while others are at nominal values, test cases like below can be written:</p>
<p>Boundary value checking for years (e.g., 1900, 1960, 2000)</p>
<p>Boundary value checking for days (e.g., 1, 31, invalid cases like 32)</p>
<p>Checking boundary values for months (i.e., 1, 12)</p>
<p>By limiting test cases to boundary values, we are able to have maximum test coverage with minimum test effort.</p>
<p>Equivalence Partitioning and BVA together</p>
<p>Another helpful technique is combining BVA and Equivalence Partitioning (EP) together. EP divides input data into equivalent partitions where every equivalence class is expected to behave in the same way. By using these techniques together, testers can reduce the number of test cases but still maintain complete coverage.</p>
<p>For instance, if a system would only accept passwords of 6 to 10 characters long, test cases can be:</p>
<p>0-5 characters: Not accepted</p>
<p>6-10 characters: Accepted</p>
<p>11-14 characters: Not accepted</p>
<p>This mix makes the testing more efficient, especially when using more than one variable.</p>
<p>Limitations of BVA</p>
<p>Although BVA is strong, it does face some limitations:</p>
<p>It works well when the system contains properly defined numeric input ranges.</p>
<p>It has no regard for functional dependencies of variables.</p>
<p>It may not be equally effective on free-form languages like COBOL, which has more flexible input processing.</p>
<p>Conclusion</p>
<p>Boundary Value Analysis is one very important test method that can help testers define most probable fault sites of a system. Merged with Equivalence Partitioning, it has highest test effectiveness at the maximum elimination of test case replication and minimum complete loss of test coverage. In as much as BVA isn&#8217;t a &#8220;catch-all&#8221;, yet it represents an essential technique of software provision quality and dependability.</p>
<p>Personal Reflection</p>
<p>Learning Boundary Value Analysis has helped me understand more about software testing and how it makes the software reliable. It has shown me that by focusing on boundary values, defects can be detected with higher efficiency without generating surplus test cases. It is a very practical approach to apply in real-world scenarios, such as form validation and number input testing, where boundary-related errors are likely to be found. In the future, I will include BVA in my testing approach to offer more test coverage in software projects that I undertake.</p>
<p>Citation</p>
<p>Geeks for Geeks. (n.d.). Software Testing &#8211; Boundary Value Analysis. Retrieved from <a href="https://www.geeksforgeeks.org/software-testing-boundary-value-analysis/" rel="nofollow">https://www.geeksforgeeks.org/software-testing-boundary-value-analysis/</a></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">CS@Worcester – Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">30969</post-id>	</item>
		<item>
		<title>Maria Delia’s Blog</title>
		<link>https://mariadelia.blog/2025/01/27/maria-delias-blog/</link>
		
		<dc:creator><![CDATA[Maria Delia]]></dc:creator>
		<pubDate>Tue, 28 Jan 2025 04:42:45 +0000</pubDate>
				<category><![CDATA[CS-443]]></category>
		<category><![CDATA[CS@Worcester]]></category>
		<guid isPermaLink="false">http://mariadelia.blog/?p=35</guid>

					<description><![CDATA[
First Blog for CS-443



Hello I am Maria Delia and this is my first blog post for Software Quality Assurance &#38; Testing. 




]]></description>
										<content:encoded><![CDATA[<p>First Blog for CS-443</p>
<p>Hello I am Maria Delia and this is my first blog post for Software Quality Assurance &amp; Testing. </p></p>

<p class="syndicated-attribution"><em>From the blog <a href="https://mariadelia.blog">CS@Worcester – Maria Delia</a> by <a href="https://cs.worcester.edu/author/0/" title="Read other posts by Maria Delia">Maria Delia</a></em> and used with permission of the author. All other rights reserved by the author.</p>]]></content:encoded>
					
		
		<enclosure url="https://2.gravatar.com/avatar/5469b19ad15d738f58dbc15c899ab1e3571c26a106cef4d76dbb8b424dff51c5?s=96&#038;d=identicon&#038;r=G" length="0" type="" />

		<post-id xmlns="com-wordpress:feed-additions:1">28803</post-id>	</item>
	</channel>
</rss>
