Weekly Assessment Progress

Submitted by sylvia.wong@up… on Thu, 06/08/2023 - 19:01

As outlined in the subject overview, CS203 Investigate Studio is your opportunity to put your previous learning into practice, so that means less time reading and more time doing. Throughout this subject, you will be working as a team (of at least two but no more than three) and building on the concepts you developed in CS202 Cross-Platform Development, which will be the basis for your assessment for which you will progress through in stages. You are encouraged to keep the same team you formed for Assessment 2 in CS202. 

To support you through this, we have provided the below milestones and a summary of what you will need to achieve through each stage.

Sub Topics

In CS202 Cross-Platform Development, you will have developed a project proposal. The goal of the first week is to refine this proposal for submission and approval.

Changes to Proposal

If you intend to make significant changes to your initial proposal submitted in CS202, you must complete the change request form and provide adequate justification for the proposed changes as well as clearly state how they will affect your overall progress. Your online facilitator will approve or deny your change request based on the information you provided and the expected project timeline.

Team Changes

If you must change teams for any reason, make sure you fill out and submit the change request form and provide adequate justification for this, and how it will impact your overall progress. Your online facilitator will approve or deny your change request based on the information you provided, and the expected project timeline

During week 2, you will be working collaboratively within your team. We all know that working collaboratively can be difficult at times, as such we have included some resources below to assist you in handling issues should they arise.

 

Conflict Management 

In any team project, it's almost inevitable that conflicts will arise.

Whether it's a difference in opinion, a miscommunication, or simply a clash of personalities, conflict can cause stress and tension within the team, disrupt progress, and even threaten the success of the project itself. This is especially true in software development, where the stakes are high and the pressure to deliver on time and within budget can be intense. 

Conflict is a situation in which two or more parties have incompatible goals, values, or beliefs. In software development teams, conflicts can arise due to differences in opinions on technical approaches, deadlines, project scope, or resource allocation. Conflicts can be expressed in various forms, such as disagreement, argument, tension, or even avoidance. 

Conflict doesn't have to be a negative force. When managed properly, it can actually be a catalyst for growth and development, leading to new ideas and creative solutions. In fact, many of the most successful software projects have emerged from teams that were able to navigate conflicts and challenges in a productive way. 

There are several types of conflict that software development teams may experience: 

  • Task Conflict: Conflict that arises from disagreements about the work itself, such as how to approach a technical problem or how to allocate resources. 
  • Relationship Conflict: Conflict that arises from interpersonal differences or personal dislikes, such as personality clashes or communication breakdowns. 
  • Process Conflict: Conflict that arises from disagreements about how the work should be done, such as how to manage the development process or how to measure progress. 

 

As software developers, you will likely work on many projects with teams of people. In these situations, conflicts can arise due to a variety of reasons. It's important to understand the root causes of conflict so that you can address them effectively. 

  1. Differences in Communication Styles – People communicate in different ways. Some prefer direct and blunt communication, while others prefer a more indirect and diplomatic approach. When these styles clash, it can lead to misunderstandings and conflicts. 
  2. Differences in Goals or Priorities – Everyone has different goals and priorities, and these can sometimes conflict with one another. For example, one team member might prioritize meeting a tight deadline while another might prioritize producing the highest quality code possible. These differences can lead to conflict if not addressed. 
  3. Differences in Working Styles – Some people prefer to work independently, while others prefer to work collaboratively. When people with different working styles are put on the same team, it can lead to conflicts over how to approach tasks and how much input each team member should have. 
  4. Personality Conflicts – Sometimes conflicts arise simply because of personality clashes. People have different temperaments, communication styles, and ways of working. These differences can sometimes create tension and conflict within a team. 

 

To minimize conflict, it's important to understand and respect the differences among team members. By recognizing and addressing the underlying causes of conflict, you can foster a more collaborative and productive team environment. 

Conflict is an unavoidable part of working in a team, including software development teams.

However, it is essential to address conflict promptly and effectively to avoid negative consequences such as reduced team morale and productivity. Communication, understanding the cause of conflict, collaboration, seeking mediation, using conflict resolution techniques, documenting and evaluating the conflict, and seeking professional help are all strategies that can help resolve conflicts in software development teams. By implementing these strategies, teams can create a positive and productive work environment that allows them to work effectively towards their common goals. 

Communication is Key 

Communication is the foundation of any successful software development team.

It is essential to establish open lines of communication among team members. Encourage team members to express their concerns and ideas freely. Regularly scheduled team meetings and one-on-one conversations can provide the opportunity for team members to express their thoughts and ideas.

