From 359a63101ed2d44d4ae8f92e27514202ca779a00 Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 15 Apr 2021 12:27:29 -0700 Subject: [PATCH 01/10] #168 add initial devops guidelines --- docs/devops-guidelines/.images/DevOps.png | Bin 0 -> 57103 bytes docs/devops-guidelines/.order | 8 ++ .../Configuration-Management.md | 39 +++++++ docs/devops-guidelines/Create.md | 66 +++++++++++ .../Create/Branching-Strategy.md | 0 .../Create/Repository-Structure.md | 104 ++++++++++++++++++ docs/devops-guidelines/Deploy.md | 35 ++++++ docs/devops-guidelines/DevOps-Guidelines.md | 28 +++++ docs/devops-guidelines/Monitor.md | 33 ++++++ docs/devops-guidelines/Package.md | 29 +++++ docs/devops-guidelines/Plan.md | 38 +++++++ docs/devops-guidelines/README.md | 9 ++ docs/devops-guidelines/Verify.md | 90 +++++++++++++++ docs/devops-guidelines/Verify/.order | 8 ++ .../Automated-UI-Testing-%2D-Worksoft.md | 28 +++++ .../Verify/Azure-DevOps-Testing.md | 17 +++ .../Verify/Azure-Pipelines-and-Testing.md | 35 ++++++ .../Verify/Defect-Tracking.md | 12 ++ .../Verify/Incident-Management.md | 13 +++ .../Verify/Performance-Testing.md | 0 docs/devops-guidelines/Verify/UAT-Testing.md | 0 .../Verify/Unit-and-Regression-Testing.md | 17 +++ 22 files changed, 609 insertions(+) create mode 100644 docs/devops-guidelines/.images/DevOps.png create mode 100644 docs/devops-guidelines/.order create mode 100644 docs/devops-guidelines/Configuration-Management.md create mode 100644 docs/devops-guidelines/Create.md create mode 100644 docs/devops-guidelines/Create/Branching-Strategy.md create mode 100644 docs/devops-guidelines/Create/Repository-Structure.md create mode 100644 docs/devops-guidelines/Deploy.md create mode 100644 docs/devops-guidelines/DevOps-Guidelines.md create mode 100644 docs/devops-guidelines/Monitor.md create mode 100644 docs/devops-guidelines/Package.md create mode 100644 docs/devops-guidelines/Plan.md create mode 100644 docs/devops-guidelines/README.md create mode 100644 docs/devops-guidelines/Verify.md create mode 100644 docs/devops-guidelines/Verify/.order create mode 100644 docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md create mode 100644 docs/devops-guidelines/Verify/Azure-DevOps-Testing.md create mode 100644 docs/devops-guidelines/Verify/Azure-Pipelines-and-Testing.md create mode 100644 docs/devops-guidelines/Verify/Defect-Tracking.md create mode 100644 docs/devops-guidelines/Verify/Incident-Management.md create mode 100644 docs/devops-guidelines/Verify/Performance-Testing.md create mode 100644 docs/devops-guidelines/Verify/UAT-Testing.md create mode 100644 docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md diff --git a/docs/devops-guidelines/.images/DevOps.png b/docs/devops-guidelines/.images/DevOps.png new file mode 100644 index 0000000000000000000000000000000000000000..744680a40e0911ea03d41c7ed08006c862c7d9ba GIT binary patch literal 57103 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 in comments with Work Items to automatically generate release information as well as generate an audit trail + +All code is to be checked into a version control system on a regular basis. More frequent check-ins provide benefits: +- Team members can synchornize changes reducing efforts to code merge and staying up to date on changes +- Continous integration builds can be triggered to verify code + +[Learning git](https://docs.microsoft.com/en-us/azure/devops/learn/git/what-is-git) + + +## Coding Standards +Developers will follow the appropriate coding standards for the languages being used. Coding standards can be found at the following locations: + +* [Phillips 66 C# Coding Standard](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20C%20Sharp%20Coding%20Standard.docx?d=wde85208bab2c413e9412f255d55f1ce6&csf=1&e=LaONdH) +* [Phillips 66 JavaScript Coding Standard](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20JavaScript%20Coding%20Standard.docx?d=w13ff595b078a47bca4db00eed07d381f&csf=1&e=SzX6fp) +* [Phillips 66 SQL Coding Standard](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20SQL%20Coding%20Standard.docx?d=wf8d0654de3f1478ea6bb410a5f3f4515&csf=1&e=tfbVRr) + +## Unit Tests +Unit tests will be developed for each user story that comply with the [Phillips 66 Automated Unit Testing Guidelines](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20Automated%20Unit%20Testing%20Guidelines.docx?d=w0b8bf2bafdf942f99230863565fe36da&csf=1&e=aHc8nb) and are adequate to test the feature. + +All features will be developed in accordance with the DCX architectural guidelines. Specifically, the [Application Stacks (Development Framework)](/Project-Artifacts/Architectural-Overview/Application-Stacks-\(Development-Framework\)) guidelines and the [Backup and DR Strategy](/Project-Artifacts/Architectural-Overview/Backup-and-DR-Strategy). + + diff --git a/docs/devops-guidelines/Create/Branching-Strategy.md b/docs/devops-guidelines/Create/Branching-Strategy.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/devops-guidelines/Create/Repository-Structure.md b/docs/devops-guidelines/Create/Repository-Structure.md new file mode 100644 index 00000000..0707cafc --- /dev/null +++ b/docs/devops-guidelines/Create/Repository-Structure.md @@ -0,0 +1,104 @@ +--- + +# Introduction + +One of the bigger challenges to building software is managing the lifecycle of the source code, from authorship to deployment. Below is an outline of how to structure our source code, the goal of which is to achieve the following: + +- Any change must be easily reviewable, including how the change affects dependencies. +- Building and deploying should be simple, fast, and reproducible. +- Changes should be testable in both isolation and integrated with the existing environment. +- Setting up new users/systems should require as few steps as possible and require little outside assistance. + +--- + +# Review + +There are generally two approaches when setting up source control for a project: + +- Each application's code remains in its own repository +- All code is in one repository (monorepo) + +Neither implementation is objectively better than the other; they are both highly dependent on the complexity of the application and delivery model. Below is a review of the benefits and challenges that come with each approach. + + +## Separate Repositories + +### Benefits + +- Organization +The structure of the repo is simple; it contains the source files and configuration from only one project. +- Isolation +Each project exists in isolation. Changes can be made, and subsequently reviewed, knowing they have no direct or immediate impact on anything else. + +### Challenges + +- Dependencies +Coordinating changes between multiple, dependent projects is a tedious process. It is made worse over a project's lifecycle as it naturally grows in complexity. One example of this would be a web app that is dependent on a component library. When the app requires a change to a component, the dependent component repo must go through its code review and release process before the web app is able to move forward. If there are further changes required of the updated component library, the cycle starts over and the delay increases. +- Deployments +The ability to automate build and release pipelines suffers when the dependency graph grows in complexity. Coordinating deployments requires a significant effort from the team to track interdependent versions and where they should exist in the release cycle. + + +## Single Repository (monorepo) + +### Benefits + +- Organization +All files exist in one, well-structured directory. Users can easily search across projects without having to sync updates and branches across multiple repositories. +- Dependencies +Every project moves forward together. Changes in dependencies should never block progress since review cycles and upstream integration never happen orthogonally. +- Tooling +Most applications and services operate on the file system. Providing immediate access to all required files greatly improves the speed, efficiency, and resiliency of the CI/CD pipelines. + +### Challenges + +- Scalability +The life of a repository is long-lived. The VCS index continues to grow with every new file or changed line. While there are ways to mitigate this, the size of the repo will inevitably grow. + +--- + +# Model Repository Implementation + +Our project is comprised of multiple slices of related functionality and will be developed in parallel by a distributed team. The current approach will maintain a single repository ("monorepo") containing top-level directories for each independent project. + +The structure of the repository will be similar to the following example: + +- **Root** (repo directory) + - Repo-level config files: e.g. `.gitignore`, `.gitattributes`, `.editorconfig` + - Makefile (or similar) to provide top-level hooks into available scripts + - **docs** + - README.md + - installation.md + - **scripts** (utilities for cross-project coordination) + - README.md + - Makefile + - pipeline + - build.sh + - test.sh + - utils + - setup_machine.sh + - **infrastructure** + - README.md + - Makefile + - env + - ring1 + - ring2 + - modules + - lambda + - s3 + - **frontend** + - Project-level config files: e.g. `.gitignore`, `.npmrc`, `setup.cfg` + - docs + - README.md + - installation.md + - scripts + - build.sh + - test.sh + - src + - tests + - **api** + - **shared_components** + - **bloomreach** + + +--- + diff --git a/docs/devops-guidelines/Deploy.md b/docs/devops-guidelines/Deploy.md new file mode 100644 index 00000000..21c94f52 --- /dev/null +++ b/docs/devops-guidelines/Deploy.md @@ -0,0 +1,35 @@ +[[_TOC_]] + +Project code and artifacts are built locally using tools dictated by the software architecture of a project. + +Regardless of architecture, projects should automated builds to support *Continuous Integration* or *CI*, and, automated deployment to staged environments called [Rings](point to Rings defintion) + +# Continuous Integration + +# Continous Deployment + +# Ring Deployment + +*** insert favorite Ring picture here *** + +## Ring 1, Development +Development testing, verifying services, proof of concepts and development spikes +Complete access to the enviroment +Restricted access to P66 systems + +## Ring 2, Integration Test +Continues integration +Deployed to automatically after successful builds +Includes automated integration tests + +## Ring 3, Verify +Deployed to on succesful builds in Ring 1 + +## Ring 4, Stage +Similar/same as Production +May include a copy of Production data +Used when manual verification by Stakeholders or Customers is required + +## Ring 5, Launch +Production environment +Requires an approved ServiceNow CR prior to deployment diff --git a/docs/devops-guidelines/DevOps-Guidelines.md b/docs/devops-guidelines/DevOps-Guidelines.md new file mode 100644 index 00000000..e2475b5e --- /dev/null +++ b/docs/devops-guidelines/DevOps-Guidelines.md @@ -0,0 +1,28 @@ +# DevOps Approach + +"DevOps is cultural fusion of People, Process, and Technology to accelerate deliery of Business Value" + +![DevOps Continous Improvement](/.images/DevOps.png) + +A complete DevOps approach combines critial develop, operations and management concerns so that software projects can continously and consistently deliver high quality solutions. + +Each practice within these guidelines works with others to form a working model for continous improvement. In addition, DevOps works hand in hand with portfolio and project management and agile initiatives. + +This wiki is intended for the practitioners: team members on projects. It provides a set of guidelines that can be used as a starting point for any project's DevOps implementation. Each project will need to define specific tools and processes that will work best for that project. This wiki can be cloned and used as a starting point for a project specific DevOps Strategy. + +For an overview of DevOps, visit the Cloud Runway [DevOps Handbook](https://phillips66.sharepoint.com/sites/IT_DOH). + +Topics covered in this site include: +- [Planning and managing work from inception to delivery](/Plan) +- [Source management](/Create) +- [Verifying quality](/Verify) +- [Build and release automation](/Deploy) +- [Monitoring a solution in production](/Monitor) + +This site assumes you are using and are familiar with [Azure DevOps](https://dev.azure.com). + +## Additional Information + +- DevOps Handbook +- Patterns and Templates provided by Cloud Runway +- learning resources diff --git a/docs/devops-guidelines/Monitor.md b/docs/devops-guidelines/Monitor.md new file mode 100644 index 00000000..98dd538b --- /dev/null +++ b/docs/devops-guidelines/Monitor.md @@ -0,0 +1,33 @@ +[DevOps Strategy](/Project-Artifacts/DevOps-Strategy) + +**Capabilities Inventory** + +|Capability|Ideal State|Tools In Inventory| +|--|--|--| +|Performance Monitoring|Well established baselines and KPIs that can be tested against, monitored, and improved as a part of CI/CD pipeline and release cycles|AWS CloudWatch, Microsoft SCOM| +|Security Monitoring|Automatically monitor and alert for appropriate credential rotation events, critical vulnerability patches, and user activity anomalies|AWS CloudTrail, SkyHigh, Dome9, QRadar| +|Feedback Management|Build feedback submission tools into user interfaces to obtain feedback directly from customers; leverage Product Owner to translate feedback into feature-oriented user stories to be captured and prioritized by planning tools for future releases|Azure DevOps| +|Consumption Management|Utilize CloudHealth to monitor and report off cloud costs across AWS & Azure; tags applied at resource creation based on ServiceNow application CI|CloudHealth| +|Telemetry|Data is captured for all of the major types of telemetry data, business metrics, application metrics, infrastructure metrics and deployment pipeline metrics. Telemetry data is analyzed and leveraged as KPIs to improve the product as part of the feedback loop.| | + +**Performance Monitoring** +- DCX will follow the [guidance from CloudRunway](https://phillips66.sharepoint.com/sites/IT_CloudRunway/DOH/Pages/Monitoring%20and%20Logging.aspx) on monitoring and logging. + +- [Amazon CloudWatch Metrics](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html) will be used to monitor the performance of AWS Lambda functions against expectations. + +- [Amazon CloudWatch Metrics](https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html) will also be used to monitor the performance of AWS S3. + +- Other PaaS/SaaS vendors will be monitored using their native tools. + +- BloomReach performance monitoring guidelines can be found [here](https://documentation.bloomreach.com/library/concepts/web-application/jmx-management-beans-support.html). + +**Security Monitoring** +- DCX will follow the [guidance from CloudRunway](https://phillips66.sharepoint.com/sites/IT_CloudRunway/DOH/Pages/Security.aspx) on security best practices. + +**Feedback Management** +- +**Consumption Management** +- DCX will utilize CloudHealth to monitor and report cloud costs across AWS & Azure. Tags will be applied in accordance with the guidance from Cloud Runway. + +**Telemetry** +- Telemetry data will be captured [Amazon CloudWatch Metrics](https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html) and recorded to [Azure Application Insights](https://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview). diff --git a/docs/devops-guidelines/Package.md b/docs/devops-guidelines/Package.md new file mode 100644 index 00000000..0dc06b2b --- /dev/null +++ b/docs/devops-guidelines/Package.md @@ -0,0 +1,29 @@ +**Capabilities Inventory** + +|Capability|Ideal State|Tools In Inventory| +|--|--|--| +|Package Configuration|Packages are managed by a package manager which groups software together into a release. This will include infrastructure, application code and external libraries. All artifacts are tracked by version. Dependencies between various components and versions are tracked to reduce the risk of errors and create a repeatable build process.|Azure DevOps| +|Approval Workflow|Releases are managed by approvals at each quality gate.  Nothing moves without an approval.  Approval workflow supports delegation and escalation.|Azure DevOps, ServiceNow| + + +**Package Configuration** +Packages (builds) and deployments will be automated with Azure DevOps Pipelines and assigned an automated version that increments with each build. Azure DevOps creates reliable builds on all platforms through integration with Azure Repos using Git for pull requests, checks, and statuses. Code will be built, tested and deployed via Azure DevOps Repos and Pipelines. + +**Approval Workflow** + +The approval workflow provided by Azure DevOps will be used for all flows except the final push to production. + +*Deployments to production will require the creation of a change request in ServiceNow.* + +The workflow will be as follows: + +* Developers can build to their local environment and Ring 1 as needed. +* Developer initiates pull request. +* Development Lead and Architect review code and infrastructure. +* Development Lead and Architect approve code to be merged. +* Merge triggers a build to Ring 1. +* All unit tests and automated scans are triggered. +* If all unit tests and automated scans pass, the Architect and Quality Assurance Lead are notified. +* Quality Assurance Lead and Architect approve deployments to Ring 2 (Integration/Build Testing). +* Quality Assurance Lead approves deployments to Ring 3 (Functional Testing) and Ring 4 (UAT). +* Quality Assurance Lead and Product Owner approve deployment to Ring 5 (Production). diff --git a/docs/devops-guidelines/Plan.md b/docs/devops-guidelines/Plan.md new file mode 100644 index 00000000..eaf03573 --- /dev/null +++ b/docs/devops-guidelines/Plan.md @@ -0,0 +1,38 @@ +[[_TOC_]] + +# Planning and Managing Work + +Value to be delivered by the project should be managed on a backlog + +Project code shoudl be connected to work: Product Backlog Items/User Stories and Bugs/Defects. + +This enables Azure DevOps to automatically generate release notes and audit reports providing traceability from inception through delivery. + +See [P66 Agile Initiative]() for additional information. + +## Work Management Tooling + +|Capability|Ideal State|Primary Tool| +|--|-|--| +|Requirements Management|Requirements are captured as Epics/Features/User Stories on a Product Backlog.|Azure DevOps| +|Defect Tracking|Defects are tracked, triaged, prioritized with Product Backlog items.
For addtional information see [See Testing Strategy - Defect Tracking](/Testing-Strategy/Defect-Tracking)|Azure DevOps| +|Incident Management|Incidents and defects should be tracked together. Outages must have a complete root cause analysis with documented actions that will be taken to ensure the risk of a similar outage is reduced in the future.|ServiceNow| +|Release Planning|Release plans are driven by Epics/Features/User Stories in a backlog. Features that are not complete, may need to be disabled (Feature Flag) or held in a Development branch until they are ready. See [Version Control](/Version-Control) for additional information.|Azure DevOps| + +Notes: +- Production defects are created as incidents reported to ServiceNow. If the incident is triaged and determined to be a defect in code, a Bug is created in the appropriate Azure DevOps project. + + +## Release Planning Guidance + +Multiple options exist for managing releases. With any approach, deliverable work (features, partial features, bugs) are defined in a backlog and are delivered in iterations. + +- The simplest approach to release planning is by grouping iterations into a release in Azure DevOps. See [Areas and Iterations](https://docs.microsoft.com/en-us/azure/devops/organizations/settings/about-areas-iterations?toc=%2fazure%2fdevops%2fboards%2fsprints%2ftoc.json&%3bbc=%2fazure%2fdevops%2fboards%2fsprints%2fbreadcrumb%2ftoc.json&view=azure-devops). +- Larger teams with dependencies can leveral plans as described in [Plans (Agile at scale)](https://docs.microsoft.com/en-us/azure/devops/boards/plans/?toc=%2Fazure%2Fdevops%2Fboards%2Ftoc.json&bc=%2Fazure%2Fdevops%2Fboards%2Fbreadcrumb%2Ftoc.json&view=azure-devops) + +A major goal of DevOps and DevOps Strategy is to progress to Continuous Deployment (CD). True continous deployment significantly reduces the need to plan for major releases. Release planning becomes a part of every feature instead of a special event requiring additional effort. + +Continous Deployment is a goal for most teams. Before getting to CD, release planning is required with releases categorized as major or minor. + +- _Major releases_ typically include new features and capabilities, workflow changes, major changes to interfaces and integration points. A major release typically includes the work of several sprints. Use 3 to 6 sprints as a guideline. +- _Minor releases_ are focused on smaller and incremental changes and fixes. A minor release typically doesn't include signifcant new capabilities. A minor release or system changes more frequently (2 sprints or less). diff --git a/docs/devops-guidelines/README.md b/docs/devops-guidelines/README.md new file mode 100644 index 00000000..635aa83c --- /dev/null +++ b/docs/devops-guidelines/README.md @@ -0,0 +1,9 @@ +# DevOps Project Guidelines +This project includes documentation on DevOps practices and standards to be used by projects + +# Contributing +Clone the repo and update as needed + +VSCode is a recommneded editor but any editor with Markdown will do. + +For simple edits, push directly to master. If you have content you would like reviewed, create a branch and issue a PR. diff --git a/docs/devops-guidelines/Verify.md b/docs/devops-guidelines/Verify.md new file mode 100644 index 00000000..3d2af0ce --- /dev/null +++ b/docs/devops-guidelines/Verify.md @@ -0,0 +1,90 @@ +[[_TOC_]] + +Verifying quality involves many tools and many steps from proper work management through monitoring issues that may occur in a production environment. + +Standard scope of quality verification in DevOps includes: +1. Automated unit tests of code +2. Performing regular peer based code reviews +3. Using branch policies requiring Pull Requests into the branch be reviewed and pass quality checks +4. Analysing code to check for code quality and security issues +5. Automated integration testing +6. Functional testing +7. Load and performance testing +8. Security testing + +# Verification Strategy +Each project should develop test and verify strategy that is appropriate for the project. Factors include number of users, type of project (public facing web site vs. extranet portal vs. data analysis), data privacy and or risk to the business for data exposure. + +A project cannot simply follow a recipe blindly. + +# Testing Pyramid +Of the techniques mentioned, the most powerful is automated unit testing. If appropriate for your project, it is recommended that this become + +## Unit Test References + + +# Automated Unit Testing + + + + +**Capabilities Inventory** + +|Capability|Ideal State|Tools In Inventory| +|--|--|--| +|Code Review|Code reviews are done consistently using pre-defined standards and objective measures of code and design quality. Code is compared to the agreed to architecture to ensure compliance. Reviews are documented, any required changes are documented and worked. Follow-ups are scheduled and tracked.|Azure DevOps| +|Infrastructure Review|Infrastructure is scanned automatically using pre-defined guardrails. Alerts are generated if a change is outside predefined limits.|AWS CloudWatch| +|Licensing Compliance|All code is scanned automatically on check-in for license compliance. Approved licenses are agreed to and documented. License compliance is also added to the code review process.|| +|Static Quality Analysis|All code is scanned automatically on check-in for quality issues. Quality issues are required to be remedied prior to merging to an upstream branch.|SonarQube| +|Unit and Regression Testing|Complex code and foundational code is covered by unit tests. Complex code and foundational code is automatically identified to ensure compliance. Unit tests are executed as part of the build process. Failing unit tests are required to be fixed prior to merges or releases. Regression tests are composed of the entire suite of unit tests + additional higher-level tests as needed. Regression tests are automatically verified as part of the build process prior to release.|Junit, NUnit, Selenium, WorkSoft| +|Performance Testing|Performance testing is part of the deployment pipeline. All applications are held to documented performance standards.|LoadRunner| +|Security Analysis|Code is automatically scanned to protect against malicious components, detect plaintext credentials, validating appropriate IAM, and monitoring for behavioral anomalies.|| + +**Code Review** + +- Code reviews will be required for all new code. Code reviews will be completed by the Development Lead or the Project Architect. Code reviews will occur before a merge to the main branch. + +- Code reviews will follow the [Phillips 66 Code Review Guidelines](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Code%20Review%20Guidelines.docx?d=w244551758e6b4ad7865d9374c29b8126&csf=1&e=e5viRP) and will focus on adherence to coding standards, architectural alignment and security guidelines. + +**Infrastructure Review** + +- Infrastructure will be reviewed using the code review process as all infrastructure will be created via code. + +- These reviews will be focused on ensuring the services are being configured properly and are in alignment with the architectural guidelines. + +**Licensing Compliance** + +- Licensing compliance will be enforced by manual reviews of any external components or libraries during the code review process. If the enterprise procures an automated license compliance capability, the project will leverage the enterprise tools. + +**Static Quality Analysis** + +- Static Quality Analysis will be part of the build pipeline. SonarQube is expected to be leveraged for this task. + +- Quality metrics will be used to ensure the project is meeting the non-functional quality and security requirements. + +**Unit and Regression Testing** + +- [See Testing Strategy - Unit and Regression Testing](https://p66-default.visualstudio.com/Digital%20Customer%20Experience/_wiki/wikis/DigitalCustomerExperience.wiki?pagePath=%2FProject%20Artifacts%2FTesting%20Strategy%2FUnit%20and%20Regression%20Testing&pageId=159&wikiVersion=GBwikiMaster) + +- Unit testing will follow the [Phillips 66 Unit Testing Guidelines]( +https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20Automated%20Unit%20Testing%20Guidelines.docx?d=w0b8bf2bafdf942f99230863565fe36da&csf=1&e=DbEaeD) + + +**Performance Testing** + +- [See Testing Strategy - Performance Testing](https://p66-default.visualstudio.com/Digital%20Customer%20Experience/_wiki/wikis/DigitalCustomerExperience.wiki?pagePath=%2FProject%20Artifacts%2FTesting%20Strategy%2FPerformance%20Testing&pageId=196&wikiVersion=GBwikiMaster) + +**Security Analysis (Static)** + +- Security Analysis (Static) will be part of the build pipeline. SonarQube is expected to be leveraged for this task. Scans will focus on the OWASP Top 10 and the SANS Top 25. + +- [Phillips 66 Secure Coding Standards](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Secure%20Coding%20Standards.docx?d=wabf79e56d74a491ca17191baefff8f87&csf=1&e=PqdjLl) + +**Security Analysis (Dynamic)** +- Security Analysis (Dynamic) will be executed outside the build pipeline. Phillips 66 performs dynamic scanning using a variety of tools on a periodic basis and once for new projects the first time they are deployed. In addition, we perform periodic penetration and security testing. + +- This will be handled outside of the DCX team. The DCX team will be responsible for remediation of any issues found. + +- [Phillips 66 Secure Coding Standards](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Secure%20Coding%20Standards.docx?d=wabf79e56d74a491ca17191baefff8f87&csf=1&e=PqdjLl) + + diff --git a/docs/devops-guidelines/Verify/.order b/docs/devops-guidelines/Verify/.order new file mode 100644 index 00000000..78f6e77b --- /dev/null +++ b/docs/devops-guidelines/Verify/.order @@ -0,0 +1,8 @@ +Azure-DevOps-Testing +Azure-Pipelines-and-Testing +Unit-and-Regression-Testing +Automated-UI-Testing-%2D-Worksoft +UAT-Testing +Defect-Tracking +Performance-Testing +Incident-Management \ No newline at end of file diff --git a/docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md b/docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md new file mode 100644 index 00000000..485a0952 --- /dev/null +++ b/docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md @@ -0,0 +1,28 @@ + +**Worksoft / DevOps Integration** + +[Integrating Worksoft Certify with TFS-ADO](https://phillips66.sharepoint.com/:w:/r/sites/IT_AE66PMO/Digital%20Capability/_layouts/15/Doc.aspx?sourcedoc=%7B6BC6D1B7-B78A-4BE2-A37F-B41797BAB3A3%7D&file=Integrating%20Certify%20with%20DevOps%20tools%20via%20EMS%2010%20API.docx&action=default&mobileredirect=true) + +[Microsoft ADO-VSTS-TFS - Worksoft Intergration](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Microsoft%20ADO-VSTS-TFS%20-%20Worksoft%20Integration.pptx?d=w8ef01479ffff497d854290e8b897e05d&csf=1&e=bsXfsB) + +[RunEMOTC-ps1](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20integration%20to%20ADO/RunEMOTC-ps1.txt?csf=1&e=vXuVz0) + +[Tech Note--Integrating Worksoft Certify with TFS-ADO](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20integration%20to%20ADO/Tech%20Note--Integrating%20Worksoft%20Certify%20with%20TFS-ADO.pdf?csf=1&e=DgeoKr) + +**WorkSoft** + + +[Certify Basics v10.0.2](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/CertifyBasics_v10.0.2.pdf?csf=1&e=3kpoy6) + +[Capture 2.0](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/Capture2.0_v1.0.pdf?csf=1&e=1w0wsF) + +[Certify HTML v10.0.2](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/CertifyHTML_v10.0.2.pdf?csf=1&e=rjnGyO) + +[Certify - Best Practices Naming Conventions](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Best%20Practices/00.10%20Certify%20Best%20Practices%20Naming%20Conventions%20v02272017.pdf?csf=1&e=dI35yx) + + + +[Certify Resources](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/CertifyResources.pdf?csf=1&e=69MPSE) + + + diff --git a/docs/devops-guidelines/Verify/Azure-DevOps-Testing.md b/docs/devops-guidelines/Verify/Azure-DevOps-Testing.md new file mode 100644 index 00000000..1ea1c452 --- /dev/null +++ b/docs/devops-guidelines/Verify/Azure-DevOps-Testing.md @@ -0,0 +1,17 @@ +# Introduction +Test Plans are the easiest way to define and configure manual test cases in Azure DevOps. They increase the visibility of which pieces of functionality are covered and define how those business requirements get tested. + +# Relevant Documentation + +The following documents provide + +- [Test Plans](https://docs.microsoft.com/en-us/azure/devops/test-plans/index) +- [Create Test Plans and Test Suites](https://docs.microsoft.com/en-us/azure/devops/test/create-a-test-plan) +- [Create Manual Test Cases](https://docs.microsoft.com/en-us/azure/devops/test/create-test-cases) +- [Run Manual Tests](https://docs.microsoft.com/en-us/azure/devops/test/run-manual-tests) +- [Azure DevOps Continuous Build/Deploy/Test with ASP.NET Core](https://www.hanselman.com/blog/AzureDevOpsContinuousBuildDeployTestWithASPNETCore22PreviewInOneHour.aspx) + +# Hands-On Labs + +- [Test Planning and Management with Azure Test Plans](https://www.azuredevopslabs.com/labs/azuredevops/testmanagement/) +- [Exploratory Testing with Azure Test Plans](https://azuredevopslabs.com/labs/azuredevops/exploratorytesting/) diff --git a/docs/devops-guidelines/Verify/Azure-Pipelines-and-Testing.md b/docs/devops-guidelines/Verify/Azure-Pipelines-and-Testing.md new file mode 100644 index 00000000..c5fe30b3 --- /dev/null +++ b/docs/devops-guidelines/Verify/Azure-Pipelines-and-Testing.md @@ -0,0 +1,35 @@ +Azure Pipelines is a cloud service that you can use to automatically build and **TEST** your code project and make it available to other users. + +Below are key guides for developers on testing using Azure Pipeline related to **testing** + +[Review test results](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/review-continuous-test-results-after-build?view=azure-devops) +Test reports provide an effective and consistent way to view the tests results executed using different test frameworks, in order to measure pipeline quality, review traceability, troubleshoot failures and drive failure ownership. + +[Analyze test results](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/test-analytics?view=azure-devops) +Tracking test quality over time and improving test collateral is key to maintaining a healthy DevOps pipeline. Test analytics provides near real-time visibility into your test data for builds and releases. It helps improve the efficiency of your pipeline by identifying repetitive, high impact quality issues. + +[Review code coverage!](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/review-code-coverage-results?view=azure-devops) +Code coverage helps you determine the proportion of your project's code that is actually being tested by tests such as unit tests. To increase your confidence of the code changes, and guard effectively against bugs, your tests should exercise - or cover - a large proportion of your code. + +Reviewing the code coverage result helps to identify code path(s) that are not covered by the tests. This information is important to improve the test collateral over time by reducing the test debt. + + + +Other testing documentation + +- [Trace test requirements](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/requirements-traceability?view=azure-devops) + +- [Use Test Impact Analysis](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/test-impact-analysis?view=azure-devops) + +- [UI testing consideration](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/ui-testing-considerations?view=azure-devops&tabs=mstest) + +Run tests in parallel + +- [For any test runner](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/parallel-testing-any-test-runner?view=azure-devops) + +- [Using VS Test task](https://docs.microsoft.com/en-us/azure/devops/pipelines/test/parallel-testing-vstest?view=azure-devops) + + + + + diff --git a/docs/devops-guidelines/Verify/Defect-Tracking.md b/docs/devops-guidelines/Verify/Defect-Tracking.md new file mode 100644 index 00000000..23624bd1 --- /dev/null +++ b/docs/devops-guidelines/Verify/Defect-Tracking.md @@ -0,0 +1,12 @@ +**Defect Tracking** + +Defect will be tracked in Azure DevOps and linked to associated story. + +Defects generated from automated testing tool/platform will be manually ported over to ADO by the DCX QA Lead one reviewed with DCX Leads and Product Owner. + +Defects found during manual testing will be added directly in ADO and linked to the user story being tested. + +Defect Prioritization & Assignment: + +- Defect will be reviewed daily with DCX Product Owner, Business Analyst, Scrum Master, Development Leads and Architect to determine severity, prioritize and assign to appropriate resource. +- Defect may be assigned for resolution in existing sprint or future sprint. diff --git a/docs/devops-guidelines/Verify/Incident-Management.md b/docs/devops-guidelines/Verify/Incident-Management.md new file mode 100644 index 00000000..0e118107 --- /dev/null +++ b/docs/devops-guidelines/Verify/Incident-Management.md @@ -0,0 +1,13 @@ +**Incident Management** + +Incidents are defects found after a feature has rolled out to production. + +Once a feature has been productionized (Ring 5), any issue found will be logged in the ServiceNow incident tracking system. Service delivery groups will be defined in Service Now that will immediately notify the appropriate DCX project/support team of reported issue. + +Service Delivery groups will contain the name(s) of specific personnel assigned to address issues in various areas of the overall DCX solution (UI, CMS, Integration etc.) + +Incidents logged in ServiceNow will default to the current escalation process for all incidents in ServiceNow. + +For Bizlink external customers, the Global Marketing help desk will continue to log cases in Salesforce, however any technical issues will be logged in ServiceNow as is their current practice. + +DCX project will work with the Service Now team on exposing an API to the new DCX solution, where external customers will have the option of submitting issues directly to Phillips 66. The ServiceNow tickets will be directed to either the Global Marketing help desk or the Lubes Customer Excellence team for review. diff --git a/docs/devops-guidelines/Verify/Performance-Testing.md b/docs/devops-guidelines/Verify/Performance-Testing.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/devops-guidelines/Verify/UAT-Testing.md b/docs/devops-guidelines/Verify/UAT-Testing.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md b/docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md new file mode 100644 index 00000000..720cb46e --- /dev/null +++ b/docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md @@ -0,0 +1,17 @@ +**Unit and Regression Testing** + +Developers will use Test-driven development (TDD) technique which combines test-first development where you write a test before you write just enough code to fulfill that test. + +The benefits of Test-driven development are more than just simple validation of correctness but can also drive the design of the code ensuring it meets the test case. + +Unit tests are executed as part of the build process. Failing unit tests are required to be fixed prior to merges or releases. Test-driven development creates a regression-test suite as a side effect that can minimize human manual testing, while finding problems earlier, leading to quicker fixes. + +Regression tests are composed of the entire suite of unit tests + additional higher-level tests as needed. Regression tests are automatically verified as part of the build process prior to release. + +The overall testing strategy will rely heavily on unit testing but will be augmented by automated UI testing and some manual testing where required. Automated UI testing will be run through WorkSoft. + +DCX will leverage the Ring deployment strategy +- Ring 1 is the primary development ring. It will be utilized by developers for development and developer testing. +- Ring 2 is the integration testing ring. It will be leveraged by developers and testing personnel to verify the code builds and deploys correctly, that all automated unit and regression tests pass and that the system integrates with Phillips 66 test enterprise resources, e.g., SAP test environments or OSS test database. All deployments to Ring 2 must be approved by the DCX Architect and the DCX QA Lead. + +See [DevOps Strategy/Environments](https://p66-default.visualstudio.com/Digital%20Customer%20Experience/_wiki/wikis/DigitalCustomerExperience.wiki?pagePath=%2FProject%20Artifacts%2FDevOps%20Strategy%2FEnvironments&pageId=46&wikiVersion=GBwikiMaster) for more details on Rings. From f0692360eca4a75711adc97eb73e94f191206dcd Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 Apr 2021 09:22:34 -0700 Subject: [PATCH 02/10] #168 review updates --- .../Configuration-Management.md | 33 ++++++------ docs/devops-guidelines/Create.md | 53 +++++++++---------- docs/devops-guidelines/DevOps-Guidelines.md | 12 +---- docs/devops-guidelines/Monitor.md | 23 +++----- 4 files changed, 50 insertions(+), 71 deletions(-) diff --git a/docs/devops-guidelines/Configuration-Management.md b/docs/devops-guidelines/Configuration-Management.md index 4f7448b0..806d8edb 100644 --- a/docs/devops-guidelines/Configuration-Management.md +++ b/docs/devops-guidelines/Configuration-Management.md @@ -4,36 +4,33 @@ |Capability|Ideal State|Tools In Inventory| |--|--|--| -|Infrastructure Provisioning|Infrastructure is provisioned and configured as code along with the rest of the workload in an automated CI/CD pipeline|AWS CloudFormation, Azure Resource Manager| -|Infrastructure Configuration|Infrastructure is provisioned and configured as code along with the rest of the workload in an automated CI/CD pipeline|AWS Config, AWS CLI, Azure Policy, Azure CLI| -|Application Provisioning|Automatically create application CI in ServiceNow based on what gets deployed; users and administrators provisioned with proper access|ServiceNow, AzureAD, Okta| -|Application Configuration|Configuration settings are exposed based on user roles. Changes to configuration items are audited and sent through and appropriate approval process.|AWS OpWorks| +|Infrastructure Provisioning|Infrastructure is provisioned and configured as code along with the rest of the workload in an automated CI/CD pipeline|Terraform, AWS CloudFormation, Azure Resource Manager| +|Infrastructure Configuration|Infrastructure is provisioned and configured as code along with the rest of the workload in an automated CI/CD pipeline|Terraform, AWS Config, AWS CLI, Azure Policy, Azure CLI| +|Application Provisioning|Provision via Continuous Deployment pipeline using GitHub Actions, Azure Pipelines, or similar; users and administrators provisioned with proper access|Azure DevOps, GitHub| +|Application Configuration|Configuration settings are exposed based on user roles. Changes to configuration items are audited and sent through and appropriate approval process.|| **Infrastructure Provisioning** -- Infrastructure will be provisioned using AWS CloudFormation templates. This will allow the team to standardize on a tool several team members already know that the company is licensed for, has support for from AWS and will allow us to take advantage of all AWS native capabilities. DCX is not intended to be cloud agnostic as it must take advantage of vendor specific services, e.g. CloudFront. +- Infrastructure will be provisioned using Terraform templates. This will allow the team to standardize on a tool several team members already know that the company is licensed for, is supported for common cloud platforms and provides provisiong of most native capabilities. -- All CloudFormation templates will be stored in Azure DevOps and deployed use the Azure DevOps deployment pipeline. +- All provisioning templates regardless of technology will be stored in git repos and deployed use the pipeline toofl of choice such as GitHub Actions or Azure DevOps Pipelines. -- Infrastructure provisioning will follow the [resource naming guidelines](https://phillips66.sharepoint.com/sites/IT_CloudRunway/DOH/Pages/Resource%20Naming.aspx) and [tagging guidelines](https://phillips66.sharepoint.com/sites/IT_CloudRunway/DOH/Pages/Resource%20Tags.aspx) outlined by CloudRunway. +- Infrastructure provisioning should follow [resource naming guidelines](todo ) and [tagging guidelines](todo ) . **Infrastructure Configuration** - Since all resources will be deployed and configured via code (Terraform, CloudFormation, etc.), configurations will be stored in version control (Git Repo). -- Any updates will be reviewed via a Pull Request, then can be deployed by the service of choice. Terraform and CloudFormation both have the capability to update existing resources if possible, and if not, they'll replace any resources that cannot be updated in place. +- Any updates will be reviewed via a Pull Request, then can be deployed by the service of choice. Terraform has the capability to update existing resources or replace resources that cannot be updated in place. -**Application Provisioning** -- Applications will consist primarily of cloud services and AWS Lambda functions and will be designed to be serverless. - -- They will be provisioned using the [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) templates. +It is critical that any resource that maintains state (databases, blob storage, aka a stateful resource) be backed up and restorable in the event of a resource replacement, or, stateful resources should be excluded from full automated provisioning. -- The templates will be stored in Azure DevOps and deployed using the Azure DevOps deployment pipeline. +**Application Provisioning** +- Applications should be provisioned via automated pipelines +- Pipeline templates will be stored in git repos along with the the application code **Application Configuration** -- Application configuration information will be stored in different places depending on the vendor. - -- AWS Lambda functions will be configured according to the [AWS guidelines](https://docs.aws.amazon.com/lambda/latest/dg/lambda-configuration.html). +- Non secret application configuration information should be stored with source code. -- Sensitive information, e.g., passwords or API keys, will be stored in [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) based on guidelines to be provided by CloudRunway. +- Sensitive information, passwords or API keys, should be stored in a cloud native secret store, or, the pipeline tool of choice. -- MuleSoft configuration will be stored and managed according to the MuleSoft best practices. For more information on MuleSoft, go to the [MuleSoft site on Teams](https://teams.microsoft.com/l/team/19%3a90fdb0298b62405187a92b6ef779571d%40thread.skype/conversations?groupId=c3720085-0e68-401d-b28f-cdbf3ca059db&tenantId=4febecd1-b635-4bb7-96fd-6688487e52f1). +- Secrets based only on deployment environment can be diff --git a/docs/devops-guidelines/Create.md b/docs/devops-guidelines/Create.md index 273c8801..207b60ae 100644 --- a/docs/devops-guidelines/Create.md +++ b/docs/devops-guidelines/Create.md @@ -8,28 +8,35 @@ These guidelines are intended to be general guidance and will be applicable to m For technical and software projects, a variety of artifacts are created. All artifacts should be maintined in git based repos - Design artifacts such as high level designs, information architecutre, wire frames and similar should be committed to source and associated with a User Story whenever possible -- Software developers create code in a branch created from a User Story or Bug/Defect - -All artifacts - -Branching Strategies -Repository Structure +- Software developers should create code in a branch created from a User Story or Bug/Defect +todo: Branching Strategies +todo: Repository Structure **Capabilities Inventory** -|Capability|Ideal State|Tools In Inventory| +|Capability|Ideal State|Typical Tools| |--|--|--| |Design|Designs are driven by user stories, captured ahead of development and vetted against a Definition of Ready (DoR) for design acceptance. Design documents incorporate all aspects of the design, to include at a minimum UX/UI, infrastructure, data models, logic and integration. Design may optionally include a clickable prototype or a proof of concept.|Adobe XD, Zeplin, Adobe Photoshop, Adobe Illustrator| -|Implementation|Developers work on tasks tied to user stories. Unit tests are developed for acceptance criteria defined in the design ahead of development of the actual product. Tasks are completed in priority order. Development is accelerated by the use of IDEs and feedback tools.|Visual Studio, Visual Studio Code, MuleSoft, SQL Server Management Studio, Oracle SQL Developer, PL/SQL Developer, Automation Anywhere, PgAdmin, Resharper -|Version Control|All artifacts are versioned and revisions to those artifacts are tracked by a version control system. Merges are simple and reversion to a "known-good state" is easy. The version control system supports distributed development and forms the backbone for the build/deployment pipelines.|git based Azure DevOps Repos | +|Implementation|Developers work on tasks tied to user stories. Unit tests are developed for acceptance criteria defined in the design ahead of development of the actual product. Tasks are completed in priority order. Development is accelerated by the use of IDEs and feedback tools.|Visual Studio, Visual Studio Code, MuleSoft, SQL Server Management Studio, Oracle SQL Developer, PL/SQL Developer, Resharper +|Version Control|All artifacts are versioned and revisions to those artifacts are tracked by a version control system (git). Merges are simple and reversion to a "known-good state" is easy. The version control system supports distributed development and forms the backbone for the build/deployment pipelines.|GitHub, git based Azure DevOps Repos, et.al. | # Design -Designs may consist of wireframes, mockups or prototypes. A wireframe is a low-fidelity visual representation of the site and will be used to depict the basic UI, detailing the layout and structure of the site. A mockup is a mid to high-fidelity visual representation of the site and will be used to highlight color scheme, visual style and typography. A prototype is a high-fidelity visual representation of the site and will be used to simulate user interaction by allowing the user to experience the content through clickable elements and interactions. In the event the design process needs to be accelerated, wireframes may be substituted with mockups. +Designs typically consist of wireframes, mockups or prototypes. +- A wireframe is a low-fidelity visual representation of the site and will be used to depict the basic UI, detailing the layout and structure of the site. +- A mockup is a mid to high-fidelity visual representation of the site and will be used to highlight color scheme, visual style and typography. +- A prototype is a high-fidelity visual representation of the site and will be used to simulate user interaction by allowing the user to experience the content through clickable elements and interactions. -Designs will utilize Material Design, Font Awesome Icons and custom components. Phillips 66 brand guidelines will influence design concept and style. +## Design Guidelines +Use the design that meets your needs. We recommend starting with wireframes, using mockups and prototypes when necessary and their value is clear. -Designs will be reviewed by the design team, development team and business analysts before handing off for development. User stories, acceptance criteria and UX personas are used to approve and validate designs. Optionally, user testing may be included in design review. +- Designs should utilize an existing design system such as Material Design, as well as standardized componenents such as Font Awesome Icons and custom components. +- Do not develop eponymous designs unless they are truly required for differentiation. +- Beware existing or complementary solutions. +- Regardless of design, usability should not be sacrified: value something that works well over somthing that looks pretty +- When possible, include user testing in design review. + +Designs should be reviewed by stakeholders and users, as well as the design team, development team and business analysts before finalization. User stories, acceptance criteria and UX personas are used to approve and validate designs. # Implementation Implementation is where the rubber meets the road. The plans are laid. The user stories are written. The test cases have been identified and it's finally time to build something. @@ -39,28 +46,18 @@ Implementation will follow the SCRUM methodology and utilize Test Driven Develop All development is expected to be performed using Visual Studio Code, Mulesoft Anypoint Studio and Eclipse. ## Source Management - Git repos in Azure DevOps are preferred. -Associate check ins using the # in comments with Work Items to automatically generate release information as well as generate an audit trail - -All code is to be checked into a version control system on a regular basis. More frequent check-ins provide benefits: -- Team members can synchornize changes reducing efforts to code merge and staying up to date on changes -- Continous integration builds can be triggered to verify code - -[Learning git](https://docs.microsoft.com/en-us/azure/devops/learn/git/what-is-git) +Associate commits using user stories using the syntax "# ..." in commit messsages to track which user story the commit is for. This generates a source audit trail and can be used by release systems to track which stories are being delivered in a release. +Code should be committed on a regular basis. More frequent commits provide benefits: +- Team members can merge committed changes more often reducing overall merge effort +- Continous integration builds can be triggered to verify code when it is committed ## Coding Standards -Developers will follow the appropriate coding standards for the languages being used. Coding standards can be found at the following locations: - -* [Phillips 66 C# Coding Standard](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20C%20Sharp%20Coding%20Standard.docx?d=wde85208bab2c413e9412f255d55f1ce6&csf=1&e=LaONdH) -* [Phillips 66 JavaScript Coding Standard](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20JavaScript%20Coding%20Standard.docx?d=w13ff595b078a47bca4db00eed07d381f&csf=1&e=SzX6fp) -* [Phillips 66 SQL Coding Standard](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20SQL%20Coding%20Standard.docx?d=wf8d0654de3f1478ea6bb410a5f3f4515&csf=1&e=tfbVRr) +Developers will follow the appropriate coding standards for the languages being used. Coding standards can be found at ## Unit Tests -Unit tests will be developed for each user story that comply with the [Phillips 66 Automated Unit Testing Guidelines](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20Automated%20Unit%20Testing%20Guidelines.docx?d=w0b8bf2bafdf942f99230863565fe36da&csf=1&e=aHc8nb) and are adequate to test the feature. - -All features will be developed in accordance with the DCX architectural guidelines. Specifically, the [Application Stacks (Development Framework)](/Project-Artifacts/Architectural-Overview/Application-Stacks-\(Development-Framework\)) guidelines and the [Backup and DR Strategy](/Project-Artifacts/Architectural-Overview/Backup-and-DR-Strategy). +Unit tests will be developed for each user story that comply with the and are adequate to test the feature. diff --git a/docs/devops-guidelines/DevOps-Guidelines.md b/docs/devops-guidelines/DevOps-Guidelines.md index e2475b5e..8028ecf0 100644 --- a/docs/devops-guidelines/DevOps-Guidelines.md +++ b/docs/devops-guidelines/DevOps-Guidelines.md @@ -2,7 +2,7 @@ "DevOps is cultural fusion of People, Process, and Technology to accelerate deliery of Business Value" -![DevOps Continous Improvement](/.images/DevOps.png) +![DevOps Continous Improvement](.images/DevOps.png) A complete DevOps approach combines critial develop, operations and management concerns so that software projects can continously and consistently deliver high quality solutions. @@ -10,8 +10,6 @@ Each practice within these guidelines works with others to form a working model This wiki is intended for the practitioners: team members on projects. It provides a set of guidelines that can be used as a starting point for any project's DevOps implementation. Each project will need to define specific tools and processes that will work best for that project. This wiki can be cloned and used as a starting point for a project specific DevOps Strategy. -For an overview of DevOps, visit the Cloud Runway [DevOps Handbook](https://phillips66.sharepoint.com/sites/IT_DOH). - Topics covered in this site include: - [Planning and managing work from inception to delivery](/Plan) - [Source management](/Create) @@ -19,10 +17,4 @@ Topics covered in this site include: - [Build and release automation](/Deploy) - [Monitoring a solution in production](/Monitor) -This site assumes you are using and are familiar with [Azure DevOps](https://dev.azure.com). - -## Additional Information - -- DevOps Handbook -- Patterns and Templates provided by Cloud Runway -- learning resources +This site assumes you are using and are familiar with [GitHub](https://github.com) or [Azure DevOps](https://dev.azure.com). diff --git a/docs/devops-guidelines/Monitor.md b/docs/devops-guidelines/Monitor.md index 98dd538b..f0ecfa20 100644 --- a/docs/devops-guidelines/Monitor.md +++ b/docs/devops-guidelines/Monitor.md @@ -7,27 +7,20 @@ |Performance Monitoring|Well established baselines and KPIs that can be tested against, monitored, and improved as a part of CI/CD pipeline and release cycles|AWS CloudWatch, Microsoft SCOM| |Security Monitoring|Automatically monitor and alert for appropriate credential rotation events, critical vulnerability patches, and user activity anomalies|AWS CloudTrail, SkyHigh, Dome9, QRadar| |Feedback Management|Build feedback submission tools into user interfaces to obtain feedback directly from customers; leverage Product Owner to translate feedback into feature-oriented user stories to be captured and prioritized by planning tools for future releases|Azure DevOps| -|Consumption Management|Utilize CloudHealth to monitor and report off cloud costs across AWS & Azure; tags applied at resource creation based on ServiceNow application CI|CloudHealth| -|Telemetry|Data is captured for all of the major types of telemetry data, business metrics, application metrics, infrastructure metrics and deployment pipeline metrics. Telemetry data is analyzed and leveraged as KPIs to improve the product as part of the feedback loop.| | +|Consumption Management|Utilize monitoring tools to visualize and report consumption metrics including costs. Use standard resource tags to define and aggregate costs|Azure Monitor, AWS CloudHealth, Splunk, ...| +|Telemetry|Data should be captured for all of the major types of telemetry data, business metrics, application metrics, infrastructure metrics and deployment pipeline metrics. Telemetry data is analyzed and leveraged as KPIs to improve the product as part of the feedback loop.| | **Performance Monitoring** -- DCX will follow the [guidance from CloudRunway](https://phillips66.sharepoint.com/sites/IT_CloudRunway/DOH/Pages/Monitoring%20and%20Logging.aspx) on monitoring and logging. - -- [Amazon CloudWatch Metrics](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html) will be used to monitor the performance of AWS Lambda functions against expectations. - -- [Amazon CloudWatch Metrics](https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html) will also be used to monitor the performance of AWS S3. - -- Other PaaS/SaaS vendors will be monitored using their native tools. - -- BloomReach performance monitoring guidelines can be found [here](https://documentation.bloomreach.com/library/concepts/web-application/jmx-management-beans-support.html). +todo **Security Monitoring** -- DCX will follow the [guidance from CloudRunway](https://phillips66.sharepoint.com/sites/IT_CloudRunway/DOH/Pages/Security.aspx) on security best practices. +todo **Feedback Management** -- +todo + **Consumption Management** -- DCX will utilize CloudHealth to monitor and report cloud costs across AWS & Azure. Tags will be applied in accordance with the guidance from Cloud Runway. +todo **Telemetry** -- Telemetry data will be captured [Amazon CloudWatch Metrics](https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html) and recorded to [Azure Application Insights](https://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview). +todo From f3b085e5480915d4f90c6d3dbfebad25e9076e7f Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 Apr 2021 09:32:10 -0700 Subject: [PATCH 03/10] #168 resize devops image --- docs/devops-guidelines/.images/DevOps.png | Bin 57103 -> 48734 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/devops-guidelines/.images/DevOps.png b/docs/devops-guidelines/.images/DevOps.png index 744680a40e0911ea03d41c7ed08006c862c7d9ba..5bcce4c3afae571eb89af3f04364085d6ec9f159 100644 GIT binary patch literal 48734 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
cA>!_Mig>CSr0P)5GRX8d} z<|eCEaaMpY?&193+3^?4ReFO0(7@f}ZjLP8;mkEO7>PsfTWK*y4aE7ST`4aQ8wpF2 zP18vhh6~N6q)=t$;*tIYzQ1tB&g^KxbPquL>&8{@p zh+~~dv;Et=z!s*b0c%)CUI@?>9nZs#bc6L(3CJQOWL4-q)E4Kt1=wRy=Ux1;;*BpW zC)NYz)k$a)N)&$kSosEIW5cB9v@Htqp$OQE7cV9pTCa_mXr>P={$SkJgYzd0Bu4xB zv0v+tILqvyTr4p-ec2C|fC27fy^xjKENs%;M6ElD%bUD;vet*pbN`x+!@@$pt34U5 z%1fhQU&!j}-lccX&{zV{90?#(Hwg2aJ8=b~jVxoj6a6)&G%D#U3G++Y1mW7>{%k|d zVuGieJS6d$xVSW2=Ufq(!{5M;jy3HlV7MRj4nD>x=T>P#qjHOn>xr53v@V6Ode^`Z zh6?&skk+W+9^9m(%F>C?mJaFN@?Y%iz66*wNhd$t`ea zX8$1CC)$PqAs_8~j|qXF_~2ZH^T4+$Wcu&cR^t=ZLJfbIXq5ZrK#o?fXJ@u22dOQh z^&f$W#H$?zand}-;#9N?snGLrljCpGYoY-aLV;0Vh9!-n9dOH9`7DLq`Fvfw6?;rZXc@5==j z>U)V6f1RA!b+e)Rj?*ZDc;^Fx=RW~P*af3nA4QI>1q^PKH;g!|H4?T%4I?-F>huqjbmoF z!IIjvcE-#skL=z-W=gSr3ajB?9En86CQCKArCKa%|CB!a;}{=50aHvwIep}-}s4qWFL8_GGxFIeG&9UBErSZOyB>$$^V6bn__g_2C z+plS4`1nMh1me^2&VRuQC66vs#^p2?Xz%dWnI>?E~iYnvCWO=tfm3EqNODM zYeJwGTWYIGRdZ;c=ys~+X7l_a-zOE|{P*yyMcAK;>{5+5FqmKZs)&4(UXn)tijN}b zSBX?R!D++Zy~_DrM>RbibOr?LbZlv(%DOg8mjZMAPU^p-X1y6YndRte+=R6Q_Ku?w z)u^rd{;4*TvA#Z#EjnJSFg__;m=AeccZsTe)$GwVdX10K4NdlwQ3H+2q$bbJ(@)e+ z4qPb8=2k>SAQ>U(Fvz-R*aa_d5{;y$la(^=u#AmyO$G zTQ2lXOei%Kvt{%fImkU_``;S)xz z`Aw*6V%)v_^ zsb}$beex&%9Mc=12>DXshyWSL9b zb}2QM_I}P)&6k&Q#k$L#E8>6KES#qDJoXX%!gk?(ztP?)jH@Q?yf{*V%E`_u<<|&* zZcew?(-R;HS`x*G`op53hS`WPiPGqK-fi_P-7q7obE4zfq7Bh;HANKDOb6(ZdNv;wB1x^Y2&0Y>DVcSrYO1e&J%+@s9s#2m@7?WB3033754RjZFSXx}v5 z7~>s#c2=Y&5yj{U491??&%UN>lXq-69cCT!!%Z29*_`Q4Pv_oWT zmU}J!liBbKTw!hQYtc)|E|*J{4F^%(N2>OcT6#=Z<;xi4KD>5fvFu+eN?np755h_N zgH00i2zg&n2-B_hDrIKOX(X~(s$^7Q_{NqAZVn#C;JRO^)c*M$=g)GTtYtWtvvi>K zi3yU{qL7t~)jGqsSuNPKHuo=!huNk5Rv>Ev7u_lw)XG{MP^QdwF-Z+tQe4<=#i6tJ zcN&*vPJQY^>exdBkFuA?CCx~N_5<3-2VNYtnUADXiY5S;0LP$+p4JT%zlV0>=0*Zv zXL)t+ofefFC%skoi2E@ZkfmmFV$#W=d8#@6%m4C?v1=zi!R3OTNf#IuekP&*zM8#$ zXYC4qyqI$WOC5ga;gueI+=BAwJmRFh2)aCkb!n0-F4>JEx@4>3#@595AZZuV**jFr z0k6M3yB9F-mMq~?EAVi<1BpSms`biX{f!p1V_UkmXxe^UR zz_sQ`fzG#QcRdgbL1;{0FNRJAxp>-B)dO2%RS3R2tLgeOzKMZYI3d`B&pp`Bk`Ls6A zP9hh?mu=ac5>F_xChDUw703$|xsyYc87g4xt5yQ^q%+kA8!Z|Yf<7(ZU?cxW*p4p=+2{8+W#I)|( zb46>6(|hYwgBND7t3kE&e;D^pxL566F8N92quS)EOVm65o{GwCc$<9X+cKobod`!u3A~G&6!Z-X&@Y3#cc7tY5iGRVUrr2QFz< zh(v$<&LH+nPEFd`nv*=+ESKrqhS|vHtebUqA+do3e->ie3|3E(9z(4=@aX8?_aA&n ztrP%dW@p@Vz#j!oRf4=;yvK)Wj2ws>isM(zj4~eQkeD`Ux}ryuZ>~?U%fPQY%IbN} zw^ZBJHc9oA>jbM71w3Jq+DuGwO4@jf3(zz*{*&l3dS``g?l%0Y^rt2vX^rtlP}?2G z%l79At<}}6lGA#r%Yh5>-RI|73n5cC_+%*pe8@y=58rj!r+Vk6hF>)E4?Ii$=-8PO zyMeV7r|ZF;-nsECYO3X=I?^PZ40WwZfIq7uQa&nWtmG0A^Nrb~i1xLjCQ;X=#)HoZ zLwM`@D(+uG`RC`FfiI%;+CQB>rSgCXRn|D`j-%my)8QHhwaeTtt0pemLXI29I87Gg z_}fkSD4wmsKnM?>X!>&bT?Yd znx+<+XNLFwXxZ;BPe8+)21LxC_YJ&(2R^-Tm!i#aU&Q#FFX_f{rOKnF;iOYPwF;5+ zES~AdrRJ=ULM*zQt@D53EKA#QV=@U%c8P7ue{Hnl*<90{YO)U8IfUxCLs(6yYD~rk z_01p25((!9A8Vo1w{MpPMMqvxO7rtRo_M+6P?Qge;y3V4m6~spEAIpacp3$;dK;E* zn$e?cQs$1Tvb2S8UaDm6*Yy%rzMWLw^_NrC@E_#S+f$SdK5w)!FV%>DCjDvFFV!jQ z_ms?5;|=X<6WlIYwxvm$)LUFcCoRc~iQ0JciGfR@YHLMf9dXlrGyTK*4vc#)CYCkb zzHZ`-R^rt|LeyDv9K*oYAai%xrb>$jDfACUky@m|@GXv1;0t_ziqqxmzxRb7x;Akt z;8@6sm+0TO!z56U4GMa?mO9n{5zse|O||X95B+@QO>s|{{(V!RoM64oax1A*n81al z!`UO186x+jH<;7y-E6?nJVxxeoF%_;U*<{RnJgwnVMLk@QM!5+xg>F|@}11)X-+p8 zEuiKZmIMncaO#TFUr_1X!+*pWkE+(~Xk?*Iws#de>jmR0*grjNae8M<$<9SpXBJSM za5_4lry91pH5;&b%02fH?C)SMZ$}Z>82#@0cURaWb@RNJqojIioSgzpmwS+(OK1rA zRTR$}!L&vgs&ZPj{P5B(CDvQMtM|iG!rRdCmnR^6FQ{o?lWGzIkqRp92XQ+qcJ68tEF2m%z>}Gw|Q6;wsD0B^h7}4Px&s`4LQ~!0d(?r zzb;|#5LU`pZ!L~HQ2y3fD)1deI(F4@nZcCimU6PCgY~FXc&edBitV@ZQu_5nFC`GBT@QeOgj2Hc?iCf!8;zw`)1OU88U^o><`)2Iq8BDHl+7Lo$sxYe<2pG-`FYw>&(&m_ z=#Z0jX-Bhzj%0sy4r!jPNGHFV18u%!_V>p#C#lTIud;{CW-mTslX>6@Ji{;3+?x^( zUN{Mdhht9uBntpbldTPwPu?QU=h9*Oril?!A&)W1u@?XEa)YJ8G~m}}#udM#E=(rzj0U9$ zy@RA&wlR`Sj`^v%?;@q3_-cC!QAEHqL&$8Prkx1MC^CUp>mU zobVmRomLlaZ3Ow&@S-2j;n*uwixiX zBy7A2K8}sNP!jHxxij$~+_`W2J3vV1Pk7iaRbFKX{k?iqk6pG|PxL? zM1R}9TUb9;M}cYgBHOxFO}a^CduGOW+V9jifLT0WxvM( z_6#X77kUfJySxJ}WqkG7M-CDykuSy=$nrzBB2em>(OFY*de(fdm3Ms-S&zS;8H;f3 zW~C>4#@llH!fU#vJCkyLF^Te%FNpV)6YI^_#E3cE+Ro|}y&h2KG|*@Gc`w*5KlfQi zZM?Rp!jBO@|F!;vjhE-cmL>VnZB>%1cvsKUpWTjpa-```;4}n)zvgtMcHyMQDYqa$ zn+JEqu7%8}?soY-FGy%GUgV`8^U0@7 zkojCSwYhywJ3GFHmJYyE9SK=DJ? zS!G$eGAT-0Wxf%T7=aBj7;6t`)W3ChP}4!V@E9y0c%N9Jg}>$e-*a;CB+9Y)d^&P( zwRUf#I>H&}EGU1pcR5JGiD-FfPFB&C0-Gd>ce_!hkGpREm6_Q;*8{$>kBgI{c$C|% z;CCw^Xl8=COIl@=gcd&`e5dudJGl>0244CObclnQm-{CmmRw9UR{E1b-Q|&A8P6hA zSlYFG_}lIcp>af?Q;796Z>ruk1b(9coNmN`VV>Cb6hzelqVFWqH`L(k(&WZtv4AuZ zfa+>6V^=JjV9S#^ZYX1xj6Yd31@YVrq}`r)r>*Rf5Hp!Rd1-bl|3L8-kFCS?# zF3C`X+W<6HHKbQc6u0CCysZwm_AXUe95;0?A2(75=DQLUQ_7U<4=?YzA99INQ&H)f zFofwFwl5j!%VIZ!hJNgCc)1-<)L(=$?kNUM)yiR$(wumewg%!gC{udt#jD3=x{oL> zKM(tGZKh;`InTnsd%q)Y87!bIVAC^*zpl;hSTCX1N?(yr?k<= zQyD=7i-l={Byskk#6x-VopKx_xhvR%OyyIz$`K=$SzBs83A9}t1K-5yxiy^22CQADIBVmzfhCD%rnxbDX ztWf4i68MpS3``+>&C~-lzvM%49aYP=cZ(`>OMI@VsP)>`UDa075)zJ9N(1o)u{3v5 zF$_f5rmA>$p66@<_AR6HtVzS_Q)KxCUh}8z6&W*=FK>(OU6ya<(f>V}R+O4SNss}) z`puQOPQHN3nI8=0vZr-h9EUNJ4crGvvB@W--}uvtGWIPnw?H)L(Tzwc)qph~(@rY) zJxhuI<{tD2hS|=Q5sX^=%Plk}0DaS7O*LyE&;K~$UnEJbD|}1q8;b;i)sMr2F+DN( zNrNSb>f|{eH~4D5YXSigFLI@#Jo$vwhbNJeLgae!`UW0;e2oc~gzvh8^g`Cv6{T4v z0reY+7diA!P3R~JB?9=U96{U)zlBGgXTF>E$)ke<74%wB z!o|2%&AhQ=ly?Y(POW35mvgfA72{hFn)8q{lY zC`>z_%X@kL-IXBpQ7w?Fs1-RpfTiD`%g2ZBmVS#B>O@U)`K4jy5b%r2FW2DZ7d}o9 zKr27e12MHf1Shp~fJv+j_6qp`wHC18cj8j>nrtU@{>u7gDz`WHmU_lvT#E+eHyw3^ zgqowBw}O7E3!QDjS`ldq1>nl7_z9-2I6=)i#|9#F7gb3fqwZ3>nb+R4H>&fwA6dVj z11T9C{5jVgc+GGo4vP34cYl1dSDr3s38G5f_fGoXR0jnXxUjQGwZt(*kmYGx{5V-- zK`fy=D32|U_gTuuPbg-{AjFJYuDkz9w<1_$^y!9L-#ZBvJim)^P1e`=`#_M^z-EZE zPtvKJ0M8p&)+fG$%LXAr?#ym2?%un{+~B#1`AFex^LBFk8XX5^>x{!=wVxMWM_BmJ z-3<#7_4@`&6JtO2r}Gjb4tVg|9tj}gJOG(xK2S)wA2sH2Irkp-=K{hnw~IxcZHXV2 zv`rvhSCG@(0sP;|R7!iy;6X0XXUFuRzT4m9ihdVMdNFdEBI` z6o@Y*@2u5^joQ*Q^1we;h7MMcgQ&||W+zfIfk|Nyr$zpnhAPx{uaXR31Jk^UKY(Ma}qi*oh?Oq zQne_8m~7vNv=yFme-3#B5WAhMDl(JB#_kgce&Ns`J82gY^P4kowZ+~>9y9s6NDgmD z-cP(Rc&ErXQb3PQ5OAn%Qxg+5{v;nzKVEC4qf!+LLUlyk=J;$%uvnBUCzBXu%Lc~h z<5IK6H$DQ*m!<6Q1U|5lPX58?={h5%dJ}3^=WZcmBlUY+UW2_-f90Cs_SDIj5_{k4 z{oBC}t{0*AAT!?GPbx60-}M50+`%>3C_~oeibejI{WUL5Rs(N!+t(2kzV9VetL9QE z-?-PWpZl6Dr7jy!xth!(u0&Oja9)0(sc!&zh3cd;NgkzW7F|aan-Z*l%sn4|15f8W zVgcs2;w~I~CYg}K>I}eS&0YX*Nzi&1l4iJ3hUB3y`AyjJH-Ws9 zlP78at@?Pppwf?>cp@c@HJ&+-mZMe7*-l49kVSr|$Lhx-N&oKIyE(~GLVHKoq0lQp z`4g1qkNQQ%CUYbG&v~QkMPoLmM*~_p@4HM9OOn$Va&Kyoe#VGTaYU8@j2u4|9y`H-K&ds6`Isu6*CHD8yKiE;l93?iOw$gQH6GELtpWoqZOvk4u|+iZ?F`Pq?DU{x^aLy=Ys6rNJ#=m} zs|Z~GI>1v#w7T1aOl<)1X*Tm;3*yPj(e9>pJIHaZL3vu^u=N3l@{3~<7Kblg4_;xh zjf2wF7-`)NrOZp1C_<%=UE$yANulpD57N8P30|OYBqqYu*I4wV?iS2$Z%A5HovhW{ zSJb&L_{yT)^00q?spBSdM+CM|Ekc2@4P!aO-B_Q1HJn%cj;~M08cArem7P6k)$1sr zH3UEit#rDEp8(a8oqxmj1gi}%W>Eh0^dE+5z{efcf$>=Lh-#?m#wZ3HCQ;XKp(WW7 zyR^rkPoBKZNB$4DNFVi3P?rHfw5`Medg>`yTfg$f|Hi@my97cKx7ipFOLME<=R=^= zBtxF21Pt4|93*4B)^_*l)@Z%}M7R_65NwQiB@=vpFkyWBe$%vc9mBLdV}>H)7fS(+mB6$0z-DzH;5?JS zV6F@c-jn|%S{Lizz|gm&^6s?W(|HaR95TMv(qVT@`Kuh{JwW;*6GX;=I0k64&2I1X zM`2w$+(O`Kh3Y}AB|7~%%%2ILsm7VL*|@$LPZk7% zp>D2h^2Kk_5S0V~%p}0WYHfY&0qzdqPgMXAg*T2jhKG z&Cmdoe>e3Py3?;L;Kc&A(~vP?`b7HJ8otoe54je|toh(QPoPJY`z;^jr`*_+<~qvy zgon>2XlpisjA%S6cngi^n)VEy3m&1%I^{tV;S9jb3?gq~0D@eJU52s>>QqoRz>?_U zQEc(01W@w@fQ!UG15)~$IQR+-?E-L5F%W9#q;bIi+{KkEk~FpqreNMt7tQJda{db_ z@c&08L-z0Vd?X%I?9hvs^!j&Jsq?Kha!#6lLhfN zQ6gcCi+pUu&Irn_UVRvfFR;ZE(3$3T1bl3X?0^q&ClXFxqKrQQjx8cI9)6r>eowFL z*M7@}E3|{F@x|UsVspF@>3yl5$XsQvS%qbTY|{8Gm%gls4Jk8I7zJllVdC$1;+0&y zFOAtZursEWNKsF@o@B9i3#{oSg^8C0t9tnNd zxSpr(-bW2qa(A1j(G_v`3FfIBO8Hl!@Wr86hT-SnpLo^H_RC?ksUHcNU%n1?k_6@n zZT+Dgh_+`Sz7EYdx5+PEhtS{>tBW!1i-(Hme^EaV4-X3uFphg7b@vn$U!|>i%4sR+ z=57QJWwU{Pz`dq=xM#5r7t1bA7WTCfEHF%l--<;(a`Y=%gXFbviaIz2Do^_^L=J%! zp@&%`$FAt&^F3qDEeoAFp2>G~TR(S=U1j_g8nXKA&WWJ`lBc5l4a#%z<*0YEEMcos zAN&19J>E8vL9wZ?fAg)#Ywx;=UD_^P`HSNX<~bS*lcxjz#K1ql#O$F}CZ8}1yJKHbP?fgE? zA3DR(!K>F(d=m2aI$pbqyTa_B`Nh3x;{5U1fr7hj#ps9+Qpz=%^*Rgu!>`CHpSY@y znti@m_Yw9(iR4l<=W83u_RMk7pT*k?=C2QDYBPx;inp~-{UmY)I((KzeBWz_$!75! zJ*I|gS|WO8nM0B_F)WvZZgL@@&_YA)h~!OnO8`EX;O@kXQ_k%r6EHEn-_LcwoRxjH z(}f5iu)5oJoWgh!NgbfKE{sTIo?jJy#A5fSWB9M>vLXv~??oqi)gJe2x`h<#=-yNC zmN)NBlF|OuN;%bgAPG;yWkKBP7EQMo*naFvB15)+(iI|-ETCrPH#U6Y#g}Jy`Dlr` zl^Pu!HG2-ULyoOyP0!nd0{TlA|GWhaZ>E1elb7&=%j>!Dv(_)Q{jT4Xm;c7z9hbRf zb>nW3?%`xPy+qDR0nkQldXr6wRzy;j=XAc4ig)Z`6&8Om#3Je)yI0=(m6xlo_J9n# zbrFKA0912RKr641tQa!|Mfk(V&z@J1r%jLZiq`#Q&0glOAv9kifhb-Fm4?0f+Vq)V z#AH#%(12;B{*Kk=`){pN89i@JQ3TL&pUbCa@jXszv*5cpuT~au8E4p^pYR# zSHz6>Nh<;cL;uCpdzrddhD;V4-w_dZ{yeaot@4#0<`JCD&CShLzmS!C0kZNeAdt@N zziMun&t;%VnSs2FExo}gMZw4E$Msv9#bj5%!y^r`eP=NkbeQZ-=2C~|CzQ-}z8L=x z(ED4TT_@hY)eucV#F)|h+WB=xkGK0Nc>bV=zJ~}3o}-&^hh@04rYEZEv-vP`%Hi=) z`NYc!#$O(Mby`vu?tGI54l!$sWKNntdqJh{<8MLli7S15g6;-5$n$hvAxc<@) z9ozlUjrLGJ8m{LCmd_7gZ{|O)1H88Gj1TPjd~jluy|YgAjH~MWX#KNJ#b8`QttIAD zjTv|fk9HhtK-=~YOt29Wc`6;{`fkB2ivSu|{L}$!wpe*ep`G)P!&$$};QjGU2^k`2 zGtHPTm6^#9CFNykU;$5z5f|1pYg;1qhS5RaIiB{}JU714$Qozx$#a*OJEAR(%O^2L z8iE=UnUhJrbwsenPfjo{L=pZUrSdW&1Txg->B9Y+Y}vpwJ1}J+Sj0+mZE5>61y_0q=|~L z)mqvSt))UJp}tNOu|(ApyG#{BYO5uPii(IzQHiCoe(&`A-anu7oV%U7oO{oEe-BFC z4%{W8Wy^}Cg?@@n+~qoOS_epT2loq>n|zNBcy#1Y3}=(#mdTB_OVWw_(|DpKy(**2 z=g`%hMA2O{wAQRGrU}qWNRgsOlN}%_T(+!8S|~-ASEF#WH?clUk2%W0gL+nQdE2mVYmlUPYq&-x4J8v!*{LeFlLF`#&72{8JvR| zmS}%nT-N1+m83o37_d@0)J2ntXb$GkipDHLy*ZwpiTR^Ew#S9pB8fhHy;~ zEAE1Q1R3#6`$uQ@PG1ei<+?O?2aH?q$oBifCI@H+e{&4+AOWHL_u)K4&4?8tgC7Y) z?rkwyPn}pO)f+V8&JVcofnna}CNAHH9>}w}-5@Y%m2xX#V zr0@$JuYd0O-*OY5!oJ4Vy|LHEu|fnr3#NKDJp5&cv4V)WJWjL>qx+lu>dyIc|0st~ z$jqp7dF)IhVn~)OW!-xZx}jIdxJ_M;1IpCvqRqi{3jEoo_2ovB8N@p>!)Dfy=e@JL zG*u}&im>c{)Zi$bvb4Lq>;B41Y=HROHFK!x0teggwWoBO8@G3$bZOPpwcb97!ZOOJ z4XZY(J&@^Mf>DFqqoC=L6(+UYdUnb>$RR}H+BccOIu7rwY=jcXkvwiIk|IK!jHWq~ zTQi-~-{rZjxVgv1hu^!EdUtF{#v!NszAZCKawG1RJ={Og#KXOpH1k6sbq^sY#VA_Z z*R7k~jBoX!Psy{NFxi=@|8kCOM^IytdlvC-UIGA&)%KFK%3r-Ajm4kxE-s5usQRu_ zS+Sm$frDs@3ie}_tNZEFDt`}?c;n3cESv~&CXbaroWJ9j<;3K`2G6GN=iwRbyk`5r zMI*So5MW?6yAQPQ%6_ZF2{=Gj)QGOUz{ zoU-HOkO(e3WZkWIp2**oqBgd(yT-2jqAq+> z>hf)SeCMKf$fgvaigxlv>EVfsA;&iJTwJf}tz4U{vrdHgg-CCmGa6gIu$%d`U@@}H zG~Cin5gr;%l&CPqetWZWB1(`*`u^)(SyD;_Zw!%B<$(DYF>{U{g&@AL)zAwXnir%CXid|?HVJme23~E6a4P*){gSh zCG)|F9{_FF1-qbEkokxETO1P3al~^y0k+B?|8)aQLn`D0or&VU7FkHgS?o0m?7{ri zk^`nH($f533CplN*ryC`pbu6V(00O_*LM*$&d<|MZK4wr4@o%Dk#e;Xx8XDvE_`8s z#su1){X2MP^G_E;MC8OV`rcSc=tAV`Uw5EX`K)kSUyLN;!Eqo!jrfPFEO2@R^=Q6- z>_X^^qg@)0YeY|Ih_g7%$WG=&KwAwvep^SQrq#=#$;|2(Xu1QR{83(gjM5>=mx4df zJDyaRliZQ%ES4S|<`7h&Z))A>bZq-Kg>##kzvS1T29#y$%*ymhj0aFDDI<98r?CH- z!TELm{^`+WdF&X&uFaZ%fbgO0k|NbBBWdp0z^g@)K<}aO;QQhax9Xz{o5=dhjDo6@ zfM4}^vZYu+OCHH+zn8oWf6jxPZQ<5Sdd9hIsA^}uY$<3 zt27?3Vx|uQ^g8nIxqf9q?$H-2A{_&!bwa8?nx+U)e}Ozmbr8;i7fcb`F1imL3M!u@ z7WZ{8yIuvfATwhq7o;V9Npf9!%Otc1)>cs!lw}C_uQq@v zSN0G*|01%imHV%k*V-`0T7AK2+5s1neu7JBh(P+0h{(rtZ(y2hZUdVA$iYPj7+fim zC^JNQa%au}fi{(m3m(t|>;-R@^snkOW#ap+98h}R@A;DiF|q&&TKG&cZhvtp(yo#5 z#V{iG1rv<!KvAtFe&&Ba}~!le+=(yafWwm|KNY6 z$~i%eom1{Bs_w{LGguJ*KXr_bu~*VL5p6QNq@q2Fu5>*`gP`=?6I*>9}`joo9lRKLmqhj zZh1X~1HbMC;!bd{x_~cL;Or{?$VFqVazllLiS-7fp4er%G84SFa)l|N1P7x}~K10g7 zei3B%HPpG=uh1)%rrNby8ZOl~S7q-?S|#Vw@o^=~k`qJapTndL3H6Cx&O|k)R)478 zhgL1ZuQ}rm^tP}GmO7mj329i>nW=!Nzc>c?s2Yft_1~I}>Qf@l=dZU6Y{#yC$cAes z-r-rWE!HIs%tZsvVwqPPbuCUsr4nD`zdD@9?$6Z_M5jK=fLk2~l97Ul zmf=h*lVapVj5jNn-GbEP$YoK2V{apV+`7{7eg+?)Sl z7*tK>Ib34D)wXt??!1@3b-wu;$Fuiy1RKGC#g0|#PEHy&JaJk;xxhHFL9Gtp5Zj!< zO|1QZwx5iT()2H1TAD2!oer@+-3l5H2Dk33ES9d_J3TloZ1nkl#wbj=pbDaG>MT<- z`~HP4&pW8#k+riN&U<1A?n#rZN-sBX%MiVmu=AG;6i6EUUVnn^{~47HJX~0qX4mt+ zd;*)|dxwlKDsHLNJM{&le(A|BlfNQ9O<}+B0Zmu=-V>Vp|NOfYdP_pVbH^Q>eUW*4#ndY%>vq2KU+x9 z5omrB3?{b-n#F%kd@=5BjOLLPOkBzlbW#<=vPD+8Z!TUjNR2|+HS_YajUcbC8vl4x zlT@V#_$6xo{M0B!MAXFPX2IH)3sai#w6v_q|G-~=z30L2`2KEYPfu3w zdErTE*ZNDX0kJt2=*ar!N{S+S!Jy4Cs7- z#x_Bb8JwEC80xq9zV)Ueq+o$3e%xv_>mzWvE{ji*42L3Iu6F{@4b4oys zbm~grie`c9tP+N#TA(4(5-or8O}?PF-IBkGsp6B2&eL?2=ze1(#a5X{QQEr9Q5Iu^ zyKoe!+pMm0PrPq`H$Rd-v>tI}r90yh)e*OrdX*vs=vXz|?B~h+Jq?wPM7>T;$tOXE_E4*x>y;oqY;rcoBtGSesJDY2p}zNY72c< zW_(OQRXo?#TqX2X1lU_Uoe^B}4t@j}Yh}M4Ur}u#{5z)jWz=?|(>}02{`AAspOn-{ z%Y(}<3ILb% z(S)!DGksd`fx_yXuyBz}R)GE#0#jBllnxAMH|wrhpINxZBOh0!CLD9cZtg$Y?w)&jt00s8vMawVUMg{j>4I%Zlo?EZiN&vi|&Rt*-b zrfDUOKJ)jyS8JTZNJx zr+Qua Date: Wed, 28 Apr 2021 09:42:09 -0700 Subject: [PATCH 04/10] #168 fixup verify --- docs/devops-guidelines/Verify.md | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/docs/devops-guidelines/Verify.md b/docs/devops-guidelines/Verify.md index 3d2af0ce..cbca00de 100644 --- a/docs/devops-guidelines/Verify.md +++ b/docs/devops-guidelines/Verify.md @@ -25,9 +25,6 @@ Of the techniques mentioned, the most powerful is automated unit testing. If app # Automated Unit Testing - - - **Capabilities Inventory** |Capability|Ideal State|Tools In Inventory| @@ -40,12 +37,6 @@ Of the techniques mentioned, the most powerful is automated unit testing. If app |Performance Testing|Performance testing is part of the deployment pipeline. All applications are held to documented performance standards.|LoadRunner| |Security Analysis|Code is automatically scanned to protect against malicious components, detect plaintext credentials, validating appropriate IAM, and monitoring for behavioral anomalies.|| -**Code Review** - -- Code reviews will be required for all new code. Code reviews will be completed by the Development Lead or the Project Architect. Code reviews will occur before a merge to the main branch. - -- Code reviews will follow the [Phillips 66 Code Review Guidelines](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Code%20Review%20Guidelines.docx?d=w244551758e6b4ad7865d9374c29b8126&csf=1&e=e5viRP) and will focus on adherence to coding standards, architectural alignment and security guidelines. - **Infrastructure Review** - Infrastructure will be reviewed using the code review process as all infrastructure will be created via code. @@ -62,29 +53,18 @@ Of the techniques mentioned, the most powerful is automated unit testing. If app - Quality metrics will be used to ensure the project is meeting the non-functional quality and security requirements. -**Unit and Regression Testing** - -- [See Testing Strategy - Unit and Regression Testing](https://p66-default.visualstudio.com/Digital%20Customer%20Experience/_wiki/wikis/DigitalCustomerExperience.wiki?pagePath=%2FProject%20Artifacts%2FTesting%20Strategy%2FUnit%20and%20Regression%20Testing&pageId=159&wikiVersion=GBwikiMaster) - -- Unit testing will follow the [Phillips 66 Unit Testing Guidelines]( -https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Phillips%2066%20Automated%20Unit%20Testing%20Guidelines.docx?d=w0b8bf2bafdf942f99230863565fe36da&csf=1&e=DbEaeD) - **Performance Testing** - -- [See Testing Strategy - Performance Testing](https://p66-default.visualstudio.com/Digital%20Customer%20Experience/_wiki/wikis/DigitalCustomerExperience.wiki?pagePath=%2FProject%20Artifacts%2FTesting%20Strategy%2FPerformance%20Testing&pageId=196&wikiVersion=GBwikiMaster) + **Security Analysis (Static)** -- Security Analysis (Static) will be part of the build pipeline. SonarQube is expected to be leveraged for this task. Scans will focus on the OWASP Top 10 and the SANS Top 25. - -- [Phillips 66 Secure Coding Standards](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Secure%20Coding%20Standards.docx?d=wabf79e56d74a491ca17191baefff8f87&csf=1&e=PqdjLl) +- Include Static Security Analysis (Static) as part of an automated Continuous Integration build pipeline. Code analysis capabilities are built in to GitHub, and, several good external tools exist including SonarQube which will report on vulnerabilities and fail builds if scans do not complete. +- Scans should focus on the OWASP Top 10 and the SANS Top 25. + **Security Analysis (Dynamic)** -- Security Analysis (Dynamic) will be executed outside the build pipeline. Phillips 66 performs dynamic scanning using a variety of tools on a periodic basis and once for new projects the first time they are deployed. In addition, we perform periodic penetration and security testing. - -- This will be handled outside of the DCX team. The DCX team will be responsible for remediation of any issues found. - -- [Phillips 66 Secure Coding Standards](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/10.%20Development%20Standards/Secure%20Coding%20Standards.docx?d=wabf79e56d74a491ca17191baefff8f87&csf=1&e=PqdjLl) +- Security Analysis (Dynamic) should be executed as part of a Continuous Deployment pipeline. + From 8c6a6a0be762ba047c9a9f7befeaae5a371fddcf Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 Apr 2021 09:49:28 -0700 Subject: [PATCH 05/10] #168 fixup defect tracking --- .../Automated-UI-Testing-%2D-Worksoft.md | 28 ------------------- .../Verify/Defect-Tracking.md | 13 ++++----- 2 files changed, 5 insertions(+), 36 deletions(-) delete mode 100644 docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md diff --git a/docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md b/docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md deleted file mode 100644 index 485a0952..00000000 --- a/docs/devops-guidelines/Verify/Automated-UI-Testing-%2D-Worksoft.md +++ /dev/null @@ -1,28 +0,0 @@ - -**Worksoft / DevOps Integration** - -[Integrating Worksoft Certify with TFS-ADO](https://phillips66.sharepoint.com/:w:/r/sites/IT_AE66PMO/Digital%20Capability/_layouts/15/Doc.aspx?sourcedoc=%7B6BC6D1B7-B78A-4BE2-A37F-B41797BAB3A3%7D&file=Integrating%20Certify%20with%20DevOps%20tools%20via%20EMS%2010%20API.docx&action=default&mobileredirect=true) - -[Microsoft ADO-VSTS-TFS - Worksoft Intergration](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Microsoft%20ADO-VSTS-TFS%20-%20Worksoft%20Integration.pptx?d=w8ef01479ffff497d854290e8b897e05d&csf=1&e=bsXfsB) - -[RunEMOTC-ps1](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20integration%20to%20ADO/RunEMOTC-ps1.txt?csf=1&e=vXuVz0) - -[Tech Note--Integrating Worksoft Certify with TFS-ADO](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20integration%20to%20ADO/Tech%20Note--Integrating%20Worksoft%20Certify%20with%20TFS-ADO.pdf?csf=1&e=DgeoKr) - -**WorkSoft** - - -[Certify Basics v10.0.2](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/CertifyBasics_v10.0.2.pdf?csf=1&e=3kpoy6) - -[Capture 2.0](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/Capture2.0_v1.0.pdf?csf=1&e=1w0wsF) - -[Certify HTML v10.0.2](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/CertifyHTML_v10.0.2.pdf?csf=1&e=rjnGyO) - -[Certify - Best Practices Naming Conventions](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Best%20Practices/00.10%20Certify%20Best%20Practices%20Naming%20Conventions%20v02272017.pdf?csf=1&e=dI35yx) - - - -[Certify Resources](https://phillips66.sharepoint.com/sites/IT_AE66PMO/Digital%20Capability/Shared%20Documents/2.2%20-%20IN%20-%20Business%20Improvement/WS%20-%20DCX/Working%20Documents/14.%20Testing/Worksoft/Worksoft%20Training/CertifyResources.pdf?csf=1&e=69MPSE) - - - diff --git a/docs/devops-guidelines/Verify/Defect-Tracking.md b/docs/devops-guidelines/Verify/Defect-Tracking.md index 23624bd1..6df026c8 100644 --- a/docs/devops-guidelines/Verify/Defect-Tracking.md +++ b/docs/devops-guidelines/Verify/Defect-Tracking.md @@ -1,12 +1,9 @@ -**Defect Tracking** +**Defect Tracking and Resolution** -Defect will be tracked in Azure DevOps and linked to associated story. +Defect should be tracked in the same way as User Stories. If appropriate, link the original user story to the defect. -Defects generated from automated testing tool/platform will be manually ported over to ADO by the DCX QA Lead one reviewed with DCX Leads and Product Owner. +Defects generated from automated testing tool/platform, when validated, should be recorded the same as any ohter defect. -Defects found during manual testing will be added directly in ADO and linked to the user story being tested. +Defects are reviewed and planned with other user stories on the backlog . -Defect Prioritization & Assignment: - -- Defect will be reviewed daily with DCX Product Owner, Business Analyst, Scrum Master, Development Leads and Architect to determine severity, prioritize and assign to appropriate resource. -- Defect may be assigned for resolution in existing sprint or future sprint. +If a defect is high priority, process shoudl be followed but it may be expedited: Add the defect to the backlog, create a branch for the defect, write unit tests for the defect, fix the code, push the branch, create PR, when approved. Existing CI/CD pipelines should then deploy the fix to production. From 43c8cdfe5c30b95ac362cc9ecfbe807b1a96b55d Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 Apr 2021 09:52:22 -0700 Subject: [PATCH 06/10] #168 fixup unit and regression testing --- .../Verify/Unit-and-Regression-Testing.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md b/docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md index 720cb46e..95cbcaac 100644 --- a/docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md +++ b/docs/devops-guidelines/Verify/Unit-and-Regression-Testing.md @@ -8,10 +8,8 @@ Unit tests are executed as part of the build process. Failing unit tests are req Regression tests are composed of the entire suite of unit tests + additional higher-level tests as needed. Regression tests are automatically verified as part of the build process prior to release. -The overall testing strategy will rely heavily on unit testing but will be augmented by automated UI testing and some manual testing where required. Automated UI testing will be run through WorkSoft. +A good overall testing strategy should rely heavily on unit testing but may be augmented by automated UI testing and manual testing where required. -DCX will leverage the Ring deployment strategy -- Ring 1 is the primary development ring. It will be utilized by developers for development and developer testing. -- Ring 2 is the integration testing ring. It will be leveraged by developers and testing personnel to verify the code builds and deploys correctly, that all automated unit and regression tests pass and that the system integrates with Phillips 66 test enterprise resources, e.g., SAP test environments or OSS test database. All deployments to Ring 2 must be approved by the DCX Architect and the DCX QA Lead. + + -See [DevOps Strategy/Environments](https://p66-default.visualstudio.com/Digital%20Customer%20Experience/_wiki/wikis/DigitalCustomerExperience.wiki?pagePath=%2FProject%20Artifacts%2FDevOps%20Strategy%2FEnvironments&pageId=46&wikiVersion=GBwikiMaster) for more details on Rings. From 18dbc1efcb0306919eab7d3d34c196071462a641 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 28 Apr 2021 09:53:07 -0700 Subject: [PATCH 07/10] #168 fixup toc --- docs/devops-guidelines/Verify/.order | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/devops-guidelines/Verify/.order b/docs/devops-guidelines/Verify/.order index 78f6e77b..8c8c3c3a 100644 --- a/docs/devops-guidelines/Verify/.order +++ b/docs/devops-guidelines/Verify/.order @@ -1,7 +1,6 @@ Azure-DevOps-Testing Azure-Pipelines-and-Testing Unit-and-Regression-Testing -Automated-UI-Testing-%2D-Worksoft UAT-Testing Defect-Tracking Performance-Testing From 2e966a2c66ff2991a130085fb52892aac317814d Mon Sep 17 00:00:00 2001 From: Kelly Adams Date: Thu, 29 Apr 2021 13:10:18 -0700 Subject: [PATCH 08/10] Update docs/devops-guidelines/DevOps-Guidelines.md Co-authored-by: twofingerrightclick --- docs/devops-guidelines/DevOps-Guidelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/devops-guidelines/DevOps-Guidelines.md b/docs/devops-guidelines/DevOps-Guidelines.md index 8028ecf0..c0aa119e 100644 --- a/docs/devops-guidelines/DevOps-Guidelines.md +++ b/docs/devops-guidelines/DevOps-Guidelines.md @@ -1,6 +1,6 @@ # DevOps Approach -"DevOps is cultural fusion of People, Process, and Technology to accelerate deliery of Business Value" +"DevOps is cultural fusion of People, Process, and Technology to accelerate delivery of Business Value" ![DevOps Continous Improvement](.images/DevOps.png) From b407fb6a2240b203406217c3fa058bcc63e7d16e Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 29 Apr 2021 14:22:35 -0700 Subject: [PATCH 09/10] initial deployment --- docs/devops-guidelines/Deploy.md | 35 +++++++++++--------------------- docs/devops-guidelines/Plan.md | 6 ++---- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/docs/devops-guidelines/Deploy.md b/docs/devops-guidelines/Deploy.md index 21c94f52..6a0930b7 100644 --- a/docs/devops-guidelines/Deploy.md +++ b/docs/devops-guidelines/Deploy.md @@ -2,34 +2,23 @@ Project code and artifacts are built locally using tools dictated by the software architecture of a project. -Regardless of architecture, projects should automated builds to support *Continuous Integration* or *CI*, and, automated deployment to staged environments called [Rings](point to Rings defintion) +Regardless of architecture, projects should automated builds to support *Continuous Integration* or *CI*, and, automated deployment to staged environments # Continuous Integration +Build the solution on every commit. Build should inluding executing and passing all unit tests as well as security code scans. # Continous Deployment +When software is succesfully built, it should be deployed immediately. It is most common to deploy in stages so that deploymnets can be verified and tested. -# Ring Deployment +|Stage | Description | +|-------|----------| +|Dev |Deploy to dev on every successful build of the system. Run integration tests.| +|Test |Proceeds whenever Dev passes all tests. Additional integration tests are performed. In some cases, manual tests or automated UI tests are executed, or, 3rd party test systems are included in integration tests| +|Pre production|As close to production as reasonable. May have a copy of production data to test migrations on and/or run additional production tests| +|Production|final production environment or environments | -*** insert favorite Ring picture here *** +## Ring Deployment Model -## Ring 1, Development -Development testing, verifying services, proof of concepts and development spikes -Complete access to the enviroment -Restricted access to P66 systems +Often, deployment to Production isn't deployment to a single instance of a system. when multiple systems exist, supporting multiple regions around the world for example, a ringed deployment should be used. This allows for controlled rollouts and limits the impact of deployment issues only discovered as -## Ring 2, Integration Test -Continues integration -Deployed to automatically after successful builds -Includes automated integration tests - -## Ring 3, Verify -Deployed to on succesful builds in Ring 1 - -## Ring 4, Stage -Similar/same as Production -May include a copy of Production data -Used when manual verification by Stakeholders or Customers is required - -## Ring 5, Launch -Production environment -Requires an approved ServiceNow CR prior to deployment +Supports rolling and red/green deployments. \ No newline at end of file diff --git a/docs/devops-guidelines/Plan.md b/docs/devops-guidelines/Plan.md index eaf03573..7e08e084 100644 --- a/docs/devops-guidelines/Plan.md +++ b/docs/devops-guidelines/Plan.md @@ -4,11 +4,9 @@ Value to be delivered by the project should be managed on a backlog -Project code shoudl be connected to work: Product Backlog Items/User Stories and Bugs/Defects. +Project code should be connected to work: Product Backlog Items/User Stories/Issues and Bugs/Defects. -This enables Azure DevOps to automatically generate release notes and audit reports providing traceability from inception through delivery. - -See [P66 Agile Initiative]() for additional information. +This enables Azure DevOps/GitHub to automatically generate release and audit reports of work delivered by a deployment. ## Work Management Tooling From 2a6c017bf3bad520c3b9c252096d35a4444c9258 Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 29 Apr 2021 14:46:34 -0700 Subject: [PATCH 10/10] fix up MuleSoft --- docs/devops-guidelines/Create.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/devops-guidelines/Create.md b/docs/devops-guidelines/Create.md index 207b60ae..c3a50e51 100644 --- a/docs/devops-guidelines/Create.md +++ b/docs/devops-guidelines/Create.md @@ -43,7 +43,7 @@ Implementation is where the rubber meets the road. The plans are laid. The use Implementation will follow the SCRUM methodology and utilize Test Driven Development (TDD). All features will be logged as user stories with acceptance criteria before they are worked. -All development is expected to be performed using Visual Studio Code, Mulesoft Anypoint Studio and Eclipse. +All development is expected to be performed using the appropriate development environmetn such as Visual Studio, Visual Studio Code, Eclipse, ... ## Source Management Git repos in Azure DevOps are preferred.