Category Archives: CS-348

choosing the right software development mythology: Agile, or Waterfall?

whether you’re beginning a new project or complementing a change in your developmental approach, it can be difficult to choose whether Agile methodology can assist us to successfully develop our idea or Waterfall methodology. choosing the right approach is tremendously crucial to successfully developing the project. In this blog, we will analyze the specifics of Agile, and Waterfall methologies to help you make an informed decision that is tailored to your projects needs.

understanding Agile

Agile methodology is often praised for its customer-centric, and flexible approach to software development. In Agile, projects are divided into small increments with minimal planning, and teams work in short cycles, known as iterations or sprints. The methodology emphasizes collaboration, customer feedback, and the flexibility to adapt to changing requirements in which results in continuous delivery of functional software, close collaboration between cross-functional teams, stakeholders, and the customers.

understanding Waterfall

Unlike Agile, the Waterfall methodology follows a linear and step-by-step approach. the project is divided into distinct stages where each stage build’s upon the previous one. The development process flows steadily downwards similar to an actual waterfall, through stages like requirements, design, implementation, testing, deployment, and maintenance. Each stage must be completed before the next one begins, and changes are discouraged once a phase is underway.

So, how do you choose which methodology is the right fit for your project? The choice depends on several factors, such as project requirements, team expertise, and customer involvement in your development process. If the project requirements are clearly defined from the beginning, and changes won’t be necessary during the development process, then the Waterfall methodology could be the right choice for you. However, I personally believe that Agile methodology is usually the right choice for most projects. In today’s world of constant change, adaptability is crucial in any developmental process. Additionally, based on my experience in various customer-service jobs I have had, I’ve realized that customers often don’t know exactly what they want. Therefore, having the ability to adapt if the customer’s needs change slightly is incredibly important.

From the blog CS@Worcester – The Bits & Bytes Universe by skarkonan and used with permission of the author. All other rights reserved by the author.

Writing Clean Code

As many programmers know, running code does not exactly mean good code. In addition to being executable, code also needs to be what is called “clean”, referring to code that is easy to read and understand.

In the article, How to Write Clean Code, Germán Cocca gives explains a large scope of what makes code clean. I have selected three areas that I found most beneficial to me as a CS student:

  1. Format and Syntax
  2. Conciseness and Clarity
  3. Documentation

Firstly, Format and syntax refer to how code is organized. Good format and syntax includes proper indentation, spacing, and variable naming that is consistent throughout the code. Furthermore, it is also important to make sure that variable names are meaningful so that its purpose is clear to the reader.

Secondly, It is good to be clear, but it is also important to keep it concise. Code that is too concise become difficult to understand because it sacrifices too many important details to minimize length. Code that is too detailed however becomes convoluted. Having clear and concise code makes it not only easier to read, but also easier to reuse, and so it is up to the programmer to know when to make the tradeoff between clarity and conciseness.

Thirdly, documentation cannot be understated. There is only so much information that can be expressed through the executable code itself, which is why clean code will always have comments that help guide the reader through what each part of the code is doing. That being said, it is important not to abuse the utilization of comments as this may affect the conciseness of the code. Therefore, comments should be used deliberately and formatted consistently.

Writing code requires a lot of planning and refining. Code will inevitably have to change and improve to meeting new requirements. Having clean code helps make this process more smooth and effective.

I learned this the hard way during my summer internship while using Jupyter Notebooks. Notebooks were especially useful because I was able to execute snip-bits of the code using its multi-cell functionality. However, this put me into a bad habit of not always using meaningful variable names or properly document what I was doing. And worst of all, I would often modify the notebook in ways that blurred the purpose of my code making it difficult to reuse later on.

After being set back a number of times, I realized my mistake and started fixing the way I would write my code. I started utilizing markdown and meaningful variables and would never delete or modify any of the finalized code I wrote, but instead make a new notebook or Python file with a new version noting why the new version was needed.

Poorly writing code may still compile, but it becomes very difficult to maintain. Writing clean code requires practice and awareness, but it is essential to making code easy to read and reusable.

Source: https://www.freecodecamp.org/news/how-to-write-clean-code/