During team meetings, encourage active listening to understand each other's perspective. Communication tools such as video conferencing, team chat tools, and email can provide additional channels for team members to communicate. 

Understand the Cause of Conflict 

To resolve conflict effectively, you must first understand the root cause of the problem.

Most conflicts in software development teams stem from misunderstandings, personality clashes, differences in work style, or work allocation issues. Once you have identified the cause, address it directly. Avoid placing blame on anyone and focus on finding a solution that works for all parties involved. 

Encourage Collaboration and Compromise 

Encourage team members to work together to resolve conflicts.

Collaboration can lead to a more effective solution that works for everyone. Encourage team members to consider each other's perspectives and to seek common ground. Brainstorming sessions can be a useful tool for generating ideas that can lead to compromise. 

Seek Mediation 

If the conflict persists, consider seeking mediation from a neutral party.

A mediator can help facilitate communication, guide the discussion, and help team members reach a resolution that works for everyone. In software development teams, the team lead or project manager can serve as a mediator. However, if the conflict involves the team lead or project manager, an external mediator may be necessary. 

Use Conflict Resolution Techniques 

There are several conflict resolution techniques that software development teams can use.

One technique is to encourage active listening, where team members listen to each other's perspective without interruption. Another technique is to use "I" statements instead of "you" statements to avoid putting blame on others. Team members can also try to identify the common goals of the project and work towards achieving them together. 

Document and Evaluate 

It is important to document the conflict and the resolution process for future reference.

This can help avoid similar conflicts in the future and provide guidance for how to resolve conflicts when they do arise. After the conflict is resolved, evaluate the outcome and the process used to resolve it. Discuss what worked well and what could be improved upon. 

Seek Professional Help 

In some cases, conflict resolution may require the assistance of a professional.

Consider seeking help from human resource personnel or other professionals trained in conflict resolution. They can provide additional guidance and support to help the team resolve the conflict and move forward. 

Now that you have a better understanding of conflict and its types, and have learned about various communication techniques, it's time to focus on implementing conflict resolution strategies.

Conflict resolution strategies are essential in any team working environment, and software development teams are no exception. These strategies help to mitigate the effects of conflict and ensure that everyone involved can work together in a productive and harmonious manner. 

In this section, we will discuss some effective conflict resolution strategies that can be implemented in software development teams. 

Collaboration

Encourage team members to work together to find a solution that benefits everyone. This can be done by brainstorming ideas, sharing information, and finding common ground. Collaboration allows everyone to contribute to the solution and helps to build trust and respect between team members. 

Compromise

Sometimes, it may not be possible to find a solution that everyone agrees with. In such cases, compromise is necessary. Encourage team members to be flexible and willing to compromise to reach a solution that everyone can live with. This approach ensures that everyone's needs are considered, and no one feels left out or marginalized. 

Communication

Effective communication is key to resolving conflicts.

Encourage team members to listen actively and express their thoughts and feelings clearly and respectfully. When people feel that they are being heard and understood, they are more likely to be open to finding a solution that benefits everyone. 

Problem Solving

Encourage team members to focus on the problem at hand rather than the individuals involved.

By adopting a problem-solving mindset, team members can work together to find solutions that address the root cause of the conflict rather than just the symptoms. 

Avoiding

Avoiding conflicts is not always the best approach, but sometimes it may be necessary.

Encourage team members to avoid conflicts that are trivial or insignificant and focus on the more critical issues. Avoidance can also be useful when emotions are running high, and everyone needs time to cool down. 

Accommodating

Accommodating involves putting the needs of others before your own.

Encourage team members to be flexible and willing to accommodate the needs of others. This approach can be useful when the conflict is not significant, and it's essential to maintain positive relationships between team members. 

It's worth noting that these strategies are not mutually exclusive and can be combined in various ways to find a solution that works best for everyone. For example, mediation and problem-solving can be used together to find a solution that addresses the root cause of the conflict and helps to build trust and respect between team members. 

Case Study: Collaboration in Software Development 

ABC Software Company was in the middle of developing a new product that had a tight deadline.

The project had been going well until two developers, John and Sarah, started to have disagreements over the best approach to take for a specific feature. John wanted to use a more traditional approach while Sarah preferred a newer and more experimental approach. 

Their disagreement started to affect the team's progress, with John and Sarah spending more time arguing than working on their respective tasks. The team's manager, Jane, noticed the issue and knew that it had to be resolved before it escalated any further. 

Jane decided to use the collaborating conflict resolution strategy to resolve the issue. She set up a meeting with John and Sarah to discuss their disagreement and find a solution that would work for both of them. 

During the meeting, Jane listened to both John and Sarah's arguments and made sure that both parties had a chance to express their opinions. She also encouraged them to work together to find a solution that would incorporate both of their ideas. 

