hussainarslan / proj-hnr-assignment3

0 stars 0 forks source link

proj-hnr-assignment3

Group Members:


Meeting 1 - 25/11/22

Attendees

Meeting Notes


Meeting 2 - 3/12/22

Attendees

Meeting Notes


Meeting 3 - 4/12/22

Attendees

Meeting Notes


Process Requirements in Open Sources Projects

Explored by: Noureen Fatima

Issue 7: Study about Versioning and Release Management

Identification and tracking of system versions are key components of the version and release management process. The purpose of such processes is to prevent the development team from unintentionally changing versions of a system that may be retrieved when needed.

Versions of the system could possibly have altered functionality, improved performance, or fixed software bugs. Although they may work similarly, several versions may be made for various hardware or software configurations.

Issue 8: Study Techniques for Component Version Identification

Issue 9: Explore versioning in Webswing

Issue 13: Explore Versioning in Open CV

Issue 15: Explore Versioning in StoreFront UI

Issue 17: Explore Ansible Issue Management

Issue 22: Explore Jenkins Issue Management

Issue 31: Study Open Source Contribution Req. for developers

Ansible

image

Issue 32: Study Review Process in Open Source Projects

image


Documentation Needs in Open Source Projects

Explored by: Noureen Fatima

Issue 40: Exploring User Manual

Jenkins

image

Issue 41: Exploring Installation/Deployment Document

Store Front Installation Guide

image

Jenkins Installation Guide

Jenkins smartly provides installation guidelines for different environments including macOS, Windows etc.

image

Issue 42: Exploring Development/Extension Document

Ansible

Woocommerce

Teammates

Step wise development guidelines are provided.

Issue 43: Exploring Tutorials

StorFront UI Tutorial Jenkins


Architectural and Component Level Modularity in Open Source Projects

Explored by: Hussain Arslan

Issue 3: Microservices

  1. Loosely coupled with other services - enables a team to work independently the majority of time on their service(s) without being impacted by changes to other services and without affecting other services

  2. Independently deployable - enables a team to deploy their service without having to coordinate with other teams

  3. Capable of being developed by a small team - essential for high productivity by avoiding the high communication head of large teams

  4. Enables the continuous delivery and deployment of large, complex applications.

    • Improved maintainability - each service is relatively small and so is easier to understand and change
    • Better testability - services are smaller and faster to test
    • Better deployability - services can be deployed independently
    • It enables you to organise the development effort around multiple, autonomous teams. Each (so called two pizza) team owns and is responsible for one or more services. Each team can develop, test, deploy and scale their services independently of all of the other teams.
  5. Each microservice is relatively small:

    • Easier for a developer to understand
    • The IDE is faster making developers more productive
    • The application starts faster, which makes developers more productive, and speeds up deployments
  6. Improved fault isolation. For example, if there is a memory leak in one service then only that service will be affected. The other services will continue to handle requests. In comparison, one misbehaving component of a monolithic architecture can bring down the entire system.

  7. Eliminates any long-term commitment to a technology stack. When developing a new service you can pick a new technology stack. Similarly, when making major changes to an existing service you can rewrite it using a new technology stack.

Considering all the information above about microservices, WooCommerce has implemented these to supplement the user experience and make it easier to add a lot of different functionalities to their product by using them. Some of these examples include eBay integration for WooCommerce, estimated delivery date and time and even currency switcher.

Plugins - WooCommerce - WooCommerce

Above is a link for some plugins that are used by WooCommerce and may be considered microservices. Furthermore, there are some APIs used by WooCommerce. These include Stripe, WooSidebars, In Stock Notifications, Pre-Orders and Google Listings & Ads.

Extensions - API Manager - WooCommerce

Issue 4: Extensibility

Extensibility is a software engineering and systems design principle that provides for future growth. Extensibility is a measure of the ability to extend a system and the level of effort required to implement the extension. Extensions can be through the addition of new functionality or through modification of existing functionality. The principle provides for enhancements without impairing existing system functions.

An extensible system is one that is not affected by modifications in functionality and retains current behaviour

VueStorefront has a lot of integrations which add on to the basic functionality of VueStorefront and their addition does not affect the base functionality. All of these make Vue Storefront highly extensible. These integrations are available on the link below:

Integrations - VueStorefront

Issue 5: Reusability

Reusability is the use of existing assets in some form within the software product development process. These assets are products and by-products of the software development life cycle and include code, software components, test suites, designs and documentation. The opposite concept of reusability is leverage, which modifies existing assets as needed to meet specific system requirements.