From the blog Stories by Namson Nguyen on Medium by Namson Nguyen and used with permission of the author. All other rights reserved by the author.

Software Testing

In this week’s blog post, I will discuss the article “The Different Types of Software Testing” by Sten Pittet. This article discusses different kinds of tests, some differences between manual and automatic testing, and how to automate testing. I chose this article because it fits well with the software testing section of the syllabus. I also liked how the author went into great detail about the tests mentioned in the article. In this blog post, I will discuss some of the software testing methods in the article.

The first test discussed in the article is the unit test. “Unit tests are very low level and close to the source of an application. They consist in testing individual methods and functions of the classes, components, or modules used by your software. Unit tests are generally quite cheap to automate and can run very quickly by a continuous integration server.” From what is mentioned in the article, unit tests appear to be immensely helpful in testing smaller pieces of a program. Due to their ease of automation, they could also be beneficial for parts of a program that occur often. The following tests discussed in the article are integration tests.

Integration tests are imperative to ensure different parts of your program function well together. “Integration tests verify that different modules or services used by your application work well together. For example, it can be testing the interaction with the database or making sure that microservices work together as expected. These types of tests are more expensive to run as they require multiple parts of the application to be up and running.” While these tests are very helpful, due to requiring multiple systems to be running simultaneously, this type of test can be very costly to run regularly. The next test that I will discuss is the functional test.

Functional tests are very different from the prior two tests I have discussed, wherein the first two tests check the functionality of sections of your project. In contrast, available tests explicitly check for the project’s output. “Functional tests focus on the business requirements of an application. They only verify the output of an action and do not check the intermediate states of the system when performing that action.” This test is beneficial for the business application of a project. In contrast, the project’s pieces must function for the customer, and the project as a whole must also do what it was designed to do, and functional tests are great for determining this.

Article: https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing

From the blog CS@Worcester – P. McManus Worcester State CS Blog by patrickmcmanus1 and used with permission of the author. All other rights reserved by the author.

This Week In Software Process Management

In this week’s class, we delved into some intriguing topics that shed light on the dynamic world of project management and software development. So, let’s recap the highlights of our recent discussions.

New Project Initiation:

We kicked things off by exploring the essential steps in new project initiation. It all begins with reading product descriptions and commencing a basic requirements analysis. This initial phase sets the tone for the entire project, as it helps us understand what we’re about to embark on. Clarity at this stage is paramount.

Then, we moved on to the technical side of things by creating a new project on GitLab. We ensured that all the required files were in place and established a board structure tailored to support Scrum development. This pivotal step lays the foundation for collaborative, agile work and efficient progress tracking.

One concept that stood out this week was the “Definition of Done.” Understanding and defining what constitutes a complete task is vital to maintaining project integrity and ensuring that everyone is on the same page regarding project expectations.

Copyright and Licensing:

The second part of our class dived into the complex yet critical world of copyright and licensing. It’s not just about legalese; it’s about safeguarding your work and respecting the intellectual property of others.

We explored Free & Open Source Software Licensing, digging into the details of when a work becomes copyrighted and who owns that copyright. This knowledge is essential in avoiding potential legal pitfalls.

We also examined what you can and cannot do with unlicensed software. Knowing the boundaries here is crucial in preventing unintentional violations.

Licensing became a central theme in our discussions, as we explained its role and its significance in the realm of open-source software. We even delved into specific licenses like the GNU General Public License, Mozilla Public License, Eclipse Public License, and MOT License, each with its unique implications and considerations.

Lastly, we explored the importance of identifying the license of published software. It’s essential to be aware of the rules and limitations when using or contributing to open-source projects.

In summary, this week was an exciting journey through the early stages of project initiation, all the way to the intricate world of copyright and licensing. These insights will undoubtedly prove invaluable as we continue our education and venture into the realms of project management and software development. Stay tuned for more exciting insights in the coming weeks!

From the blog CS@Worcester – Dose Of Dev by msavice and used with permission of the author. All other rights reserved by the author.

Understanding Software Licensing