Together, John and Sarah were able to come up with a compromise that incorporated elements of both approaches. They created a plan that used John's more traditional approach for the main part of the feature but also included Sarah's experimental approach for a smaller, secondary feature. 

After the meeting, John and Sarah were both satisfied with the solution and were able to work together again without any further disagreements. The team was also able to meet their deadline and successfully deliver the product. 

In this case study, the collaborating conflict resolution strategy was effective in resolving the disagreement between John and Sarah. By encouraging open communication and collaboration, the team was able to find a solution that worked for everyone and maintain their productivity. 

Code Review

Code review and refactoring are crucial aspects of software development. These practices help to ensure the quality, maintainability, and scalability of the codebase. Below, you will find information on best practices in code review and refactoring that software developers should follow.

Code Review Best Practices

  • Establish clear guidelines: Before starting the code review process, it's essential to establish clear guidelines that all team members must follow. These guidelines should outline the objectives of the code review, the review process, and the expectations for providing feedback.
  • Review small code changes frequently: It's better to review small code changes frequently instead of reviewing a large amount of code at once. This practice helps to identify issues early in the development process, making it easier to fix them before they become more complex and time-consuming.
  • Focus on the code, not the developer: Code review should be a collaborative process where team members work together to improve the codebase. It's essential to focus on the code rather than the developer to prevent personal attacks or criticism.
  • Use automated tools: Automated tools can help to identify code issues, such as syntax errors, code duplication, and security vulnerabilities. Using these tools can save time and reduce the risk of errors.
  • Provide actionable feedback: Feedback should be specific and actionable, helping developers understand the issues and how to fix them. This approach encourages collaboration and helps developers learn from their mistakes.

Refactoring Best Practices

  • Have a clear understanding of the code: Before starting refactoring, it's essential to have a clear understanding of the code's purpose and function. This knowledge helps to ensure that the refactoring process doesn't affect the code's intended behavior.
  • Start with small changes: Refactoring can be time-consuming and complex, so it's essential to start with small changes. This approach helps to identify potential issues early and prevents the risk of introducing bugs or errors.
  • Test after every change: It's essential to test the code after every change to ensure that it still functions as intended. This practice helps to identify potential issues early and reduces the risk of introducing bugs or errors.
  • Refactor for maintainability and scalability: Refactoring should focus on improving the code's maintainability and scalability, rather than just making it look cleaner. This approach helps to ensure that the codebase can be easily modified and expanded in the future.
  • Use refactoring patterns: Refactoring patterns are proven solutions to common code issues, such as code smells or design patterns. Using these patterns can save time and ensure that the code is following best practices.

Code review and refactoring are essential practices that software developers should follow. By establishing clear guidelines, focusing on the code, and providing actionable feedback during code review, developers can improve the codebase's quality and maintainability. Similarly, by having a clear understanding of the code, starting with small changes, testing after every change, refactoring for maintainability and scalability, and using refactoring patterns during the refactoring process, developers can improve the code's quality, performance, and scalability.

To assist you in your code review, please refer to CS202 Cross-Platform Development, Topic 5.6 Software Project: Scope Time Management and Collaboration Tools, Sub-Topic 5.6.9 Version Control and Collaboration using GIT and GITHUB to re-review and use the GITHUB resources.

Initial Progress Report

The progress report should have a maximum of 3 pages with a font size of 11 and a line spacing of 1.0. The contents of the report include but are not limited to:

  • Weekly scrum meeting/team meeting minutes
  • Information regarding the involvement in the project of each student in the team. Stages of development, issues and roadblocks faced and how those were dealt with.
  • Reflection on learning in terms of technology.
  • Any changes to the initial plan due to technical challenges should also be referred to and justified in the report.

API Testing is typically used for validating APIs as it helps examine their functionality, reliability, performance, and security. The test is carried out on and by the URL that calls the API endpoints. These calls are referred to as Requests.   

When you send a Request, you will expect to receive a particular Response. This response is then compared with the expected results.  

A Request comes in a variety of types – GET, POST, PUT, PATCH, DELETE, COPY, HEAD etc. The ones used most are the GET, POST, PUT, DELETE.  For example, to test REST APIs in python Flask application, you need to understand how the HTTP request methods like GET, POST, PUT, and DELETE work. 

  • The GET Request is used for getting the data from the joint URL (endpoint). No changes are made to the endpoint. 
  • The POST Request is used for sending the data to the endpoint. 
  • The PUT Request creates or updates an existing resource at the endpoint. 
  • DELETE Request is used for deleting data on the endpoint. 

 