Ansible has implemented reusability in a very intuitive and effective way. Ansible offers two ways to reuse files and roles in a playbook: dynamic and static. Ansible offers four distributed, reusable artefact: variable files, task files, playbooks, and roles.

  1. A variables file contains only variables.
  2. A task file contains only tasks.
  3. A playbook contains at least one play, and may contain variables, tasks, and other content. You can reuse tightly focused playbooks, but you can only reuse them statically, not dynamically.
  4. A role contains a set of related tasks, variables, defaults, handlers, and even modules or other plugins in a defined fil-tree. Unlike variable files, task files, or playbooks, roles can be easily uploaded and shared through Ansible Galaxy.

In ansible, you can even incorporate multiple playbooks into a main playbook. However, you can only use imports to reuse playbooks. Importing incorporates playbooks in other playbooks statically. Ansible runs the plays and tasks in each imported playbook in the order they are listed, just as if they had been defined directly in the main playbook.


Performance Optimizations in Open Source Projects

Explored by: Hussain Arslan

Issue 10: Usage of Lazy Loading

Lazy loading is the practice of delaying load or initialization of resources or objects until they’re actually needed to improve performance or save system resources. Lazy loading is a technique used to prevent or delay the loading of non-critical resources until they are needed.

In vue storefront lazy loading can be used for different types of resources, but in the case of images, the goal is to lazily load everything that is not visible to the user within the initial viewport. All other images can be loaded when the user scrolls down the page. A code snippet for this can be found on the following link

Optimizing images | Vue Storefront 2

Issue 11: Usage of Cache

A cache is a software or hardware component aimed at storing data so that future requests for same data can be served faster. The main reason why caching was born is that accessing data from persistent memories takes a considerable amount of time

WooCommerce adds dynamic pages to your website including the Cart, Checkout and My Account page. When you cache content on your website, it’s saved to the user’s device which means it’s no longer dynamic. Their web browser will serve them the same page that was cached each time. Consequently, customers will never see the correct information on their cart or checkout pages.

Best Caching Plugins for WooCommerce - CommerceGurus

Issue 12: Usage of Content Delivery Network

Content Delivery Networks(CDNs can help protect a site by providing TLS and/or SSL certificates that ensure a high standard of authentication and encryption. In addition, CDNs can help protect your websites and apps through a Web Application Firewall(WAF). A CDN refers to a geographically distributed group of servers that work together to provide fast delivery of Internet content.

VueStrorefront uses Google Cloud CDN to improve site performance as it supports modern protocols initially developed at Google, like HTTP/2 and QUIC. Google Cloud CDN enables websites to serve millions of requests per day seamlessly taking care of delivering superb use experience across all touchpoints.

Features | Vue Storefront Cloud


Security Requirements in Open Source Projects

Explored by: Rakeen Zia

Issue 5: What is Security?

In Software Engineering terms, Security is defined as an ongoing process involving people and practices, and ensuring application confidentiality, integrity and availability. Security is the most effective when it is properly planned for and integrated within a software development lifecycle.

The basic guiding principles to software security are as follows and their implementation is also very important:

Issue 20: Exploring security implementation in Jenkins

Jenkins has four security methods to make sure that the administrator of Jenkins can control who gets access to what specific parts of Jenkins. There as follows:

There are also plugins which do certain things that protect certain web methods. The ways to protect web methods are as follows:

Jenkins will also change page rendering according to the permissions of the user. If a user doesn't have relevant permissions then certain elements of the page will not load for the user.

Authentication ways:

[Security - Jenkins](https://docs.vuestorefront.io/v2/integrations/](https://www.jenkins.io/doc/developer/security/)


Reliability Requirements in Open Source Projects

Explored by: Rakeen Zia

Issue 19: What is Reliability?

Software Reliability means Operational reliability. It is described as the ability of a system or component to perform its required functions under static conditions for a specific period. Software Reliability is an essential connection of software quality, composed with functionality, usability, performance, serviceability, capability, installability, maintainability, and documentation. Software Reliability is hard to achieve because the complexity of software turns out to be high. While any system with a high degree of complexity, containing software, will be hard to reach a certain level of reliability, system developers tend to push complexity into the software layer, with the speedy growth of system size and ease of doing so by upgrading the software.

Issue 26: Exploring reliability in Jenkins

Jenkins has implemented rigorous testing to make sure that reliability standards are met. Jenkins comes with a test harness which is based on JUnit test framework which provides following features:

All tests must be placed in standard location of maven projects which is src/test/java/

Tests can be run from either the command line by typing ‘mvn test’ or through the use of an IDE.

Common test patterns include:

There is also Performance testing in Jenkins to make sure that performance requirements such as speed and return time meet the standard.

[Testing - Jenkins](https://docs.vuestorefront.io/v2/integrations/](https://www.jenkins.io/doc/developer/security/](https://www.jenkins.io/doc/developer/testing/)