The article I chose for this week’s blog is “Understanding Software Licensing”. This blog discusses what a software license is, how it works, why it matters, a few types of software licenses, and how to decide the best type of license for your software. In class, we discussed the topics that were brought up in this blog so I decided to do a deeper dive into software licenses to refresh my mind on the information that we reviewed and possibly gain a better understanding of it. 

The author tackles the topic in an organized manner that makes each part easy to follow. In the section about why software licenses matter, the author outlines clear advantages from different standpoints. For example, he states that from a developer standpoint, they offer benefits like “preventing users from performing actions like copying and distributing your software, if the license prohibits it, limiting your own liability, spelling out your own rights as a developer, and allowing you to control the usage of your product”. He then outlines the benefits from a user’s standpoint; he mentions that it helps you manage your tools and resources,  prevents you from paying for tools that aren’t necessary for your business, and clarifies how the provider can use your private information. The choice to clearly outline the advantages from each standpoint aids in the reader’s understanding of the importance of licensing software.

The sections on the types of licenses were beneficial. The public domain license is a simple license to understand. The section that defines a copyleft license is an open-source license meaning that deviation of the code must have the same terms. Defining the GNU license as a weak copyleft license helped to simplify what it was. His explanation of a permissive license was helpful as well. He defined each type of license with a short, simple statement at the beginning and then went on to further explain them.

The other part of the article that I found to be very helpful is the section about how to figure out what the best type of license is for your software. Because software licensing is new to me, I was struggling to pick which license I should use for a project. The author mentions that you should “consider the different models, thinking about the purpose behind your code and what you want users to be able — and not be able — to do with it”. It can be very challenging to outline the true purpose of your code clearly. It was very helpful that the author clearly defined the types of licenses in simple terms and then gave simple advice on how to pick which one to use. I enjoyed reading this blog and will use the knowledge for my future projects.

From the blog CS@Worcester – Live Laugh Code by Shamarah Ramirez and used with permission of the author. All other rights reserved by the author.

Scrum VS Kanban