In this course, we have introduced to you how to build RESTful web applications and develop APIs using Python Flask. Regardless of which development tool, stack, or framework you used to build your application, you will need to do some basic testing. In particular, you will need to test your API’s to verify that communications between various components of your application are functioning as they should. That is, whenever a request is sent for data or data processing, appropriate and expected responses are generated and returned. The data is sent to the API endpoint through URL and the proper request type. A Response, once received, should contain the code starting with 2**, which means that the Status is OK. Then, the Response is checked with a test. 

So, you will need to test your application by sending requests to your APIs and checking their responses to ensure that they meet the expected requirements and verify that they are functioning as expected.   

You may need to do this at unit level, integration level, and also end-to-end. 

 

There are several aspects to consider when testing REST APIs, including:  

  • Functional testing: Testing the API's functionality by verifying that it returns the expected response for various inputs. 
  • Security testing: Testing the API for security vulnerabilities such as SQL injection, cross-site scripting, and other attacks that may compromise the security of the system. 
  • Performance testing: Testing the API's performance under different load conditions to ensure that it can handle a high volume of traffic and respond within the expected time frame. 
  • Integration testing: Testing the API's integration with other systems or services to ensure that it works as expected when integrated with other applications. 
  • Error handling: Testing the API's error handling capabilities to ensure that it can handle various error scenarios gracefully and provide appropriate error messages. 
  • Usability testing: Testing the API's ease of use and user experience to ensure that it is user-friendly and intuitive. 
  • Compatibility testing: Testing the API's compatibility with different devices, browsers, and operating systems to ensure that it works seamlessly across different platforms. 
  • Regression testing: Testing the API after changes or updates to ensure that it still works as expected and that new changes do not introduce any new issues. 

However, because of the time constraint, we do not expect that you will carry out all these types of tests in your assessment 2. But you want to make sure that you perform functionality and usability test to base on the scope of your project and the predefined functionalities in your proposal.  

 

Some Tools and Tutorials on Web Application Automated Testing. 

In this section, we provide some tools and resources to get you started with automated testing. 

Selenium Automated Testing: Selenium is an open-source web testing tool that supports multiple programming languages like Java, Python, Ruby, C#, and more. It allows testing of web applications on different browsers and operating systems, making it one of the most widely used automation tools for web testing. Selenium is not just a single tool but a collection of tools, each catering to different Selenium automation testing needs. 

Selenium Automated Testing Tutorials

This tutorial provides a good introduction to selenium and other selenium tools. Also see a Selenium with Python Tutorial: Getting started with Test Automation. 

This tutorial provides examples of how you can use selenium with Pytest to perform a scalable, cross-browser, database and API testing. 

This is the GitHub repo for all the examples in the Packt’s Automated Web Testing with Selenium and Python Book. 

This is another good GitHub tutorial that covers Web UI automation using selenium with focus on the python programming language. 

There are loads of resources like these ones on available in the public domain. Use your problem solving and research skills to navigate them.

There are other open source, mobile and web automated tools available that you may want to check out: 

TestComplete

TestComplete is a powerful automation testing tool that supports multiple scripting languages, including JavaScript, Python, VBScript, and more. It allows testing web, mobile, and desktop applications and comes with a wide range of features such as record and playback, keyword-driven testing, and data-driven testing, making it one of the best automation testing tools in the market. There are video tutorials on TestComplete for API Testing like this: TestComplete Basics: Web Testing  

Appium

Appium is an open-source automation testing tool for mobile applications that also supports web application testing. It is compatible with multiple platforms such as Android, iOS, and Windows. Appium uses Selenium WebDriver API for automating web testing, making it easy to use for developers who are already familiar with Selenium. 

Katalon Studio

Katalon Studio is a free automation testing tool that supports web, mobile, and desktop applications. It is built on top of Selenium and supports various programming languages such as Java, Python, and Groovy. Katalon Studio provides features such as record and playback, object spy, and support for various test frameworks. 

There are video tutorials on Katalon Studio for API Testing like this: Katalon Studio API Testing  

 

REST API Testing with Postman 

Another popular API testing tool used by developers and testers to test RESTful APIs is Postman. It is a user-friendly tool that simplifies the testing process by allowing developers to create and send HTTP requests, and then receive and analyze the responses. 

Postman provides a wide range of features for API testing, such as automated testing, request chaining, and the ability to create and share collections of API requests. It also allows developers to view and modify request headers, set authentication parameters, and view response data in different formats such as JSON, XML, or HTML. Postman is available as a desktop application and as a cloud-based service, making it easy to use and accessible from anywhere. It is compatible with various operating systems such as Windows, macOS, and Linux, and supports multiple programming languages such as Java, Python, and JavaScript. 

