• In my self-directed professional development this week, I explored the topic of Boundary Value Analysis (BVA) in software testing. We have discussed this topic under the tutelage of Professor Perez recently. The article I selected is titled “Boundary Value Analysis” from the QAble testing blog. The resource explains how testers can design effective test cases by focusing on input values that occur at the boundaries of acceptable ranges. The article can be accessed here:
    https://www.qable.io/blog/boundary-value-analysis

    The main idea presented in the article is that many software defects occur not in the middle of valid input ranges but at the extreme boundaries of those ranges. Boundary Value Analysis is therefore a testing technique that concentrates on validating the minimum, maximum, and values just inside and outside the boundaries of input constraints. For example, if a system accepts numbers between 1 and 100, the key test cases should include values like 0, 1, 2, 99, 100, and 101. By testing these edge cases, software testers can identify logical errors or validation mistakes that might otherwise remain undetected.

    I selected this particular resource because boundary testing is a fundamental concept in Software Quality Assurance, which is directly related to the course material. As someone studying computer science with a focus on software engineering, understanding systematic testing strategies is important for writing reliable and robust software. I wanted to better understand how professional testers design test cases efficiently instead of randomly trying input values.

    One thing that stood out to me while reading the article is how small variations near boundaries can expose serious system defects. For example, input validation errors might allow illegal values or incorrectly reject valid ones. This made me realize that testing is not just about checking whether software works in normal conditions, but also about identifying edge cases where systems may fail. The article also emphasized that Boundary Value Analysis is often used together with Equivalence Partitioning, which further improves the efficiency of test design. This connection helped me understand how multiple testing techniques can complement each other.

    Reflecting on this resource, I learned that effective testing requires both analytical thinking and structured methodologies. In many of my programming assignments, I usually test my programs with a few normal inputs just to confirm that the program runs correctly. However, after reading this article, I realized that I should also intentionally test boundary conditions. For example, when designing programs that accept user input such as age ranges, scores, or array sizes, I should verify the smallest allowed value, the largest allowed value, and values just outside those limits.

    In my future software development practice, I expect to apply Boundary Value Analysis when writing unit tests and validation logic. As a future software engineer, I believe this technique will help me produce more reliable software systems and reduce unexpected runtime errors. Overall, this article reinforced the importance of structured test design in improving software quality.

  • The Software Dev Capstone Project related Theas Pantry has been very valuable to me as far as providing me with near real Software Engineering experience is concerned. I am part of ‘Dependency Management and infrastructure updates’ Team.  We started this project first by working on GuestInfoBackend Module. As part of my role, I have completed below tickets

    https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfobackend/-/commit/45db754a21c8e50ea05ac80a41233d797e0e1388

    Above is the link demonstrating my work of updating ‘winston’ package to latest version.  Secondly, I worked on updating the package ‘amqplib’ as well as illustrated by the below URL.

    https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfobackend/-/commit/a810da88d2f11508a7316c6bea61e80fbf717fdc

    We then moved to updating dependencies for the ‘Frontend’ System. As part of this Sprint, I worked on below tickets

    https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfofrontend/-/commit/986bcf7d9885d8e27e7c619e40f1c77a8c1134cd

    As part of the current work on ‘Reporting System’, I worked on updating dependencies related to ‘mongodb’, ‘mocha’ and ‘chai’.

    https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/reportingbackend/-/commit/3dc96afa9fc27da3d541380efa10c77d0a08eb4f

    https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/reportingbackend/-/commit/7dba17365f41ea870f909495e799b1049700d2f9

    https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/reportingbackend/-/commit/1cd1be00b0788c2e9ff89043b1590e42064c5156

    What worked Well?

    We came together as a team and were fully aligned with our goals. We established communication channels using MS-Teams and were constantly working as a synergized team. We rarely had any misunderstandings or misgivings about each other and always assumed good intentions from each other’s work. We supported each other when we made mistakes and it was a thoroughly cherishable experience working with this team.

    What didn’t work well?

    I think our unfamiliarity with the technology stack consisting of NodeJS, java script and the whole art and science of dependency management threw many curve balls at us. We would have been more productive had we had previous knowledge of this technology stack. However, we overcome insurmountable odds and were able to honor the timelines that were provided to us.

    what changes could be made to improve as a team?

    The team has overcome the initial fear and lack of confidence very fast. The team is improving each week in terms of understanding the scope of work and the deliverables both from a technological and functional point of view. I do not think we have any compelling area that calls for radical improvement currently.

    What changes could be made to improve as an individual?

    I am basically an introvert and reserved by nature. I realized that such characteristics will not gel well with team-based Software engineering projects. I am inspired by the soft skills and confidence demonstrated by my teammates. I must improve my soft communication skills, articulate my thoughts better and be more vocal about my issues and deliverables.

    Apprenticeship Pattern

    Pattern Selected: Concrete Skills (from Apprenticeship Patterns by Dave Hoover and Adewale Oshineye)

    The Concrete Skills pattern emphasizes the importance of developing practical, hands-on technical abilities that can be directly applied in real software development environments. Rather than focusing only on theoretical knowledge, the pattern encourages software apprentices to deliberately practice specific skills such as programming, debugging, testing, and using development tools. By strengthening these tangible skills, a developer becomes more effective in contributing to team projects and solving real problems. The pattern also highlights that mastery in software engineering is built gradually through continuous practice and improvement of these concrete abilities.

    I selected this pattern because it strongly relates to my experience during the spring sprint in this course. As a senior computer science student, I noticed that many tasks during the sprint required applying specific technical skills rather than only conceptual understanding. For example, working with version control systems, debugging code, and collaborating with teammates required practical knowledge that comes from hands-on experience. The pattern resonated with me because it reinforces the importance of actively strengthening these core technical competencies.

    If I had read this pattern before the sprint, it likely would have influenced my preparation and approach. I would have spent more time practicing the relevant tools and technologies beforehand, particularly debugging techniques and collaborative development workflows. This preparation could have helped me work more efficiently and contribute more confidently to the team throughout the sprint.

  • I thoroughly enjoyed reading the textbook “Apprenticeship Patterns”. I wish I had read it much earlier in life. It is very inspiring and inculcates enormous wisdom to young aspiring professionals across all trades but more particularly in Software Domain.

    I found it very interesting that the book discourages aspiring Software development practitioners to discard the path of aspiring to become middle managers or C-Suite honchos. It states in very clear terms that becoming managers would mean that we become armchair experts and lose the grip on ground realities soon. It emphasizes the fact that we should focus on becoming better in a consistent manner in our Software development craft without being greedy about material gains or false perspective on what conventional society considers as success. For e.g… Society considers a Senior Vice President or CIO more successful than a dedicated Staff Engineer. But the Staff Engineer has dedicated their life to becoming good at what they started in their youth and get a sense of fulfillment from their work.

    The reading has caused me to change my opinion. I now learnt that I should always strive to be in teams where I am the poorest or weak aptitude wise. This gives me opportunity to learn from professionals who are much better than me and gain from their enormous experience. Before reading this book, I aspired to find jobs that would provide me with a comfort zone. I cherished reading the quote by C.S. Lewis in “Learning in Wartime” in this book. The quote states that “The only people who achieve much are those who want knowledge so badly that they seek it while the conditions are still unfavorable. Favorable conditions never come”. This is a very inspiring quote that compels us to get into the grind without waiting for perfect weather.

    So far, I have not found anything that I disagree with in this book. However, I would be curious to know the author’s perspective on this topic in this age of Generative AI. How should Software Interns and apprentices hone their craft with the advent of Large Language models. This especially considers so many predictions in recent times that this entire skill and the demand for it will soon die down. Agentic AI will replace Software Engineers. I would still assume Software Engineers may be needed to provide human oversight. However, time will tell on this subject.

    I think all chapters are important and align well with the over-arching topic. I am going to read and read this book several times during my lifetime. I am grateful for this opportunity.

  • As part of our course material on software quality and testing, I chose to read the blog post “Getting Started with JUnit Testing: The Path to Effective Java Automation” https://www.frugaltesting.com/blog/getting-started-with-junit-testing-the-path-to-effective-java-automation published on Frugal Testing. This resource directly relates to what we have been learning about unit testing and test-driven development, especially in Java-based applications. Since JUnit is one of the most widely used testing frameworks in Java, understanding its fundamentals is essential for any computer science student who plans to work in software development.

    The blog post provides a clear and structured introduction to JUnit, explaining what unit testing is, why it matters, and how JUnit supports automated testing in Java projects. It walks through key concepts such as test cases, assertions, annotations like @Test, and the general workflow of writing and executing tests. The author also emphasizes how automated unit tests help catch bugs early, improve code reliability, and support refactoring. Overall, the article serves as a practical starting point for developers who are new to testing or want to strengthen their testing practices.

    I selected this particular resource because I wanted a beginner-friendly yet practical explanation of JUnit that connects theory with real-world usage. While we often hear about the importance of testing in class, it can be difficult to visualize how testing fits into everyday development. This blog stood out because it focuses on hands-on testing concepts rather than abstract definitions, making it easier to connect course topics to actual coding practice.

    One of the most important things I learned from this article is how unit testing is not just about finding bugs, but about improving the overall design and maintainability of code. Writing tests forces developers to think more carefully about how their code is structured and how different components interact. The explanation of assertions helped me better understand how tests validate expected behavior, and the overview of JUnit annotations clarified how test execution is managed behind the scenes.

    This resource changed how I think about testing in my own projects. Previously, I viewed testing as something optional or done at the end of development. After reading this article, I see testing as an integral part of the development process. In the future, I expect to apply what I learned by writing JUnit tests alongside my Java code, especially for assignments and personal projects. This approach will help me catch errors earlier, write cleaner code, and build confidence in my software.

    Resource Link:

    https://www.frugaltesting.com/blog/getting-started-with-junit-testing-the-path-to-effective-java-automation

  • Hello, my name is Vishisht Seku. This is my Blog Post related to subject CS-443(Software Quality Assurance & Testing.) I am very glad to be a part of this class and learn more about the process of Software Quality Management.

  • One part of LibreFoodPantry that I found especially interesting was its mission to connect computer science education with real humanitarian impact. Rather than treating software development as an abstract or purely technical exercise, LibreFoodPantry shows how code can directly support local food pantries and the people who rely on them. The idea that free and open-source software can be adapted to meet the needs of different communities stood out to me, because it emphasizes flexibility, accessibility, and long-term usefulness instead of profit.

    I chose to write about this mission because it reframes how I think about computing as a field. As a senior at Worcester State University, much of my coursework has focused on efficiency, correctness, and performance. While those skills are important, LibreFoodPantry highlights another dimension of computer science: responsibility to society. By involving students and faculty in instructor-led, open-source projects, the organization creates a learning environment where technical skills are developed alongside empathy and civic awareness. This approach makes the work feel meaningful and shows that software can be a practical tool for social good, not just a career skill or academic requirement.

    The one thing that I thoroughly enjoyed reading about Thea’s Pantry was the Developer Documentation section. As an aspiring Software and Data Engineer this documentation was a revelation and a textbook. I liked the sections around ‘Code of Conduct’ and ‘Inclusive Language’ a lot. They inspire us to take a moral high ground and be kind and compassionate to our team members.

    I also enjoyed the technical sections that gave me a good grasp on managing Workflows using the Git Branch, Pull Request protocol. Other sections such as ‘Release Process’ and ‘Pipelines’ provide a rigid framework around the intended CI/CD Process. Regarding ‘Dependency Management’ I was surprised to find differences between ‘Dependencies’, ‘Dev Dependencies’ and ‘Peer Dependencies’. So far, I only assumed we need to manage ‘Dependencies’ as a single unit.

    I am very glad to be part of this Capstone Project with a noble mission.

  • The recent work assigned to us regarding REST API services has been very enlightening to me. I have found that REST API’s form the heart of Microservice architecture as well. REST API’s help Software Engineering Teams to break monolith Software application code into modular, atomic and maintainable code services. To explore this further, I read a blog post titled “Designing RESTful APIs for Microservices Architecture” https://blog.xapihub.io/2024/04/17/Designing-RESTful-APIs-for-Microservices-Architecture.html from XapiHub. This post explains how REST API design plays a critical role in making microservices effective, reliable, and loosely coupled. Since we are learning how clean design and good processes improve software quality, I felt this resource fit directly into our course themes.

    The blog begins by explaining that microservices rely heavily on APIs to communicate with each other. REST is the most common choice because it is simple, stateless, and works well across different services and technologies. The author highlights several best practices such as using clear resource-based URLs, handling errors consistently, applying versioning to avoid breaking clients, and building truly independent services that do not secretly depend on each other’s data models. The blog also emphasizes monitoring, documentation, and strong authentication practices, which are especially important when many services are talking to each other across the network.

    I selected this resource because I found it very simple with lot of simple to understand diagrams and easier to understand language. I have always found microservices interesting but a little overwhelming. When people talk about dozens or hundreds of services communicating through REST, I sometimes imagine chaos. This blog made the topic feel more understandable by breaking it into practical design rules. Since our class focuses on professional processes, documentation, and maintainability, learning how microservices stay organized through REST guidelines felt very relevant. Also, I know many modern data-engineering and enterprise systems use microservices—exactly the direction I want to grow my career in.

    One of the biggest things I learned is how important statelessness is. I always assumed microservices were powerful mainly because of their independence, but I didn’t realize how much stateful communication can ruin scalability. Another takeaway was API versioning. Before this, I didn’t think deeply about how older clients might break when an API changes. The blog’s explanation helped me understand why backward compatibility is a core part of good software process management.

    It appears that the path ahead to be a successful Software Engineer is overwhelming with so much to comprehend and implement. We have to be good not just at programming languages but also such principles of effective Application Engineering. This blog helped me connect industry best practices to what we’ve been learning in class about writing clean, maintainable, and well-designed software systems.

  • I am thoroughly enjoying the classes on writing clean code under the aegis of Professor Al-Faris in Software Process Management course. While looking for more material outside class, I found a blog post titled “How to Write Clean Java Code: Best Practices” on Digma’s website https://digma.ai/clean-code-java/. Since we work a lot with Java especially in our design patterns (Software Construction Design and Architecture under Professor Wurst) and project classes—I felt this blog would be perfect to learn some practical ideas on writing cleaner code. It directly connects to the course concepts of good processes, readability, and long-term maintainability.

    Summary of the Blog Post

    The blog highlights several clean-code principles specifically focusing on Java. It talks about using meaningful names, keeping methods small, breaking down complex logic, and making classes more focused on single responsibilities. It also covers organizing projects so that packages and modules make sense. Other topics include avoiding unnecessary comments, choosing good formatting, and using tools like linters and static analysis to keep code quality consistent across a team. The blog also mentions the importance of avoiding side effects and making code more predictable so that debugging becomes easier.

    Why I Picked This Resource

    I picked this blog mainly because I sometimes struggle with writing code that is easy for other people to read. In group projects, especially in CS-343 and other classes, I’ve noticed that even when my code works, people ask me to rewrite parts to make it more understandable. Since the course emphasizes professional development and communication skills, I wanted to learn more about how to write code that doesn’t confuse future developers—including a future version of myself. Also, I’m working with Java in my Android and backend mini projects, so the resource felt immediately relevant.

    What I Learned and My Reflections

    One thing that really affected me was the section on method size and single responsibility. I realized I often cram too much logic into one method because it feels “efficient” while writing it. But the blog explains that smaller, focused methods improve readability and make testing easier. Another important point was naming. I always knew naming mattered, but the blog explained it in a more practical way—names should communicate intent, not just function.

    I also learned about using automated tools to maintain code quality. Honestly, I never used static analyzers or formatters seriously, but now I see how they support good software processes, which we discuss a lot in this class. Clean code isn’t just a personal style; it’s part of a team’s workflow and long-term sustainability.

    How I Will Apply This Going Forward

    Going forward, I plan to be more disciplined about breaking up my functions, using stronger naming, and removing unnecessary comments. I also want to integrate automated formatting and code-quality tools in my personal projects, so I get used to writing cleaner code consistently.

  • While going through different resources on API Development, I came across a blog post from Stoplight titled “API Design Patterns for REST Web Services.” Stoplight Blog – API Design Patterns for REST Web Services. I decided to write about this one because it connects directly with what we’ve been discussing in class about Design Patterns for REST API’s under the aegis of Professor Wurst. I’ve always wanted to understand how professional developers make APIs that are easy to use and extend, and this article gave me a clearer picture of what good API design actually looks like.

    The post starts by explaining that REST APIs are not just about connecting endpoints — they’re about defining patterns that make services predictable and consistent. It discusses important ideas such as resource-based design, the use of HTTP methods for specific actions (like GET, POST, PUT, DELETE), and how to organize URIs in a way that feels natural to users. It also highlights how consistent naming conventions and status codes can make APIs more reliable for anyone consuming them. One interesting point the author makes is that designing an API is a lot like designing a user interface, except the “user” is another program.

    I chose this blog because it goes beyond the basics of how to make an API work and instead focuses on how to make one well-designed. The examples were simple but realistic, and the explanations didn’t feel overly academic or abstract. I could see how these design decisions connect with what we’ve learned about modularity, abstraction, and communication protocols in software process management.

    Reading this made me realize that design patterns in REST APIs are as important as design patterns in object-oriented programming. They both aim to make software easier to understand and maintain. For example, I learned about the “collection pattern,” where a resource like /users represents a group of items, and /users/{id} represents an individual. This pattern keeps the structure clean and predictable. I also learned how misuse of HTTP verbs (like using POST for everything) can make an API confusing or harder to scale later.

    Personally, this article helped me connect classroom theory with real-world engineering practice. It changed how I think about building web systems — not just as code that works, but as something other people will depend on. In my future projects, especially my capstone work and the “Investment Wisdom” app I’m building, I plan to use these principles when designing backend endpoints. I’ll pay attention to consistent URIs, proper status codes, and resource naming so that my APIs feel professional and well-structured.

    Overall, this blog was a great reminder that clarity and consistency matter as much as functionality. It showed me that designing a REST API is an act of communication — between developers, systems, and even future maintainers.

  • The recent learnings related to Scrum and Agile process under the aegis of Professor Al-Faris has been very enlightening. I have also been trying to look up for new learnings online.  While reading through several Agile blogs, I came across an article by Mike Cohn titled How to Coach Your Team to Run a Daily Scrum Meeting When You Cannot Attend on Mountain Goat Software. It immediately caught my attention because it deals with a real-world challenge that I have actually seen in group projects — what happens when the person who usually runs the meeting cannot make it. The post discusses how a Scrum Master or team lead can help their team stay organized and independent enough to run daily Scrum meetings even without them being there.

    Cohn’s main point is that the Scrum Master’s goal should not be to control every meeting, but to coach the team until they can manage those sessions on their own. He explains that when a team always relies on one person to start and run the daily Scrum, they become dependent. The healthier approach is to let the team take turns facilitating, learn to keep time, and handle updates themselves. He suggests that leaders should model good habits at first — like staying on topic, focusing on progress, and keeping it short — but gradually step back so that team members feel responsible for running the meeting.

    I chose this article because I can relate to it from my experience in software engineering classes where teamwork can be uneven. Sometimes one or two people end up organizing everything, while others stay quiet. This article showed me that real professional teams face the same issues, and that strong teams are the ones where everyone learns to self-organize. I also liked how Cohn keeps his advice practical — he doesn’t overcomplicate the process, but focuses on people learning through consistent, small improvements.

    Reading this blog reminded me why learning about Scrum in class is not just about memorizing roles or ceremonies. It’s about building habits of communication and accountability. As a computer science student, I used to think Agile was mainly for project managers, but this article helped me see how every developer plays a part in maintaining the team’s rhythm. Even if I’m just a developer, I can help keep meetings focused or volunteer to run one. That kind of initiative builds confidence and makes the team stronger.

    Resource: Mike Cohn, How to Coach Your Team to Run a Daily Scrum Meeting When You Cannot Attend