The first step down my professional development path to become Agile involves understanding different Agile methodologies. The two most popular being Scrum and Kanban. Cassidy Knight does a great job comparing the two Agile methodologies in her blog, “3 Differences Between Scrum and Kanban You Need to Know.” (https://www.cprime.com/resources/blog/3-differences-between-scrum-and-kanban-you-need-to-know/) Knight starts the blog off with an easy to read table illustrating the three main differences are found in team roles, work boards, and the scheduling/cadence of the workflow.  She breaks down Scrum and Kanban individually for better understanding of how they are similar, before diving deeper into the three differences.  The blog finishes up with explaining that there is no clearly defined better methodology, but rather that they each have things that work better for different teams. 

Scrum consists of breaking up large projects into small manageable tasks to be completed through several scheduled iterations called sprints.  During these sprints the Scrum Team, consisting of a Product Owner, Scrum Master, and Developer work together to design and build new features for a project.  Each new feature is broken into story points that are prioritized by the Product Owner in the project backlog.  The Scrum Master then selects what points will be moved to the sprint backlog to be worked on in the following sprint based on the priority and size of each point. 

Story points are tracked through the sprint on the Scrum board. The Scrum board breaks down workflow into columns, starting from the backlog, to work in progress, to completion. Each story point is given a limited amount of time to be worked on during the sprint. Scrum boards only show the work done for that sprint and are wiped clean after each sprint. Work produced by a Scrum team is evaluated at the end of the sprint and is found successful if all of the story points have reached the team’s definition of done.

Kanban, unlike Scrum, does not work in scheduled iterations.  Instead, the workflow in a Kanban is limited by the amount of story points in each column of the work board.  Instead, each team may be made up of specialists that only handle work from the board that suits them.   The work board in a Kanban is like the one found in Scrum with the major difference of each column having limits to how many story points may be in each.  This means a “work in progress” point must be finished before a new one may be opened.

Using Scrum and Kanban Moving Forward

As I continue to learn how to work in agile environments, I will learn what parts form each of these methodologies that work well for me and my team.  Applying practices from many methodologies to create a hybrid methodology may be the best way to move forward. It all depends on the project and the team.

From the blog CS@Worcester – CS Learning by kbourassa18 and used with permission of the author. All other rights reserved by the author.

Licensing Software

Overview

In order to be able to use someone else’s software for your own software project, you must attain a software license. This license establishes the rights and limitations that you have when using the product owner’s software. Software licenses are attained by licensing agreements, where you sign a contract with the owner of the software to use the patented technology.In that contract contain the rights, responsibilities, and limitations you have as a user. I think if you develop some sort of software, it is crucial that you and your team are recognized as the owners of it, and that outside users don’t use it however they feel like. There are many types of software licenses that have different terms and conditions. An article that I read by Ben Lutkevich went more into depth of what a software license and agreement will usually look like, as well as the different types.

Attaining a License

You are about to sign the licensing agreement to officially be able to use someone else’s software. Here’s what to expect. On it will be basic information about both sides. Your name, your address, contact information, as well as the lending party’s. It will contain when the agreement officially goes into effect, and you are able to use the software. It will contain the duration of how long you are able to use the software. It will include how much you have to pay for the software, how many users are eligible. It will give a disclaimer of warranties, as well as maintenance, upgrades and support. Most importantly, it will include the permissions and limitations on distributing the software, user rights of copying and modifying the software. These licensing agreements may differ depending on the type of software license.

Types of Software Licenses

The most common software licenses you find are Proprietary and FOSS. A proprietary software license is commonly referred to as closed-source. Proprietary licenses do not allow users to freely alter the software. Whereas FOSS (Free and Open-Source Software) is the opposite, where the customer is allowed to use the source code and alter the software. FOSS is commonly referred to as open-source. This is the type of license that we will be using in class. Two other licenses that are familiar are Permissive and Copyleft. Permissive software licenses establish some requirements for distribution or modification of the software, and Copyleft notes that licensed code may be distributed or modified as part of a software application or project if all code involved is distributed under the same license. New products containing old code with a copyleft license have the same restrictions as the old code’s license.

Conclusion

If planning to create a software product, it is a smart idea to establish copyright for it, so you are credited for the work you put in. And if you are using someone else’s product for your own product or project, it is the smart decision to attain a licensing agreement, avoiding any potential lawsuits.

Article URL

https://www.techtarget.com/searchcio/definition/software-license#:~:text=A%20software%20license%20is%20a,the%20software%20without%20violating%20copyrights.

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

Week 8

The contents that I have been learning in this week is about the software license and copyright. I found this blog giving the general definition of these contents and in the time Covid-19.

For many instructors who just want to do what is right, the reality that copyright is complicated has been made worse by the significant transition to distant learning. The fact that over 900 individuals took time out of their days to watch the webinar is proof that copyright education is necessary.

Many publishers combined helpful content, offered free teaching aids, and canceled copyright costs for online learning during the pandemic. Many pieces of content were utilized without the copyright owners’ consent; some were used for legal “fair use,” others were used carelessly, and some were exploited for opportunistic purposes.

Five significant developments emerged in the licensing and reuse of protected information between March and June 2020:

  1. Print photocopying vastly increased as students lost access to materials in the classroom.
  2. Online learning platforms and other EdTech tools gained traction.
  3. Publishers created no-cost licenses to enable teaching under these new circumstances.
  4. More assessments moved online.
  5. Teachers taught using materials they copied or posted online, sometimes underpaid or free licenses, sometimes under fair use, and sometimes by committing infringements that rightsholders were willing to ignore.

Remote learning during COVID-19 resulted in an increasing number of queries about copyright, licensing, and practices for universities, schools, and academy centers as they seek to ensure better compliance.

A license is a permission given to use a property or to exercise rights belonging to another under agreed conditions. Copyright is the exclusive right of the creator of a work or her designees to make copies of that work. In order to reach a conclusion that a use was or was not a fair use, the judge has to analyze all the following factors:

  1. The purpose and character of the use, including whether such use is of a commercial nature or is for nonprofit educational purposes.
  2. The nature of copyrighted work.
  3. The amount and substantiality of the portion used in relation to the copyrighted work as a whole.
  4. The effect of the use upon the potential market for or value of the copyrighted work.

This blog provides educators with a deeper understanding of copyright, its relevance to remote learning, and strategies for managing copyright compliance while using published resources in this new paradigm.

From the blog CS@Worcester – Hong Huynh-CS348-WSU by hhuynh3 and used with permission of the author. All other rights reserved by the author.

Week 7

In this blog, we are going to learn about Scrum development framework and why its important. Scrum is a lightweight framework that helps people, teams and organizations generate value through adaptive solutions for complex problems. The Scrum team consists of one scrum master, one product owner and developers and there are no sub-teams or hierarchies. The good thing about a scum team is that it is cross-functional meaning all the members have all the skills necessary to create value each sprint. Usually, the scrum team has 10 or fewer people and this helps teams communicate better and be more productive. The scrum team is responsible for all product related activities from stakeholder collaboration, verification, maintenance and more.

The blog I chose talks about the getting started as a scrum master and some of the steps to getting started. Some of the steps in the blog to getting started are getting to know your new team and this is important to understand who’s in the team and building healthy relationships. It is also important to understand your new team’s purpose and goals because sometimes action is confused with progress and it’s crucial to know what’s driving them. Mapping out the stakeholders is important because as a scrum master, you’re responsible for ensuring the team can run as efficiently as they can. When you’ve identified a tricky stakeholder, you can work with them to ensure they interface with the product owner rather than the team. Another important aspect as a scrum master is asking your team if the Agile framework like scrum is working for them. This is to make sure the team is aligned on different things like sprint planning. Looking after yourself and development as a scrum master is one of the most important steps when starting with a new team. This is because the role of a scrum master requires you to think differently a lot of the time which can be tiring therefore you need other people to get advice from or to bounce your ideas off.

I think this blog post gives an insight of the role of a scrum master in more detail. It explains some important aspects involved with being a scrum master and what the role looks like. The scrum team consists of other members like developers who keep the database working and product owner who is responsible for commuting the product goal and what it should do. This goes to show that this isn’t a one man’s job, and several people are required for completion of a successful task.

References.

From the blog CS@Worcester – Site Title by lynnnsubuga and used with permission of the author. All other rights reserved by the author.

What it Means to be Agile

If you search online for Agile methodology blogs, you will find a lot of them mentioning what it means to be Agile by referencing the 4 main values and 12 principles from the Agile Manifesto. (https://www.agilealliance.org/agile101/the-agile-manifesto/).  While these core values and principles define what it means to be Agile, I was looking for more of a general definition. In my quest to discover what it means to be Agile in today’s software development world, I have come across a blog that, in my opinion, does a great job in explaining that. “What is Agile methodology? (+ how you’re already using it)” (https://www.lucidchart.com/blog/what-is-agile-methodology) starts off by giving a great, simple, explanation of Agile methodology: “Agile methodology breaks the developmental process into iterative steps and encourages flexibility, testing, and change throughout the life cycle of a project.”.  The simplicity of this definition really drives home how intuitively flexible this methodology is and how so many different frameworks are able to adopt Agile methods.

The blog has a great analogy for Agile methods being like a detailed to-do-list. Prioritizing must-have features to add to a project is the first step in being Agile. Step two involves estimating the time required for each feature and adjusting priorities as needed. Lastly, step 3, involves setting up a schedule for a sprint.

Sprints are typically two week periods where the team has prioritized features they are working on. The goal of each sprint is to have a working product that has been tested by the end. Having a working product at the end of each sprint allows the stakeholders to have input on the current development and the future plans. Further emphasizing the need for flexibility as a project can shift focus at any point in development. 

There are so many Agile frameworks already designed, such as Scrum, Kanban, and XP, just to name a few. With so many to choose from, where do you start? The beauty behind the flexibility of Agile methodologies is that no framework is rigid either. This means each team can adapt processes that work for them. 

As I will be working in Scrum teams, I hope to develop skills to maintain an agile environment for me and my team. Staying flexible to change while following the values and principles of the Agile manifesto will help me develop skills needed to work in a professional environment.

From the blog CS@Worcester – CS Learning by kbourassa18 and used with permission of the author. All other rights reserved by the author.