See a YouTube tutorial on Postman API Testing like this: Postman Beginner's Course - API Testing  

 

https://flask.palletsprojects.com/en/1.1.x/testing/  

  • For Flask, REST API testing can be done using various Python testing frameworks, including unittest, pytest, and nose. To test REST APIs in Flask, you needs to understand the HTTP methods used in the API, such as GET, POST, PUT, and DELETE.  In this case, you will create test cases, set up test data, send requests to the APIs, and verify the responses. 

Below is a good, easy to follow tutorial on Flask APIs Testing: 

Flask Rest API -Part:6- Testing REST APIs 

 

Some Best Practices you should consider when carrying out your REST API testing: 

  • Plan testing activities: Before starting testing, create a testing plan that outlines the testing activities, test cases, and expected outcomes. This helps ensure that the testing is comprehensive and covers all possible scenarios. 
  • Use automation tools: Use automation tools such as Selenium or Postman to automate repetitive and time-consuming testing tasks. This helps reduce the testing time and improve the accuracy of the testing results. 
  • Test for security vulnerabilities: Test the API for security vulnerabilities such as SQL injection, cross-site scripting, and other attacks that may compromise the security of the system. Use security testing tools such as OWASP ZAP or Burp Suite to identify vulnerabilities and assess the API's security posture. 
  • Test for scalability: Test the API's scalability by simulating a high volume of traffic and verifying that the API can handle the load without any issues. Use load testing tools such as Apache JMeter or Gatling to simulate high traffic loads. 
  • Test for compatibility: Test the API's compatibility with different devices, browsers, and operating systems to ensure that it works seamlessly across different platforms. Use compatibility testing tools such as BrowserStack or Sauce Labs to test the API across different environments. 
  • Test for data validation: Test the API's data validation by verifying that it accepts only valid data and rejects invalid data. Use data validation testing tools such as JSON Schema or Swagger to ensure that the API follows the correct data validation rules. 
  • Test for error handling: Test the API's error handling capabilities to ensure that it can handle various error scenarios gracefully and provide appropriate error messages. Use error handling testing tools such as REST-assured or AssertJ to verify that the API handles errors correctly. 

NB: If you have any questions about how to carry out REST API Testing, feel free to contact your online facilitator for more information. 

 

In Week 5 you will be expected to commence the UML Design and provide wireframes. Prior to commencing, please familiarize yourself with the learning in MODULE 6, TOPIC 6.8: INTRODUCTION TO PYTHON GUI PROGRAMMING USING TKINTER AND DEARPYGUI WITH SQLITE.

 

In Weeks 6 and 7 you will be using all the skills and knowledge you have gained to date and will be developing a working prototype. Make sure your final prototype works as expected, with no errors or crashes, and that the features planned in the proposal are working fully.

In Week 8 your time will perform a presentation of your project. Presentations should last no longer than 15 minutes.

Documentation

Individual Production Report

The report should be between 3 to 5 pages long (excluding appendix and references) with a font size of 11 and line spacing of 1.0. This production report must be submitted by each team member. The contents of the report include but are not limited to:

  • Weekly scrum meeting/team meeting minutes
  • Information regarding the involvement in the project of each student in the team.
  • Stages of development, issues and roadblocks faced and how those were dealt with.
  • The report also addresses reflections on teamwork and the contribution of each team member.
  • Reflection on learning in terms of technology.
  • Any changes to the initial plan due to technical challenges should also be referred to and justified in the report.

 

Note: It is recommended that you use a traditional reporting style for consistency and comprehensibility. 

Your report could follow the structure below:

  • Introduction
    • Motivation
    • Problem statement
    • Research Questions ( If applicable)
  • Methods and Tools
    • Project Management (include relevant subsection for PM processes, tools and activities including scrum/sprint reports)
    • Any other core tool and method used in your project (Keep it simple and concise. State exactly how it applies to your project or how you use it)
  • Project Development Stages
    • Stages of development
    • Issues and Roadblocks faced
    • How issues are addressed in your work
  • Evaluation
    • Metrics Definition and Analysis
    • Findings
    • Discussion: Reflection on the finding and learning journey
  • Conclusion
    • Summarize your objectives and how they have been met through your solution
  • References
  • Appendix
    • You make include web pages or images and relevant codes to your discussion here
    • Remember to reference elements of your appendix where necessary in the body of the report
    • Change report also should be included in the appendix with inline references where necessary in the report body
Module Linking
Main Topic Image
monthly journal by Estée Janssens on Unsplash
Is Study Guide?
Off
Is Assessment Consultation?
Off