<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Welcome to QMS-ELSP | ELSP QMS Software</title><link>/</link><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><description>Welcome to QMS-ELSP</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Tue, 24 Oct 2023 00:00:00 +0000</lastBuildDate><image><url>/media/logo.svg</url><title>Welcome to QMS-ELSP</title><link>/</link></image><item><title>Protection of Development Environment</title><link>/docs/guides/cyber-security/protection-of-development-environment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/cyber-security/protection-of-development-environment/</guid><description>&lt;h2 id="purpose">Purpose&lt;/h2>
&lt;p>To protect the product during development, implementation, testing and release as per ABB Cyber Security Standards and IEC62443.&lt;/p>
&lt;h2 id="abb-cyber-security-requirements-this-guide-coveres">ABB Cyber Security requirements this guide coveres:&lt;/h2>
&lt;p>&lt;strong>ISA/IEC 62443-4-1 SM-7: Development Environment Security&lt;/strong>
A process that includes procedural and technical controls shall be employed for protecting the product during development, production and delivery. This includes protecting the product or product update (patch) during design, implementation, testing and release.&lt;/p>
&lt;p>&lt;strong>ABB-SDLC-12 IT Infrastructure Security in software development&lt;/strong>
All the Information Technology (IT) infrastructure, including but not limited to servers, virtual machines, working stations, cloud resources, regardless of who owns and maintains it, used for developing, building and deploying ABB software products shall be compliant with applicable ABB Information Security policies and standards.&lt;/p>
&lt;h2 id="best-practices">Best practices&lt;/h2>
&lt;ol>
&lt;li>Use preferred ABB tools such as Azure DevOps, MS Teams, Windchill, Planisware etc. and apply least privileges when giving access to project members.&lt;/li>
&lt;li>Create inventory of all IT assets (
&lt;a href="https://abb.sharepoint.com/:x:/r/teams/ELSPcybersecurity/Shared%20Documents/Cyber%20Security%20Guidelines/Released%20Guidelines/Development%20Environment%20Security/3HKR000006%20IT%20Asset%20Inventory%20Template%20-%20Rev%2001.xlsx?d=w0c32c3b9db604dcaafe216cb336d07dd&amp;amp;csf=1&amp;amp;web=1&amp;amp;e=Te0tsI" target="_blank"
rel="noopener noreferrer" >template link&lt;/a>) including all it assets used during the development e.g., workstations, laptops, cloud or local virtual machines, cloud subscriptions, docker containers, etc.&lt;/li>
&lt;li>Apply ABB Information Security Policies and Standards for protection of all IT assets&lt;/li>
&lt;li>Protect private keys and certificates from disclosure and
unauthorized use&lt;/li>
&lt;li>Use digital code signing for secure SW delivery to Factory, Supplier and Customers.&lt;/li>
&lt;/ol>
&lt;h2 id="example-evidence-for-compliance-with-isaiec-62443-4-1-and-abb-sdlc">Example evidence for compliance with ISA/IEC 62443-4-1 and ABB SDLC&lt;/h2>
&lt;p>Development organizations can use this guidance as template to create project specific evidence&lt;/p>
&lt;h3 id="usage-of-tools">Usage of tools&lt;/h3>
&lt;p>Azure DevOps is used for planning, building, testing &amp;amp; deploying software. The cyber security of Azure DevOps is mainly managed by
Microsoft and SOC report is
&lt;a href="https://servicetrust.microsoft.com/viewpage/SOC" target="_blank"
rel="noopener noreferrer" >Azure DevOps SOC Bridge letter (October 2024 – March 2025)&lt;/a>&lt;/p>
&lt;ul>
&lt;li>ABB DevOps administrators follow these Microsoft policies for managing access:
&lt;ul>
&lt;li>
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/organizations/security/data-protection?view=azure-devops" target="_blank"
rel="noopener noreferrer" >Azure DevOps Data Protection Policy&lt;/a>.&lt;/li>
&lt;li>
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/organizations/security/permissions?view=azure-devops&amp;amp;tabs=preview-page" target="_blank"
rel="noopener noreferrer" >Security groups, service accounts, and permissions reference&lt;/a> for DevOps.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Internal project documents such as product architecture/design, user manual, test plan etc. are stored in MS Teams with restricted access to project members.&lt;/li>
&lt;li>Windchill is being used for Engineering Changes of products in production&lt;/li>
&lt;/ul>
&lt;h3 id="usage-of-policies">Usage of policies&lt;/h3>
&lt;ul>
&lt;li>
&lt;a href="https://abb.sharepoint.com/:b:/r/teams/ELSPcybersecurity/Shared%20Documents/Security%20Assessment/Digital%20Platforms%20%26%20Capabilities%20AU/Digital%20AU%20IEC%2062443-4-1%20ML3%20Certification/ABB%20Code%20Signing/ABB%20CodeSigning%20for%20End%20User%20Processes.pdf?csf=1&amp;amp;web=1&amp;amp;e=nE1jwD" target="_blank"
rel="noopener noreferrer" >ABB Code Signing process&lt;/a> is applied to protect private keys and certificates disclosure or unauthorized use&lt;/li>
&lt;li>Physical Security protection of IT assets are applied following ABB Policy:
&lt;a href="https://abb.sharepoint.com/:b:/r/teams/ELSPcybersecurity/Shared%20Documents/Security%20Assessment/Digital%20Platforms%20%26%20Capabilities%20AU/Digital%20AU%20IEC%2062443-4-1%20ML3%20Certification/Development%20environment%20security/Group_IS_9AAD129750_Physical%20Security%20for%20IT%20Assets%20Policy.pdf?csf=1&amp;amp;web=1&amp;amp;e=6MoNYF" target="_blank"
rel="noopener noreferrer" >Link&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://abb.sharepoint.com/:f:/r/teams/Cobottest/Shared%20Documents/All%20ELSP%20Global%20Procedures/MP029%20-%20GPLM%20Engineering%20Change%20Process%20Guideline/Guideline?csf=1&amp;amp;web=1&amp;amp;e=HOznUM" target="_blank"
rel="noopener noreferrer" >MP 029&lt;/a> Engineering Change Notice (ECN) Process is followed to shared artifacts with ABB Factory/Suppliers.&lt;/li>
&lt;li>Virtual machines are protected following
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9AAD141899&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >Guideline for Using Virtual Machines on EndUser Devices&lt;/a>&lt;/li>
&lt;li>OPTIONAL: Any location specific policy. For example, Bergamo office have Operative Procedure PO 185/BG for managing the access of external personnel to the ABB premises.&lt;/li>
&lt;/ul>
&lt;h3 id="minimum-needed-by-development-teams">Minimum needed by development teams&lt;/h3>
&lt;ol>
&lt;li>Inventory of IT assets but not limited to servers, virtual machines, working stations, cloud resources, regardless of who owns and maintains. Inventory Template:
&lt;a href="https://abb.sharepoint.com/:x:/r/teams/ELSPcybersecurity/Shared%20Documents/Cyber%20Security%20Guidelines/Released%20Guidelines/Development%20Environment%20Security/3HKR000006%20IT%20Asset%20Inventory%20Template%20-%20Rev%2001.xlsx?d=w0c32c3b9db604dcaafe216cb336d07dd&amp;amp;csf=1&amp;amp;web=1&amp;amp;e=Te0tsI" target="_blank"
rel="noopener noreferrer" >Link&lt;/a>&lt;/li>
&lt;li>Documented list of Configuration Management tools utilized by the development project (MS Teams, Azure DevOps, SharePoint, Planisware, Windchill etc.)&lt;/li>
&lt;/ol>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://go.insideplus.abb.com/corporate-functions/research-and-development/cyber-security/standards/security-development-life-cycle-standard" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Security Development Life Cycle (SDLC) Standard&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Scope</title><link>/docs/mp028/scope/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/scope/</guid><description>&lt;p>ELSP R&amp;amp;D Software QMS applies to all Agile Units of Smart Power Division. The QMS covers the product life cycles for development and maintenance of any software-based product offering in Smart Power Division. Software-based products includes embedded devices, software applications, mobile applications, web applications and cloud solutions.&lt;/p>
&lt;h2 id="process-tailoring">Process Tailoring&lt;/h2>
&lt;h4 id="why-do-process-tailoring">Why do Process Tailoring?&lt;/h4>
&lt;ul>
&lt;li>Since different Agile Units require a different way of working e.g., coding guidelines and test frameworks.&lt;/li>
&lt;/ul>
&lt;h4 id="what-is-in-scope-for-process-tailoring">What is in Scope for Process Tailoring&lt;/h4>
&lt;ul>
&lt;li>Policies and high-level processes are generally mandatory and not in scope (some processes can include variants, e.g., safety or not).&lt;/li>
&lt;li>Guidelines and tools can be either mandatory or optional with various alternatives. The non-mandatory part is the main part of what is tailorable.&lt;/li>
&lt;li>Tailoring often involves defining/adjusting activities, artifacts, and roles on a low level. Tailoring of tools can include tool selection or adjusting templates in an existing tool.&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process-tailoring.svg" alt="process-tailoring" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="roles-involved-in-process-tailoring">Roles involved in Process Tailoring&lt;/h4>
&lt;ul>
&lt;li>The tailoring will be initiated by experts in the Agile Units.&lt;/li>
&lt;li>The Process Owner (PRO) shall be involved at least as a reviewer.&lt;/li>
&lt;li>For Agile Unit tailoring the Agile Unit Leaders approves. This can also be delegated to relevant Chapter Leader.&lt;/li>
&lt;/ul>
&lt;h4 id="where-to-document-the-process-tailoring">Where to document the Process Tailoring&lt;/h4>
&lt;ul>
&lt;li>Long term, Agile Unit tailoring will be documented in local quality management system managed by the Agile Unit or local site, as a complement to the global QMS.&lt;/li>
&lt;li>Short term, Agile Team documents any tailoring for the release.&lt;/li>
&lt;/ul></description></item><item><title>Terms and Definitions</title><link>/docs/mp028/terms-and-definitions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/terms-and-definitions/</guid><description>&lt;p>The table below lists and defines various terms used in this document or common conversations. It is collected here to make sure everybody understands them the same way.&lt;/p>
&lt;!--
GENERAL TABLE SUMMARY
Term: ADO
Definition: Azure DevOps
Term: CoE
Definition: Center of Excellence
Term: DoD
Definition: Definition of Done
Term: DoR
Definition: Definition of Ready
Term: DSAC
Definition: Device Security Assurance Center
Term: NFR
Definition: Non-functional requirement
Term: OCC
Definition: Open Source Competence Center
Term: OSS
Definition: Open Source Software
Term: PCR
Definition: Process Change Request
Term: PM
Definition: Product Manager
Term: PO
Definition: Product Owner
Term: PRO
Definition: Process Owner
Term: QBR
Definition: Quarterly Business Review
Term: QMS
Definition: Quality Management System
Term: RACI
Definition: Responsible, Accountable, Consulted, Informed
Term: SDLC
Definition: Security Development Life Cycle
Term: SM
Definition: Scrum Master
Term: Software Composition Analysis
Definition: Sometimes known as Binary Code Analysis. An SCA tool makes an inventory of all open source components in the products and provides information such as the open source license and any security vulnerability associated with each component.
-->
&lt;table class="general-table-standard">
&lt;thead>
&lt;tr>
&lt;th>Term&lt;/th>
&lt;th>Definition&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>ADO&lt;/td>
&lt;td>Azure DevOps&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CoE&lt;/td>
&lt;td>Center of Excellence&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>DoD&lt;/td>
&lt;td>Definition of Done&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>DoR&lt;/td>
&lt;td>Definition of Ready&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>DSAC&lt;/td>
&lt;td>Device Security Assurance Center&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>NFR&lt;/td>
&lt;td>Non-functional requirement&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OCC&lt;/td>
&lt;td>Open Source Competence Center&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OSS&lt;/td>
&lt;td>Open Source Software&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PCR&lt;/td>
&lt;td>Process Change Request&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PM&lt;/td>
&lt;td>Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PO&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PRO&lt;/td>
&lt;td>Process Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>QBR&lt;/td>
&lt;td>Quarterly Business Review&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>QMS&lt;/td>
&lt;td>Quality Management System&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>RACI&lt;/td>
&lt;td>Responsible, Accountable, Consulted, Informed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>SDLC&lt;/td>
&lt;td>Security Development Life Cycle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>SM&lt;/td>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Software Composition Analysis&lt;/td>
&lt;td>Sometimes known as Binary Code Analysis. An SCA tool makes an inventory of all open source components in the products and provides information such as the open source license and any security vulnerability associated with each component.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Threat Model Periodic Review</title><link>/docs/guides/cyber-security/threat-model-periodic-review/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/cyber-security/threat-model-periodic-review/</guid><description>&lt;h2 id="1-purpose">1. Purpose&lt;/h2>
&lt;p>The purpose of this document is to define a structured process for periodically reviewing and updating threat models for released products. Reviews should occur at least annually to maintain an effective security posture against evolving threats and to ensure compliance with industry standards and regulations. Reviews are recommended even when the product design remains unchanged, since the threat landscape may change over time, and also it is required by ABB SDLC and IEC62443 standards.&lt;/p>
&lt;h2 id="2-responsibilities-of-development-team">2. Responsibilities of Development Team&lt;/h2>
&lt;p>For a periodic review of Threat Model, the development team to ensure that the product remains secure as threat landscape evolves. Below are the key responsibilities of the development team during such reviews:&lt;/p>
&lt;ul>
&lt;li>Review architectural changes&lt;/li>
&lt;li>Validate existing threats&lt;/li>
&lt;li>Identify new threats&lt;/li>
&lt;li>Ensure that threat model is correct&lt;/li>
&lt;li>Collaborate with security team&lt;/li>
&lt;li>Implement and verify mitigations&lt;/li>
&lt;/ul>
&lt;h2 id="3-periodic-threat-model-review">3. Periodic Threat Model Review&lt;/h2>
&lt;h3 id="31-review-existing-threat-model">3.1. Review Existing Threat Model&lt;/h3>
&lt;p>The development team of the product to check for:&lt;/p>
&lt;p>☐ Last threat model and validate assumptions.&lt;/p>
&lt;p>☐ Outdated mitigations&lt;/p>
&lt;p>☐ New vulnerabilities in existing components&lt;/p>
&lt;p>☐ Any addition of new 3rd party components&lt;/p>
&lt;p>☐ Changes in threat actor capabilities&lt;/p>
&lt;p>☐ Changes in product design &amp;amp; architecture&lt;/p>
&lt;p>☐ Regulatory or compliance changes&lt;/p>
&lt;h3 id="32-document-and-communicate-update">3.2. Document and Communicate Update&lt;/h3>
&lt;p>The development team of the product to update the Threat modeling documentation with:&lt;/p>
&lt;p>☐ Diagrams&lt;/p>
&lt;p>☐ Threat Enumeration Sheet&lt;/p>
&lt;p>☐ Share update with stakeholders&lt;/p>
&lt;p>☐ Review record&lt;/p>
&lt;h3 id="33-plan-for-continuous-improvement">3.3. Plan for Continuous Improvement&lt;/h3>
&lt;p>The development team of the product to plan for continuous improvement of the products with evolving threat landscape with&lt;/p>
&lt;p>☐ Management of vulnerabilities in 3rd party components&lt;/p>
&lt;p>☐ Schedule next Threat modeling review&lt;/p>
&lt;h2 id="4-references">4. References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://go.insideplus.abb.com/corporate-functions/research-and-development/cyber-security/standards/security-development-life-cycle-standard" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Security Development Life Cycle (SDLC) Standard&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Applicability</title><link>/docs/mp028/applicability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/applicability/</guid><description>&lt;p>This procedure applies to all Agile Units (as development organizations) in the Smart Power Division that develop software or are involved in software development activities planned for release to customers. Agile Units must follow this process for the development of any kind of software, such as embedded products, software applications, web applications, and cloud solutions.&lt;/p></description></item><item><title>Cyber Security User Manual Template</title><link>/docs/guides/cyber-security/cyber-security-user-manual-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/cyber-security/cyber-security-user-manual-template/</guid><description>&lt;p>User documentation (or user manual) should provide the necessary information to help the customer ensure that the product and the installed environment is as secure as possible.&lt;/p>
&lt;p>The User documentation (or user manual) should contain relevant cyber security information for the product and also describe necessary additional actions that the user/customer/asset owner needs to take to install, commission, operating and decomission a product securely, and in general, to build the whole system or industrial plant following defense in depth approach expected my manufacturer.&lt;/p>
&lt;p>Please use the template attached below to create product specific cyber security guidance for product user manual.&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:f:/r/teams/Cobottest/Shared%20Documents/All%20ELSP%20Global%20Procedures/MP025%20-%20Cyber%20Security%20Management%20System/Supporting%20Documents/User%20Manual%20Template?csf=1&amp;amp;web=1&amp;amp;e=PFokP4" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Cyber Security User Manual Template - Word file&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Architecture Review Guideline</title><link>/docs/guides/to-review-references/architecture/architecture-review/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/architecture/architecture-review/</guid><description>&lt;h2 id="architecture-review-goals">Architecture Review Goals&lt;/h2>
&lt;ul>
&lt;li>Evaluate the architecture early to avoid developing something that doesn&amp;rsquo;t fit.&lt;/li>
&lt;li>Ensure consistency throughout the system. This will improve maintainability in the system and avoid duplication within the system.&lt;/li>
&lt;li>Validate that the architecture builds a better understanding of the System Requirements, as well as identify any missing important system requirements.&lt;/li>
&lt;li>Increase the overall knowledge of the product/system.&lt;/li>
&lt;li>It&amp;rsquo;s important to formally document, and review, the architecture to comply with standards (ISO 9001, IEC 62443, IEC 61508, and others).&lt;/li>
&lt;li>Ensure all documented architecture is also reviewed. If the architecture is worth documenting, it&amp;rsquo;s also worth reviewing it.&lt;/li>
&lt;/ul>
&lt;h2 id="architecture-review-checklist">Architecture Review Checklist&lt;/h2>
&lt;p>When performing the architecture review, make sure to consider the following:&lt;/p>
&lt;ul>
&lt;li>Is this content updated according to all relevant input requirements? Consider both specific functional or non-functional requirements and generic requirements e.g. requirements on architectural principles for security or other areas.&lt;/li>
&lt;li>Is the described functionality following relevant input Architecture Specifications?&lt;/li>
&lt;li>Are all &lt;em>major&lt;/em> software/hardware components identified and their relevant interfaces defined?&lt;/li>
&lt;li>Does the architecture specification have the right level of abstraction?
The architecture specification shall provide an overview of and an introduction to the architecture using diagrams and textual descriptions on a high conceptual level.&lt;/li>
&lt;li>Is the functional decomposition well described?
For each functional element, there shall be a description of the provided functionality/service, the internal decomposition/structure, and the internal and external conceptual interfaces.&lt;/li>
&lt;li>Is the dynamic behavior well described?
Important concepts and functions shall have a description of their dynamic behavior on a high and conceptual level.&lt;/li>
&lt;li>Is the information model described?
The most important data entities relevant to the architecture, including their relationship, shall be described by the information model.&lt;/li>
&lt;li>Is the deployment described?
The deployment of functional elements into its execution environment shall be described.&lt;/li>
&lt;li>Are architecture decisions described?
The most important architectural decisions, including their motivations, shall be described.&lt;/li>
&lt;li>Do all entities in the architecture have consistent names?
All functional elements and conceptual interfaces shall have consistent naming. The same word shall have the same meaning throughout the description. Names shall be self-descriptive in terms of intent and behavior, and abbreviations shall be avoided.&lt;/li>
&lt;li>Are sufficiently precise (i.e. sufficient quantity to be useful) descriptions put on:
&lt;ul>
&lt;li>a) compatibility&lt;/li>
&lt;li>b) standard compliance (for example IEC 611131-3, IEC 62443, or OPC UA)&lt;/li>
&lt;li>c) availability&lt;/li>
&lt;li>d) configuration&lt;/li>
&lt;li>e) assumptions and dependencies&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Is all mitigation of risks described in the threat model covered?&lt;/li>
&lt;li>Is the architecture considering best practices?&lt;/li>
&lt;li>Is the architecture feasible for refinement to a functional design (Description of Function)?
Is the architecture described clearly and in detail?&lt;/li>
&lt;li>Is the reuse of existing trusted and verified software modules/libraries considered?&lt;/li>
&lt;li>If applicable, is the architecture structured so that reuse is possible for other components or products?&lt;/li>
&lt;/ul>
&lt;h3 id="template">Template&lt;/h3>
&lt;p>Traceability is important throughout the entire development process. To simplify traceability for architectural review, use the template available in the
&lt;a href="/docs/tools/to-review-references/markdown-templates/" >Tools &amp;amp; Template&lt;/a> translated into markdown format.&lt;/p></description></item><item><title>How to change the process</title><link>/docs/guides/how-to-change-the-process/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/how-to-change-the-process/</guid><description>&lt;p>This guide takes you through the steps to initiate a change on the ELSP R&amp;amp;D QMS website by creating a process change request (PCR). It also includes information on how the process team handle submitted PCRs and updates to the QMS website.&lt;/p>
&lt;p>A PCR can be created for improvements, missing information, or defects found in the processes, guidelines, etc.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Before creating a new PCR, discuss your improvement idea with your &lt;strong>Chapter Leader&lt;/strong>. This helps to avoid duplicated PCRs and prevents unnecessary work.&lt;/span>
&lt;/div>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Anyone in ELSP who would like to file a change request for ELSP R&amp;amp;D processes must share and discuss the PCR with their Chapter Leader before submitting it.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/how-to-change-the-process-0.svg" alt="PCR workflow" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Creating a PCR in Azure DevOps (ADO) requires an ADO license. If you don&amp;rsquo;t have one, ask the &lt;a href="/docs/other/organization#pro-sync">Process Owner&lt;/a> for help creating the PCR.&lt;/span>
&lt;/div>
&lt;p>Improvement ideas should be carefully evaluated and planned, with attention to their impact on other process areas within the QMS. Broader-scope improvement ideas should be managed as features, while individual, targeted changes can be tracked as PCRs. When multiple PCRs relate to the same area or topic, consolidating them under a single feature is highly recommended to simplify dependency management and enhance overall process coordination.&lt;/p>
&lt;h3 id="create-pcr">Create PCR&lt;/h3>
&lt;p>Go to the
&lt;a href="https://dev.azure.com/ABB-ELSP-AgileOrg/ELSP-QMS/_workitems/create/Process%20Change%20Request" target="_blank"
rel="noopener noreferrer" >ELSP R&amp;amp;D PCR site&lt;/a> to create a PCR.&lt;/p>
&lt;h3 id="fill-in-pcr">Fill in PCR&lt;/h3>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/how-to-change-the-process-1.drawio.png" alt="PCR Form" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>The required fields in a PCR are:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Title&lt;/strong>
A short description of the requested change.&lt;/li>
&lt;li>&lt;strong>Description&lt;/strong>
Motivate change, origin, impacted document name/ID/revision, or tool template name with the problem statement and expected change. If the PCR is for withdrawal of wiki or QMS content, ensure that reference to any replacement is included in the PCR description.&lt;/li>
&lt;li>&lt;strong>Priority&lt;/strong>
Select from 1-4 as per the definition. The priority (1=High… 4=Low) defines the order for the process team to handle the request. It can be redefined by the process team depending on capacity. See image here blow.&lt;/li>
&lt;li>&lt;strong>Due date&lt;/strong>
Select an &amp;ldquo;expected due date&amp;rdquo; by the originator if the priority is 1 (immediate).&lt;/li>
&lt;li>&lt;strong>Affected standards&lt;/strong>
Specify affected standard(s) like IEC61508, IEC62443, ISO9001.&lt;/li>
&lt;li>&lt;strong>Links or attachments&lt;/strong>
Hyperlink the affected QMS document/page location and section, or attach the proposal/screenshots and other details.&lt;/li>
&lt;li>&lt;strong>Affected content type&lt;/strong>
Hyperlink the affected QMS document/page location and section, or attach the proposal/screenshots and other details.&lt;/li>
&lt;li>&lt;strong>Reference CL&lt;/strong>
The Chapter Leader with whom the change request was discussed, if applicable.&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/how-to-change-the-process-2.drawio.png" alt="PCR Priorities" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="submit-pcr">Submit PCR&lt;/h3>
&lt;p>Click on &amp;ldquo;Save&amp;rdquo; to submit your PCR.&lt;/p>
&lt;h3 id="pcr-evaluation">PCR evaluation&lt;/h3>
&lt;p>The process owner evaluates the PCR and, if needed, contacts the originator to clarify missing information. After the evaluation it should be clear what actions to take to resolve the PCR.&lt;/p>
&lt;p>PCRs across several process teams can be discussed in Chapters Committee (FW and Digital clusters) meetings. It may result in a split of the PCR for each process team.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/how-to-change-the-process-4.svg" alt="PCR Workflow" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;!--
GENERAL TABLE SUMMARY
Id: 1
State Change: New
Reason: Moves to state New.
Description: A new issue is found and logged by anyone.
Mandatory fields:
Assigned to: PRO.
Title, description, hyperlinks.
Set "expected Due Date" and "priority".
Id: 1a, 1b, 3a
State Change: New to Closed/Rejected, Active to Rejected
Reason: Duplicate, rejected (edit reason manually).
Description: PRO reviewed the PCR and found duplicate/invalid.
Mandatory fields:
Assigned to: blank.
Edit the reason as "duplicate" or "rejected" manually
Link to other open issue work items before closing.
Id: 2
State Change: New to Active
Reason: Moved out of state "New" is considered as accepted/approved.
Description: The PCR is approved for correction. This transition can take place once the PRO has validated the impact of the PCR. If necessary, the PRO will initiate a discussion with the CLs either in the comments section of the PCR, during the Chapter Community Cluster meeting, or through an ad hoc meeting. The outcome of the discussion will be documented in the PCR comments.
Mandatory fields:
Assigned to: process owner.
Priority, stack rank, safety impact.
Discussion: using @ to notify additional members or with outcome of the meeting attached.
Id: 2a (optional)
State Change: New to Active
Reason: Investigate (edit reason manually).
Description: The PCR is sent for investigation and assigned by the PRO to a specific stakeholder.
Mandatory fields:
Assigned to: process owner or stakeholder.
Discussion: using @ to notify additional members.
Id: 2b (optional)
State Change: Active to New
Reason: Investigation complete (edit reason manually).
Description: PCR moved back to state "New" by the PRO with the reason "investigation complete" to be processed.
Mandatory fields:
Assigned to: PRO.
Hyperlink to impacted processes.
Committed due date, safety impact.
Set stack rank (within the backlog).
Id: 3
State Change: Active to Resolved
Reason: Moved to state "Resolved" is considered as fixed/ready for pilot.
Description: PCR implementation complete/ready for pilot/training. Communicate to the originator.
Mandatory fields:
Assigned to: process owner.
Hyperlink to changed processes.
Id: 3b
State Change: Resolved to Active
Reason: Reactivated (edit reason manually).
Description: Solution not meeting expectations of PRO.
Mandatory fields:
Assigned to: PRO.
Discussion: using @ to notify additional members.
Id: 4
State Change: Resolved to Closed
Reason: Moved out of state "Resolved," it's considered validated.
Description: PCR completed, solution met. Documents updated, pilots/training successful: the PRO can close it.
Mandatory fields:
Assigned to: blank.
Id: 4a
State Change: Closed to Active
Reason: Reactivated.
Description: Closed by mistake.
Mandatory fields:
Assigned to: PRO.
Discussion: using @ to notify additional members.
-->
&lt;table class="general-table-standard">
&lt;thead>
&lt;tr>
&lt;th style="min-width: 50px; width: 5%">Id&lt;/th>
&lt;th style="min-width: 100px; width: 10%">State Change&lt;/th>
&lt;th style="min-width: 150px; width: 15%">Reason&lt;/th>
&lt;th style="min-width: 300px; width: 30%">Description&lt;/th>
&lt;th style="min-width: 200px; width: auto">Mandatory fields&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>New&lt;/td>
&lt;td>Moves to state New.&lt;/td>
&lt;td>A new issue is found and logged by anyone.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: PRO.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Title, description, hyperlinks.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Set "expected Due Date" and "priority".&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1a, 1b, 3a&lt;/td>
&lt;td>New to Closed/Rejected, Active to Rejected&lt;/td>
&lt;td>Duplicate, rejected (edit reason manually).&lt;/td>
&lt;td>PRO reviewed the PCR and found duplicate/invalid.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: blank.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Edit the reason as "duplicate" or "rejected" manually&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Link to other open issue work items before closing.&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2&lt;/td>
&lt;td>New to Active&lt;/td>
&lt;td>Moved out of state "New" is considered as accepted/approved.&lt;/td>
&lt;td>The PCR is approved for correction. This transition can take place once the PRO has validated the impact of the PCR. If necessary, the PRO will initiate a discussion with the CLs either in the comments section of the PCR, during the Chapter Community Cluster meeting, or through an ad hoc meeting. The outcome of the discussion will be documented in the PCR comments.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: process owner.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Priority, stack rank, safety impact.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Discussion: using @ to notify additional members or with outcome of the meeting attached.&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2a (optional)&lt;/td>
&lt;td>New to Active&lt;/td>
&lt;td>Investigate (edit reason manually).&lt;/td>
&lt;td>The PCR is sent for investigation and assigned by the PRO to a specific stakeholder.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: process owner or stakeholder.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Discussion: using @ to notify additional members.&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2b (optional)&lt;/td>
&lt;td>Active to New&lt;/td>
&lt;td>Investigation complete (edit reason manually).&lt;/td>
&lt;td>PCR moved back to state "New" by the PRO with the reason "investigation complete" to be processed.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: PRO.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hyperlink to impacted processes.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Committed due date, safety impact.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Set stack rank (within the backlog).&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>Active to Resolved&lt;/td>
&lt;td>Moved to state "Resolved" is considered as fixed/ready for pilot.&lt;/td>
&lt;td>PCR implementation complete/ready for pilot/training. Communicate to the originator.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: process owner.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hyperlink to changed processes.&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3b&lt;/td>
&lt;td>Resolved to Active&lt;/td>
&lt;td>Reactivated (edit reason manually).&lt;/td>
&lt;td>Solution not meeting expectations of PRO.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: PRO.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Discussion: using @ to notify additional members.&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>Resolved to Closed&lt;/td>
&lt;td>Moved out of state "Resolved," it's considered validated.&lt;/td>
&lt;td>PCR completed, solution met. Documents updated, pilots/training successful: the PRO can close it.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: blank.&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4a&lt;/td>
&lt;td>Closed to Active&lt;/td>
&lt;td>Reactivated.&lt;/td>
&lt;td>Closed by mistake.&lt;/td>
&lt;td>
&lt;table class="general-table-subtable">
&lt;tr>
&lt;td>Assigned to: PRO.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Discussion: using @ to notify additional members.&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="qms-website-updates">QMS website updates&lt;/h3>
&lt;p>The QMS website is made with Markdown files, versioned, and baselined. Pull requests in ADO are used to review and approve content before it is published on the web server. Content editing, reviewing, and approval are restricted to the process owner.&lt;/p>
&lt;h2 id="review-and-release">Review and Release&lt;/h2>
&lt;h3 id="procedure">Procedure&lt;/h3>
&lt;p>The release of the MP028 procedure will take place semi-annually, unless urgent changes are required. All PCRs and features ready for release will be included in a candidate artifact.&lt;/p>
&lt;h3 id="guide--tools">Guide &amp;amp; Tools&lt;/h3>
&lt;p>Guidelines, best practices, and tool usage instructions will not follow a fixed release schedule.
A candidate release artifact will be created whenever necessary—either when a sufficient number of changes have been collected or when urgent updates need to be implemented.
These updates will be published directly within the QMS portal and will not be included in the PDF document.&lt;/p>
&lt;h3 id="review">Review&lt;/h3>
&lt;p>The implemented changes will be compiled and submitted for review to the Chapter Leaders. During this phase, Chapter Leaders must identify and report any issues within two weeks of the artifact&amp;rsquo;s creation. If no feedback is provided within this period, tacit approval will be assumed.&lt;/p>
&lt;p>This review phase must be completed within two weeks, after which tacit approval will apply.&lt;/p>
&lt;h3 id="approval">Approval&lt;/h3>
&lt;p>Approval of the process will be supported by AUL, CoE, and R&amp;amp;D managers. Once approved, the process will be published in the QMS and made available as a versioned PDF document. This phase also has a two-week timeframe, after which tacit approval will apply. This step is only applicable to procedure releases.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://dev.azure.com/ABB-ELSP-AgileOrg/ELSP-QMS" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Azure DevOps site for PCRs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../../other/organization/#pro-sync" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>PRO Sync&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Area and Iteration Path</title><link>/docs/guides/to-review-references/configuration-management/area-and-iteration-path/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/area-and-iteration-path/</guid><description>&lt;p>&amp;ldquo;Area Path&amp;rdquo; and &amp;ldquo;Iteration Path&amp;rdquo; are standard fields in Azure DevOps (ADO), and they are used to organize work items by product classification, team, and time period.&lt;/p>
&lt;p>They both have a tree structure, and they are defined in &amp;ldquo;Project Settings&amp;rdquo;. They are covered in the online
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/organizations/settings/about-areas-iterations?view=azure-devops" target="_blank"
rel="noopener noreferrer" >ADO documentation.&lt;/a>&lt;/p>
&lt;p>This guide focuses on how to use area and iteration paths in PCP.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/Area-and-Iteration-Path.drawio.png" alt="AIP" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="area-path">Area path&lt;/h2>
&lt;p>An area path represents a functional area:​&lt;/p>
&lt;ul>
&lt;li>It can be a component/product and its version​ where applicable.&lt;/li>
&lt;li>A team can be assigned to a specific area or a set of areas.&lt;/li>
&lt;/ul>
&lt;p>It’s possible to group work items in an area path, and to restrict access or to organize them in a logical structure.​ For example, the components developed in a stream are under the stream node, and can be grouped in an area path like this:&lt;/p>
&lt;p>&amp;ldquo;&lt;strong>Team Project&lt;/strong>\&lt;strong>Stream&lt;/strong>\&lt;strong>Product&lt;/strong>[\Major Product Version\Target Product Version]&amp;ldquo;​,&lt;/p>
&lt;p>where &amp;ldquo;Product&amp;rdquo; can be a tree structure of a main product type with several components.​ The sections within square brackets are optional and defined at product level.
Depending on the convention used in the team, the optional parts may be used or not.&lt;/p>
&lt;p>Examples of area paths:&lt;/p>
&lt;ul>
&lt;li>PCP\Engineering\MyProduct\MyComponent​\1.0&lt;/li>
&lt;li>800xA Engineering and Production\Engineering\Eng Studio\6.0\6.0.0\6.0.0-3​&lt;/li>
&lt;/ul>
&lt;p>An area path is usually set up by a configuration manager or a team project administrator. A product owner can request to be able to edit the areas of his/her product.​&lt;/p>
&lt;h2 id="iteration-path">Iteration path&lt;/h2>
&lt;p>An iteration path represents a time interval and it is synchronized with increment planning, which gives a structure like this:&lt;/p>
&lt;p>​&amp;rdquo;&lt;strong>Team Project&lt;/strong>\&lt;strong>Stream&lt;/strong>[\Product]\&lt;strong>Teams&lt;/strong>\&lt;strong>Team Name&lt;/strong>\&lt;strong>Increment&lt;/strong>\&lt;strong>Sprint&lt;/strong>&amp;rdquo;&lt;/p>
&lt;p>A concrete example of an iteration path is: &amp;ldquo;PCP\Operations\Teams\ATeam\24.1\24.1.3​&amp;rdquo;&lt;/p>
&lt;p>The configuration manager or scrum master administrates the sprints and selects sprints in the team configuration for the team to plan work items. ​
Sprints and increments are managed according to the SPI calendar and synchronized with SPI planning.
Bulk editing many iterations for many teams is possible using
&lt;a href="https://learn.microsoft.com/en-us/cli/azure/" target="_blank"
rel="noopener noreferrer" >Azure CLI&lt;/a>&lt;/p>
&lt;h2 id="team-configuration">Team configuration&lt;/h2>
&lt;p>Area path and iteration path are part of the
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-setup-a-team-in-ado/" >Team Configuration in Azure DevOps&lt;/a>&lt;/p>
&lt;p>Teams can be defined for:&lt;/p>
&lt;ul>
&lt;li>A virtual management team at the system or stream/project level, to monitor the backlog at that level.&lt;/li>
&lt;li>An actual development team.&lt;/li>
&lt;/ul>
&lt;p>For each team, a backlog area and iteration are defined that identifies the scope of the team. Work items under the selected area/iteration appear in the team backlog.&lt;/p>
&lt;p>In particular, the iteration up to the team&amp;rsquo;s name (PCP\Operations\Teams\&lt;strong>TeamName&lt;/strong>) is the team&amp;rsquo;s backlog iteration, where the team keeps work items not planned for a specific iteration yet.&lt;/p>
&lt;p>Area and iteration paths can be secured in &amp;ldquo;Project Settings&amp;rdquo; so that only authorized people can edit them.&lt;/p>
&lt;p>It is possible to set permissions on area paths to restrict viewing or editing work items of each area.&lt;/p>
&lt;h2 id="defining-backlog-levels">Defining backlog levels&lt;/h2>
&lt;p>Backlog levels described in the
&lt;a href="/docs/guides/how-to-change-the-process/#terminology-mapping" >QMS&lt;/a> and mapped to SAFe Agile can be implemented by configuring teams with area path and iteration path.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Backlog level&lt;/th>
&lt;th>Items&lt;/th>
&lt;th>Area path example&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>System&lt;/td>
&lt;td>System epic&lt;/td>
&lt;td>Area: &amp;lt;ADO Project Name&amp;gt;\PCP Work\System 800xA\7.0\7.0.0 &lt;br/> Iteration: PCP\Operations\Teams\SystemManagementTeam\23.4&lt;/td>
&lt;td>System epics imported from DFN and used as a basis for development.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Stream &lt;br/>(or project)&lt;/td>
&lt;td>Epic&lt;/td>
&lt;td>Area: PCP\Engineering\NGT_Engg\CertificateDashboard\2.0\2.0.0 &lt;br/> Iteration: PCP\Operations\Teams\ProjectManagementTeam\23.4&lt;/td>
&lt;td>Epics planned for a version of a product/component.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Team&lt;/td>
&lt;td>Feature &lt;br/>User story &lt;br/>(bug)&lt;/td>
&lt;td>Area: PCP\Engineering\NGT_Engg\CertificateDashboard\2.0\2.0.0 &lt;br/> Iteration: PCP/Engineering/Teams/TeamName/SPI/Sprint&lt;/td>
&lt;td>Detailed work items that a development team plans and executes, to produce deliverables.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>MP028</title><link>/docs/release-notes/mp028/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>/docs/release-notes/mp028/</guid><description>&lt;p>User-facing updates for the MP028 section. Newest entries come first.&lt;/p>
&lt;h2 id="version-10">Version: &lt;strong>1.0&lt;/strong>&lt;/h2>
&lt;h3 id="release-2026-02-11">Release: &lt;strong>2026-02-11&lt;/strong>&lt;/h3>
&lt;h4 id="summary">Summary&lt;/h4>
&lt;p>Initial revision.&lt;/p></description></item><item><title>Agile Team</title><link>/docs/mp028/process/agile-team/</link><pubDate>Tue, 27 Aug 2024 16:26:15 +0000</pubDate><guid>/docs/mp028/process/agile-team/</guid><description>&lt;p>The agile teams are focusing on the development of Software (SW) components. These components are integrated into products and released to customers.&lt;/p>
&lt;p>The agile teams focus on lean‑agile planning and execution.&lt;/p>
&lt;p>The teams use iterations (or sprints) to plan, implement and deliver SW solutions.&lt;/p>
&lt;h2 id="process-overview">Process Overview&lt;/h2>
&lt;p>The iteration (or sprint) planning and execution of the agile team follow lean and agile principles. Each increment starts with a Quarterly Business Review (QBR), followed by synchronization events, and ends with an inspect &amp;amp; adapt (retrospective).&lt;/p>
&lt;h4 id="principles">Principles&lt;/h4>
&lt;ul>
&lt;li>Ensure the team backlog is ranked.&lt;/li>
&lt;li>Plan the iteration/sprint.&lt;/li>
&lt;li>Visualize work.&lt;/li>
&lt;li>Coordinate at daily stand-up meetings.&lt;/li>
&lt;li>Demonstrate value.&lt;/li>
&lt;li>Improve the development process.&lt;/li>
&lt;li>Build quality in.&lt;/li>
&lt;li>Ensure adherence to DoR and DoD.&lt;/li>
&lt;/ul>
&lt;h4 id="activities">Activities&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/agile-team-activities.svg" alt="AT_activities" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;!-- ARTIFACTS TABLE SUMMARY
Artifact: Iteration Goal
Description: Summary of business and technical goals for the iteration that the agile team agrees to accomplish.
RACI:
(R)
Agile Team
(A)
Scrum Master
(C)
(I)
Receiver:
Agile Team
Tailoring:
Artifact: Team Board
Description: Visualize the status of Agile team progress, physical or digital board
RACI:
(R)
Agile Team
(A)
Scrum Master
(C)
(I)
Receiver:
Agile Team
Tailoring:
Artifact: Story
Description: A (user) story is estimated and ranked in this process. For details about contents, see the "requirements" process
RACI:
(R)
Agile Team
(A)
Scrum Master
(C)
(I)
Receiver:
Agile Team
Tailoring:
Artifact: Task
Description: Piece of estimated work (hours) for a team member. It is a work item in Azure DevOps.
RACI:
(R)
-->
&lt;h4 id="artifacts">Artifacts&lt;/h4>
&lt;table class="artifact-table">
&lt;thead>
&lt;tr>
&lt;th>Artifact&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>RACI&lt;/th>
&lt;th>Receiver&lt;/th>
&lt;th>Tailoring&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Iteration Goal&lt;/td>
&lt;td>Summary of business and technical goals for the iteration that the agile team agrees to accomplish.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Team Board&lt;/td>
&lt;td>Visualize the status of Agile team progress, physical or digital board&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Story&lt;/td>
&lt;td>A (user) story is estimated and ranked in this process. For details about contents, see the "requirements" process&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Task&lt;/td>
&lt;td>Piece of estimated work (hours) for a team member. It is a work item in Azure DevOps.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Team Backlog&lt;/td>
&lt;td>Contains estimated and ranked stories and enablers originating from products backlog and additional stories from the team's local context.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Impediment&lt;/td>
&lt;td>Anything that keeps the team from getting work down or slows velocity. Identify in Daily Stand-Up.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Risk&lt;/td>
&lt;td>Can cause future problems, loss, or threaten progress but has not happened yet.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Scrum Master&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h4 id="details">Details&lt;/h4>
&lt;p>The agile team process focuses on lean-agile planning and execution. The process ensures the teams plan, execute and deliver according to expectations. The agile teams are aligned to the increments by the QBR.&lt;/p>
&lt;h4 id="master-processes">Master Processes&lt;/h4>
&lt;p>The agile team process belongs to the &amp;ldquo;master processes&amp;rdquo; responsible for continuous planning and execution. It takes the required activities defined in the functional processes (e.g., requirements, architecture, and test) and adds them to the iterations.&lt;/p>
&lt;p>The Agile teams can use Scrum. Irrespective of the agile method, the team needs to sync to the common cadence in the Agile Team. Deliverables and demos need to be prepared by the team.&lt;/p>
&lt;h4 id="cadence-view">Cadence view&lt;/h4>
&lt;p>The cadence view shows the process activities and the increments. Many of the activities are executed in parallel and not always in a sequence.&lt;/p>
&lt;p>The team’s cadence is aligned to fit into the QBR increments. The iterations are, in most cases, 2 weeks, but they can be longer as long as they fit into the increments.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/cadence-view.png" alt="cadence" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="flow-view">Flow view&lt;/h4>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">This view shows an overview of one iteration (2-3 weeks).&lt;/span>
&lt;/div>
&lt;p>The flow view shows the process activities and the logical sequence with decision points. It makes it easier to understand the flow and the relationship between the activities.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/flow-view.svg" alt="flow" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="related-references">Related references&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Definition of Ready and Definition of Done&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/stream-and-team/scrum/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Scrum&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>How-to Change Standard Work Item Templates</title><link>/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/</guid><description>&lt;p>This guide focuses on describing the practical change of the work item, starting from a process change request received, to the completion of a pull request updating the template.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Configuration managers, software engineers, and anyone curious about the handling of template change requests.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-change-standard_wi-template0.drawio.png" alt="CT-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="register-a-process-change-request">Register a process change request&lt;/h3>
&lt;p>To register a change request for a standard work item template, the users should follow the
&lt;a href="/docs/guides/how-to-change-the-process/" >How-to Change the Process&lt;/a> guide and register the issue as a configuration management (CM) process issue.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-change-standard_wi-template1.png" alt="WT-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>The registered issues appear in the PCP R&amp;amp;D quality management system - configuration management backlog.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-change-standard_wi-template2.png" alt="WT-2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="review-the-change-request">Review the change request&lt;/h3>
&lt;p>The CM process group is responsible for making decisions about the implementation of standard work item template updates. If needed, support from the ADO team could be utilized. The following should be considered:&lt;/p>
&lt;ul>
&lt;li>Is the proposed field/information of such value that it is appropriate in a template?&lt;/li>
&lt;li>Are there any conflicts with existing fields?&lt;/li>
&lt;li>What is a suitable field name?&lt;/li>
&lt;/ul>
&lt;p>After discussion within the CM process group, the issue is moved to either &amp;ldquo;Rejected&amp;rdquo; or &amp;ldquo;Active&amp;rdquo; state according to the &amp;ldquo;How-to Create Process Change Requests&amp;rdquo; guide.&lt;/p>
&lt;p>If in the &amp;ldquo;Active&amp;rdquo; state, the issue is considered approved and assigned to one of the team members for implementation.&lt;/p>
&lt;h3 id="update-the-template">Update the template&lt;/h3>
&lt;p>The
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Configuration Management repo in ADO&lt;/a> stores standardized templates used in ABB PCP, such as the standard work item templates.&lt;!-- TODO: Change PCP references -->&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-change-standard_wi-template3.png" alt="WT-3" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Template updates should initially be validated in an ADO validation project, either on-premises or in the cloud, depending on the type of project. This is a learning environment where the change can be tested and demos can be done without updating the production environment.&lt;/p>
&lt;ul>
&lt;li>On-premises templates: Edit the template as XML and load it with Witadmin.&lt;/li>
&lt;li>Cloud templates: Edit directly from the &amp;ldquo;Organization&amp;rdquo; settings, &amp;ldquo;Boards-Process&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;p>In both cases, templates must be stored in the Git repo and versioned.&lt;/p>
&lt;p>When the validation project is tested, the required updates can be done in a branch in the Configuration Management repo in ADO.&lt;/p>
&lt;p>A pull request is required to merge into the main branch. At least one team member must review and approve the change to complete the pull request.&lt;/p>
&lt;h3 id="document-and-share">Document and share&lt;/h3>
&lt;p>Use one or more of the following methods to inform users about changes in standard templates:&lt;/p>
&lt;ul>
&lt;li>Update the QMS template guide (mandatory).&lt;/li>
&lt;li>Process demo.&lt;/li>
&lt;li>Presentation in the configuration management community meeting.&lt;/li>
&lt;li>Post in the configuration management channel.&lt;/li>
&lt;/ul>
&lt;p>Now the updated template is ready to be implemented in various projects. For further details, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-adopt-standard-work-item-templates/" >How-to Adopt Standard Work Item Templates&lt;/a>.&lt;/p>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="why-templates-are-needed">Why templates are needed&lt;/h3>
&lt;p>In ADO, the projects contain different work item types (e.g. epics, features, or user stories) to track the work. Depending on the process implemented in the ADO project, different work item types can be implemented differently. Some typical cases are:&lt;/p>
&lt;ul>
&lt;li>Different field names.&lt;/li>
&lt;li>Different values for the same field (e.g. different states or bug severities).&lt;/li>
&lt;li>Different rules (e.g. who can change what, what values are allowed or mandatory based on other fields).&lt;/li>
&lt;/ul>
&lt;p>These differences make it difficult to have an overview of the status of releases, especially for systems that span multiple ADO projects. By using work item templates and thereby defining used work items and their fields, guidance is provided to the teams, and collaboration between projects is facilitated.&lt;/p>
&lt;h3 id="where-to-find-current-templates">Where to find current templates&lt;/h3>
&lt;p>A description of work item types in use today and the fields that belong to their standard template can be found in the
&lt;a href="/docs/tools/to-review-references/devops/" >Azure DevOps&lt;/a> area under &amp;ldquo;Tools and Templates&amp;rdquo; in the QMS. An ADO repo used for storing the templates can be found here:
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Opex - Repos - Configuration Management&lt;/a>.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="../how-to-adopt-standard-work-item-templates" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Adopt Standard Work Item Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Configuration Management repo in ADO&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../../how-to-change-the-process/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Change the Process&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Guides</title><link>/docs/release-notes/guides/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>/docs/release-notes/guides/</guid><description>&lt;p>User-facing updates for the Guides section. Newest entries come first.&lt;/p>
&lt;h2 id="ver-101-rel-2026-02-12">Ver: &lt;strong>1.0.1&lt;/strong> Rel: &lt;strong>2026-02-12&lt;/strong>&lt;/h2>
&lt;h3 id="summary">Summary&lt;/h3>
&lt;p>Folder restructuring and new guide sections added to organize content more effectively.&lt;/p>
&lt;h4 id="changed">Changed&lt;/h4>
&lt;ul>
&lt;li>Reorganized guide folder structure for improved navigation and content hierarchy.&lt;/li>
&lt;li>Updated menu reference for procedure change process documentation.&lt;/li>
&lt;/ul>
&lt;h4 id="added">Added&lt;/h4>
&lt;ul>
&lt;li>New guide sections on team updates, contribution flow, and related best practices.&lt;/li>
&lt;li>Expanded introductory content with getting started sections in multiple guide areas.&lt;/li>
&lt;/ul>
&lt;h2 id="ver-100-rel-2025-11-05">Ver: &lt;strong>1.0.0&lt;/strong> Rel: &lt;strong>2025-11-05&lt;/strong>&lt;/h2>
&lt;h3 id="summary-1">Summary&lt;/h3>
&lt;p>First release.&lt;/p></description></item><item><title>How-to Manage Bugs</title><link>/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/</guid><description>&lt;p>A bug is an unexpected problem in the software or hardware which can be reported for any issue in a product by e.g. product managers, product owners, test engineers, or customers (via L3 or L4 Support).&lt;/p>
&lt;p>Managing bugs is a complex task, offering many options depending on the nature of the bugs. This guide describes the overall bug management process, and links to other bug-related guides as visualized below.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-guides.png" alt="MB-G" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>This means that – when creating a bug – it’s important to:&lt;/p>
&lt;ul>
&lt;li>Classify the bug.&lt;/li>
&lt;li>Know if it is a “usual” bug, an enhancement bug, a regression bug, or a bug existing in multiple releases.&lt;/li>
&lt;/ul>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Release owners, product owners, scrum masters, software engineers, hardware engineers, test engineers, and L4 engineers.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-1.drawio.png" alt="MB-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="create-bug">Create bug&lt;/h3>
&lt;p>A bug work item in Azure DevOps (ADO) captures the problem in a way that can be communicated and corrected. The goal of creating a bug is to accurately report a problem in a way that allows the reader to understand its full impact and background. For how to set the severity, security effect, and priority of a bug, see the
&lt;a href="/docs/guides/to-review-references/configuration-management/bug-classification/" >Bug Classification&lt;/a> guide.&lt;/p>
&lt;p>If the problem is already reported by another bug, the duplicate one must be closed and linked to the already existing one.&lt;/p>
&lt;p>Bugs are created for defects found in completed work items. Under some circumstances it is possible to handle enhancements as bugs, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-enhancements/" >How-to Handle Enhancements&lt;/a>.&lt;/p>
&lt;p>Regression bugs should be marked and handled according to
&lt;a href="/docs/guides/to-review-references/configuration-management/regression-bugs/" >Regression Bugs&lt;/a>.&lt;/p>
&lt;p>Each bug must describe &lt;strong>one specific problem&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>If more than one problem is found, more than one bug must be entered in ADO.&lt;/li>
&lt;li>If the bug impacts several function areas or product lines, then clone the bug to each impacted area.&lt;/li>
&lt;li>If the bug affects more than one release, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases/" >How-to Handle Bugs in Multiple Releases&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>When creating a bug, refer to
&lt;a href="/docs/tools/to-review-references/devops/standard-bug-template/" >Standard Bug Template&lt;/a> and
&lt;a href="/docs/guides/to-review-references/configuration-management/area-and-iteration-path/" >Area and Iteration Paths&lt;/a> for mandatory fields to fill in.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note&lt;/strong>: The assigned area path, which identifies the product or version where the issue was found, &lt;strong>should never be changed&lt;/strong>. If it&amp;rsquo;s necessary to assign the bug to a different area path, please follow the process for deferred bugs, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How-to Handle Deferred Bugs&lt;/a>.&lt;/p>&lt;/blockquote>
&lt;h3 id="check-dor">Check DoR&lt;/h3>
&lt;p>All available information must be clearly described in the bug work item’s mandatory data.&lt;/p>
&lt;p>Bugs related to specific work items (e.g., features, user stories, etc.) must be linked with the work item itself.&lt;/p>
&lt;p>The new bug is assigned to the product owner or the scrum master.&lt;/p>
&lt;p>The product owner or the scrum master verifies that the
&lt;a href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/#bug" >definition of ready (DoR)&lt;/a> is met.&lt;/p>
&lt;h3 id="ccb-decision">CCB decision&lt;/h3>
&lt;p>The
&lt;a href="/docs/mp028/roles-and-teams/teams/" >change control board (CCB)&lt;/a> decides if the bug shall be fixed or not, and whether it should be accepted for the current release or assigned to a future release. If a bug is not properly assigned, the CCB is responsible for making sure that the bug is correctly addressed. See
&lt;a href="#state-and-transitions" >State and transitions&lt;/a> for further details.&lt;/p>
&lt;p>CCB involvement is strictly required for post-release bugs including L4 bugs and their definition of done (DoD), see
&lt;a href="/docs/guides/to-review-references/l4-and-maintenance/dod-for-l4-bugs/" >DoD for L4 bugs&lt;/a>. CCB decisions must be recorded appropriately.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> Product owners, release owners, and scrum masters - if they are also part of the CCB - can close anything within the scope of the CCB group, including bugs, using the recommended best practices and the “4 eyes rule”. They can also decide the priority of the &lt;strong>introduced bugs&lt;/strong>, and are expected to take decisions within two weeks and to finalize (close) the bugs in two sprints.&lt;/p>
&lt;p>The goal is to have virtual &lt;strong>zero&lt;/strong> test (introduced) bugs by the end of the sprint. If any bugs slip to the next sprint, they &lt;strong>must be prioritized&lt;/strong> by the development team and fixed. All possible reasons for closure are accepted as long as they are documented.&lt;/p>&lt;/blockquote>
&lt;p>Changes in the project’s scope and decisions on what bugs shall be included in a specific release can only be done by the CCB.&lt;/p>
&lt;p>Only product owners or the CCB can change the severity. The reason must be documented, and the bug author must be notified.&lt;/p>
&lt;p>Bugs that impact safety, security, or multiple teams must be escalated to the CCB. CCB approval is also required to &lt;strong>defer introduced bugs&lt;/strong> to future releases, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How-to Handle Deferred Bugs&lt;/a>.&lt;/p>
&lt;h3 id="investigate">Investigate&lt;/h3>
&lt;p>Impact analysis must be done for every new bug: which requirements and/or functions need to be re-tested, which documents need to be updated, and the impacts on other parts of the system must be evaluated and described; impact analysis needs to be tailored to the stream needs.&lt;/p>
&lt;p>The standard impact analysis template for bug consists of 5 questions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>No.&lt;/th>
&lt;th>Question&lt;/th>
&lt;th>Explanation&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>What is affected?&lt;/td>
&lt;td>Please identify the specific product name, version, and components that are impacted by the change or issue.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2&lt;/td>
&lt;td>How is it affected?&lt;/td>
&lt;td>Analyze the nature and extent of the impact on the identified areas. Consider how general system functions, performance, properties, and libraries are affected by the change.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>What is the solution and how long will it take?&lt;/td>
&lt;td>Propose viable solutions to fix the issue. This may involve technical fixes, process adjustments, or resource allocation. Estimate the time required to implement the proposed solutions, considering the complexity and resources needed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>What needs to be changed?&lt;/td>
&lt;td>Clearly define the changes required to address the impact. This includes modifications to design and documents including user documentation and security documentation. For document please list the document ID, title and version. For code please list the code file name in repository.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5&lt;/td>
&lt;td>What tests need to be executed?&lt;/td>
&lt;td>Please list here the required test cases to be executed, including test cases to be rerun and/or new test cases to be developed, to ensure the bug is fixed without introducing new issues, e.g. regression testing related to security for changes to security critical components.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For bugs in Functional Safety related releases (interference free included), please use
&lt;a href="https://abb.sharepoint.com/sites/OnePCP-DMS/Mig_CT_QMS/Forms/All%20Documents.aspx?id=%2Fsites%2FOnePCP%2DDMS%2FMig%5FCT%5FQMS%2F00%20Common%20Quality%20System%2F04%20Product%20Development%20and%20Release%2F13%20Configuration%20Management%2F02%20Configuration%20Change%20Control%2FImpact%20Analysis%20Questions%2F3BSE042623%5FSafety%20Impact%20Analysis%20Questions%20%2D%20Error%20Corrections%2Etxt&amp;amp;amp=&amp;amp;parent=%2Fsites%2FOnePCP%2DDMS%2FMig%5FCT%5FQMS%2F00%20Common%20Quality%20System%2F04%20Product%20Development%20and%20Release%2F13%20Configuration%20Management%2F02%20Configuration%20Change%20Control%2FImpact%20Analysis%20Questions" target="_blank"
rel="noopener noreferrer" >IA Questions for Error Corrections: 3BSE042623&lt;/a> and
&lt;a href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B0F9BECA0-8255-400C-8976-56AA0A7A6903%7D&amp;amp;file=3BSE058012_A_en_How_to_fill_in_the_Safety_Impact.doc&amp;amp;action=default&amp;amp;mobileredirect=true" target="_blank"
rel="noopener noreferrer" >IA Guidance Safety - 3BSE058012&lt;/a>.&lt;/p>
&lt;p>Security analysis must be completed for every new bug, and critical issues are discussed with the cyber security engineer.&lt;/p>
&lt;p>Investigation information, such as impact analysis, CCB decisions, implementation proposals, and other critical details, &lt;strong>must not&lt;/strong> be shared in the “Discussion” field since it will be lost if a bug is cloned. Instead such information can be stored in other fields such as &amp;ldquo;System Info&amp;rdquo;, &amp;ldquo;Description&amp;rdquo;, &amp;ldquo;CCB Discussion&amp;rdquo;, &amp;ldquo;Impact Analysis&amp;rdquo;, or &amp;ldquo;Workarounds&amp;rdquo;.&lt;/p>
&lt;h3 id="plan">Plan&lt;/h3>
&lt;p>For each bug, once the bug is “Active” or “Approved”, it is good practice for team members to create tasks in ADO to best handle all the required actions. The tasks must be linked to the bug filling the “Estimate” field according to the information provided in the estimate comment, e.g.:&lt;/p>
&lt;ul>
&lt;li>Development&lt;/li>
&lt;li>Test&lt;/li>
&lt;li>Documentation writing&lt;/li>
&lt;li>Others&lt;/li>
&lt;/ul>
&lt;p>If the bug was identified without a test case, a new test case at the appropriate level (unit test, component test, or product test) should be created. If the test case already exists but some test steps are missing, the test case should be updated.&lt;/p>
&lt;p>A test case affected by a bug must be set to “Failed”, regardless of the bug severity. If required by the project, notes can be added to the test report, and/or the test case can be split into smaller test cases.&lt;/p>
&lt;h3 id="fix">Fix&lt;/h3>
&lt;p>For ”High” and ”Critical” bugs, corrective action should be identified to avoid future regression: improvements in development, improvements in technical documentation, and new tests (automatic functional tests, unit tests, and/or test cases to be added to the test plan).&lt;/p>
&lt;p>A good practice is to frequently add comments to the bug with the work-in-progress details. Once a bug is fixed and integrated into the new build, set the bug state to “Resolved”, add a comment in the discussion, and assign a bug to the tester for verification.&lt;/p>
&lt;p>Code review is mandatory for new code and code changes (pull request). The bug work item must be linked to the code changes.&lt;/p>
&lt;h3 id="verify">Verify&lt;/h3>
&lt;p>Once fixed, the bug is verified by the test engineer and then assigned back to the scrum master for the last check or reactivated if the issue is not resolved. It is the product owner&amp;rsquo;s responsibility to identify the most appropriate test environment.&lt;/p>
&lt;h3 id="check-dod">Check DoD&lt;/h3>
&lt;p>Before closure, the scrum master or the product owner verifies that DoD is met.&lt;/p>
&lt;h3 id="close-bug">Close bug&lt;/h3>
&lt;p>The product owner is accountable for the bug’s closure and can delegate to someone else.&lt;/p>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="state-and-transitions">State and transitions&lt;/h3>
&lt;figure id="figure-figure-2-bug-state-diagram">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-2.drawio.png" alt="State and Transitions" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 2: Bug State Diagram
&lt;/figcaption>&lt;/figure>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>State&lt;/th>
&lt;th>Reason&lt;/th>
&lt;th>Explanation&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>New&lt;/strong> &lt;br/>(Assigned to: product owner or scrum master)&lt;/td>
&lt;td>New&lt;/td>
&lt;td>The bug is created, but no decision has been taken if it shall be implemented or not. It may be incomplete in this state.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Investigation complete&lt;/td>
&lt;td>Investigation is done, awaiting CCB decision for next step.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Not fixed&lt;/td>
&lt;td>The defect was not fixed when set to &amp;ldquo;Resolved&amp;rdquo; or &amp;ldquo;Closed&amp;rdquo;, and it needs to be re-evaluated.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Test failed&lt;/td>
&lt;td>Test failed after the defect was set to &amp;ldquo;Resolved&amp;rdquo; or &amp;ldquo;Closed&amp;rdquo;, and it needs to be re-evaluated.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Active&lt;/strong> &lt;br/> (Assigned to: HW/SW engineer or technical writer)&lt;/td>
&lt;td>Investigate&lt;/td>
&lt;td>The bug is sent for investigation.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Approved&lt;/td>
&lt;td>The bug is approved by the CCB to be corrected.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Not fixed&lt;/td>
&lt;td>The defect was not fixed when set to &amp;ldquo;Resolved&amp;rdquo;, and it needs to be corrected.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Test failed&lt;/td>
&lt;td>Test failed after the defect was set to &amp;ldquo;Resolved&amp;rdquo;, and it needs to be corrected.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Regression&lt;/td>
&lt;td>A closed bug that was once fixed and verified has re-appeared. &lt;br/>It is preferred to create a new bug when this occurs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Reactivated&lt;/td>
&lt;td>A deferred bug is reactivated (within the same release).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Resolved&lt;/strong> &lt;br/> (Assigned to: scrum master,&lt;br/>test engineer, or product owner)&lt;/td>
&lt;td>Fixed&lt;/td>
&lt;td>The bug has been resolved and awaiting formal closing.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>As designed&lt;/td>
&lt;td>The bug is suggested to be rejected. The product works as designed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Cannot reproduce&lt;/td>
&lt;td>The bug cannot be reproduced.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Obsolete&lt;/td>
&lt;td>The bug is no longer valid.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Resolved in error&lt;/td>
&lt;td>The bug was closed without being resolved.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Will not fix&lt;/td>
&lt;td>The bug is valid. CCB decided to accept the defect for the product as reported in the bug and not to invest resources to fix it.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Closed&lt;/strong> &lt;br/> (Accountable: product owner)&lt;/td>
&lt;td>Verified&lt;/td>
&lt;td>The bug is resolved and verified, and all associated work has been completed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Fixed and verified&lt;/td>
&lt;td>The bug is fixed and verified, and all associated work has been completed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>As designed&lt;/td>
&lt;td>This is not a bug. The product works as designed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Cannot reproduce&lt;/td>
&lt;td>The bug cannot be reproduced.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Copied to Backlog&lt;/td>
&lt;td>A post-release bug affecting an already delivered release.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Deferred&lt;/td>
&lt;td>The bug is deferred to another product release. A new bug is created in the deferred context.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Duplicate&lt;/td>
&lt;td>The bug is a duplicate of another bug.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;/td>
&lt;td>Obsolete&lt;/td>
&lt;td>The bug is no longer valid.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Note&lt;/strong>: Streams can use different ADO templates using other states and transitions.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="../bug-classification" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Bug Classification&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../how-to-handle-enhancements" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Handle Enhancements&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../regression-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Regression Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../how-to-handle-bugs-in-multiple-releases" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Handle Bugs in Multiple Releases&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../how-to-handle-deferred-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Handle Deferred Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../../l4-and-maintenance/dod-for-l4-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>DoD for L4 bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../..//quality-and-kpi/dor-dod-guideline" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Definition of Ready and Definition of Done&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/devops/standard-bug-template" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Standard Bug Template&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/mp028/roles-and-teams/teams" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Change Control Board&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Teams</title><link>/docs/mp028/roles-and-teams/teams/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/teams/</guid><description>&lt;p>In certain situations, teams are involved in process activities. A team consists of a set of persons with assigned roles.&lt;/p>
&lt;h2 id="agile-team">Agile Team&lt;/h2>
&lt;p>An Agile Team is responsible to define, build, test, and deploy an incremental solution in iterations. The team consists of a cross-functional group with a recommended size of 5 to 11 people.
The team consists of motivated individuals with delegated authority to provide functionality with built-in quality. The functionality is regularly demonstrated to show progress with working solutions for stakeholders. Any feedback from stakeholders at demos is used to improve the solution.
The team members have a shared responsibility for the deliverables they provide. There can be a rotating responsibility of the roles attached to a team – e.g. the same person works as a Software Engineer, Test Engineer, and Quality Engineer depending on what work the team needs to do.
The teams regularly meet and plan together at the increment planning events.
It is recommended to keep the team members co-located in the same place for efficiency.&lt;/p>
&lt;h3 id="responsibilities">Responsibilities&lt;/h3>
&lt;ul>
&lt;li>The Agile Team inherits the responsibilities of the Product Owner, Scrum Master, Hardware Engineer, Software Engineer, Test Engineer, and Quality Engineer roles.&lt;/li>
&lt;li>Estimates the size and complexity of the work.&lt;/li>
&lt;li>Determines the technical design in their area of concern, within the architectural guidelines.&lt;/li>
&lt;li>Commits to the work it can accomplish in an iteration or Increment (PI) timebox.&lt;/li>
&lt;li>Implements the functionality.&lt;/li>
&lt;li>Tests the functionality.&lt;/li>
&lt;li>Integrate and demonstrate the functionality.&lt;/li>
&lt;li>Deploys the functionality to staging and production.&lt;/li>
&lt;li>Supports and/or builds the automation necessary to build the continuous delivery pipeline.&lt;/li>
&lt;li>Continuously improves their process.&lt;/li>
&lt;li>Learn together.&lt;/li>
&lt;/ul></description></item><item><title>Bug Classification</title><link>/docs/guides/to-review-references/configuration-management/bug-classification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/bug-classification/</guid><description>&lt;p>This guide describes how bugs – when they are created in Azure DevOps (ADO) – also are classified to ensure that they are handled with regards to their severity and potential impact.&lt;/p>
&lt;p>Together with other bug-related guides, it provides information to help ensure correct handling of all types of bugs. It relates to PCP R&amp;amp;D’s overall bug management process, described in
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>, as visualized below.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-guides.png" alt="MB-G" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="severity-evalutation">Severity evalutation&lt;/h2>
&lt;p>When testing software or hardware, managing bugs can be a daunting task. With limited resources, time pressure, or upcoming deadlines - the teams quickly need to analyze and decide the order the defects should be corrected, starting with the most important ones first.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/bug-classification-1.drawio.png" alt="DC-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>The submitter (typically the test engineer or the L4 engineer) sets the severity of the bug based on the estimated customer impact. Discuss any changes to the severity with the submitter, and document the motivation for the change in the bug work item.&lt;/p>
&lt;p>If it&amp;rsquo;s a security bug, the submitter also sets the security effect. If the security effect is set to &amp;ldquo;To be determined&amp;rdquo;, it will later be evaluated by the change control board (CCB). The cyber security engineer calculates the CVSS score as part of the severity evaluation, and the severity may have to be revised based on the score. If it isn&amp;rsquo;t a security bug, make sure the security effect is set to &amp;ldquo;No security bug&amp;rdquo;.&lt;/p>
&lt;p>The product manager or product owner (e.g., in a CCB meeting) typically sets priorities based on the order of importance or urgency.&lt;/p>
&lt;h2 id="severity-definition">Severity definition&lt;/h2>
&lt;p>Severity describes the failure or vulnerability impact that a bug could cause (from the perspective of) a customer, determined by the organization responsible for the software or hardware.&lt;/p>
&lt;p>Evaluate security bugs with the common vulnerability scoring system (CVSS), and use
&lt;a href="https://www.first.org/cvss/calculator" target="_blank"
rel="noopener noreferrer" >FIRST&amp;rsquo;s calculator&lt;/a> to calculate the score. Document the CVSS score, including the complete vector, the severity value, and the severity rating (low, medium, high, or critical) in the bug. For a security bug not yet released, calculate the CVSS base score. For a security bug in a released product, also calculate the temporal CVSS score.&lt;/p>
&lt;p>The CCB and the cyber security engineer decide if the severity given by the CVSS score should be used directly as the severity for the bug or if the severity should be different from the calculated CVSS score. E.g., if the criticality of a component is low, the severity may be set lower than the CVSS score indicates.&lt;/p>
&lt;h3 id="1---critical">1 - Critical&lt;/h3>
&lt;p>The bug causes impairment of critical system functions or unrecoverable data loss, and no workaround solution exists. Typically, these are bugs that stop a single function or executable, and normal operation of the function is not possible.&lt;/p>
&lt;p>For the customer, the bug could cause loss of life, loss of production, or serious security/safety violations.&lt;/p>
&lt;p>A critical-security bug has a &lt;strong>CVSS score&lt;/strong> between &lt;strong>9.0-10.0&lt;/strong>.&lt;/p>
&lt;h3 id="2---high">2 - High&lt;/h3>
&lt;p>The bug causes impairment of a system function, but a workaround exists. Typically, these bugs affect functionality, produce erroneous or unexpected results or prevent the function from completing.&lt;/p>
&lt;p>For the customer, the bug could cause significant instability for a function, extra effort for the workaround, or result in a customer requirement not being met.&lt;/p>
&lt;p>A high-security bug has a &lt;strong>CVSS score&lt;/strong> between &lt;strong>7.0-8.9&lt;/strong>.&lt;/p>
&lt;h3 id="3---medium">3 - Medium&lt;/h3>
&lt;p>The bug causes a minor loss in a system function. Typically, these bugs produce erroneous or unexpected results. An easy workaround allows the function to continue and does not prevent further progress in other areas.&lt;/p>
&lt;p>For the customer, the bug means the product requirement is met but causes customer irritation could result in a loss of sales.&lt;/p>
&lt;p>A medium-security bug has a &lt;strong>CVSS score&lt;/strong> between &lt;strong>4.0-6.9&lt;/strong>.&lt;/p>
&lt;h3 id="4---low">4 - Low&lt;/h3>
&lt;p>The bug causes inconvenience or annoyance. Typically, these are more of a cosmetic nature, such as documentation issues, spelling errors, and changes to labels or colors.&lt;/p>
&lt;p>For the customer, the bug doesn&amp;rsquo;t adversely affect the function or usability.&lt;/p>
&lt;p>A low-security bug has a &lt;strong>CVSS score&lt;/strong> between &lt;strong>0.1-3.9&lt;/strong>.&lt;/p>
&lt;h2 id="security-effect-definition">Security effect definition&lt;/h2>
&lt;p>&amp;ldquo;Security effect&amp;rdquo; in the bug tracking system is based on the
&lt;a href="https://learn.microsoft.com/en-us/azure/security/develop/threat-modeling-tool-threats" target="_blank"
rel="noopener noreferrer" >Microsoft STRIDE threat model&lt;/a>.&lt;/p>
&lt;p>This model looks at threats from an attacker’s perspective and defines six threat categories. If there is more than one applicable threat category, select the most relevant one.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Security effect / Threat category&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Spoofing&lt;/td>
&lt;td>A bug that may allow an attacker to pose as something or somebody else.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Tampering&lt;/td>
&lt;td>A bug that may allow modification of data or code (at rest or in transfer)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Repudiation&lt;/td>
&lt;td>A bug that may allow a user to deny having performed an action. For example, if a user performs an illegal operation that the system can’t trace.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Information Disclosure&lt;/td>
&lt;td>A bug that may allow exposure of information to users who are not supposed to have access to it.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Denial of Service&lt;/td>
&lt;td>A bug that may deny or degrade service to valid users. These are typically bugs that affect the availability and reliability of the system.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Elevation of Privilege&lt;/td>
&lt;td>A bug that may allow a user to gain increased capability, typically an anonymous or standard user that may gain root or admin capabilities. In an ICS this could also be an operator account that suddenly gains the capability of a safety user or engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Attack Surface Reduction&lt;/td>
&lt;td>This Security Effect is not a STRIDE threat but is used to indicate an action needed to reduce the attack surface of the system. Could be to add a closure of a TCP port not needed, or by default disabling a service only needed in special use cases.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>To be Determined&lt;/td>
&lt;td>The CCB evaluates the security bug later&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Not a Security Bug&lt;/td>
&lt;td>Indicates that the bug has no known security effect.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>More information about security threats and software vulnerabilities is available in the
&lt;a href="/docs/guides/cyber-security/software-vulnerabilities-and-threats" >Software Vulnerabilities and Threats&lt;/a> guide.&lt;/p>
&lt;h2 id="priority-definition">Priority definition&lt;/h2>
&lt;p>The priority indicates the order bugs should be corrected and set by the CCB. The priority is defined relative to other reported bugs. Engineers use this field to prioritize their work.&lt;/p>
&lt;p>CCB is allowed to reprioritize the bugs if it helps the teams to understand what to correct first.&lt;/p>
&lt;h3 id="1---immediate">1 - Immediate&lt;/h3>
&lt;p>Correct the bug immediately - it&amp;rsquo;s blocking the development and must be fixed.&lt;/p>
&lt;h3 id="2---high-1">2 - High&lt;/h3>
&lt;p>Fix the priority 2 (high) bugs before the priority 3 (medium) bugs.&lt;/p>
&lt;h3 id="3---medium-1">3 - Medium&lt;/h3>
&lt;p>Fix the priority 3 (medium) bugs before the priority 4 (low) bugs.&lt;/p>
&lt;h3 id="4---low-1">4 - Low&lt;/h3>
&lt;p>Fix the priority 4 (low) bugs if time allows.&lt;/p></description></item><item><title>How-to Handle Deferred Bugs</title><link>/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/</guid><description>&lt;p>During the development of a release, if a bug is found but the CCB decides to fix it in a later version, the bug is deferred. After the official release, it will then be a known bug in the product or system.&lt;/p>
&lt;p>This guide describes how to handle deferred bugs and also includes a Q&amp;amp;A with questions related to deferred bugs.&lt;/p>
&lt;p>Together with other bug-related guides, it provides information to help ensure the correct handling of all types of bugs. It relates to PCP R&amp;amp;D’s overall bug management process, described in
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>, as visualized below.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-guides.png" alt="MB-G" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> The concept of deferred bugs &lt;strong>applies to&lt;/strong> official releases made available to customers and technology projects. The same workflow should be applied to post-release bugs, with the exception that the reason &amp;ldquo;Copied to Backlog&amp;rdquo; should be used to clone them and to assign them to the target release. For L4 bugs, the L4 DoD must be met before taking this action, see
&lt;a href="/docs/guides/to-review-references/l4-and-maintenance/dod-for-l4-bugs/" >DoD for L4 bugs&lt;/a>.&lt;br>&lt;/p>&lt;/blockquote>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Configuration managers, product owners, scrum masters, and test engineers.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs-1.drawio.png" alt="MB-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="identify-target-releases">Identify target releases&lt;/h3>
&lt;p>The version to which the bug is deferred may be known or unknown at the time of deferring:&lt;/p>
&lt;ul>
&lt;li>If the target release is unknown, clone the bug and put it in the backlog.&lt;/li>
&lt;li>If the target release is known, clone the bug and assign it to the identified target release(s). When a deferred bug is planned for a future release, it is considered a scope bug for that release.&lt;/li>
&lt;/ul>
&lt;h3 id="close-bug-as-deferred">Close bug as deferred&lt;/h3>
&lt;p>Close the bug with the reason &amp;ldquo;Deferred&amp;rdquo;. Do not change any fields used for planning, such as iteration path or area path.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note&lt;/strong>: For post-release bugs, follow the same rule and select the reason &amp;ldquo;Copied to Backlog&amp;rdquo;.&lt;/p>&lt;/blockquote>
&lt;h3 id="clone-bug">Clone bug&lt;/h3>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> Steps 1-5 are automatically performed if the &amp;ldquo;Clone Bug&amp;rdquo; extension is installed, see
&lt;a href="/docs/tools/to-review-references/devops/recommendedextensions/" >Recommended Extensions&lt;/a>. The extension is triggered automatically when saving a bug with the state &amp;ldquo;Closed&amp;rdquo; and the reason &amp;ldquo;Deferred&amp;rdquo; or &amp;ldquo;Copied to backlog&amp;rdquo;. You can also perform the steps manually by clicking on &amp;ldquo;Clone as duplicate&amp;rdquo;.&lt;/p>&lt;/blockquote>
&lt;ol>
&lt;li>(Automatic) Clone the bug.&lt;/li>
&lt;li>(Automatic) Add &amp;ldquo;Clone of &lt;em>bug ID -&lt;/em>&amp;rdquo; to the title.&lt;/li>
&lt;li>(Automatic) Set &amp;ldquo;ScopeBug=True&amp;rdquo; in the clone just created.&lt;/li>
&lt;li>(Automatic) Set &amp;ldquo;Cloned=Yes&amp;rdquo; in the clone just created.&lt;/li>
&lt;li>(Automatic) Add a link of type &amp;ldquo;duplicate&amp;rdquo; / &amp;ldquo;duplicate of&amp;rdquo; between the original bug and the clone.&lt;/li>
&lt;li>(Manual) Set the target release, see
&lt;a href="/docs/guides/to-review-references/configuration-management/area-and-iteration-path/" >Area and Iteration Path&lt;/a>.&lt;/li>
&lt;li>(Manual) Save the cloned bug.&lt;/li>
&lt;/ol>
&lt;p>If the bug affects multiple releases, repeat the steps above for each release as described in
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases/" >How to Manage Bugs in Multiple Releases&lt;/a>.&lt;/p>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="related-fields">Related fields&lt;/h3>
&lt;p>Check the
&lt;a href="/docs/tools/to-review-references/devops/standard-bug-template/" >Standard Bug Template&lt;/a> for more information about the &amp;ldquo;ScopeBug&amp;rdquo; and &amp;ldquo;Cloned&amp;rdquo; fields.&lt;/p>
&lt;h3 id="qa">Q&amp;amp;A&lt;/h3>
&lt;p>&lt;strong>Can I re-open a bug that has been closed as &amp;ldquo;Deferred&amp;rdquo;?&lt;/strong>&lt;/p>
&lt;p>No, planning a deferred bug, e.g., deferring it to a known version or putting it in the backlog, means planning its clone, i.e., the copied bug with &amp;ldquo;ScopeBug=True.&amp;rdquo; If the team can fix a previously deferred bug within the same release (e.g., if the release deadline is postponed), the original bug can be reactivated, and the cloned ones can be closed as obsolete.&lt;/p>
&lt;p>&lt;strong>Can I close a bug as deferred if I&amp;rsquo;m not planning to fix it in a future release?&lt;/strong>
No, the reason &amp;ldquo;Deferred&amp;rdquo; should only be used for bugs that should be fixed in a future release. Use the reason &amp;ldquo;Will not Fix&amp;rdquo; if there is no intention to fix the bug. In the same way, the reason &amp;ldquo;Will not Fix&amp;rdquo; should not be used to defer a bug.&lt;/p>
&lt;p>&lt;strong>Who can defer a bug?&lt;/strong>&lt;/p>
&lt;p>The development teams and product owners &lt;strong>can propose&lt;/strong> to defer a bug by commenting on the bug’s “Discussion field”. However, only the CCB &lt;strong>can decide&lt;/strong> to defer a bug.&lt;/p>
&lt;p>&lt;strong>Why are some bugs deferred?&lt;/strong>&lt;/p>
&lt;p>There can be many motivations for deferring a bug, such as the required effort to fix or test it, the risk of delaying a release, the availability of resources, or the possible impact on the system.&lt;/p>
&lt;p>&lt;strong>How to identify known bugs that have been deferred?&lt;/strong>&lt;/p>
&lt;p>After the bug has been deferred and the clone has been created and linked as described above, the original bug can be found by:&lt;/p>
&lt;ul>
&lt;li>State = Closed.&lt;/li>
&lt;li>Reason = Deferred.&lt;/li>
&lt;/ul>
&lt;p>After deferring, cloned bugs will be in the backlog or in a future iteration, and they can be identified by:&lt;/p>
&lt;ul>
&lt;li>State = Not Closed.&lt;/li>
&lt;li>ScopeBug = True.&lt;/li>
&lt;li>&amp;ldquo;HowFound&amp;rdquo; does not contain &amp;ldquo;Post Release&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>How to identify the scope bugs of an ongoing release?&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Bugs are planned for the current release (e.g., by area/iteration).&lt;/li>
&lt;li>ScopeBug = True.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>How to identify introduced bugs in an ongoing release?&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Bugs found in the current release (e.g., by area/iteration).&lt;/li>
&lt;li>ScopeBug = False.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>How to find the deferred bugs of an ongoing release (for decision-making before releasing)?&lt;/strong>&lt;/p>
&lt;p>Query the bugs found in the release where:&lt;/p>
&lt;ul>
&lt;li>State = Closed.&lt;/li>
&lt;li>Reason = Deferred.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>How to identify known open bugs in a release in production?&lt;/strong>&lt;/p>
&lt;p>Query the bugs found in the release where:&lt;/p>
&lt;ul>
&lt;li>State = Not Closed.&lt;/li>
&lt;li>ScopeBug = True.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>What to do if the deferred bug exists in multiple versions?&lt;/strong>&lt;/p>
&lt;p>Clone the bug multiple times, one for each version where it is known to exist and needs to be fixed. In this way, its fix will be planned and tracked separately.&lt;/p>
&lt;p>&lt;strong>Is a bug closed with the resolved reason &amp;ldquo;Will not fix&amp;rdquo; a deferred bug?&lt;/strong>&lt;/p>
&lt;p>No, this is not a deferred bug. Resolved reason &amp;ldquo;Will not fix&amp;rdquo; means that the bug is acknowledged as a defect, but there is no intention to work and fix it in the future.&lt;/p>
&lt;p>&lt;strong>How can I identify bugs still affecting a released product version?&lt;/strong>&lt;/p>
&lt;p>Query for closed bugs where either:&lt;/p>
&lt;ul>
&lt;li>Resolved reason = Will not Fix.&lt;/li>
&lt;li>Reason = Deferred.&lt;/li>
&lt;li>Reason = Copied to Backlog.&lt;/li>
&lt;/ul>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="../how-to-manage-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>How-to Manage Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../how-to-handle-bugs-in-multiple-releases" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>How-to Handle Bugs in Multiple Releases&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../area-and-iteration-path" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Area and Iteration Path&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/devops/recommendedextensions" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Recommended Extensions&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/devops/standard-bug-template" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Standard Bug Template&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>How-to Handle Enhancements</title><link>/docs/guides/to-review-references/configuration-management/how-to-handle-enhancements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/how-to-handle-enhancements/</guid><description>&lt;p>A work item of type &amp;ldquo;Bug&amp;rdquo; can be used to suggest an enhancement, something that is not a real defect, but an idea for improvement. This guide describes how to handle enhancements as bugs.&lt;/p>
&lt;p>Together with other bug-related guides, it provides information to help ensure correct handling of all types of bugs. It relates to PCP R&amp;amp;D’s overall bug management process, described in
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>, as visualized below.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-guides.png" alt="MB-G" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>There are two origins of enhancements as bugs:&lt;/p>
&lt;ul>
&lt;li>When the change control board (CCB) recognizes a reported bug as an enhancement.&lt;/li>
&lt;li>When it for some reason is not possible to create a new feature of a good enhancement idea.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> Remember that all bugs (including enhancement bugs) must be deferred or closed at the end of the project, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How-to Handle Deferred Bugs&lt;/a>.&lt;/p>&lt;/blockquote>
&lt;p>You find further information and a Q&amp;amp;A about enhancements as bugs under
&lt;a href="#details" >Details&lt;/a>.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Configuration managers, release owners, product owners, quality control managers, test engineers, and hardware engineers.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-handle-enhancements-1.drawio.png" alt="enhancement-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="create-a-bug-of-an-enhancement-idea">Create a bug of an enhancement idea&lt;/h3>
&lt;p>(This step is only valid for the case when it is a conscious choice to create a bug of an enhancement idea.)&lt;/p>
&lt;p>When creating the bug, state clearly in the description that it is an enhancement idea and the reason to why it is not possible to create a new feature as preferred.&lt;/p>
&lt;h3 id="recognize-a-bug-as-an-enhancement">Recognize a bug as an enhancement&lt;/h3>
&lt;p>After the definition of ready (DoR) is checked, the CCB decides about the bug.&lt;/p>
&lt;p>If the issue reported in the bug is recognized not as a defect, but as designed or as an improvement idea, the CCB can decide to consider the suggested enhancement to improve the product. The CCB records the discussion in the bug.&lt;/p>
&lt;h3 id="bug-to-feature">Bug to feature&lt;/h3>
&lt;p>The product owner closes the bug with reason “As Designed” in agreement with the CCB.
This reason will make sure that the bug work item is not counted as a defect in KPIs.&lt;/p>
&lt;p>Then the product owner creates a new feature and links it to the bug. The feature should contain a re-elaborated description of the enhancement idea, sufficient for a feature.&lt;/p>
&lt;p>The recommended link between the original bug and the new feature is “Related”. A team can adopt a different convention if desired, but it’s best to avoid parent/child or predecessor/successor as they could impact visualization in “Boards and Delivery Plans” in Azure DevOps. The link is needed only for reference purpose, the link type is not used in KPIs.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> Important - work item hierarchy&lt;/p>
&lt;p>Each feature must have an epic as its parent. Assign an epic as parent of the new feature if a good match exists in state “New” or create a new epic as parent.&lt;/p>
&lt;p>Do not break DoR/DoD (definition of done) rules: if an epic is already “Active”, do not add more features. The reason is that if more and more features are added to an epic that is “Active”, it will be very difficult to complete the epic. When the feature is added to an epic, the estimation needs to be updated. It is not necessary to invest much time to make a first estimation of the feature, a high-level estimation is sufficient at this point and can be refined later when the DoR is checked.&lt;/p>
&lt;p>For example, when a new feature is created:&lt;/p>
&lt;ul>
&lt;li>If an epic already exists that is a good match and is not started yet, add the feature to the epic and update the estimation of the epic.&lt;/li>
&lt;li>Otherwise, create an epic to contain the feature and possibly group features from enhancement ideas in bugs. Testing the epic in this case is less meaningful, there may not be test cases associated directly with the epic, since it may contain unrelated features, so testing is performed at feature level and the parent epic can be closed when all features are closed.&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;h3 id="feature-to-completion">Feature to completion&lt;/h3>
&lt;p>After the feature has been created, it follows the lifecycle of any feature, with its decision making, planning, change management, validation, etc. For example, if someone wishes the feature to be added to an ongoing release, it has to go through the change request process, it will not be automatically added to the scope.&lt;/p>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="about-enhancement-as-bugs">About enhancement as bugs&lt;/h3>
&lt;p>Enhancements as bugs are precious, as they are a way to understand the expectations of users and to capture ideas to improve our products. They can relate to existing or new functionality, and a bug work item created post release can be an enhancement too.&lt;/p>
&lt;p>However, such enhancement ideas need to be evaluated and planned and they can have an impact on for example existing functionalities, release schedules, resource allocations, quality, like any other changes.&lt;/p>
&lt;p>Enhancements as bugs should not be used as a way to bypass change requests, CCB decisions, requirements processes or to manipulate bug KPIs. If these processes were bypassed, there would be a high risk of feature creep, resulting in delay and poor quality to try to do too much in an uncontrolled way.&lt;/p>
&lt;p>For this reason, if an enhancement idea coming from a bug is thought valuable by the product owner and the CCB, it is managed as a new feature. The following flow chart illustrates the origin and outcome of an enhancement as bug, and the table below gives examples of what is considered enhancements and not.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-handle-enhancements-2.drawio.png" alt="enhancement-2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Enhancement&lt;/th>
&lt;th>NOT an Enhancement&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Suggestion to improve the user interface.&lt;/td>
&lt;td>User interface does not work as designed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>New functionality or robustness improvement related to an existing functionality.&lt;/td>
&lt;td>Defect with low severity.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cosmetic improvement.&lt;/td>
&lt;td>Change request for an ongoing release.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>The bug creator thought it was a real defect, either found internally or created as a L4 bug, then it was recognized as an enhancement.&lt;/td>
&lt;td>Real defect, hidden as enhancement bug to influence KPIs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>The bug creator had an enhancement idea and wanted to capture it and submit it.&lt;/td>
&lt;td>Defect that the CCB has decided to defer or not to fix at all.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="qa">Q&amp;amp;A&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Question&lt;/th>
&lt;th>Answer&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>What is the severity of an enhancement as a bug?&lt;/td>
&lt;td>The perceived severity when opening the bug does not matter. An enhancement as a bug is as designed, it is not a defect.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>What if a bug that is possibly an enhancement is very small and a feature seems too big to manage it?&lt;/td>
&lt;td>When the CCB evaluates the bug work item, the CCB can decide to accept it as a defect, most likely a bug with low severity, and to process it with other bugs. In that case it contributes to bug KPIs and it is not considered an enhancement. This choice may be controversial, and the CCB should consider the size, effort, impact and risk with respect to the planned scope and commitments.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Does the severity of enhancements as bugs affect KPIs?&lt;/td>
&lt;td>Bugs closed &amp;ldquo;As Designed&amp;rdquo; do not contribute to defect KPIs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>How to propose an enhancement as a bug as a change request for an ongoing release?&lt;/td>
&lt;td>Follow the steps under
&lt;a href="#activities" >Activities&lt;/a>, then open a change request for the new feature to be added to the scope.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>What if the enhancement as a bug is a very big functionality or requires major changes?&lt;/td>
&lt;td>If the idea is very valuable and a feature is too small, the new requirement may be managed as a new epic instead and follow the epic processes.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Do we need to reach out to the CCB / product owner before creating the bug?&lt;/td>
&lt;td>Yes, it is recommended and in that case the product owner can define a feature directly instead of a bug.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Who raises an enhancement as a bug?&lt;/td>
&lt;td>Any team member who is directly or not directly connected to the product and wants to contribute is welcome to propose ideas. Typical roles: software engineer, hardware engineer, test engineer.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Can an enhancement as bug be deferred?&lt;/td>
&lt;td>The bug must be closed before the end of the ongoing release. If it is recognized as an enhancement, it is closed with reason &amp;ldquo;As Designed&amp;rdquo;. The linked feature is prioritized and planned like other Features, so it may or may not be included in the same release as decided by the CCB. If the bug is accepted as a real defect and not an enhancement, it must either be fixed or deferred or rejected before the end of the ongoing release.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>What is a negative consequence of creating more enhancements as bugs instead of features?&lt;/td>
&lt;td>It may take more time to analyze bugs and fix them, because of the &amp;ldquo;noise&amp;rdquo; created by enhancements as bugs. Instead, features can be processed directly as new ideas and will not steal time from bug analysis and bug fixing.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="../how-to-manage-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Manage Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../how-to-handle-deferred-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Handle Deferred Bugs&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>How-to Handle Bugs in Multiple Releases</title><link>/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases/</guid><description>&lt;p>A bug can exist in multiple releases, and such bugs can be challenging to track and fix. This guide describes how to manage them.&lt;/p>
&lt;p>Together with other bug-related guides, it provides information to help ensure correct handling of all types of bugs. It relates to PCP R&amp;amp;D’s overall bug management process, described in
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>, as visualized below.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-guides.png" alt="MB-G" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> This guide focuses on bugs existing in multiple releases of the same product, it does not cover common components reused in multiple products or systems.&lt;/p>&lt;/blockquote>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Product owners and configuration managers.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases.drawio.png" alt="Activities" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="discover-if-a-bug-exists-in-multiple-releases">Discover if a bug exists in multiple releases&lt;/h3>
&lt;p>It may be tricky to discover if a bug exists in multiple releases. When a bug is reported, it is a good practice to try to find out whether this bug existed in other releases.&lt;/p>
&lt;p>Sometimes it is easier to find out, sometimes it may be more time-consuming and it can be considered as too much effort.&lt;/p>
&lt;p>When fixing the bug, the developer may notice that the code where the code fix is necessary exists in other versions, so the bug may exist in other versions too.&lt;/p>
&lt;p>When working on a maintenance release, it may be discovered that the bug exists in newer releases.&lt;/p>
&lt;h3 id="clone-bug-to-affected-releases">Clone bug to affected releases&lt;/h3>
&lt;p>For each release/version/track (that is still in an active state according to the product&amp;rsquo;s lifecycle policy) in which the bug is known to exist, clone the bug as described in the procedure below. If the bug exists in a large number of releases, the change control board (CCB) decides where it makes sense to clone it and writes this information in the bug discussion.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> Steps 1-5 are automatically performed if the &amp;ldquo;Clone Bug&amp;rdquo; extension is installed, see
&lt;a href="/docs/tools/to-review-references/devops/recommendedextensions/" >Recommended Extensions&lt;/a>. The extension is triggered automatically when saving a bug with the state &amp;ldquo;Closed&amp;rdquo; and reason &amp;ldquo;Deferred&amp;rdquo;. You can also perform the steps manually by clicking on &amp;ldquo;Clone as duplicate&amp;rdquo;.&lt;/p>&lt;/blockquote>
&lt;ol>
&lt;li>(Automatic) Clone the bug.&lt;/li>
&lt;li>(Automatic) Add &amp;ldquo;Clone of &lt;em>bug ID -&lt;/em>&amp;rdquo; to the title.&lt;/li>
&lt;li>(Automatic) Set &amp;ldquo;ScopeBug&amp;rdquo; = &amp;ldquo;true&amp;rdquo; in the clone just created.&lt;/li>
&lt;li>(Automatic) Set &amp;ldquo;Cloned&amp;rdquo; = &amp;ldquo;true&amp;rdquo; in the clone just created.&lt;/li>
&lt;li>(Automatic) Add a link of type &amp;ldquo;duplicate&amp;rdquo;/&amp;ldquo;duplicate of&amp;rdquo; between the original bug and the clone.&lt;/li>
&lt;li>(Manual) Set the target release, see
&lt;a href="/docs/guides/to-review-references/configuration-management/area-and-iteration-path/" >Area and Iteration Path&lt;/a>.&lt;/li>
&lt;li>(Manual) Check that the &amp;ldquo;How found&amp;rdquo; field is properly filled in (&amp;ldquo;Post release&amp;rdquo; for backporting and &amp;ldquo;Forward Port&amp;rdquo; for forwardporting).&lt;/li>
&lt;li>(Manual) Save the cloned bug.&lt;/li>
&lt;/ol>
&lt;p>Cloning the bug in this way follows the same strategy as bug deferring. This method allows to associate bugs that are copies of each other and belong to different releases.&lt;/p>
&lt;h3 id="track-decisions-planning-fixes-and-validation-for-each-release">Track decisions, planning, fixes and validation for each release&lt;/h3>
&lt;p>From now on, follow the normal bug management process, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>The CCB can decide to fix the bug, ensuring it will be planned, fixed, and validated (including fulfillment of DoR and DoD).&lt;/li>
&lt;li>The CCB can decide to acknowledge the bug but not to fix it, i.e. set the reason to &amp;ldquo;Will not fix&amp;rdquo; (see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How-to Handle Deferred Bugs&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h3 id="transfer-the-bug-fix-across-different-releases">Transfer the bug fix across different releases&lt;/h3>
&lt;p>When possible, merging the bug fix to the branch of the target release can be an efficient way to transfer the bug fix. However, this may require additional effort, for example, if the code on the target branch is significantly different and several complex conflicts occur. The fix and the impact on different branches can be different, so also tests to validate the bug fix can be different.&lt;/p>
&lt;h3 id="find-all-the-releases-where-the-bug-is-known-and-where-it-is-fixed">Find all the releases where the bug is known and where it is fixed&lt;/h3>
&lt;p>Make a tree query based on the duplicate/duplicate of link type (instead of parent/child) to show all the known instances of a bug in a tree query.&lt;/p>
&lt;p>For each known instance of the bug, the state and other information can be visualized in the query, showing where it is fixed, where it is planned, and where it will not be fixed.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases-duplicatetree.png" alt="DT example" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="about-bugs-in-multiple-releases">About bugs in multiple releases&lt;/h3>
&lt;p>A bug can exist in multiple releases for different reasons, for example:&lt;/p>
&lt;ul>
&lt;li>A bug was deferred for some releases before being fixed, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How-to Handle Deferred Bugs&lt;/a>.&lt;/li>
&lt;li>A bug was found after the release.&lt;/li>
&lt;li>A bug was found during internal tests before release, but the code containing the problem existed in past releases too.&lt;/li>
&lt;li>A bug that did not appear before can be discovered due to a change in the code or an environment change.&lt;/li>
&lt;/ul>
&lt;p>The “bug in multiple releases” concept applies to releases that have been officially released to customers and internal releases, still under development.&lt;/p>
&lt;h3 id="about-back--and-forwardporting">About back- and forwardporting&lt;/h3>
&lt;p>Depending on where the bug is first discovered, the process of fixing the bug can be referred to as:&lt;/p>
&lt;ul>
&lt;li>Backporting: fixing the bug in an older version.&lt;/li>
&lt;li>Forwardporting: fixing the bug in a newer version.&lt;/li>
&lt;/ul>
&lt;p>Backporting does not apply to hardware.&lt;/p>
&lt;p>Forwardporting is highly recommended, otherwise, a bug fixed in a previous version may re-appear in a newer version and result in a regression bug, see
&lt;a href="/docs/guides/to-review-references/configuration-management/regression-bugs/" >Regression Bugs&lt;/a>.&lt;/p>
&lt;p>When planning to port a bug already fixed in a release to a different release, the effort of all the necessary activities needs to be taken into consideration, for example, fixing code, testing, and updating documentation. Even in the case where the fix is a simple merge with very few conflicts and the test itself is quick, preparing the environment and the preconditions for testing can take a significant time.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="../how-to-manage-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Manage Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../how-to-handle-deferred-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Handle Deferred Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../regression-bugs" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Regression Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="../area-and-iteration-path" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Area and Iteration Path&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/devops/recommendedextensions" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Recommended Extensions&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Tools</title><link>/docs/release-notes/tools/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>/docs/release-notes/tools/</guid><description>&lt;p>User-facing updates for the Tools section. Newest entries come first.&lt;/p>
&lt;h2 id="ver-tools-101-rel-2026-02-12">Ver: &lt;strong>Tools 1.0.1&lt;/strong> Rel: &lt;strong>2026-02-12&lt;/strong>&lt;/h2>
&lt;h3 id="summary">Summary&lt;/h3>
&lt;p>Improved link and image reliability in the To Review References content.&lt;/p>
&lt;h4 id="fixed">Fixed&lt;/h4>
&lt;ul>
&lt;li>Repaired broken relative links to Guides content in DevOps and document template pages.&lt;/li>
&lt;li>Corrected image references to match actual file names in template and tool pages.&lt;/li>
&lt;li>Fixed an incorrect absolute link for the Process Teams reference.&lt;/li>
&lt;/ul>
&lt;h2 id="ver-100-rel-2026-02-11">Ver: &lt;strong>1.0.0&lt;/strong> Rel: &lt;strong>2026-02-11&lt;/strong>&lt;/h2>
&lt;h3 id="summary-1">Summary&lt;/h3>
&lt;p>First release.&lt;/p></description></item><item><title>Regression Bugs</title><link>/docs/guides/to-review-references/configuration-management/regression-bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/regression-bugs/</guid><description>&lt;p>A regression bug is a bug that causes a completed feature that worked correctly to stop working after updates (e.g., system upgrade, system patching, or bug fixes). This definition applies both before and after releasing the feature to customers.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> A change in a feature behavior or the removal of one feature through a requirement or a business input is not a regression bug. It is a normal development activity.&lt;/p>&lt;/blockquote>
&lt;p>This guide describes the relevance and policies of regression bugs. Together with other bug-related guides, it provides information to help ensure correct handling of all types of bugs. It relates to PCP R&amp;amp;D’s overall bug management process, described in
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>, as visualized below.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs-guides.png" alt="MB-G" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="why-regression-bugs">Why regression bugs?&lt;/h2>
&lt;p>Some reasons to identify and manage regression bugs are:&lt;/p>
&lt;ul>
&lt;li>From a customer point of view, they could damage the perceived quality of our products, because something that was working before is broken.&lt;/li>
&lt;li>From an R&amp;amp;D point of view:
&lt;ul>
&lt;li>Understanding their root cause can lead to improvements and prevent more bugs (e.g. more effective impact analysis, code review, or regression tests).&lt;/li>
&lt;li>Regression bugs can be prioritized in a release before they impact customers.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="what-to-do-with-regression-bugs">What to do with regression bugs?&lt;/h2>
&lt;p>Once a regression bug has been identified:&lt;/p>
&lt;ul>
&lt;li>If the release is still in progress, it must be fixed in the same release (unless the CCB approves an exception).&lt;/li>
&lt;li>If the regression bug is open on a release already delivered, it must be properly planned and prioritized in the product backlog by the product owner.&lt;/li>
&lt;/ul>
&lt;h2 id="relevant-fields">Relevant fields&lt;/h2>
&lt;p>&lt;strong>Regression&lt;/strong>: &amp;ldquo;False&amp;rdquo; by default, &amp;ldquo;True&amp;rdquo; if the bug is a regression bug.&lt;/p>
&lt;p>This field can be set:&lt;/p>
&lt;ul>
&lt;li>When the bug is created, for example, if the bug was found during a regression test.&lt;/li>
&lt;li>Later when someone realizes that it is a regression bug.&lt;/li>
&lt;/ul>
&lt;h2 id="query-example">Query example&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/regression-bugs-query.png" alt="RBG" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure></description></item><item><title>Pull Request Reference</title><link>/docs/guides/to-review-references/configuration-management/pull-request-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/pull-request-reference/</guid><description>&lt;h2 id="what-is-a-pull-request">What is a pull request?&lt;/h2>
&lt;p>A Pull Request (PR) is a way to get your changes integrated into protected branches, making sure the changes fulfill a defined set of policies or quality gates.&lt;/p>
&lt;h2 id="where-should-a-pull-request-be-used">Where should a pull request be used?&lt;/h2>
&lt;p>A pull request is used from a feature branch to a protected branch, typically to the development/integration or master/main branch. Direct commits are possible only on feature branches.&lt;/p>
&lt;p>If someone attempts to commit code changes on a protected branch, git reminds the user that it&amp;rsquo;s not possible and that a pull request must be used instead.&lt;/p>
&lt;h2 id="mandatory-policies">Mandatory policies&lt;/h2>
&lt;ul>
&lt;li>Require a minimum number of reviewers to approve, typically 1 or 2 Code Guards&lt;/li>
&lt;li>A person cannot approve his/her own code changes&lt;/li>
&lt;li>A description of the content to integrate is provided by the person who creates the pull request&lt;/li>
&lt;li>All comments must be resolved&lt;/li>
&lt;li>Changes must be linked to a work item&lt;/li>
&lt;li>Build validation&lt;/li>
&lt;/ul>
&lt;h2 id="optional-policies">Optional policies&lt;/h2>
&lt;ul>
&lt;li>Tool integration, e.g.
&lt;a href="https://docs.sonarqube.org/latest/analyzing-source-code/pull-request-analysis/" target="_blank"
rel="noopener noreferrer" >SonarQube pull request decoration&lt;/a>&lt;/li>
&lt;li>Other tools for static or dynamic code analysis could be integrated.&lt;/li>
&lt;/ul>
&lt;h2 id="customizing-pull-requests">Customizing pull requests&lt;/h2>
&lt;p>A pull request template can be used to define a standard pull request description and checklist format.
&lt;a href="https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-request-templates?view=azure-devops" target="_blank"
rel="noopener noreferrer" >Azure DevOps PR template documentation&lt;/a>&lt;/p>
&lt;h2 id="who-can-approve-a-pull-request">Who can approve a pull request?&lt;/h2>
&lt;p>The people who can approve a pull request are sometimes called Code Guards or Committers.&lt;/p>
&lt;p>Pull Requests to dev/integration (or master if following a GitHub flow) should be approved by someone in the development team, but an engineer cannot approve his/her own pull request.&lt;/p>
&lt;ul>
&lt;li>In some cases, anyone can contribute to a repository, but only a few selected people have the authority to approve/reject those contributions.&lt;/li>
&lt;li>In some cases, any team member can approve/reject a code change, and the pull request becomes a way to ensure that the code is reviewed by at least one person other than the author before it is accepted.&lt;/li>
&lt;/ul>
&lt;p>It is possible to automatically add reviewers to pull requests that change files in specific directories and files or to all pull requests in a repo:
&lt;a href="https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops&amp;amp;tabs=browser#automatically-include-code-reviewers" target="_blank"
rel="noopener noreferrer" >https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops&amp;tabs=browser#automatically-include-code-reviewers&lt;/a>&lt;/p>
&lt;p>Pull Requests to Master (in the recommended Gitflow branch model) shall be approved by someone in the CM group or the Product Owner.&lt;/p>
&lt;h2 id="how-to-review-the-changes">How to review the changes?&lt;/h2>
&lt;p>See the
&lt;a href="/docs/guides/to-review-references/software-development/code-review-guideline/" >Code Review&lt;/a> guideline.&lt;/p></description></item><item><title>Organization</title><link>/docs/other/organization/</link><pubDate>Tue, 16 Jul 2024 00:00:00 +0000</pubDate><guid>/docs/other/organization/</guid><description/></item><item><title>Additional Information</title><link>/docs/mp028/additional-info/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/additional-info/</guid><description>&lt;h2 id="listing-of-related-documents">Listing of related documents&lt;/h2>
&lt;table class="general-table-standard">
&lt;thead>
&lt;tr>
&lt;th>Ref #&lt;/th>
&lt;th>Document Kind, Title&lt;/th>
&lt;th>Document No.&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1.&lt;/td>
&lt;td>Process, Cyber Security Management System&lt;/td>
&lt;td>&lt;a href="https://abb.sharepoint.com/:f:/r/teams/Cobottest/Shared%20Documents/All%20ELSP%20Global%20Procedures/MP025%20-%20Cyber%20Security%20Management%20System/Guideline?csf=1&amp;web=1&amp;e=UilXzc">MP 025&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2.&lt;/td>
&lt;td>Process, Active Product Management (APM)&lt;/td>
&lt;td>&lt;a href="https://abb.sharepoint.com/:w:/r/teams/Cobottest/Shared%20Documents/01%20-%20Active%20Products%20management%20ELSP/Guideline/ELSP_MP%20001%20Active%20Products%20management_V4.docx?d=wd170fc2e00fd4231b8ea7d9efd08bbe4&amp;csf=1&amp;web=1&amp;e=5iccBi">MP 001&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Requirements</title><link>/docs/mp028/process/functional-process/requirements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/process/functional-process/requirements/</guid><description>&lt;p>The requirements process describes how the market requirements are received from PM and transformed into epics, features, and stories.&lt;/p>
&lt;p>The functional analysis (not the solution/design) is also part of the requirement process and how the functionality from the stakeholder perspective is captured in the user stories. Please note; that a stakeholder for a user story can be an external customer, another agile team, or anyone else requesting the functionality.&lt;/p>
&lt;h2 id="process-overview">Process Overview&lt;/h2>
&lt;h4 id="principles">Principles&lt;/h4>
&lt;ul>
&lt;li>Analyze product and technology requirements from PM and define epics (functional and non-functional).&lt;/li>
&lt;li>Analyze architecture needs and define product epics (enablers).&lt;/li>
&lt;li>Break down epics into features and stories.&lt;/li>
&lt;li>It is highly recommended that the size of epics, features, and stories fit within releases, increments, and sprints.&lt;/li>
&lt;li>Ensure the content of epics, features, and stories is clear and precise, including description, acceptance criteria, estimates, paths, links, and security information.&lt;/li>
&lt;li>Visualize dependencies and ensure consistency and traceability of epics, features, and stories.&lt;/li>
&lt;/ul>
&lt;p>Implemented epics/features/stories are not maintained, i.e., new epics/features/stories are defined if changes are needed&lt;/p>
&lt;h4 id="activities">Activities&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/functional-process/requirements.svg" alt="requirement" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="artifacts">Artifacts&lt;/h4>
&lt;!--
Artifact: Marketing Requirements Specification (MRS)
Description: Needs from different stakeholders are defined as product requirements. Owned by PM
RACI: (R): Product Manager; (A): Product Manager; (C): Cyber Security Engineer, Product Owner, Test Lead; (I): Architect, Division Cyber Security Officer, Safety Engineer
Receiver: Product Owner
Tailoring: The actual format can be decided by each agile team. The important aspect is to document the market requirements.
-->
&lt;!--
Artifact: Technical Requirements Specification (TRS)
Description: The Technical Requirements Specification are based on an MRS from PM. They can be refined by R&amp;D. Enablers added.
RACI: (R): Product Owner; (A): Product Owner; (C): Architect, Product Manager; (I): Cyber Security Engineer, Test Lead
Receiver: Product Owner
Tailoring: The actual format can be decided by each agile team. The important aspect is to document the technical requirements.
-->
&lt;!--
Artifact: Epic
Description: An Epic is a container for a significant development initiative that captures the more substantial investments within an agile team.
RACI: (R): Product Owner; (A): Product Owner; (C): Architect, Cyber Security Engineer, Agile Team, Test Lead, Product Manager; (I):
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Feature
Description: Features are services that fulfill stakeholder needs. Each includes a name, benefits hypothesis, and acceptance criteria. They should have a size to fit within a PI.
RACI: (R): Agile Team; (A): Product Owner; (C): Architect, Cyber Security Engineer, Safety Engineer; (I): Test Lead, Product Manager
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: User Story
Description: Functional description, shown on team boards.
RACI: (R): Development Team; (A): Product Owner; (C): Development Team; (I):
Receiver: Agile Team
Tailoring: -
-->
&lt;table class="artifact-table">
&lt;thead>
&lt;tr>
&lt;th>Artifact&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>RACI&lt;/th>
&lt;th>Receiver&lt;/th>
&lt;th>Tailoring&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Marketing Requirements Specification (MRS)&lt;/td>
&lt;td>Needs from different stakeholders are defined as product requirements. Owned by PM&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Product Owner, Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Architect, Division Cyber Security Officer, Safety Engineer&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;td>The actual format can be decided by each agile team. The important aspect is to document the market requirements.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Technical Requirements Specification (TRS)&lt;/td>
&lt;td>The Technical Requirements Specification are based on an MRS from PM. They can be refined by R&amp;D. Enablers added.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Test Lead&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;td>The actual format can be decided by each agile team. The important aspect is to document the technical requirements.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Epic&lt;/td>
&lt;td>An Epic is a container for a significant development initiative that captures the more substantial investments within an agile team.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Cyber Security Engineer, Agile Team, Test Lead, Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Feature&lt;/td>
&lt;td>Features are services that fulfill stakeholder needs. Each includes a name, benefits hypothesis, and acceptance criteria. They should have a size to fit within a PI.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Cyber Security Engineer, Safety Engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Test Lead, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>User Story&lt;/td>
&lt;td>Functional description, shown on team boards.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Development Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Development Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Cyber Security, Safety roles should be considered when applicable.&lt;/span>
&lt;/div>
&lt;h4 id="references">References&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/requirements/agile-req-structure/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Agile Requirement Structure&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/component-capabilities-guideline/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Component Capabilities Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How to: work with Epics and Features&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/architecture/product-capabilities/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Product Capabilities Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/requirements/systemrequirement-review/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Requirement Review Guideline&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Architect</title><link>/docs/mp028/roles-and-teams/roles/architect/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/architect/</guid><description>&lt;p>The architect has an overall responsibility to define and describe the architecture and drive the major technical decisions.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>This typically includes identifying and documenting the architecturally significant aspects of the product, including requirements, design, implementation, and deployment “views” of the product.&lt;/p>
&lt;p>They participate in the definition of higher-level functional and non-functional requirements, validate technology assumptions, and analyze alternative technical solutions and trade-offs. The architect is also responsible for providing the rationale for the decisions, balancing the concerns of the various stakeholders (customers, product management, suppliers, manufacturing, etc.), evaluating alternative solutions, reducing technical risks, and ensuring that decisions are effectively communicated and validated, and adhered to.&lt;/p>
&lt;p>The architects support the product development by providing, communicating, and evolving larger technological and architectural views of the product. This includes decomposition into components and defines the interfaces between components and external APIs.&lt;/p>
&lt;p>The architecture should also support the agile-lean mindset to increase the platform functionality in iterations and increments just in time when needed. In a situation with many teams, the architecture decomposition must also enable different teams to work efficiently and visualize the technical dependencies.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Work with customers, stakeholders, and suppliers to gather knowledge about the high-level product intent and documentation requirements.&lt;/li>
&lt;li>Participate in the planning, definition, and high-level design of the product and explore different design alternatives.&lt;/li>
&lt;li>Establish critical non-functional requirements and participate in the definition of functional requirements together with product management and product owners.&lt;/li>
&lt;li>Document and maintain architecture. Define components and their internal and external interfaces (APIs).&lt;/li>
&lt;li>Plan and develop the architectural runway, i.e., identify enablers (infrastructure or architecture activities) in support of upcoming business features/capabilities.&lt;/li>
&lt;li>Work with product owners to determine capacity allocation for enablement work.&lt;/li>
&lt;li>Work with team members to analyze, split, prioritize, and realize the implementation of enablers in the architecture runway.&lt;/li>
&lt;li>Communicate architectural aspects in the increment planning events, participate in pre-planning, demos, and inspect-and-adapt meetings (retrospectives).&lt;/li>
&lt;li>Provide information to integration and test teams about the product to facilitate test development.&lt;/li>
&lt;li>Supervise and foster “built-in quality” in the teams.&lt;/li>
&lt;li>Analyze and coordinate life cycle aspects of 3rd party software updates (e.g., operating systems).&lt;/li>
&lt;li>Has responsibility for the final check of hardware regarding the choice of components to minimize the risk to get in, for example, obsolete components, non-RoHS components, and components without a second source.&lt;/li>
&lt;/ul></description></item><item><title>Architecture</title><link>/docs/mp028/process/functional-process/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/process/functional-process/architecture/</guid><description>&lt;h2 id="process-overview">Process Overview&lt;/h2>
&lt;h4 id="principles">Principles&lt;/h4>
&lt;ul>
&lt;li>Establish and maintain the product architecture based on product epics and user stories.&lt;/li>
&lt;li>Define the static and dynamic architecture with components, interfaces, and interactions.&lt;/li>
&lt;li>Using modular design to ensure loosely coupled components with independent lifecycles, separation of concerns, and future-proof extensibility.&lt;/li>
&lt;li>Evaluate aspects of architectural and design alternatives and propose implementations.&lt;/li>
&lt;li>Establish architectural roadmap and communicate technical decisions from Innovation &amp;amp; Product Platform to Solution Agile Units.&lt;/li>
&lt;li>Include security aspects in the architecture, including the security context, threat modeling, criticality analysis, and attack surface analysis.&lt;/li>
&lt;li>Continuously verify and align the architecture with the design proposed by Agile teams.&lt;/li>
&lt;li>Support the Agile teams in the breakdown of architectural requirements in backlogs.&lt;/li>
&lt;li>Monitor lifecycle aspects of 3rd party components and decide on upgrades, updates, and patches.&lt;/li>
&lt;/ul>
&lt;h4 id="activities">Activities&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/functional-process/architecture-activities.svg" alt="activities" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="artifacts">Artifacts&lt;/h4>
&lt;!--
Artifact: Product Architecture
Description: An architecture description of a product with different related components.
RACI: (R): Architect; (A): Product Owner; (C): Cyber Security Engineer, Agile Team; (I): Test Lead, Safety Engineer, Product Manager
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Product Architecture Roadmap
Description: The high-level plan for product architecture.
RACI: (R): Architect; (A): Product Owner; (C): Agile Team; (I): Product Manager, Agile Team
Receiver: Agile Team
Tailoring: Optional
-->
&lt;!--
Artifact: Product Capability
Description: Description of what the product "can do" after implementation of epic(s)
RACI: (R): Product Owner; (A): Product Owner; (C): Architect, Agile Team, Test Lead, Safety Engineer; (I): Cyber Security Engineer, Product Manager
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Threat Model
Description: A model to identify potential threats, document vulnerabilities, and suggest mitigations.
RACI: (R): Architect; (A): Product Owner; (C): Cyber Security Engineer, Agile Team, Test Lead; (I): Division Cyber Security Officer, Cyber Security Specialist, Manager, Product Manager
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Attack Surface Analysis
Description: The set of entry points that hackers can potentially use to attack the product.
RACI: (R): Architect; (A): Product Owner; (C): Cyber Security Engineer, Agile Team, Test Lead; (I): Division Cyber Security Officer, Cyber Security Specialist, Product Manager
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Security Context
Description: The security expected to be provided by the environment for a product or component.
RACI: (R): Architect; (A): Product Owner; (C): Cyber Security Engineer, Product Manager; (I): Agile Team
Receiver: Agile Team
Tailoring: -
-->
&lt;table class="artifact-table">
&lt;thead>
&lt;tr>
&lt;th>Artifact&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>RACI&lt;/th>
&lt;th>Receiver&lt;/th>
&lt;th>Tailoring&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Product Architecture&lt;/td>
&lt;td>An architecture description of a product with different related components.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Architect&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Test Lead, Safety Engineer, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Product Architecture Roadmap&lt;/td>
&lt;td>The high-level plan for product architecture.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Architect&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Product Manager, Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>Optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Product Capability&lt;/td>
&lt;td>Description of what the product “can do” after implementation of epic(s)&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Agile Team, Test Lead, Safety Engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Threat Model&lt;/td>
&lt;td>A model to identify potential threats, document vulnerabilities, and suggest mitigations.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Architect&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Agile Team, Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Division Cyber Security Officer, Cyber Security Specialist, Manager, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Attack Surface Analysis&lt;/td>
&lt;td>The set of entry points that hackers can potentially use to attack the product.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Architect&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Agile Team, Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Division Cyber Security Officer, Cyber Security Specialist, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Security Context&lt;/td>
&lt;td>The security expected to be provided by the environment for a product or component.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Architect&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Cyber Security, Safety roles should be considered when applicable.&lt;/span>
&lt;/div>
&lt;h4 id="references">References&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/architecture/architecture-document-structure/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Architecture Document Structure (Refer Modelling Structures)&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/architecture-review/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Architecture Review Checklist&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/architecture/architecture-review/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Architecture Review Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/architecture/how-to-perform-threat-modeling/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How to: Perform Threat Modeling&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/architecture/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to: Refine architecture&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/architecture/product-capabilities/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Product Capabilities Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/product-capability-template/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Product Capability Template&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>3rd Party Software Owner</title><link>/docs/mp028/roles-and-teams/roles/third-party-software-owner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/third-party-software-owner/</guid><description>&lt;p>The 3rd Party Software Owner is responsible for monitoring and maintaining 3rd-party software and open-source used in the development of ELSP products.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>ABB ELSP uses 3rd-party software, tools, and open-source components in the development of new products. The software needs to be monitored and maintained for updates, security, export control, and other lifecycle issues.&lt;/p>
&lt;p>The 3rd Party Software Owner monitors the status of software from suppliers. It includes software integrated into ABB ELSP products and the tools used in product development. He/she also evaluates risks with Open-Source licenses and makes sure no legal aspects prevent a release.&lt;/p>
&lt;p>The 3rd party software is registered in DFN, where lifecycle aspects, costs, and other issues are tracked. For Open Source, the source code is scanned by Black Duck provided by the OCC team.&lt;/p>
&lt;p>The 3rd-Party Software Owners need to collaborate with other agile teams to make sure actions are planned in increments and iterations to address any issues.&lt;/p>
&lt;p>There must be one or more 3rd Party Software Owners in an agile team. The role can be shared with other roles (e.g., the Product Owner is also responsible for 3rd-party software, and the Product Owner initiates OSS scans and reviews the result)&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Drive investigations of new 3rd party software needs.&lt;/li>
&lt;li>Monitor 3rd party software lifecycle and security vulnerabilities, and security updates, and initiate new versions and updates.&lt;/li>
&lt;li>Maintain 3rd party software and suppliers database in DFN (agreements, licenses, etc.).&lt;/li>
&lt;li>Identify and mitigate risks for Open Source licenses, operations, and cyber security.&lt;/li>
&lt;li>Ensure the 3rd party processes are followed by the agile team.&lt;/li>
&lt;li>Participate in the continuous improvement of 3rd party processes, practices, and tools.&lt;/li>
&lt;li>Give support to the organization about 3rd-party.&lt;/li>
&lt;li>Ensure ECCN numbers are received from the 3rd-party software vendor and updated in DFN.&lt;/li>
&lt;/ul></description></item><item><title>Software Development</title><link>/docs/mp028/process/functional-process/software-development/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/process/functional-process/software-development/</guid><description>&lt;p>Software development supports the incremental development of product features. Included are design, implementation, unit tests, component tests, and bug fixing. SW development can result in deliverables, e.g., firmware, applications, and tools.
For embedded systems, the software or firmware is dependent on the hardware, and the software and hardware processes need to be tightly integrated.&lt;/p>
&lt;h2 id="process-overview">Process Overview&lt;/h2>
&lt;h4 id="principles">Principles&lt;/h4>
&lt;ul>
&lt;li>Design and document the solution parallel with the code. Use design patterns for classes and methods.&lt;/li>
&lt;li>Commit code frequently, preferably daily, to ensure quality and development speed.&lt;/li>
&lt;li>Protect the code base with automated unit tests, component tests, static code analysis, and code reviews applied before acceptance.&lt;/li>
&lt;li>Ensure consistency and traceability from requirements and architecture to design code and test. Continuously refactor and refine the design, code, and tests to reduce technical debt.&lt;/li>
&lt;li>Provide input to end-user documentation.&lt;/li>
&lt;/ul>
&lt;h4 id="activities">Activities&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/functional-process/software-development-activities.svg" alt="activities" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="artifacts">Artifacts&lt;/h4>
&lt;!--
Artifact: Component Capability
Description: Describes what the component is capable to do. Lives with the component lifecycle.
RACI: (R): Agile Team; (A): Product Owner; (C): Architect, Agile Team, Safety Engineer; (I): Cyber Security Engineer
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Detailed Design
Description: Details the high-level design and describes the component structure with modules and classes as well as internal/external interfaces.
RACI: (R): Agile Team; (A): Product Owner; (C): Architect, Development Team, Safety Engineer; (I): Cyber Security Engineer
Receiver: Agile Team
Tailoring: Format can be decided per Agile team.
-->
&lt;!--
Artifact: Code
Description: High-quality code
RACI: (R): Agile Team; (A): Agile Team; (C): -; (I): -
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Unit test
Description: Unit test that ensures the quality of the units/code.
RACI: (R): Agile Team; (A): Agile Team; (C): -; (I): -
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Unit test result
Description: Result from automated unit tests managed in tools.
RACI: (R): Agile Team; (A): Product Owner; (C): -; (I): -
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Component test
Description: Component test that ensures the quality of the component.
RACI: (R): Agile Team; (A): Agile Team; (C): Cyber Security Engineer; (I): Product Owner
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Component test result
Description: Result from automated component tests managed in tools.
RACI: (R): Agile Team; (A): Product Owner; (C): -; (I): -
Receiver: Agile Team
Tailoring: -
-->
&lt;table class="artifact-table">
&lt;thead>
&lt;tr>
&lt;th>Artifact&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>RACI&lt;/th>
&lt;th>Receiver&lt;/th>
&lt;th>Tailoring&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Component Capability&lt;/td>
&lt;td>Describes what the component is capable to do. Lives with the component lifecycle.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Agile Team, Safety Engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Detailed Design&lt;/td>
&lt;td>Details the high-level design and describes the component structure with modules and classes as well as internal/external interfaces.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Development Team, Safety Engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>Format can be decided per Agile team.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Code&lt;/td>
&lt;td>High-quality code&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Unit test&lt;/td>
&lt;td>Unit test that ensures the quality of the units/code.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Unit test result&lt;/td>
&lt;td>Result from automated unit tests managed in tools.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Component test&lt;/td>
&lt;td>Component test that ensures the quality of the component.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Component test result&lt;/td>
&lt;td>Result from automated component tests managed in tools.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>User Documentation&lt;/td>
&lt;td>Drafts of user documentation describing the functionality from a user perspective.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Product Manager, Test Team, User&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Cyber Security, Safety roles should be considered when applicable.&lt;/span>
&lt;/div>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>ADO standard work item template change management process&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/code-review-guideline/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Code Review Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/component-capabilities-guideline/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Component Capabilities Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/component-capability-template/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Component Capability Template&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/component-dynamic-behavior-template/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Component Test Overview&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/cyber-security/cyber-security-in-user-documentation/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Cyber Security in User Documentation&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Manage Bugs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/describe-the-usage-of-sca-tool-template/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Describe the Usage of SCA Tool Template&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/performance-testing/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Performance Testing&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/configuration-management/pull-request-reference/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Pull Request Reference&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/suggested-frameworks/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Recommended Component Test Frameworks&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/suggested-unit-test-frameworks/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Recommended Unit Test Frameworks&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/secure-coding-guideline/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Secure Coding Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/secure-coding-guideline-dotnet/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Secure Coding Guideline, .NET&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/secure-coding-guideline-c/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Secure Coding Guideline, C&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/secure-coding-guideline-reactjs/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Secure Coding Guideline, ReactJS&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/software-artifact-model/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Software Artifact Model&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/static-code-analysis/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Static Code Analysis&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/test-techniques/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Test Techniques&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/unit-test-overview/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Unit Test Overview&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/software-development/unit-test-write-guideline/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Unit Test Writing Guideline&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Chapter Lead</title><link>/docs/mp028/roles-and-teams/roles/chapter-lead/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/chapter-lead/</guid><description>&lt;p>The Chapter Lead acts as a line manager and is responsible for a set of employees.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>He/she is actively involved with the teams, and provides support, encouragement, and delivers positive and constructive feedback daily. The Chapter Lead can influence team member satisfaction and engagement. As a result, he/she has an indirect impact on organizational productivity and even customer satisfaction.&lt;/p>
&lt;p>The Chapter lead develops the talent of his organization by identifying, developing, and promoting professionals in the teams.&lt;/p>
&lt;p>He/she is also responsible for proper competencies available in his/her Agile Unit, and to take action to close competency gaps.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Recruiting and hiring talent to fill team positions.&lt;/li>
&lt;li>Providing training and support to new hires.&lt;/li>
&lt;li>Cross-training employees to ensure job rotation and minimize assignment coverage gaps.&lt;/li>
&lt;li>Providing coaching and performance feedback to all team members.&lt;/li>
&lt;li>Communicating and ensuring understanding of functional or departmental goals.&lt;/li>
&lt;li>Monitoring individual and team metrics and performance versus targets.&lt;/li>
&lt;li>Identifying the need for corrective actions.&lt;/li>
&lt;li>Ensuring quality standards for all processes.&lt;/li>
&lt;li>Evaluating overall team and individual performance and delivering performance reviews.&lt;/li>
&lt;li>Engaging and coordinating with other line managers across the organization.&lt;/li>
&lt;li>Providing reports on productivity and other performance indicators to management.&lt;/li>
&lt;li>Identify competency gaps and ensure employees have the necessary training to perform their job.&lt;/li>
&lt;li>Ensure competency transfer when the employees leave or transfer to new assignments.&lt;/li>
&lt;/ul></description></item><item><title>Test</title><link>/docs/mp028/process/functional-process/test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/process/functional-process/test/</guid><description>&lt;p>The products are tested to provide stakeholders with information about the quality of potential deliverables or releases.&lt;/p>
&lt;p>Testing on software levels (unit and component tests) is described in the respective processes software process, and hardware process.&lt;/p>
&lt;p>Security testing is a part of testing at all levels. For more information about Security testing, see 3BSE070423 Security Testing Guideline.&lt;/p>
&lt;h2 id="process-overview">Process Overview&lt;/h2>
&lt;h4 id="principles">Principles&lt;/h4>
&lt;ul>
&lt;li>Each Agile team / release shall establish a test strategy that details the test activities based on specific needs.&lt;/li>
&lt;li>Strive for automated tests, when possible, to reduce manual and repetitive work.&lt;/li>
&lt;li>Continuously integrate and test to find bugs early and fail fast.&lt;/li>
&lt;li>Product tests shall ensure the epic&amp;rsquo;s acceptance criteria are fulfilled.&lt;/li>
&lt;li>Test performance and scalability and identify potential vulnerabilities.&lt;/li>
&lt;li>Summarize the final performed tests and conclusions in a test report.&lt;/li>
&lt;/ul>
&lt;h4 id="activities">Activities&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/functional-process/test-activities.svg" alt="activities" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="artifacts">Artifacts&lt;/h4>
&lt;!--
Artifact: Product test strategy
Description: Test strategy for a product release (including the needs for test environments and test applications).
RACI: (R): Test Lead; (A): Agile Team Owner / PO; (C): Architect, Cyber Security Engineer, Agile Team, Product Owner, Quality Control Manager, Agile team; (I): 3rd party SW engineer, Product Manager
Receiver: Agile Team
Tailoring: The format can be decided per agile team.
-->
&lt;!--
Artifact: Product test case
Description: Test cases executed in the Product Test Environment.
RACI: (R): Agile team; (A): Test Lead; (C): Cyber Security Engineer, Agile team; (I): Agile Team, Product Owner
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Product test result
Description: The outcome of executed test cases is documented in the test tool. Only the final test result is reviewed and approved.
RACI: (R): Agile team; (A): Product Owner; (C): Test Lead; (I): Cyber Security Engineer, Quality Control Manager
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Product test report
Description: A report summarizing qualitatively and quantitatively the outcome of the tests.
RACI: (R): Test Lead; (A): Product Owner; (C): Agile team; (I): Cyber Security Engineer, Agile Team, Quality Control Manager, Product Manager
Receiver: Product Owner
Tailoring: -
-->
&lt;!--
Artifact: Product test environment
Description: Description of the product test environment.
RACI: (R): Agile team; (A): Test Lead; (C): Architect, Product Owner; (I): Cyber Security Engineer, Product Manager
Receiver: Agile Team
Tailoring: The test environment can be included in the test strategy for smaller configurations.
-->
&lt;!--
Artifact: Product test applications
Description: Product test applications needed to execute tests.
RACI: (R): Agile Team; (A): Test Lead; (C): Product Owner; (I): Chapter Leader
Receiver: Agile Team
Tailoring: The test applications are part of the test environment and are managed as code.
-->
&lt;table class="artifact-table">
&lt;thead>
&lt;tr>
&lt;th>Artifact&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>RACI&lt;/th>
&lt;th>Receiver&lt;/th>
&lt;th>Tailoring&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Product test strategy&lt;/td>
&lt;td>Test strategy for a product release (including the needs for test environments and test applications).&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Agile Team Owner / PO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Cyber Security Engineer, Agile Team, Product Owner, Quality Control Manager, Agile team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>3rd party SW engineer, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>The format can be decided per agile team.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Product test case&lt;/td>
&lt;td>Test cases executed in the Product Test Environment.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Agile team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Agile Team, Product Owner&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Product test result&lt;/td>
&lt;td>The outcome of executed test cases is documented in the test tool. Only the final test result is reviewed and approved.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Quality Control Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Product test report&lt;/td>
&lt;td>A report summarizing qualitatively and quantitatively the outcome of the tests.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Agile team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Agile Team, Quality Control Manager, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Product test environment&lt;/td>
&lt;td>Description of the product test environment.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Architect, Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer, Product Manager&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>The test environment can be included in the test strategy for smaller configurations.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Product test applications&lt;/td>
&lt;td>Product test applications needed to execute tests.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Test Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Chapter Leader&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>The test applications are part of the test environment and are managed as code.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Cyber Security, Safety roles should be considered when applicable.&lt;/span>
&lt;/div>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/IAPCP/ControlledDocuments/Security%20Testing%20Gudeline.docx" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>3BSE070423 Security Testing Guideline&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="related-references">Related references&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:b:/s/OnePCP-DMS/Eaus2-TrXiZKtBTyphFPQ14BJ6m-z_R9v-5HT8kg4P_8lA?e=OfEauG" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>How to: Create a test plan in ADO&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:b:/s/OnePCP-DMS/ETDkWCNYyptCh-UUEFFA0r4BH32X6fmcf8urKt-70mNaeg?e=eVGhRw" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>Product Test&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:x:/s/OnePCP-DMS/ERfjWmruwJhOgXnvYX7JKqsBMWkAWrfTbvdRo27uAiQdiQ?e=oaxuaE" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>Test Overview&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:x:/s/OnePCP-DMS/EbNwOvhEvrlIlzdtZo6PuSEBQBftUz9eFGKmh4ZVoAR9tA?e=Ry0orw" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>Test Phase Checklist&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Cyber Security Engineer</title><link>/docs/mp028/roles-and-teams/roles/cyber-security-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/cyber-security-engineer/</guid><description>&lt;p>The Cyber Security Engineer is knowledgeable in product-related security issues and assists other roles in writing cyber security requirements, assisting with secure design, secure coding practices, security testing of software for products, and assisting the product maintenance, e.g., with vulnerability handling.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The main work of a Cyber Security Engineer is to assist the agile team and software, hardware, and test engineers with product-related security issues and solutions.&lt;/p>
&lt;p>Collaboration is an integral part of the job, as the Cyber Security Engineer may be consulted by managers, customers, and developers to solve technical challenges and determine the requirements of the product.&lt;/p>
&lt;p>Products and components must be compliant with ABB’s Minimum Cyber Security Requirements for Products (9ADB005793). Apply, when applicable, Cyber Security Requirements for Project Deployment (9ADB006087) and Minimum Cyber Security Requirements for Service (9ADB007833).&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Regularly inform and train employees in Cyber Security.&lt;/li>
&lt;li>Assist product management in capturing customer-driven product requirements on Cyber Security.&lt;/li>
&lt;li>Ensure that cyber security practices are followed (e.g., security assessment, threat modeling, static code analysis, product validation, DSAC testing, reviews, etc.).&lt;/li>
&lt;li>Defining and documenting the security architecture of the product.&lt;/li>
&lt;li>Ensure 3rd party Software (e.g., open-source) are validated for Cyber Security - this includes monitoring and managing security updates of the 3rd party Software.&lt;/li>
&lt;li>Ensure that used tools (e.g., Static Code Analysis) are configured and updated according to recommended security guidelines.&lt;/li>
&lt;li>Ensure test products are installed with appropriate security settings and security updates.&lt;/li>
&lt;li>Ensure compatibility between the products and 3rd party security products is validated (e.g., antivirus SW or application white-listing SW).&lt;/li>
&lt;li>Provide input about security recommendations to user documentation.&lt;/li>
&lt;li>Ensure Cyber Security deviations and issues are resolved, and when necessary, escalate issues to the Cyber Security Manager.&lt;/li>
&lt;li>Ensure discovered vulnerabilities are managed according to the vulnerability handling process, including support for publishing the related field communication.&lt;/li>
&lt;/ul></description></item><item><title>Release</title><link>/docs/mp028/process/functional-process/release/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/process/functional-process/release/</guid><description>&lt;p>The Release process deploys new functionality into production (continuously or on demand). It ensures all deliverables are ready to release.&lt;/p>
&lt;h2 id="process-overview">Process Overview&lt;/h2>
&lt;h4 id="principles">Principles&lt;/h4>
&lt;ul>
&lt;li>Establish release scope and associated products to be released.&lt;/li>
&lt;li>Determine the delivery media type for the release.&lt;/li>
&lt;li>Define and produce the product release documentation (3rd party, Security, Export control, standards, certificates, …)&lt;/li>
&lt;li>Ensure product release approval before delivery.&lt;/li>
&lt;li>Provide a release note detailing key characteristics of the release.&lt;/li>
&lt;/ul>
&lt;h4 id="activities">Activities&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/mp028/process/functional-process/release-activities.svg" alt="activities" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h4 id="artifacts">Artifacts&lt;/h4>
&lt;!--
Artifact: Release Roadmap
Description: Shows the overall releases by an agile team, 3-4 increments ahead
RACI: (R): Agile Team; (A): Product Owner; (C): Agile Unit Lead, Agile Portfolio Manager; (I): Chapter Lead
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: OSS Scan &amp; Clearance Report
Description: OSS Clearance report from Black Duck.
RACI: (R): Agile Team; (A): Product Owner; (C): Chapter Lead; (I): -
Receiver: Agile Team
Tailoring: -
-->
&lt;!--
Artifact: Release Media
Description: Files needed for manufacturing/Distribution to customers
RACI: (R): Agile Team; (A): Product Owner; (C): -; (I): -
Receiver: Operations
Tailoring: -
-->
&lt;!--
Artifact: Security Assessment Report
Description: Final security assessment report for the release.
RACI: (R): Cyber Security Engineer; (A): Division Cyber Security Officer; (C): Head of Cyber Security; (I): 3rd party SW engineer, Architect, Agile Team, Product Owner
Receiver: PM
Tailoring: -
-->
&lt;!--
Artifact: Certificates
Description: Certificates for the releases(ATEX, Safety, UL, CSA, GM, CE, etc.).
RACI: (R): Agile Tea; (A): Product Owner; (C): Chapter Leads; (I): CoE Leader for Certification and Standardization
Receiver: PM
Tailoring: -
-->
&lt;!--
Artifact: Release Notes
Description: Summary of the release contents, major issues and work-around
RACI: (R): Agile Team; (A): Product Owner; (C): Chapter Lead, Technical Coordinator, Test Lead, Safety Engineer, CoE Certification and Standardization; (I):
Receiver: Operations
Tailoring: -
-->
&lt;!--
Artifact: Export Control
Description: Provides information for ECCN classification for software and hardware.
RACI: (R): Agile Tea; (A): Product Owner; (C): Chapter Lead, Product Manager; (I): -
Receiver: Agile Team
Tailoring: -
-->
&lt;table class="artifact-table">
&lt;thead>
&lt;tr>
&lt;th>Artifact&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>RACI&lt;/th>
&lt;th>Receiver&lt;/th>
&lt;th>Tailoring&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Release Roadmap&lt;/td>
&lt;td>Shows the overall releases by an agile team, 3-4 increments ahead&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Agile Unit Lead, Agile Portfolio Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Chapter Lead&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OSS Scan &amp; Clearance Report&lt;/td>
&lt;td>OSS Clearance report from Black Duck.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Chapter Lead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Release Media&lt;/td>
&lt;td>Files needed for manufacturing/Distribution to customers&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Operations&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Security Assessment Report&lt;/td>
&lt;td>Final security assessment report for the release.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Cyber Security Engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Division Cyber Security Officer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Head of Cyber Security&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>3rd party SW engineer, Architect, Agile Team, Product Owner&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>PM&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Certificates&lt;/td>
&lt;td>Certificates for the releases(ATEX, Safety, UL, CSA, GM, CE, etc.).&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Chapter Leads&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>CoE Leader for Certification and Standardization&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>PM&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Release Notes&lt;/td>
&lt;td>Summary of the release contents, major issues and work-around&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Chapter Lead, Technical Coordinator, Test Lead, Safety Engineer, CoE Certification and Standardization&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Operations&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Export Control&lt;/td>
&lt;td>Provides information for ECCN classification for software and hardware.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Chapter Lead, Product Manager&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>User Documentation&lt;/td>
&lt;td>End-user documentation about product, or application.&lt;/td>
&lt;td>
&lt;table class="artifact-raci-table" style="width:100%;">
&lt;tr>
&lt;td style="text-align:center;">&lt;b>R&lt;/b>&lt;/td>
&lt;td>Agile Team&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>A&lt;/b>&lt;/td>
&lt;td>Product Owner&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>C&lt;/b>&lt;/td>
&lt;td>Sales Team, Test Lead, Safety Engineer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center;">&lt;b>I&lt;/b>&lt;/td>
&lt;td>Sales Team&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/td>
&lt;td>PM&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Cyber Security, Safety roles should be considered when applicable.&lt;/span>
&lt;/div>
&lt;h4 id="references">References&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/guides/cyber-security/cyber-security-in-user-documentation/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Cyber Security In User Documentation&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/release/release-stages/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Release Stages&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Active product management</title><link>/docs/mp028/process/functional-process/active-product-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/process/functional-process/active-product-management/</guid><description>&lt;p>
&lt;a href="https://abb.sharepoint.com/:b:/r/teams/Cobottest/Shared%20Documents/All%20ELSP%20Global%20Procedures/MP001%20-%20Active%20Products%20Management/Guideline/ELSP_MP%20001%20Active%20Products%20management_V4.pdf?csf=1&amp;amp;web=1&amp;amp;e=b6ygiE" target="_blank"
rel="noopener noreferrer" >MP 001 Active Product Management&lt;/a> is the main process to manage engineering changes to products released to customers. Engineering change can be triggered by quality issue in field, quality issue identified during internal testing or in production, or by internal employees that see potential for improvement (e.g. optimization, cost reduction, materials obsolescence etc.).&lt;/p></description></item><item><title>DevOps Specialist</title><link>/docs/mp028/roles-and-teams/roles/devops-specialist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/devops-specialist/</guid><description>&lt;p>Development, Quality Assurance, and Operations are key elements in DevOps. This concept includes the entire agile and lean culture, and at ELSP Agile Unit, we want to fully embrace this working paradigm.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The DevOps team will support a firm handshake between development and R&amp;amp;D operations that emphasizes a shift in mindset, better collaboration, and tighter integration. It unites agile, continuous delivery, automation, and much more to help agile teams to be more efficient, innovate faster, and deliver higher value to businesses and customers.&lt;/p>
&lt;p>Full-fledged DevOps will not be applicable to all the Development Agile Units. In some of them (e.g., Engineering, Operations, and Controller &amp;amp; I/O), a reduced set of practices are implemented.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Define, support to initiate and coach/train DevOps Implementation for ELSP Agile Unit.&lt;/li>
&lt;li>Advice about processes and tools and technical support to make DevOps successfully implemented by Agile teams.&lt;/li>
&lt;li>Consultant in the implementation of a highly automated CI/CD pipeline in order to deploy new software quickly and implement different kinds of product design.&lt;/li>
&lt;li>Responsible for advice about the proper tools and processes that can automate any manual tasks.&lt;/li>
&lt;li>Identify DevOps improvement potentials across ELSP Agile Unit and drive its implementation.&lt;/li>
&lt;li>Share improvements and successes within the R&amp;amp;D community.&lt;/li>
&lt;li>Ensuring that the different teams work together on common objectives towards quality and velocity of software delivery.&lt;/li>
&lt;li>The DevOps team is the coach for the DevOps initiatives implementation.&lt;/li>
&lt;li>Advice about development KPIs and support its implementation and tracking.&lt;/li>
&lt;/ul></description></item><item><title>Functional Safety Management (FSM) Manager</title><link>/docs/mp028/roles-and-teams/roles/fsm-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/fsm-manager/</guid><description>&lt;p>The Functional Safety Management (FSM) Manager is responsible for ensuring that the R&amp;amp;D organization adheres to the applicable functional safety standards, such as the IEC 61508 or IEC 61511, for safety-related development and maintenance.&lt;/p>
&lt;p>The role is mandatory for any safety-related development or maintenance project.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The FSM Manager is responsible for ensuring that normative requirements of the safety life-cycle phases are fulfilled for the safety-related products and projects. He/she does so by monitoring and controlling that processes and development work follow the standards and that functional safety is achieved and demonstrated within the R&amp;amp;D organization.&lt;/p>
&lt;p>The FSM Manager may delegate the responsibility to other roles, such as the Safety Engineer (SE), and/or teams, such as the Safety Team (whose members consist of the SEs).&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Ensures adherence to the applicable functional safety standards of the safety-relevant parts of ELSP Agile Unit QMS.&lt;/li>
&lt;li>Ensures correctness and completeness of all safety-related instructions and guidelines.&lt;/li>
&lt;li>Approves the safety-related documentation, such as the Quality &amp;amp; Safety Plan &amp;amp; the Safety Manual, from an FSM perspective for safety-related projects.&lt;/li>
&lt;li>Monitors the adherence of the safety-related projects to the safety standards and processes via the safety assurance activities e.g. via the safety assurance assessments and via dialogue with the Safety Engineers who define, coordinate, participate, and/or conduct safety-related activities both between and within safety-related development projects.&lt;/li>
&lt;li>Supervises that handling of field problems with safety relevance is handled the correct way, e.g. in time, the right action(s), etc.&lt;/li>
&lt;li>Trains and coaches in the Functional Safety procedures and methods.&lt;/li>
&lt;li>Performs internal FSM audits.&lt;/li>
&lt;/ul>
&lt;h2 id="competence">Competence&lt;/h2>
&lt;ul>
&lt;li>Undergone IEC 61508 Functional Safety training either in-house or externally.&lt;/li>
&lt;li>At least 3 years of business experience in the area of Functional Safety is desired.&lt;/li>
&lt;li>At least 3 years of business experience in the leadership position of the organization is desired.&lt;/li>
&lt;li>Higher technical education, degree or diploma, in a related discipline or equivalent engineer level responsibilities status certified by an employer in a reference letter.&lt;/li>
&lt;/ul></description></item><item><title>Process Owner</title><link>/docs/mp028/roles-and-teams/roles/process-owner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/process-owner/</guid><description>&lt;p>The process owner is responsible for creating, sustaining, and improving a specific process and has the authority to make the required changes to achieve the objectives of the process.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The process owner is a subject matter expert (SME) of the specific process but also has a broader understanding of interactions and interfaces to other processes and organizations. The process owner should have knowledge about process development methods and tools (Six Sigma, PDCA, fishbone, etc.).&lt;/p>
&lt;p>The goal for the process owner is to keep the processes as lean as possible, supporting a lean-agile approach with iterations and increments. The processes should be adaptable and possible to tailor to an agile team’s needs, where required boundaries (e.g., due to standards) are clear. Tools are utilized to support continuous development (DevOps) and automate activities where possible.&lt;/p>
&lt;p>The process owner collaborates with the practitioners of the process to collect feedback and improve the process. KPIs and discipline dashboards are monitored to ensure the process is efficient and meets the needs. The process owner collaborates closely with OpEx and the R&amp;amp;D Quality Manager to resolve issues and other organizations with process interfaces.&lt;/p>
&lt;p>For large initiatives (e.g., introducing new tools), the process owner can act as a project manager and lead a team for the changes. The process owner can request resources in the R&amp;amp;D organization to support implementing changes.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Ensuring the purpose and objectives of the process are clear.&lt;/li>
&lt;li>Explain, support, and train practitioners in the process.&lt;/li>
&lt;li>Determine and implement KPIs and discipline dashboards, evaluate the result, and take corrective actions to ensure processes are efficient and followed.&lt;/li>
&lt;li>Ensuring the process fits the needs of many agile teams, and it is possible to tailor it to specific agile team or agile unit needs.&lt;/li>
&lt;li>Ensuring efficient integration with other processes and collaborating with other process owners to optimize across processes.&lt;/li>
&lt;li>Reviewing contents, at least every 3 years, approving, and communicating process changes and changes in tools.&lt;/li>
&lt;li>Manage process change requests to closure.&lt;/li>
&lt;li>Escalate process issues and interruptions to the R&amp;amp;D Quality Manager and OpEx when necessary.&lt;/li>
&lt;li>Work closely with teams to pilot, introduce changes, communicate, and support the practitioners of the process.&lt;/li>
&lt;li>Participate in audits when requested (e.g., ISO, Security, Safety, and customer audits).&lt;/li>
&lt;/ul></description></item><item><title>Product Owner</title><link>/docs/mp028/roles-and-teams/roles/product-owner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/product-owner/</guid><description>&lt;p>The product owner (PO) is responsible for defining and prioritizing epics, features, and stories in the agile team’s backlogs to implement business-specific solutions.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>He/she shall assess the new development’s impact on the overall system.&lt;/p>
&lt;p>He/she also synchronizes priorities from different stakeholders to streamline the execution while maintaining the conceptual and technical integrity of features or components the team is responsible for. The product owner also has a significant role in ensuring quality and is empowered to accept or reject deliverables.&lt;/p>
&lt;p>The role has significant relationships and responsibilities outside the local team, e.g., participation in product management activities and ABR/QBR planning. Ideally, the product owner is collocated with the agile team, where they typically share management, incentives, and culture.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Coordinate with product management to define product-level epics and features, clarify/detail those when needed.&lt;/li>
&lt;li>Ensure that epics and features are defined, prioritized, and fulfilled “Definition of Ready” before entering the increment planning.&lt;/li>
&lt;li>Perform requirements feasibility, and impact analysis.&lt;/li>
&lt;li>Plan and carry out product discovery sessions to build a product backlog, estimate the work, and plan incremental releases.&lt;/li>
&lt;li>Ensure team deliverables in increments are on time by managing risks and maximizing learning while building software and hardware.&lt;/li>
&lt;li>Create alignment with the team, stakeholders, and product managers, around common product feature goals, coordinating dependencies.&lt;/li>
&lt;li>Participate in the definition and breakdown of market opportunities (business and technical) to features and user stories.&lt;/li>
&lt;li>Accountable for ensuring quality; he/she has the authority to accept or reject deliverables from teams based on “acceptance criteria” and “definition of done”.&lt;/li>
&lt;li>Participate in sprint planning meetings to break down user stories into tasks.&lt;/li>
&lt;li>Ensure the team is committed to the scope and priorities before the sprint starts.&lt;/li>
&lt;li>Prepare and conduct increment planning and demos.&lt;/li>
&lt;li>Prioritize and include maintenance support cases in the backlog together with product management.&lt;/li>
&lt;li>Analyze, prioritize, and manage change requests until closure.&lt;/li>
&lt;li>Initiate maintenance of released products (service packs, roll-ups, temporary corrections, etc.).&lt;/li>
&lt;li>Support the system test team by reviewing system test cases and acceptance criteria.&lt;/li>
&lt;li>Participate in demos.&lt;/li>
&lt;li>Review documentation.&lt;/li>
&lt;/ul></description></item><item><title>Scrum Master</title><link>/docs/mp028/roles-and-teams/roles/scrum-master/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/scrum-master/</guid><description>&lt;p>The Scrum Master is a servant leader and coach for an agile team. They help educate the team in Scrum, Kanban, and Lean, ensuring that the agreed Agile process is followed.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>They also help remove impediments and foster an environment for high-performing team dynamics, continuous flow, and relentless improvement.&lt;/p>
&lt;p>He/she enables teams to self-organize, self-manage, and deliver via effective Lean-Agile practices. The Scrum Master supports and enforces the Scrum process and other rules agreed upon by the team. The Scrum Master also helps the team coordinate with other teams and communicate status to management as needed.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Facilitates daily scrum meetings, sprint planning, sprint reviews, and retrospective meetings.&lt;/li>
&lt;li>Facilitates the management and tracking of the sprint backlog, giving support in writing, estimating, and splitting user stories.&lt;/li>
&lt;li>Facilitates cooperation with stakeholders such as customers, teams, product owners, management, etc.&lt;/li>
&lt;li>Helping the team to stay focused and protecting the team against external distractions.&lt;/li>
&lt;li>Ensure the team agrees on the “Definition of Done,” and that activities and deliverables fulfill the criteria.&lt;/li>
&lt;li>Helping the team to reduce risks and remove impediments raised by the team.&lt;/li>
&lt;li>Coaches the team to become self-organized.&lt;/li>
&lt;li>Coaching the team in understanding the Scrum method (values, practices, events, etc.) until fully adopted and understood.&lt;/li>
&lt;li>Helping the team to reflect on Agile and Scrum values and continuously improve their working method.&lt;/li>
&lt;li>Helping the team understand the need for clear and concise user stories.&lt;/li>
&lt;li>Working with other Scrum Masters to increase the effectiveness of the application of Scrum in the organization.&lt;/li>
&lt;li>Helping employees and stakeholders understand and enact Scrum.&lt;/li>
&lt;li>Promotes “built-in quality.”&lt;/li>
&lt;/ul></description></item><item><title>Software Engineer</title><link>/docs/mp028/roles-and-teams/roles/software-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/software-engineer/</guid><description>&lt;p>The Software Engineer creates high-quality software solutions (incl. FPGA) by analyzing requirements and designing, developing, integrating, and testing software for products.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The Software Engineer implements solutions, including testing and debugging the software. Also included are maintaining and improving the software once it is in operation. For new development, different solutions should be evaluated. The best possible solution is selected depending on value, cost, or any other constraints.&lt;/p>
&lt;p>Collaboration is an integral part of the job, as developers frequently consult with management, customer, and other developers to solve technical challenges and determine the requirements of the software product.&lt;/p>
&lt;p>Software Engineers are problem-solvers who possess analytical skills and the ability to think outside the box and comprehend advanced and complex technical products in a customer context. The solution provided by the software engineer must be professionally developed and adhere to relevant standards, guidelines, and instructions.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Understand the customer requirements and propose a possible solution (evaluate alternative solutions based on value, cost, quality, technology, etc.).&lt;/li>
&lt;li>Design and implement the solution.&lt;/li>
&lt;li>Ensure the quality of the solution (code reviews, static code analysis, code coverage, unit tests, etc.).&lt;/li>
&lt;li>Integrate the solution into the product, and ensure it works as expected.&lt;/li>
&lt;li>Improve the quality of existing software (correct defects, root cause analysis, etc.).&lt;/li>
&lt;li>Increase knowledge of relevant new technologies that can be used in the future.&lt;/li>
&lt;li>Work collaboratively and professionally with other colleagues in cross-functional teams to achieve goals.&lt;/li>
&lt;li>Apply a sense of urgency, commitment, and focus on the right priorities in developing solutions in a timely fashion.&lt;/li>
&lt;li>Provide information for manuals and review them for technical accuracy.&lt;/li>
&lt;li>Ensure required policies and standards are followed (Safety, Security, Open Source, etc.).&lt;/li>
&lt;li>Ensure the required guidelines and instructions are followed (configuration management guidelines, style guides, etc.)&lt;/li>
&lt;li>Utilize modern software engineering tools (Azure DevOps, SonarQube, Klocwork, etc.).&lt;/li>
&lt;/ul></description></item><item><title>Test Engineer</title><link>/docs/mp028/roles-and-teams/roles/test-engineer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/test-engineer/</guid><description>&lt;p>The Test Engineer develops tests (test cases, test methods, test applications), performs the tests, reports the test result, and verifies the symptoms of reported defects.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The developer and tester roles overlap in a scrum team, and the same person may perform both roles.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Develop and perform tests according to the requirements, test strategy, and test plans.&lt;/li>
&lt;li>Report quality issues and verify corrections.&lt;/li>
&lt;li>Communicate the test result to the PO and agile team member and other stakeholders.&lt;/li>
&lt;li>Choose different test methods depending on the test object.&lt;/li>
&lt;li>Cooperate with developers and product owners to define test cases and resolve issues from test execution.&lt;/li>
&lt;li>Configure and set up the test environment and test lab, and develop test applications (simulations, load tests, device configuration, etc.).&lt;/li>
&lt;li>Test Automation framework/code design to convert manual test cases to automatic ones.&lt;/li>
&lt;li>Perform pre-DSAC test.&lt;/li>
&lt;li>Focus on functional testing and exploratory testing.&lt;/li>
&lt;li>Conduct end-to-end workflow testing.&lt;/li>
&lt;li>Follow the DoD, like User Manuals Verification and Acceptance criteria for validating any User Story / Feature.&lt;/li>
&lt;li>Provide fast feedback to developers.&lt;/li>
&lt;li>Follow DevOps principles and increase the agility of deliverables without compromising on quality.&lt;/li>
&lt;/ul></description></item><item><title>Test Lead</title><link>/docs/mp028/roles-and-teams/roles/test-lead/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/mp028/roles-and-teams/roles/test-lead/</guid><description>&lt;p>The Test Lead has the responsibility for planning, performing, and evaluating tests before products are released.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>He/she collaborates with product owners, teams, and other stakeholders to understand the requirements and how to verify them.&lt;/p>
&lt;p>The Test Lead ensures (together with Test Engineers) that the requirements are testable by working with the Product Owners to define the acceptance criteria for features. The Test Lead collaborates with the Product Owner and provides the result of the tests before the feature is closed.&lt;/p>
&lt;p>The overall test result is communicated to stakeholders by the Test Lead. Critical and high-level bugs are followed up to closure with the teams. The Test Lead is also responsible for creating an efficient test process and test environment. He/she promotes automated tests when it is possible from a time/cost perspective.&lt;/p>
&lt;p>The Test Lead role exists in an agile team when there is a need to manage tests and coordinate test engineers from a product perspective.&lt;/p>
&lt;h2 id="responsibilities">Responsibilities&lt;/h2>
&lt;ul>
&lt;li>Release-wise test plan creation, considering all product integration test strategies at the product level.&lt;/li>
&lt;li>Tracking all test artifacts and test metrics.&lt;/li>
&lt;li>Highlight all issues/concerns/blockers.&lt;/li>
&lt;li>Synchronize with other Test Leads and track the test progress.&lt;/li>
&lt;li>Focus on stabilization at the product level and validation of all functional &amp;amp; non-functional requirements on the Epics level and follow DoD with acceptance criteria defined and all product-level documentation validation.&lt;/li>
&lt;li>Support DevOps &amp;amp; OpEx for continuous feedback.&lt;/li>
&lt;li>Provide demo to relevant stakeholders.&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dod--bug/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dod--bug/</guid><description>&lt;ul>
&lt;li>Is the code reviewed and issues fixed?&lt;/li>
&lt;li>Is the static code analysis performed and issues fixed?&lt;/li>
&lt;li>Is the user documentation, including release notes, updated?&lt;/li>
&lt;li>Is the architecture and design documentation updated?&lt;/li>
&lt;li>For security-critical components and security-relevant bugs, are the threat models, attack surface and criticality analysis, and the security assessment updated?&lt;/li>
&lt;li>Are the unit, functional, and/or security tests updated and passed?&lt;/li>
&lt;li>Are other similar issues identified?&lt;/li>
&lt;li>Are bugs created for other affected products or product versions?&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dod--epic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dod--epic/</guid><description>&lt;ul>
&lt;li>All child features are closed&lt;/li>
&lt;li>All product integration tests (PIT) passed, and existing bugs have CCB decision&lt;/li>
&lt;li>Product-level documentation approved&lt;/li>
&lt;li>Epic demonstrated&lt;/li>
&lt;li>Input to end-user documentation and release notes provided&lt;/li>
&lt;li>Installation/delivery package updated&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dod--feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dod--feature/</guid><description>&lt;ul>
&lt;li>All child stories are closed&lt;/li>
&lt;li>All unit and component tests passed&lt;/li>
&lt;li>Component documentation approved&lt;/li>
&lt;li>Demo performed (or planned)&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dod--story/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dod--story/</guid><description>&lt;ul>
&lt;li>Confirm tasks are completed.&lt;/li>
&lt;li>Impact on architecture, design, and interfaces identified and updated.&lt;/li>
&lt;li>Code reviewed and issues fixed.&lt;/li>
&lt;li>Static Code Analysis is performed, and issues are fixed.&lt;/li>
&lt;li>Unit tests passed and included in the automated test environment.&lt;/li>
&lt;li>Cumulative unit and functional regression tests passed.&lt;/li>
&lt;li>End-user documentation is updated.&lt;/li>
&lt;li>The story fulfills the acceptance criteria.&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dor--bug/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dor--bug/</guid><description>&lt;ul>
&lt;li>Is sufficient information available to evaluate the bug (e.g., images, dumps, log files)?&lt;/li>
&lt;li>Can the problem be reproduced?&lt;/li>
&lt;li>Are severity, priority, and security effect assigned?&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dor--epic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dor--epic/</guid><description>&lt;ul>
&lt;li>Understandable Title and Description&lt;/li>
&lt;li>Testable acceptance criteria established&lt;/li>
&lt;li>If/how to demo defined&lt;/li>
&lt;li>Effort estimated&lt;/li>
&lt;li>Link to System Epic&lt;/li>
&lt;li>Dependencies to other Epics defined&lt;/li>
&lt;li>Preliminary stream architecture&lt;/li>
&lt;li>Draft features&lt;/li>
&lt;li>The area and iteration path is set&lt;/li>
&lt;li>Security impact considered&lt;/li>
&lt;li>The epic is ranked in the backlog&lt;/li>
&lt;li>Epic reviewed&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dor--feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dor--feature/</guid><description>&lt;ul>
&lt;li>Understandable Title and Description&lt;/li>
&lt;li>Testable acceptance criteria established&lt;/li>
&lt;li>If/how to demo defined&lt;/li>
&lt;li>The feature is estimated to ensure it can be completed in an increment&lt;/li>
&lt;li>Preliminary design ready&lt;/li>
&lt;li>Draft user stories&lt;/li>
&lt;li>Link to Epic&lt;/li>
&lt;li>Dependencies on other features defined&lt;/li>
&lt;li>The area and iteration path is set&lt;/li>
&lt;li>Security impact considered&lt;/li>
&lt;li>The feature is ranked in the backlog&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dor--story/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dor--story/</guid><description>&lt;ul>
&lt;li>The story is clarified and accepted.&lt;/li>
&lt;li>Enough information is provided to be able to start task breakdown by the teams.&lt;/li>
&lt;li>The story is estimated to ensure it can be completed in a sprint.&lt;/li>
&lt;li>Acceptance criteria are provided and agreed upon.&lt;/li>
&lt;li>The story/enabler is aligned with the architecture.&lt;/li>
&lt;/ul></description></item><item><title/><link>/snippet/dor--system-epic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dor--system-epic/</guid><description>&lt;ul>
&lt;li>Functional: The title/description/acceptance criteria come from an approved system requirement&lt;/li>
&lt;li>Enabler/Architectural: Understandable title, description and acceptance criteria&lt;/li>
&lt;li>An initial breakdown into epics involving streams&lt;/li>
&lt;li>The system epic backlog shall be ranked for the target release&lt;/li>
&lt;li>Area path set&lt;/li>
&lt;/ul></description></item><item><title>Agile Requirement Structure</title><link>/docs/guides/to-review-references/requirements/agile-req-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/requirements/agile-req-structure/</guid><description>&lt;p>The agile requirement structure shows the breakdown of agile requirements in Decision Focus (within Portfolio and Product Management (PPM)) and Azure DevOps (within PCP R&amp;amp;D). The system requirements from PPM are mirrored to system epics in Azure DevOps (ADO) for further refinement.&lt;/p>
&lt;p>This guide gives an overview of the different levels of requirements and their analysis, planning and execution. It also includes a Q&amp;amp;A to further clarify requirements-related questions.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Product owners.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;h3 id="system-requirements">System requirements&lt;/h3>
&lt;ul>
&lt;li>A system requirement describes an addition, or delta, to an existing release.&lt;/li>
&lt;li>A system requirement is a market requirement based on customer needs.&lt;/li>
&lt;li>A system requirement can be a requirement on a system-, product- or component level, or a non-functional requirement (NFR) such as performance, standards, or legal.&lt;/li>
&lt;li>Change requests on system requirements are managed in Decision Focus.&lt;/li>
&lt;/ul>
&lt;h3 id="system-epics">System epics&lt;/h3>
&lt;ul>
&lt;li>System epics in ADO are cloned from system requirements in Decision Focus.&lt;/li>
&lt;li>Additional system epics can be created by R&amp;amp;D (enablers, e.g., architectural, improvements, preparing test environments, and developing tests).&lt;/li>
&lt;li>System epics are analyzed by R&amp;amp;D and broken down into epics.&lt;/li>
&lt;/ul>
&lt;h3 id="epics-features-stories">Epics, features, stories&lt;/h3>
&lt;ul>
&lt;li>An epic is preferably solution-oriented with clear objectives.&lt;/li>
&lt;li>An epic can only be assigned to one development stream (split if needed).&lt;/li>
&lt;li>A feature can only be assigned to one team (split if needed).&lt;/li>
&lt;li>Only prioritized epics are broken down for the next increment (not all upfront).&lt;/li>
&lt;/ul>
&lt;h2 id="agile-requirement-structure">Agile requirement structure&lt;/h2>
&lt;p>The system epics are broken down into epics and assigned to system streams or development streams. The system epics are kept in a &amp;ldquo;holding area&amp;rdquo; in ADO (SPI Coordination) until they can be analyzed and broken down into epics. The product owners in the different streams collaborate to break down the system epics into epics. All epics are assigned to streams, and the streams can start working on them when capacity is available.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/agile-req-structure-1.drawio.png" alt="RQ" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="analysis--planning">Analysis &amp;amp; planning&lt;/h2>
&lt;p>After the system epic is created in ADO (automatically synchronized), it needs to be initially analyzed. The system epic, which describes a customer&amp;rsquo;s need, is broken down into solution-oriented epics that can be delivered and tested by a stream. Store the analysis result in the epic or write an implementation proposal (IMP) for large and complex investigations.&lt;/p>
&lt;p>Make a high-level estimate of the epics and aggregate the result into the system epic. The system epics can then be an input to the release roadmap, which shows &lt;strong>targeted&lt;/strong> completion dates for them. Later, when the epics are broken down into features before the program increment (PI) planning, aggregate and update the estimation of epics and system epics, and refine the release roadmap with the new estimations.&lt;/p>
&lt;p>The result of the ranking of system epics, and epics, can be used for capacity planning across streams.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/agile-req-structure-3.drawio.png" alt="Main Steps" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="planning-and-execution">Planning and execution&lt;/h2>
&lt;p>Epics are the carriers of information to the streams to initiate breakdown into features and stories. The epics are part of the stream&amp;rsquo;s release roadmap and show the high-level planning for a stream. However, the features are the &amp;ldquo;fuel&amp;rdquo; for the teams, and the features are prepared (estimated and ranked) before the PI planning. The number of features brought into the PI should be matched to the increment capacity to avoid wasting excessive time for refining and planning features.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/agile-req-structure-2.drawio.png" alt="RQ" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="characteristics-of-agile-requirements">Characteristics of Agile Requirements&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Size&lt;/th>
&lt;th>Tool&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>System requirement&lt;/td>
&lt;td>Describes a customer need (not a solution/implementation) in Decision Focus. Can result in changes in systems, products, or components.&lt;/td>
&lt;td>Must fit in a release.&lt;/td>
&lt;td>Decision Focus&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>System epic&lt;/td>
&lt;td>Basically, the same thing as an system requirement, but in ADO. R&amp;amp;D can create additional system epics (enablers) if needed.&lt;/td>
&lt;td>A system epic spans over several SPIs but must fit into a release.&lt;/td>
&lt;td>ADO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Epic&lt;/td>
&lt;td>Larger solution-oriented initiative preferably contained within one stream.&lt;/td>
&lt;td>Can span over several PIs but must fit in a release.&lt;/td>
&lt;td>ADO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Feature&lt;/td>
&lt;td>Smaller addition to a release, verified in component or product tests.&lt;/td>
&lt;td>Can span over several iterations but must fit in a PI.&lt;/td>
&lt;td>ADO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Story&lt;/td>
&lt;td>Stories are short descriptions of a small piece of desired functionality written in the user&amp;rsquo;s language.&lt;/td>
&lt;td>Must fit in one iteration.&lt;/td>
&lt;td>ADO&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="extending-with-product-and-component-capabilities">Extending with product and component capabilities&lt;/h2>
&lt;p>The requirements should reflect the complete product for current and all previous releases over the product&amp;rsquo;s lifecycle. E.g., when an epic or feature is completed, the corresponding product or component capability is updated to reflect the additional change (delta). See
&lt;a href="../../architecture/product-capabilities" >Product Capabilities&lt;/a> for further information.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/agile-req-structure-4.drawio.png" alt="RQ" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="questions--answers">Questions &amp;amp; answers&lt;/h2>
&lt;h3 id="q-what-is-an-enabler">Q: What is an enabler?&lt;/h3>
&lt;p>To implement a business epic/feature/story, you may need to implement some basic technology or platform functionality, a.k.a. enabler. Identify such enablers when the business epic/feature/story is analyzed. R&amp;amp;D adds the enablers to the backlogs.&lt;/p>
&lt;p>Other types of enablers, such as infrastructure, compliance, and improvements, need to be considered as well. They also require resources and should be identified and planned.&lt;/p>
&lt;h3 id="what-is-a-system-requirement">What is a system requirement?&lt;/h3>
&lt;p>A system requirement is a requirement captured in discussions with customers by product management. System requirements are also created for, e.g., standards, compliance, and NFRs. The system requirement should explain the functionality expected to be developed, not the solution.&lt;/p>
&lt;h3 id="q-why-is-the-size-of-a-system-requirement--system-epic-important">Q: Why is the size of a system requirement / system epic important?&lt;/h3>
&lt;p>The size is important! System requirements that come from PPM are of various sizes. The epics (and features) in the streams should be of similar size (to keep a continuous flow of completed epics - it is easier to show progress and become predictable). Even if the size of system requirements may vary, try to keep a similar size of business and architectural epics in the streams. It helps the product owners break down epics into features if they are of similar size (otherwise, merge or split them).&lt;/p>
&lt;p>Agree with PPM on a suitable minimum size. If the system requirements are very small, R&amp;amp;D should not break them down further. A small system requirement results in even smaller epics/features/stories, and the administrative costs may increase.&lt;/p>
&lt;h3 id="q-does-ppm-provide-requirements-for-nfrs-compliance-and-standards">Q: Does PPM provide requirements for NFRs, compliance, and standards?&lt;/h3>
&lt;p>Yes - according to PPM, they manage these requirements as well.&lt;/p>
&lt;h3 id="q-what-does-rd-verify---system-requirements-or-system-epics">Q: What does R&amp;amp;D verify - system requirements or system epics?&lt;/h3>
&lt;p>System epics exist in ADO and can be used to trace other work items in ADO.&lt;/p>
&lt;p>If system requirements are verified, then R&amp;amp;D verifies the customer requests. If system epics are verified, both business (based on system requirements) and enablers (architecture) are tested. Also, consider how the NFRs are managed (as system requirements in DFN, system epics in ADO, or documented separately).&lt;/p>
&lt;h3 id="q-what-is-verified-by-component-product-and-system-tests">Q: What is verified by component, product, and system tests?&lt;/h3>
&lt;p>Good question - it needs to be clarified!&lt;/p>
&lt;p>Either there is a clear mapping, e.g., test stories in component test, features in product test, and epics in system test. Or there is a loose mapping, where it is up to the team/stream to decide where a story/feature/epics are verified depending on characteristics, test environment, or capacity. Both alternatives are used today.&lt;/p>
&lt;h3 id="q-do-we-need-to-verify-enablers">Q: Do we need to verify enablers?&lt;/h3>
&lt;p>Enablers are tested indirectly with the business epics/features/stories tests. Some architectural enablers that define e.g. APIs for external users in the platform, should be verified.&lt;/p>
&lt;h3 id="q-how-do-we-refine-estimates-of-epics-and-features">Q: How do we refine estimates of epics and features?&lt;/h3>
&lt;p>Make a quick estimate of the epics or features without breaking them down. This estimate is good enough to decide if they can be included in the increment. Then, when you break down the epic into features, estimate the features and aggregate them into a new estimate of the epic.&lt;/p>
&lt;p>There&amp;rsquo;s no need to break down everything from epics to stories before M2/G2. Provide high-level estimates on all epics included in the release and break down the high-priority epics into features included in the next increment.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="../../architecture/product-capabilities" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Product Capabilities&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Architecture Document Structure</title><link>/docs/guides/to-review-references/architecture/architecture-document-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/architecture/architecture-document-structure/</guid><description>&lt;p>This document provides a guideline for structuring architecture documentation in the PAPCP R&amp;amp;D environment.&lt;/p>
&lt;p>Other guides have described how an architecture document shall be written and reviewed, in this document, we will describe how different documents shall be organized and linked to support navigation and understandability to different categories of users.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Architects.&lt;/p>
&lt;h2 id="architecture-organization">Architecture organization&lt;/h2>
&lt;p>It is important to remember how the architecture organization works in PAPCP to understand how architecture documentation should be structured since documentation should adapt to this.&lt;/p>
&lt;center>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/architecture/architecture-document-structure-1.drawio.png" alt="architecture-document-structure-1.drawio.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/center>
&lt;p>This diagram shows how architecture spans from the system architecture down to individual software module architecture and how different teams contribute to it. It becomes increasingly evident that good governance needs to be enforced to guarantee consistent documentation.&lt;/p>
&lt;h2 id="tooling-and-techniques">Tooling and techniques&lt;/h2>
&lt;p>Within PCP, it&amp;rsquo;s recommended to write design documents in &lt;strong>Markdown&lt;/strong> and publish the .md files on wiki pages (available wiki pages for different architecture levels are listed and linked to under
&lt;a href="#references" >References&lt;/a>). Still, the scope of such documents isn&amp;rsquo;t clear, neither the toolchain to create them.&lt;/p>
&lt;p>It&amp;rsquo;s highly recommended that we follow a consistent documentation flow, which could ideally span from a high-level architecture to lower details. Such a method would nicely map to our organization, too.&lt;/p>
&lt;p>To support such a documentation strategy, we sponsor the use of
&lt;a href="https://c4model.com/" target="_blank"
rel="noopener noreferrer" >C4 modeling&lt;/a>, which conceptually layers the architecture documents starting from a high-level context down to the software modules&amp;rsquo; UML description.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">C4 doesn&amp;rsquo;t describe how the architecture documents should be written; it is just a conceptual guide that gives directions and formalities for describing a software system with a progressive number of details.&lt;/span>
&lt;/div>
&lt;p>The image below (from the
&lt;a href="https://c4model.com/" target="_blank"
rel="noopener noreferrer" >C4 modeling&lt;/a> website), with an analogy to Google Maps, shows how a high-level design document can be mapped to the world map, while a UML description of a code module can be mapped to pictures in Google Street View.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/architecture/gmaps_vs_c4.JPG" alt="gmaps_vs_c4.JPG" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>In the next paragraph, how this mapping would work in the PAPCP organization is explained.&lt;/p>
&lt;p>C4 Modelling, although it comes with a specific formal representation of objects (the 4 Cs), doesn&amp;rsquo;t rule over any specific tool to be used to create C4 diagrams. However, several tools can be used for the creation of the diagram. Some of them are &amp;ldquo;WYSIWYG&amp;rdquo; (what you see is what you get), like VISIO (with C4 stencils add-on), PowerPoint (with C4 template), or Draw.io (with C4 extension). Others are based on scripting.&lt;/p>
&lt;p>The last suggestion is PlantUML with a C4 extension; see
&lt;a href="#references" >References&lt;/a> for more details. It isn&amp;rsquo;t a visual tool but allows you to easily create diagrams without drawing directly but just via a text-based interface. This can be convenient during reviews to annotate comments, which is harder to do on pictures. Moreover, PlantUML can be integrated into an integrated development environment (IDE) such as VSCode to simplify the editing.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Different technologies can be combined to produce C4 diagrams. For example, PlantUML might not be easy to use for very complex diagrams since there are fewer chances to influence the drawing rendering, so other tools, such as draw.io, might be more useful. The overall result by combining the drawing in a single wiki will be successful since the formal representation is the same independently of the used tool.&lt;/span>
&lt;/div>
&lt;h2 id="besides-c4">Besides C4&lt;/h2>
&lt;p>Architecture documents can be very complex and may require a different kind of diagram to represent the software behavior. It is important to understand that C4 isn&amp;rsquo;t replacing any of the best practices for documenting system interactions but is giving extra tools to describe an outside-in view of a complex system.&lt;/p>
&lt;p>All the usual best practices used to describe dynamic behavior, such as sequence diagrams and static aspects, such as deployment diagrams, shall still be used in the proper C4 layers. In the code layer, for example, it is still a good practice to use UML to describe the details of the software.&lt;/p>
&lt;p>Some topics, such as information modeling, may not easily map to any of the C4 layers, and in different cases, it may apply to more layers. A possible approach could be creating dedicated sections in the document describing the context, container, or component that owns those parts of the system information model.&lt;/p>
&lt;h2 id="c4-modeling-and-pcp-architecture-documentation-mapping">C4 modeling and PCP architecture documentation mapping&lt;/h2>
&lt;p>Previous sections cover:&lt;/p>
&lt;ul>
&lt;li>What does the PCP architecture organization look like (and how does it map to development streams)?&lt;/li>
&lt;li>How is a logical flow of architecture documents created (and which tool should be used)?&lt;/li>
&lt;/ul>
&lt;p>In this section, these two things are combined to define which architects should work in which documentation area.&lt;/p>
&lt;p>The following picture shows, on the left side, the different architecture teams (as described earlier) and the C4 layers.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/architecture/C4_vs_organization.JPG" alt="c4_vs_organization.JPG" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>The picture shows the following responsibilities:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>System architects&lt;/strong>: Are mainly responsible for the &lt;strong>context view&lt;/strong>. At this level, the system is described in an abstract way, including the cooperating external systems. But considering that system architects are even the &amp;ldquo;head of architecture&amp;rdquo; of a certain stream, they will have to support the definition in more detail of a certain system function they belong to. Therefore, they will also be responsible for the &lt;strong>container view&lt;/strong> level.&lt;/li>
&lt;li>&lt;strong>Stream architects&lt;/strong>: They work most of the time at the level of container view, where they explain how a certain subsystem will work and its internal details. They are also responsible for defining the &lt;strong>component view&lt;/strong> details of the container they have worked with.&lt;/li>
&lt;li>&lt;strong>Development teams&lt;/strong>: Are responsible for describing the details of the code modules they implement. Depending on the needs and processes behind them (e.g., UML or simply descriptive Markdown pages), the description can involve more or fewer formalities.&lt;/li>
&lt;/ul>
&lt;p>One crucial aspect to consider is that the wiki pages where the architecture documents will be stored will be different depending on the different layers (see links under
&lt;a href="#references" >References&lt;/a>). Still, for the &lt;strong>code level&lt;/strong>, the description shall stay with the repo of the code module it describes. This will help in packaging the description of the code module together with its code and version it in the same way.&lt;/p>
&lt;p>C4 modeling mapped to our organization and wiki pages in ADO enables a reading flow for multiple users. We can read it from the top down (starting from the high-level context in system architecture and going down to the level of details we&amp;rsquo;re interested in) or bottom-up (starting from a code module and going up to the context where it is supposed to be used). In this way, differently skilled people can read the documents the way they prefer or need.&lt;/p>
&lt;center>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/architecture/architecture-document-structure-2.drawio.png" alt="architecture-document-structure-2.drawio.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/center>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-gray-300 dark:bg-gray-900">
&lt;span class="pr-3 pt-1 text-gray-600 dark:text-gray-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M10.125 2.25h-4.5c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125v-9M10.125 2.25h.375a9 9 0 0 1 9 9v.375M10.125 2.25A3.375 3.375 0 0 1 13.5 5.625v1.5c0 .621.504 1.125 1.125 1.125h1.5a3.375 3.375 0 0 1 3.375 3.375M9 15l2.25 2.25L15 12"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Certificate management is a broad topic that starts from system architecture, where we describe how certificates are issued and distributed to different system parts (e.g., Runtime, Engineering) and how their life cycle is managed. This part of the description shall be stored in the system architecture wiki with context and container diagrams. The implementation details on certificate distribution and the components involved shall be described in the stream architecture wikis (mainly Operations and Engineering). At the same time, the code module description shall be consistent with the certificate management implementation. With proper hyperlinks in the Markdown pages, navigating through different areas of the wiki pages smoothly will be possible.&lt;/span>
&lt;/div>
&lt;p>The following picture sketches what&amp;rsquo;s described above in a single diagram, showing the connection across the different wiki pages, their grouping, roles, and responsibilities.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/architecture/DocumentationStructure.JPG" alt="DocumentationStructure.JPG" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="considerations-on-c4-wiki-and-av">Considerations on C4, wiki and AV&lt;/h2>
&lt;p>The overall Automation Vision (AV) system is going to be described by the collection of all the wiki pages in the different repos at different &lt;em>C&lt;/em> levels. However, the architecture documents shall be agnostic from the &lt;em>products&lt;/em> that will incorporate the NextGen technology or from the different deployment options. Nevertheless, references to products and deployment are allowed for easy navigation to the proper documents, but no extensive description shall be part of the technical documents, they have to be kept intentionally abstract from the deployment and product branding.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-gray-300 dark:bg-gray-900">
&lt;span class="pr-3 pt-1 text-gray-600 dark:text-gray-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M10.125 2.25h-4.5c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125v-9M10.125 2.25h.375a9 9 0 0 1 9 9v.375M10.125 2.25A3.375 3.375 0 0 1 13.5 5.625v1.5c0 .621.504 1.125 1.125 1.125h1.5a3.375 3.375 0 0 1 3.375 3.375M9 15l2.25 2.25L15 12"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">We shall avoid mentioning System 800xA or Symphony Plus, as well as panel or thin client deployment, in any of our architecture documents. Instead, specific architecture documents for the productization shall describe such deployments in detail.&lt;/span>
&lt;/div>
&lt;h2 id="references">References&lt;/h2>
&lt;!-- TODO: add references to different wiki pages -->
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://c4model.com/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>C4 modeling&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://plantuml.com/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>PlantUML&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://github.com/plantuml-stdlib/C4-PlantUML" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>C4 extension for PlantUML&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Architecture Review Checklist</title><link>/docs/tools/to-review-references/markdown-templates/architecture-review/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/markdown-templates/architecture-review/</guid><description>&lt;p>Architecture review checklist for pull requests in Markdown.&lt;/p>
&lt;h2 id="architecture-review-markdown-template">Architecture review Markdown template&lt;/h2>
&lt;p>Traceability is important throughout the entire development process. To simplify traceability for architectural review, use the following template when reviewing via pull requests. The template is the
&lt;a href="/docs/tools/to-review-references/markdown-templates/architecture-review/" >checklist&lt;/a> translated into markdown format.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-md" data-lang="md">&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the content updated according to all relevant input requirements?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the described functionality in accordance with relevant input Architecture Specifications?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Are all &lt;span class="ge">_major_&lt;/span> software/hardware components identified and their relevant interfaces defined?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Does the architecture specification have the right level of abstraction?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the functional decomposition well described?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the dynamic behavior well described?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the information model described?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the deployment described?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Are architecture decisions described?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Do all entities in the architecture have consistent names?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Are sufficiently precise (i.e. sufficient quantity to be useful) descriptions put on:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> a) compatibility
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> b) standard compliance
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> c) availability
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> d) configuration
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> e) assumptions and dependencies
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is all mitigation of risks described in the threat model covered?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the architecture considering best practices?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is the architecture feasible for refinement to a functional design (Description of Function)?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> Is reuse of existing trusted and verified software modules/libraries considered?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">- [ ]&lt;/span> If applicable, is the architecture structured so that reuse is possible for other components or products?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="azure-devops-template">Azure DevOps template&lt;/h2>
&lt;p>Pull request template assists a review when performing the review. When using Azure DevOps, the markdown template can be used as a pull request template. Copy the markdown template content into a markdown file at this location in the architecture code repository:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-txt" data-lang="txt">&lt;span class="line">&lt;span class="cl">.azuredevops\pull_request_template\architecture review.md
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more details regarding templates in Azure DevOps, see
&lt;a href="https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-request-templates?view=azure-devops" target="_blank"
rel="noopener noreferrer" >Improve pull request descriptions using templates&lt;/a>.&lt;/p></description></item><item><title>Clang-tidy</title><link>/docs/tools/to-review-references/static-code-analysis-tools/clang/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/static-code-analysis-tools/clang/</guid><description>&lt;p>Clang-tidy is an LLVM native C/C++ static code analysis tool that can be used locally and on a build server. It can be integrated in Visual Studio 2019, or run from the command line.&lt;/p>
&lt;h2 id="where-to-find-the-tool">Where to find the tool&lt;/h2>
&lt;p>Visual Studio 2019 contains Clang which can be included from the Visual Studio Installer. In Visual Studio Installer, choose to modify the Visual Studio installation and choose the optional individual component &amp;ldquo;Clang compiler for Windows&amp;rdquo;.&lt;/p>
&lt;p>LLVM has to be installed in a separate step. Inside Visual Studio 2019, open Settings in the Clang Power Tools toolbar. Open LLVM and download or add the existing LLVM version.&lt;/p>
&lt;p>If not using Visual Studio 2019, clang-tidy can be installed with the LLVM installer which can be downloaded from
&lt;a href="https://releases.llvm.org/download.html" target="_blank"
rel="noopener noreferrer" >https://releases.llvm.org/download.html&lt;/a>. If another installation path than the default C:\Program Files\LLVM is used, manually add the &lt;code>&amp;lt;misc path&amp;gt;\LLVM\bin&lt;/code> to the environment variable PATH.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The purpose of clang-tidy is to provide an extensible framework for diagnosing and fixing typical programming errors, like style violations, interface misuse, or bugs that can be deduced via static analysis. Clang-tidy is modular and provides a convenient interface for writing new checks.&lt;/p>
&lt;p>Clang format is a C++ code formatting tool that can be used to automatically format the code. It is also part of LLVM.&lt;/p>
&lt;h3 id="motivation">Motivation&lt;/h3>
&lt;p>Clang-tidy is easy to use with Visual Studio, and the issues can be found during the coding. Clang-tidy supports the C++ standards C++98, C++11, C++14, C++17 and partially C++20, which give a good support for static code analysis on modern C++ code.&lt;/p>
&lt;p>It contains a feature for fixing up erroneous code, clang-tidy-fix.&lt;/p>
&lt;p>Clang format helps to format the code.&lt;/p>
&lt;h3 id="how-to-analyze-the-code">How to analyze the code&lt;/h3>
&lt;p>In Visual Studio 2019 there is a &amp;lsquo;Clang Power Tools&amp;rsquo; toolbar, with buttons for Tidy, Tidy-Fix, Format, etc. The analysis is made on a single file.&lt;/p>
&lt;p>A complete project or Visual Studio solution must be analyzed from the command line.&lt;/p>
&lt;h3 id="new-and-changed-code">New and changed code&lt;/h3>
&lt;p>A Clang-tidy analysis of a product or Visual Studio solution includes new, changed, and old code. Hence all issues found by the enabled checkers must be handled.&lt;/p>
&lt;h3 id="existing-codebase">Existing codebase&lt;/h3>
&lt;p>It is not possible to baseline the existing code base when performing a Clang analysis.&lt;/p>
&lt;h2 id="new-versions">New versions&lt;/h2>
&lt;p>New versions can be installed using the Visual Studio Installer or LLVM installer.&lt;/p>
&lt;p>A tool responsible needs to inspect the release notes to find new and changed checkers, and build locally to inspect the impact on the codebase. The tool responsible can adjust the rules to fit with the current code style, remove rules that cause too many false positives to be useful, or solve the issues in the code.&lt;/p>
&lt;p>Also, current deviations can be reviewed to check if the new version might handle the code better for false positives. When the new version works as intended locally, the build servers can be updated with the new version.&lt;/p>
&lt;h2 id="ruleset">Ruleset&lt;/h2>
&lt;h3 id="storage">Storage&lt;/h3>
&lt;p>The rule set is stored in one or several configuration files together with the code, e.g. in a git repo. A configuration file placed on the top source code folder of the project covers all code that has no local configuration.&lt;/p>
&lt;p>If a local configuration file is placed on the top folder of a part of the code base, all code placed under that folder will use the local configuration file instead. If no local configuration file is found, a traverse up in the folder structure is made to find the closest configuration file.&lt;/p>
&lt;h3 id="version-control">Version control&lt;/h3>
&lt;p>One or several configuration files are placed and version-controlled together with the code, &lt;code>.clang-tidy&lt;/code> is used for the rules and &lt;code>.clang-format&lt;/code> is used for the formatting.&lt;/p>
&lt;h3 id="addremove-rules">Add/remove rules&lt;/h3>
&lt;p>Rules (checkers) are modified, added, and removed by changing the &lt;code>.clang-tidy&lt;/code> file.
The methodology is to enable big scopes/groups like &lt;code>cppcoreguidelines-*&lt;/code> (checks related to C++ Core Guidelines) and then to disable specific checkers &lt;code>-cppcoreguidelines-macro-usage&lt;/code> (finds macro usage that is considered problematic because better language constructs exist for the task).&lt;/p>
&lt;p>Example for disabling one check-in a group in .clang-tidy:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Checks: &amp;#39;cppcoreguidelines-*, -cppcoreguidelines-macro-usage&amp;#39;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Some checkers have extra settings in the form of key-value-pairs. For example, the number of allowed lines in a function can be set. The actual number of lines can be set as extra information, in this case, value = 108 lines.&lt;/p>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"> - key: readability-function-size.LineThreshold
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> value: 108
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="new-rule-set-from-new-tool-version">New rule set from new tool version&lt;/h3>
&lt;p>When a new version of the tool has been provided, the configuration files should be updated with a comment containing the new clang version. The pull request should be reviewed by the code responsible.&lt;/p>
&lt;h3 id="standards">Standards&lt;/h3>
&lt;p>Clang is not compliant with any specific security standards.&lt;/p>
&lt;h2 id="monitoring">Monitoring&lt;/h2>
&lt;p>When running Clang-tidy in Visual Studio, issues are displayed in the &amp;lsquo;Error List&amp;rsquo; view. When running from the command line, the errors are displayed in the output log. A pull-request in Azure DevOps can be set up with a required Clang-tidy check that blocks the pull-request from completing while there are unhandled clang errors in the code.&lt;/p>
&lt;p>Example of the result from a pull-request, with a clang-tidy error:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">MyClass&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cpp&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">344&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">56&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">error&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">parameter&lt;/span> &lt;span class="s1">&amp;#39;myString&amp;#39;&lt;/span> &lt;span class="n">is&lt;/span> &lt;span class="n">copied&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">each&lt;/span> &lt;span class="n">invocation&lt;/span> &lt;span class="n">but&lt;/span> &lt;span class="n">only&lt;/span> &lt;span class="n">used&lt;/span> &lt;span class="n">as&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">reference&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">consider&lt;/span> &lt;span class="n">making&lt;/span> &lt;span class="n">it&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">reference&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">performance&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">unnecessary&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">value&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">param&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">warnings&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">as&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">errors&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">void&lt;/span> &lt;span class="n">MyClass&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="n">SomeFunction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">myString&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">^&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">const&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="severity-levels">Severity levels&lt;/h2>
&lt;p>Clang-tidy has the severity levels: error, warning, and remark. It is recommended to fix errors and warnings, which can be achieved by enabling the clang-tidy build option &lt;code>--warnings-as-errors&lt;/code>.&lt;/p>
&lt;h2 id="how-to-handle-deviations">How to handle deviations&lt;/h2>
&lt;p>Suppressions of Clang-tidy issues are handled as comments in the source code. Either with &lt;code>NOLINT&lt;/code> or &lt;code>NOLINTNEXTLINE&lt;/code> comments. A descriptive comment on why suppression is needed must be added.&lt;/p>
&lt;p>There can be false positives where the code constructs are not understood by the tool. The default action should always be to rewrite the code to mitigate clang-tidy issues. But sometimes it is necessary to deviate and then the suppression is code reviewed like any other change going into the codebase.&lt;/p>
&lt;p>Example of how to silent a clang-tidy checker for one function:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl"> &lt;span class="o">//&lt;/span> &lt;span class="n">Silent&lt;/span> &lt;span class="n">specified&lt;/span> &lt;span class="n">diagnostics&lt;/span> &lt;span class="n">as&lt;/span> &lt;span class="n">it&lt;/span> &lt;span class="n">makes&lt;/span> &lt;span class="n">no&lt;/span> &lt;span class="n">sense&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">divide&lt;/span> &lt;span class="n">function&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">//&lt;/span> &lt;span class="n">NOLINTNEXTLINE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">readability&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">function&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">NcpResult&lt;/span> &lt;span class="n">SomeFunction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">myString&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">...&lt;/span> &lt;span class="o">//&lt;/span>&lt;span class="n">too&lt;/span> &lt;span class="n">many&lt;/span> &lt;span class="n">lines&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">function&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Code Review Guideline</title><link>/docs/guides/to-review-references/configuration-management/code-review-guideline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/code-review-guideline/</guid><description>&lt;p>A code review intends to improve the quality of the code. Someone other than the author of the code performs the examination.&lt;/p>
&lt;h2 id="code-review-goals">Code Review Goals&lt;/h2>
&lt;ul>
&lt;li>Eliminate bugs at an early stage&lt;/li>
&lt;li>Improve code quality&lt;/li>
&lt;li>Increasing knowledge about the project&lt;/li>
&lt;li>Learning from each other&lt;/li>
&lt;li>Ensure that the story is fully implemented from a functional and technical point of view&lt;/li>
&lt;li>Improve existing and new code&lt;/li>
&lt;li>Verify the correctness of both code and unit testing&lt;/li>
&lt;/ul>
&lt;h2 id="code-review-rules">Code Review Rules&lt;/h2>
&lt;ul>
&lt;li>You may not approve your own changes&lt;/li>
&lt;li>Offer as much positive feedback as possible&lt;/li>
&lt;li>Review everything that can be read&lt;/li>
&lt;li>It is a great place to learn something new&lt;/li>
&lt;li>Find out whether your comment meets any goal. Comments that don&amp;rsquo;t provide any value are really demotivating. Consider whether your change proposition really does matter&lt;/li>
&lt;li>Try to understand why such a solution has been applied instead of writing that the code is wrong. You don&amp;rsquo;t have to be always right, and a comment should be the beginning of a discussion, not just a change&lt;/li>
&lt;li>Try to coach the author&lt;/li>
&lt;li>If some part is missing, describe what should be added, e.g., what more needs to be changed, what unit tests need to be added&lt;/li>
&lt;li>Explanations and discussion results should be noted either in the code comment, in the commit description, or in the implementation details design description&lt;/li>
&lt;li>Automate as much as possible by introducing static code analysis tools&lt;/li>
&lt;li>Do not make a merge to the master branch until the code review is completed&lt;/li>
&lt;li>Proposed changes in functionality should be discussed and stored in separate work items. If the change is handled as part of future work, please add the corresponding work item&lt;/li>
&lt;/ul>
&lt;h2 id="code-review-checklist">Code Review Checklist&lt;/h2>
&lt;ul>
&lt;li>Check that the code implements the intended design (check the applicable design/architecture description)&lt;/li>
&lt;li>Check that the code complies to coding rules not checked by static code analysis&lt;/li>
&lt;li>Check that the code implements or follows the applicable mitigations described in the threat model&lt;/li>
&lt;li>Look for possible automated tests, and if they are available, review them&lt;/li>
&lt;li>Look for potential bugs&lt;/li>
&lt;li>Check if all errors are handled gracefully&lt;/li>
&lt;li>Check if code is implemented efficiently, e.g.:
&lt;ul>
&lt;li>Do not contain duplicates&lt;/li>
&lt;li>Patterns and design principles are properly used&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Check if the code introduces technical debt&lt;/li>
&lt;li>Check if the code does not cause side effects&lt;/li>
&lt;li>Check code readability
&lt;ul>
&lt;li>Is the code easy to understand for later maintenance if the need arises&lt;/li>
&lt;li>Do method and variable names express what they are used for&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Check if code is properly commented - is it difficult to understand parts or hacks should always be commented on to help other people understand the reason for the implementation&lt;/li>
&lt;li>Check if all comments are addressed before merging to the master branch&lt;/li>
&lt;li>Check
&lt;a href="/docs/guides/to-review-references/software-development/secure-coding-guideline/" >Coding standards&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="how-to-run-code-review">How to run Code Review&lt;/h2>
&lt;p>There are at least four types of code reviews. Below is a short description of each one.&lt;/p>
&lt;h3 id="formal-inspections">Formal inspections&lt;/h3>
&lt;p>Formal reviews are usually called &amp;ldquo;inspections&amp;rdquo; from Michael Fagan&amp;rsquo;s seminal 1976 study at IBM regarding the efficacy of peer reviews. He tried many combinations of variables and came up with a procedure for reviewing up to 250 lines of source code. After 800 iterations, Fagan came up with a formalized inspection strategy named &amp;ldquo;Fagan Inspection.&amp;rdquo;&lt;/p>
&lt;p>In general, a formal review refers to a process review with three to six participants meeting together in one room with printouts and/or a projector. Someone is the &amp;ldquo;moderator&amp;rdquo; or &amp;ldquo;controller&amp;rdquo; and acts as the organizer, keeps everyone on task, controls the pace of the review, and acts as an arbiter of disputes. Everyone reads through the materials beforehand to properly prepare for the meeting.&lt;/p>
&lt;p>When defects are discovered in a formal review, they are usually recorded in detail.&lt;/p>
&lt;h3 id="over-the-shoulder-reviews">Over-the-shoulder reviews&lt;/h3>
&lt;p>This is the most common and informal of code reviews. An &amp;ldquo;over-the-shoulder&amp;rdquo; review is just a developer standing over the author&amp;rsquo;s workstation while the author walks the reviewer through a set of code changes. Typically, the author drives the review by sitting at the keyboard and mouse, opening various files, pointing out the changes, and explaining why it was done this way.&lt;/p>
&lt;h3 id="e-mail-pass-around-reviews">E-mail pass-around reviews&lt;/h3>
&lt;p>This is the second-most common form of informal code review and the technique preferred by most open-source projects. Whole files or changes are packaged by the author and sent to reviewers via e-mail. Reviewers examine the files, ask questions and discuss with the author and other developers, and suggest changes.&lt;/p>
&lt;p>The hardest part of the e-mail pass-around is in finding and collecting the files under review.&lt;/p>
&lt;h3 id="tool-assisted-reviews">Tool-Assisted reviews&lt;/h3>
&lt;p>This refers to any process where specialized tools are used in all aspects of the review: collecting files, transmitting and displaying files, commentary, and defects among all participants, collecting metrics, and giving managers some control over the workflow.&lt;/p>
&lt;h3 id="pair-programming">Pair Programming&lt;/h3>
&lt;p>Pair programming is a development process that incorporates continuous code review. Pair programming is two developers writing code at a single workstation with only one developer typing at a time and continuous free-form discussion and review.&lt;/p>
&lt;p>Studies of pair programming have shown it to be very effective at finding bugs and promoting knowledge transfer.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;!-- markdownlint-disable MD047 -->
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;!-- markdownlint-disable-next-line MD034 -->
&lt;a
class="hb-card group"href="https://learn.microsoft.com/en-us/azure/devops/repos/git/pull-request-templates?view=azure-devops#additional-pull-request-templates" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>How to add a code review checklist to your pull request&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/pull-request-software-template/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Pull request template&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Code Review Guideline</title><link>/docs/guides/to-review-references/software-development/code-review-guideline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/code-review-guideline/</guid><description>&lt;p>A code review intends to improve the quality of the code. Someone other than the author of the code performs the examination.&lt;/p>
&lt;h2 id="code-review-goals">Code Review Goals&lt;/h2>
&lt;ul>
&lt;li>Eliminate bugs at an early stage&lt;/li>
&lt;li>Improve code quality&lt;/li>
&lt;li>Increasing knowledge about the project&lt;/li>
&lt;li>Learning from each other&lt;/li>
&lt;li>Ensure that the story is fully implemented from a functional and technical point of view&lt;/li>
&lt;li>Improve existing and new code&lt;/li>
&lt;li>Verify the correctness of both code and unit testing&lt;/li>
&lt;/ul>
&lt;h2 id="code-review-rules">Code Review Rules&lt;/h2>
&lt;ul>
&lt;li>You may not approve your own changes&lt;/li>
&lt;li>Offer as much positive feedback as possible&lt;/li>
&lt;li>Review everything that can be read&lt;/li>
&lt;li>It is a great place to learn something new&lt;/li>
&lt;li>Find out whether your comment meets any goal. Comments that don&amp;rsquo;t provide any value are really demotivating. Consider whether your change proposition really does matter&lt;/li>
&lt;li>Try to understand why such a solution has been applied instead of writing that the code is wrong. You don&amp;rsquo;t have to be always right, and a comment should be the beginning of a discussion, not just a change&lt;/li>
&lt;li>Try to coach the author&lt;/li>
&lt;li>If some part is missing, describe what should be added, e.g., what more needs to be changed, what unit tests need to be added&lt;/li>
&lt;li>Explanations and discussion results should be noted either in the code comment, in the commit description, or in the implementation details design description&lt;/li>
&lt;li>Automate as much as possible by introducing static code analysis tools&lt;/li>
&lt;li>Do not make a merge to the master branch until the code review is completed&lt;/li>
&lt;li>Proposed changes in functionality should be discussed and stored in separate work items. If the change is handled as part of future work, please add the corresponding work item&lt;/li>
&lt;/ul>
&lt;h2 id="code-review-checklist">Code Review Checklist&lt;/h2>
&lt;ul>
&lt;li>Check that the code implements the intended design (check the applicable design/architecture description)&lt;/li>
&lt;li>Check that the code complies to coding rules not checked by static code analysis&lt;/li>
&lt;li>Check that the code implements or follows the applicable mitigations described in the threat model&lt;/li>
&lt;li>Look for possible automated tests, and if they are available, review them&lt;/li>
&lt;li>Look for potential bugs&lt;/li>
&lt;li>Check if all errors are handled gracefully&lt;/li>
&lt;li>Check if code is implemented efficiently, e.g.:
&lt;ul>
&lt;li>Do not contain duplicates&lt;/li>
&lt;li>Patterns and design principles are properly used&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Check if the code introduces technical debt&lt;/li>
&lt;li>Check if the code does not cause side effects&lt;/li>
&lt;li>Check code readability
&lt;ul>
&lt;li>Is the code easy to understand for later maintenance if the need arises&lt;/li>
&lt;li>Do method and variable names express what they are used for&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Check if code is properly commented - is it difficult to understand parts or hacks should always be commented on to help other people understand the reason for the implementation&lt;/li>
&lt;li>Check if all comments are addressed before merging to the master branch&lt;/li>
&lt;li>Check
&lt;a href="/docs/guides/to-review-references/software-development/secure-coding-guideline/" >Coding standards&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="how-to-run-code-review">How to run Code Review&lt;/h2>
&lt;p>There are at least four types of code reviews. Below is a short description of each one.&lt;/p>
&lt;h3 id="formal-inspections">Formal inspections&lt;/h3>
&lt;p>Formal reviews are usually called &amp;ldquo;inspections&amp;rdquo; from Michael Fagan&amp;rsquo;s seminal 1976 study at IBM regarding the efficacy of peer reviews. He tried many combinations of variables and came up with a procedure for reviewing up to 250 lines of source code. After 800 iterations, Fagan came up with a formalized inspection strategy named &amp;ldquo;Fagan Inspection.&amp;rdquo;&lt;/p>
&lt;p>In general, a formal review refers to a process review with three to six participants meeting together in one room with printouts and/or a projector. Someone is the &amp;ldquo;moderator&amp;rdquo; or &amp;ldquo;controller&amp;rdquo; and acts as the organizer, keeps everyone on task, controls the pace of the review, and acts as an arbiter of disputes. Everyone reads through the materials beforehand to properly prepare for the meeting.&lt;/p>
&lt;p>When defects are discovered in a formal review, they are usually recorded in detail.&lt;/p>
&lt;h3 id="over-the-shoulder-reviews">Over-the-shoulder reviews&lt;/h3>
&lt;p>This is the most common and informal of code reviews. An &amp;ldquo;over-the-shoulder&amp;rdquo; review is just a developer standing over the author&amp;rsquo;s workstation while the author walks the reviewer through a set of code changes. Typically, the author drives the review by sitting at the keyboard and mouse, opening various files, pointing out the changes, and explaining why it was done this way.&lt;/p>
&lt;h3 id="e-mail-pass-around-reviews">E-mail pass-around reviews&lt;/h3>
&lt;p>This is the second-most common form of informal code review and the technique preferred by most open-source projects. Whole files or changes are packaged by the author and sent to reviewers via e-mail. Reviewers examine the files, ask questions and discuss with the author and other developers, and suggest changes.&lt;/p>
&lt;p>The hardest part of the e-mail pass-around is in finding and collecting the files under review.&lt;/p>
&lt;h3 id="tool-assisted-reviews">Tool-Assisted reviews&lt;/h3>
&lt;p>This refers to any process where specialized tools are used in all aspects of the review: collecting files, transmitting and displaying files, commentary, and defects among all participants, collecting metrics, and giving managers some control over the workflow.&lt;/p>
&lt;h3 id="pair-programming">Pair Programming&lt;/h3>
&lt;p>Pair programming is a development process that incorporates continuous code review. Pair programming is two developers writing code at a single workstation with only one developer typing at a time and continuous free-form discussion and review.&lt;/p>
&lt;p>Studies of pair programming have shown it to be very effective at finding bugs and promoting knowledge transfer.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://learn.microsoft.com/en-us/azure/devops/repos/git/pull-request-templates?view=azure-devops#additional-pull-request-templates" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>How to add a code review checklist to your pull request&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/pull-request-software-template/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Pull request template&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Color Guide for Azure DevOps</title><link>/docs/guides/to-review-references/quality-and-kpi/color-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/quality-and-kpi/color-guide/</guid><description>&lt;p>Recommendations of colors for dashboards and graphs in Azure DevOps.&lt;/p>
&lt;p>The key objectives of this guideline are to:&lt;/p>
&lt;ul>
&lt;li>ensure consistent look and feel of dashboards and graphs.&lt;/li>
&lt;li>avoid misunderstandings during SteCo meetings and when sharing information with various stakeholders.&lt;/li>
&lt;li>facilitate and enable efficient comparison of dashboards and graphs from different projects/streams.&lt;/li>
&lt;/ul>
&lt;p>A general common sense approach should be applied:&lt;/p>
&lt;ul>
&lt;li>Something considered “good” or ”completed” should be green, e.g., WI state = Closed, etc.&lt;/li>
&lt;li>Something considered “bad” or ”open” should be red, e.g., WI state = Open, Severity = Critical etc.&lt;/li>
&lt;/ul>
&lt;h2 id="elsp-rd-quality-dashboards">ELSP R&amp;amp;D quality dashboards&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/dashboard.jpg" alt="Dashboard" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Colors used for graphs based on state&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/state.png" alt="State" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Colors used for graphs based on severity&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/severity.png" alt="Severity" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="azure-devops-dashboards">Azure DevOps dashboards&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/dashboard2.jpg" alt="Dashboard2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>To follow the general common sense approach applied, the following colors are recommended to be used in the Azure DevOps dashboard and graphs.&lt;/p>
&lt;p>Colors used for graphs based on state (always sort by label &amp;ndash;&amp;gt; ascending):&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/state2.jpg" alt="State2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/colors.jpg" alt="Colors" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p>
&lt;p>Colors used for graphs based on severity (always sort by label &amp;ndash;&amp;gt; ascending):&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/severity2.jpg" alt="Severity2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/colors2.jpg" alt="Colors2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p>
&lt;h3 id="note">Note&lt;/h3>
&lt;p>The colors that are already set/changed in the Azure DevOps dashboards and charts will be reset to defaults every time you change the query behind them, a possible workaround is to tick off “Select folder to copy dashboard queries” while creating a copy of dashboard and then just update newly created queries.&lt;/p>
&lt;h2 id="ms-office-charts-and-graphs">MS Office charts and graphs&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/graph.jpg" alt="Graph" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>To follow the general common-sense approach applied, the following colors are recommended to be used in MS Office charts/graphs:&lt;/p>
&lt;p>Colors used for graphs based on state (always sort by label &amp;ndash;&amp;gt; ascending):&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/state.png" alt="State" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Colors used for graphs based on severity (always sort by label &amp;ndash;&amp;gt; ascending):&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/pictures/severity.png" alt="State" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure></description></item><item><title>Component Capabilities Guideline</title><link>/docs/guides/to-review-references/software-development/component-capabilities-guideline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/component-capabilities-guideline/</guid><description>&lt;p>This is a guideline describing the most basic parts of Component Capabilities. Specific add-ons, e.g. to ensure safety compliance may be needed in the future.&lt;/p>
&lt;h2 id="what-and-not-how">What and not How&lt;/h2>
&lt;p>Component Capabilities shall describe what the component “can do” for anyone who wants to understand what the component is capable of. The capabilities should be described in a short format focusing on the &amp;ldquo;what&amp;rdquo;, while the &amp;ldquo;how&amp;rdquo; is defined in architecture and detailed design documentation.&lt;/p>
&lt;p>Bullet lists are a common format in a Component Capabilities file since they usually list all supported functionality shortly and concisely.&lt;/p>
&lt;h2 id="the-current-state-of-implemented-and-verified-functionality">The current state of implemented and verified functionality&lt;/h2>
&lt;p>Capabilities serve as internal documentation of what a component can do in its current state. Future feature support should not be written in a Component Capability.&lt;/p>
&lt;p>Only verified functionality should be stated in a Component Capability. Hence, only when the functionality is tested, the Component Capability updates can be merged.&lt;/p>
&lt;p>Before closing a feature, the newly implemented functionality shall be documented in the corresponding Component Capabilities file.&lt;/p>
&lt;h2 id="input-and-consumers">Input and consumers&lt;/h2>
&lt;p>Input to a Component capability is a feature description and the feature acceptance criteria. Examples of consumers of a Component Capability are developers for reference, new employees, testers, product owners, and architects.&lt;/p>
&lt;p>Component Capabilities may also serve as input to Product Capabilities and end-user documentation.&lt;/p>
&lt;h2 id="traceability-reviewers-location-and-filename">Traceability, reviewers, location, and filename&lt;/h2>
&lt;p>The Component Capabilities are documented in a .md file named &amp;ldquo;Capabilities.md&amp;rdquo;, located in the repository of the component source code.&lt;/p>
&lt;p>This file lives with the component lifecycle, and when new features are added for a specific component version, the capability files must be updated based on the corresponding version of the component repository.&lt;/p>
&lt;p>When the Component Capability is updated, it should be merged with a pull request linked to the feature or any of its child work items.
This will provide enough traceability from the Component Capability perspective. In other words, by linking the pull request to the feature or any of its child items, the capability update can be fully traced towards the entire chain of System Requirements – Epics – Features – User Stories – Tasks – source code, and the related test cases.&lt;/p>
&lt;p>The pull request including the Component Capabilities update should be reviewed by the Product Owner.&lt;/p>
&lt;p>There is no direct traceability link between Component Capabilities to threat models. However, there will be a traceability path between threat models and Component Capabilities when there are references to features or bugs from the threat models.&lt;/p>
&lt;p>Architecture design and detailed design documentation have no explicit traceability to Component Capabilities. The relationship between Component Capabilities and architecture and detailed design descriptions is only realized through features being defined with architecture and detailed design descriptions as input.&lt;/p>
&lt;blockquote>
&lt;p>Pull request in Git repositories corresponds to check-in in Team Foundation Version Control (TFVC) repositories.&lt;/p>&lt;/blockquote>
&lt;h2 id="what-is-not-a-component-capability">What is not a Component Capability&lt;/h2>
&lt;ul>
&lt;li>A Component Capability is not a product requirement, it&amp;rsquo;s written as the output/outcome of the implementation. As input to implementation, System Epics, Epics, and Features will be used (these work items are replacing the previously used product requirements). See the workflow visualization below for a better understanding.&lt;/li>
&lt;li>A Component Capability should not be confused with architecture or detailed design documentation. Component Capabilities are written as the outcome of implemented and tested features or bug corrections, and these work items were in an earlier step potentially defined with architecture and detailed design documentation as input.&lt;/li>
&lt;li>SDK documentation is not part of Component Capabilities.&lt;/li>
&lt;li>In general, unsupported functionality should not be mentioned in a Component Capability. However, exceptions can be made if it helps the reader to understand the current state of the product.&lt;/li>
&lt;/ul>
&lt;h2 id="workflow-diagram">Workflow diagram&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/software-development/component-capabilities-1.drawio.png" alt="Workflow_Component_Capabilities.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://dev.azure.com/ABB-PA-CommonComponents/IA_Common/_git/Control_Tools?path=/documentation/controlLogicCompiler/AC800MCompiler/Capabilities.md&amp;amp;_a=preview" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Example of a Component Capability (AC800M Compiler Component Capabilities)&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/Component-Capability-Template" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Component Capabilities template&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Component Capability Template</title><link>/docs/tools/to-review-references/markdown-templates/component-capability-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/markdown-templates/component-capability-template/</guid><description>&lt;p>Component capability markdown template.&lt;/p>
&lt;h2 id="markdown-template">Markdown template&lt;/h2>
&lt;blockquote>
&lt;p>Copy the contents to an empty markdown file and start editing.
Remove the help text in block quotes and any unused sections.&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># \&amp;lt;Component name\&amp;gt; capabilities
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># Table of contents
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">1.&lt;/span> [&lt;span class="nt">General component purpose and overview&lt;/span>](&lt;span class="na">#introduction&lt;/span>)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">2.&lt;/span> [&lt;span class="nt">Capabilities&lt;/span>](&lt;span class="na">#capabilities&lt;/span>)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 2.1. [&lt;span class="nt">Subchapters of different Component capabilities&lt;/span>](&lt;span class="na">#subcapability&lt;/span>)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 1. General component purpose and overview &amp;lt;a id=&amp;#34;introduction&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Describe briefly the purpose of the component. If possible and if it makes understanding easier, end-user use case diagrams may be included (optional).
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 2. Capabilities &amp;lt;a name=&amp;#34;capabilities&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Description of capabilities, potentially divided into sub-chapters. For a detailed guideline to the content of this chapter, see [&lt;span class="nt">Component Capability Guideline&lt;/span>](&lt;span class="na">http://abb-is-000650.nmea.abb.com/pcp2/docs/guides/Conceptual-Guides/Component-Capability-Guideline/&lt;/span>).
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### 2.1 Subchapters of different Component capabilities &amp;lt;a name=&amp;#34;subcapability&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Component Dynamic Behavior Template</title><link>/docs/tools/to-review-references/markdown-templates/component-dynamic-behavior-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/markdown-templates/component-dynamic-behavior-template/</guid><description>&lt;p>Dynamic behavior template for components.&lt;/p>
&lt;h2 id="dynamic_behaviormd">dynamic_behavior.md&lt;/h2>
&lt;blockquote>
&lt;p>Copy the contents to an empty &lt;strong>markdown file&lt;/strong> and start editing. Remove the help text in block quotes and any unused sections.&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"># Dynamic Behavior for ComponentName {#DynamicBehavior_ComponentName}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;!-- This template is to be used to describe the dynamic behavior of a component, it shows how the component behaves for important use cases. It shall be used together with the main markdown file describing the complete component. --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;!-- List of different behaviors with sequence diagrams or activity diagrams --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## Dynamic Behavior Title1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;!-- Textual description for the behavior. --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Behavior description...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```plantuml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@startuml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">!include dynamic_behavior_sequence.puml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@enduml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## Dynamic Behavior Title2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;!-- Textual description for the behavior. --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Behavior description...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```plantuml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@startuml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">!include dynamic_behavior_activity.puml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@enduml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">The &amp;ldquo;!include dynamic_behavior_activity.puml&amp;rdquo; above don&amp;rsquo;t work in an ADO Wiki. You have to convert the .puml to a .png and include it in the markdown. It may work in Visual Studio with the right plugins - but it doesn&amp;rsquo;t help much if it is visualized with the ADO Wiki.&lt;/span>
&lt;/div>
&lt;h2 id="dynamic_behavior_sequencepuml">dynamic_behavior_sequence.puml&lt;/h2>
&lt;blockquote>
&lt;p>Copy the text to an empty &lt;strong>plantuml file&lt;/strong> and start editing.&lt;/p>&lt;/blockquote>
&lt;div style="display: flex">
&lt;div style="flex: 50%">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">@startuml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">skinparam sequence {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ArrowColor Black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ActorBorderColor Black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ParticipantBorderColor Black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LifeLineBorderColor Black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BoxBorderColor Black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">skinparam note {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BorderColor Black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BackgroundColor AliceBlue
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">participant Client
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">box &amp;#34;Platform1&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">participant &amp;#34;Object1:Class1&amp;#34; AS Obj1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">participant &amp;#34;Object2:Class1&amp;#34; as Obj2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">end box
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">participant &amp;#34;Class2&amp;#34; AS Class2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">participant &amp;#34;Class3:Interface1&amp;#34; AS IF1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">loop cyclic execution.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Client -&amp;gt; Class2: Get()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">activate Class2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Class2 -&amp;gt; IF1: Get()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">activate IF1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">IF1 --&amp;gt; Class2: data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">deactivate IF1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">== Initial data retrieved, \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">create all objects that are not already created. ==
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">loop for each property
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Class2 -&amp;gt; Obj1: Method1()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">alt New Request
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Class2 -&amp;gt; Obj2**: Create()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">note right
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Note text with extra description.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">end note
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">end /&amp;#39;end alt New Request&amp;#39;/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">end /&amp;#39;end loop for each property&amp;#39;/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">destroy Class2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">end /&amp;#39;end loop cyclic execution&amp;#39;/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@enduml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;div style="flex: 50%">
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/markdown-templates/component-dynamic-behavior-sequence.drawio.png" alt="Dynamic Behavior Sequence" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/div>
&lt;/div>
&lt;h2 id="dynamic_behavior_activitypuml">dynamic_behavior_activity.puml&lt;/h2>
&lt;blockquote>
&lt;p>Copy the text to an empty &lt;strong>plantuml file&lt;/strong> and start editing.&lt;/p>&lt;/blockquote>
&lt;div style="display: flex">
&lt;div style="flex: 50%">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">@startuml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;style&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">activityDiagram {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BorderColor black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> diamond {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LineColor black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> arrow {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> partition {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LineColor black
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> note {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> FontColor Blue
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LineColor Navy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BackgroundColor #ccf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">document {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BackgroundColor transparent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;/style&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">title Template example
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">start
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">:ClickServlet.handleRequest();
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">:new page;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">if (Page.onSecurityCheck) then (true)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :Page.onInit();
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> note left: Init the page
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if (isForward?) then (no)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :Process controls;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if (continue processing?) then (no)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> stop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> endif
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if (isPost?) then (yes)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :Page.onPost();
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> else (no)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :Page.onGet();
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> endif
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :Page.onRender();
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> endif
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">else (false)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">endif
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">if (do redirect?) then (yes)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :redirect process;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">else
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if (do forward?) then (yes)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :Forward request;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> else (no)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :Render page template;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> endif
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">endif
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">stop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@enduml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;div style="flex: 50%">
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/markdown-templates/component-dynamic-behavior-activity.drawio.png" alt="Dynamic Behavior Activity" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/div>
&lt;/div></description></item><item><title>Configure Access Matrix for Replication User</title><link>/docs/tools/to-review-references/devops/how-to-configure-replica-user-access-matrix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/how-to-configure-replica-user-access-matrix/</guid><description>&lt;p>In the example below is a description of needed access rights for a user (or AD group) to be able to use OpsHub to replicate work items between collections/organizations.&lt;/p>
&lt;p>I have used the ABB AD group &amp;ldquo;PCP_Work_Replica_U_Access_group&amp;rdquo; and assigned the needed access to that group in the below example. The service account user has been added as a member of that group.&lt;/p>
&lt;p>If new organizations or collections need to be added I suggest that the above AD group is given needed access and not a user directly.&lt;/p>
&lt;blockquote>
&lt;p>For replication projects &amp;ldquo;write&amp;rdquo; access (the one described below) is only done (and needed) to replica project &amp;ldquo;that gets new workitems created or edited&amp;rdquo; and &amp;quot;read&amp;quot; access when only &amp;ldquo;fetching&amp;rdquo; workitems.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>This means that if OpsHub will only &amp;ldquo;read&amp;rdquo; workitems from a project only Read access is needed.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Below settings are only needed when OpsHub needs to update/create work items in the project.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>For the new service user/AD groups, the following &amp;ldquo;five&amp;rdquo; (5) permissions are required for OpsHub replication to migrate and integrate with work items:&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>When configuration is related to &amp;ldquo;Project settings --&amp;gt; &amp;hellip;&amp;rdquo; then this step needs to be done for all projects that will be replicated&lt;/p>&lt;/blockquote>
&lt;h2 id="configuration-for-azure-devops-services">Configuration for Azure DevOps Services&lt;/h2>
&lt;p>1. &lt;strong>User/group needs to be added in all projects that are currently being migrated or integrated&lt;/strong>&lt;/p>
&lt;hr>
&lt;p>Done in: organization settings --&amp;gt; users --&amp;gt; group rules&lt;/p>
&lt;blockquote>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage2.png" alt="b1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/blockquote>
&lt;hr>
&lt;hr>
&lt;p>2. &lt;strong>Bypass rules on the work item updates (Required for user impersonation)&lt;/strong>&lt;/p>
&lt;hr>
&lt;p>Done in: Project settings --&amp;gt; Security&lt;/p>
&lt;blockquote>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage3.png" alt="b2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/blockquote>
&lt;hr>
&lt;hr>
&lt;p>3. &lt;strong>Create and Edit work items&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>Will be solved by steps in 1 + 4 as that will give partial Contributor rights.&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;hr>
&lt;p>4. &lt;strong>Area and Iteration (This allows to check and create area paths and iteration paths)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Create child nodes&lt;/strong>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Edit nodes&lt;/strong>&lt;/p>
&lt;p>Done in: Project settings --&amp;gt; Project configuration --&amp;gt;Iterations --&amp;gt; Security&lt;/p>
&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage4.png" alt="b3" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage5.png" alt="b4" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Areas --&amp;gt; Security --&amp;gt;&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage6.png" alt="b5" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage7.png" alt="b6" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>If you break the inheritance rule for access you need to consider that and give explicit access rights for those areas/iterations.&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;hr>
&lt;p>5. &lt;strong>&amp;ldquo;Create tag definition&amp;rdquo; is also needed.&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage3.png" alt="b7" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/blockquote>
&lt;h2 id="configuration-for-azure-devops-server">Configuration for Azure DevOps Server&lt;/h2>
&lt;blockquote>
&lt;p>1. Access permission 1&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Added PCP_Work_Replica_U_Access_group to AD group OCS_Collection_Readers as OCS_Collection_Readers was a member of Readers in the targeted Azure project. (ABB-PA-CommonComponents-Replica in OCS collection)&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>2. Access permissions 2, 3, 4, and 5&lt;/p>&lt;/blockquote>
&lt;p>(Access permission 5 change isn&amp;rsquo;t showing in the picture below, but please look at Service configuration bullet 2 as the same value will be used)&lt;/p>
&lt;blockquote>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage8.png" alt="b8" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage9.png" alt="b9" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/how-to-configur-replica-user-access-matriximage10.png" alt="b10" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p>&lt;/blockquote></description></item><item><title>Data Discipline Dashboard</title><link>/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard/</guid><description>&lt;p>The quality dashboard can help teams measure and compare product quality by setting appropriate widgets and queries. A common template based on standardized queries will help save effort and improve efficiency.
By setting appropriate widgets and queries, the quality dashboard can help teams measure and compare product quality. A template based on standardized queries helps save effort and improve efficiency.&lt;/p>
&lt;p>This guide sets a standard data discipline dashboard template in Azure DevOps (ADO) and guides how to customize it for a project.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Quality control managers, release owners, and product owners.&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>The data discipline dashboard is a built-in quality practice that is part of the quality dashboard. It aims to help development teams check the data quality of work items by themselves and further improve the transparency and accuracy of the dashboard for key performance indicators (KPIs).&lt;/p>
&lt;h3 id="layout">Layout&lt;/h3>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-layout1.png" alt="Layout1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-layout2.png" alt="Layout2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p>
&lt;h3 id="structure">Structure&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Widgets&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">General&lt;/td>
&lt;td style="text-align: left">&lt;strong>a&lt;/strong>. Missing data.&lt;br>Epics/features/bugs are active but without description/effort / acceptance criteria.&lt;br>&lt;strong>b&lt;/strong>. Unplanned and Unassigned.&lt;br>Epics/features/bugs are active but not planned or assigned; Epics no target date.&lt;br>&lt;strong>c&lt;/strong>. Parent-child hierachy issue.&lt;br>Active features without parents; Active bugs without requirements; Active epics/features/bugs with closed parent but open child.&lt;br>&lt;strong>d&lt;/strong>. Open items in old iteration path.&lt;br>Epics/features/bugs are active but delayed in old path; Active epics in wrong area path.&lt;br>&lt;strong>e&lt;/strong>. DoD or DoR not completed.&lt;br>Uncompleted DoD or DoR.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Project scope&lt;/td>
&lt;td style="text-align: left">&lt;strong>a&lt;/strong>. Epics scope.&lt;br>Epics at G2; Epics added after G2; Epics removed after G2.&lt;br>&lt;strong>b&lt;/strong>.Scope bugs.&lt;br>Scope bugs; Deferred bugs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Bug handling&lt;/td>
&lt;td style="text-align: left">&lt;strong>a&lt;/strong>. Missing data of bugs.&lt;br>Open bugs without repro / How found / Severity / Found in / SIL / Function / Integrated build; Open bugs critical high/regression. &lt;br>&lt;strong>b&lt;/strong>. Bug aging.&lt;br>Bugs added in 1 month; Bugs closed in 1 month; Open bugs older than one PI.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="color-standard">Color standard&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Color&lt;/th>
&lt;th style="text-align: left">Green&lt;/th>
&lt;th style="text-align: left">Yellow&lt;/th>
&lt;th style="text-align: left">Red&lt;/th>
&lt;th style="text-align: left">Blue&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Number of work items&lt;/td>
&lt;td style="text-align: left">0&lt;/td>
&lt;td style="text-align: left">1-10&lt;/td>
&lt;td style="text-align: left">&amp;gt;10&lt;/td>
&lt;td style="text-align: left">Not relevant (as a baseline).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Examples&lt;/td>
&lt;td style="text-align: left">
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-green-widget.png" alt="Green Widget" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/td>
&lt;td style="text-align: left">
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-openbugsregression.png" alt="Yellow Widget" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/td>
&lt;td style="text-align: left">
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-featurenodesc.png" alt="Red Widget" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/td>
&lt;td style="text-align: left">
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-epicsatg2.png" alt="Blue Widget" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="people--frequency">People &amp;amp; Frequency&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">People involved&lt;/th>
&lt;th style="text-align: left">Roles&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Creator&lt;/td>
&lt;td style="text-align: left">Release owner, scrum master, configuration manager, development team.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">User&lt;/td>
&lt;td style="text-align: left">Development team.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Frequency of use&lt;/td>
&lt;td style="text-align: left">Checking the data discipline dashboard once a week is recommended.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Supervisor&lt;/td>
&lt;td style="text-align: left">Quality control manager, release owner.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="how-to-create-and-edit-a-dashboard">How to create and edit a dashboard&lt;/h2>
&lt;p>Copy this
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/PCP%20RnD%20Quality%20Management%20System/_dashboards/dashboard/59405899-a279-472d-913a-67f78dd70eae" target="_blank"
rel="noopener noreferrer" >template&lt;/a> to create a new dashboard for a project.
Choose &amp;ldquo;&lt;strong>Copy Dashboard&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-copydashboard.png" alt="Copy Dashboard" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Fill in the information about the new dashboard here. Choose &amp;ldquo;&lt;strong>Project Dashboard&lt;/strong>&amp;rdquo; in the &amp;ldquo;Dashboard Type&amp;rdquo; part. A project dashboard can involve different teams.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-newdashboard.png" alt="New Dashboard" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>The related queries are automatically copied when copying the dashboard. These queries can then be reused.&lt;/p>
&lt;p>It is also possible to customize the dashboard by editing widgets. The data discipline dashboard mainly involves two kinds of widgets: &lt;strong>Markdown&lt;/strong> and &lt;strong>Query tile&lt;/strong>.&lt;/p>
&lt;h3 id="markdown">Markdown&lt;/h3>
&lt;p>Markdown is a lightweight markup language. It adds simple formatting elements to the text, keeping the text readable in any text editor.&lt;/p>
&lt;p>In the data discipline dashboard, Markdown can be used to show some basic information about the project, like names of the project, categories, explanations, etc.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-markdown.png" alt="Edit the Dashboard-Markdown" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Select &amp;ldquo;&lt;strong>Configure&lt;/strong>&amp;rdquo; to edit the Markdown. You can change the width and length of the Markdown, and add also the text.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-configure.png" alt="Edit the Dashboard-Configure" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Learn more about Markdown in
&lt;a href="../../documentation/markdown-tutorial/" >Tutorial: Markdown in ADO&lt;/a>.&lt;/p>
&lt;h3 id="query-tile">Query tile&lt;/h3>
&lt;p>Query tile is a configurable tile that displays the summary of shared query results. From the configuration dialog, select either a team favorite or a shared query. Rules can also be specified to change the query tile color based on the number of work items returned by the query.&lt;/p>
&lt;p>In below dashboard, query tiles can be used to visualize the data status. Different colors show different urgency degrees.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-querytile.png" alt="Dashboard-QueryTile" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Select &amp;ldquo;&lt;strong>Configure&lt;/strong>&amp;rdquo; to edit the query tile.
It&amp;rsquo;s possible to change the title, query, and the color standard.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-querytile-colorstandard.png" alt="Query Tile-color standard" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>To edit the query, click the widget and then choose &amp;ldquo;&lt;strong>Editor&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-query-editor.png" alt="Query Tile-Editor" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Learn more about queries in
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/boards/queries/using-queries?view=azure-devops&amp;amp;tabs=browser" target="_blank"
rel="noopener noreferrer" >Define a work item query in Azure Boards&lt;/a>.&lt;/p>
&lt;h2 id="query-criteria">Query criteria&lt;/h2>
&lt;h3 id="example-1-open-bugs-regression">Example 1: Open bugs regression&lt;/h3>
&lt;p>A regression bug is a bug that causes a completed feature that worked correctly to stop working after updates (e.g., system upgrade, system patching, or bug fixes). This definition applies both before and after releasing the feature to customers.&lt;/p>
&lt;p>This query can select open regression bugs.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-openbugsregression.png" alt="Open Bugs Regression" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Field&lt;/th>
&lt;th style="text-align: left">Operator&lt;/th>
&lt;th style="text-align: left">Value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Work Item Type&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Bug&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">State&lt;/td>
&lt;td style="text-align: left">&amp;lt;&amp;gt;&lt;/td>
&lt;td style="text-align: left">Removed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">State&lt;/td>
&lt;td style="text-align: left">&amp;lt;&amp;gt;&lt;/td>
&lt;td style="text-align: left">Closed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Area Path&lt;/td>
&lt;td style="text-align: left">Under&lt;/td>
&lt;td style="text-align: left">“Team Project Name”\”Stream”\”Product/platform”[\”Major Product/platform Version”\”Target Product/platform Release”]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Regression&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">True&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="example-2-scope-bugs">Example 2: Scope bugs&lt;/h3>
&lt;p>If a bug is found during the development of a release and the change control board (CCB) decides to fix it in a later version, the bug is deferred. When a deferred bug is planned for a future release, it will be considered a scope bug for that release.&lt;/p>
&lt;p>This query is designed to select open-scope bugs.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-scopebugs.png" alt="Scope Bugs" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Field&lt;/th>
&lt;th style="text-align: left">Operator&lt;/th>
&lt;th style="text-align: left">Value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Work Item Type&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Bug&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">State&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Any&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Area Path&lt;/td>
&lt;td style="text-align: left">Under&lt;/td>
&lt;td style="text-align: left">“Team Project Name”\”Stream”\”Product/platform”[\”Major Product/platform Version”\”Target Product/platform Release”]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">ScopeBug&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">True&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="example-3-scope-change-after-g2">Example 3: Scope change after G2&lt;/h3>
&lt;p>Epics are often created before G2 and already exist in the backlog. Epics can be added after G2 either as a consequence of a change request of a system requirement, a split of a large epic into two smaller epics, or a new enabler epic. Epics needs to be collected at the G2 date to set a baseline. Use a query to catch all epics added to the project scope after G2. Also, some new/active epics are moved to other area paths after G2. The epics that have been added and removed return identical values.&lt;/p>
&lt;p>If other work item types are needed for the project scope, it&amp;rsquo;s possible to add more query tiles to monitor the progress. This involves three queries:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Query 1: Epics at G2&lt;/strong>&lt;/p>
&lt;p>Create a baseline based on all the IDs of epics at G2.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-epicsatg2.png" alt="Epics at G2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Field&lt;/th>
&lt;th style="text-align: left">Operator&lt;/th>
&lt;th style="text-align: left">Value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Work Item Type&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Epic&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">State&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Any&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">ID&lt;/td>
&lt;td style="text-align: left">In&lt;/td>
&lt;td style="text-align: left">all the Epics IDs at G2&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Tips: How to select all the IDs of epics at G2&lt;/strong>
There are many different ways to create a baseline. For example, you can use &lt;strong>Excel&lt;/strong>.&lt;/p>
&lt;p>First, use a query to screen out all the epics at G2. Then export these epics to Excel. Finally, use the “&lt;strong>Textjoin&lt;/strong>” formula to get all the IDs, and then copy these IDs back to ADO as a baseline.&lt;/p>
&lt;br/>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Query 2: Epics added after G2&lt;/strong>&lt;/p>
&lt;p>Make a query based on IDs to catch if any epics were added after G2.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-epicsaddedafterg2.png" alt="Epics Added after G2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Field&lt;/th>
&lt;th style="text-align: left">Operator&lt;/th>
&lt;th style="text-align: left">Value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Work Item Type&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Epic&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">State&lt;/td>
&lt;td style="text-align: left">&amp;lt;&amp;gt;&lt;/td>
&lt;td style="text-align: left">Removed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Area Path&lt;/td>
&lt;td style="text-align: left">Under&lt;/td>
&lt;td style="text-align: left">“Team Project Name”\”Stream”\”Product/platform”[\”Major Product/platform Version”\”Target Product/platform Release”]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">ID&lt;/td>
&lt;td style="text-align: left">Not In&lt;/td>
&lt;td style="text-align: left">All the IDs of Epics at G2&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;br/>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Query 3: Epics removed after G2&lt;/strong>&lt;/p>
&lt;p>Make a query based on IDs to catch if any epics were removed after G2.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard-epicsremovedfromg2.png" alt="Epics Removed after G2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Field&lt;/th>
&lt;th style="text-align: left">Operator&lt;/th>
&lt;th style="text-align: left">Value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Work Item Type&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Epic&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">State&lt;/td>
&lt;td style="text-align: left">=&lt;/td>
&lt;td style="text-align: left">Any&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Area Path&lt;/td>
&lt;td style="text-align: left">Not Under&lt;/td>
&lt;td style="text-align: left">“Team Project Name”\”Stream”\”Product/platform”[\”Major Product/platform Version”\”Target Product/platform Release”]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">ID&lt;/td>
&lt;td style="text-align: left">In&lt;/td>
&lt;td style="text-align: left">All the IDs of Epics at G2&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/li>
&lt;/ul>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/quality-and-kpi" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Quality and KPIs&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>DoR and DoD&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/documentation/markdown-tutorial/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Tutorial: Markdown in ADO&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>How-to Work With Epics and Features&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://learn.microsoft.com/en-us/azure/devops/boards/queries/using-queries?view=azure-devops&amp;amp;tabs=browser" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Define a work item query in Azure Boards&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://learn.microsoft.com/en-us/azure/devops/boards/queries/titles-ids-descriptions?view=azure-devops" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Query by titles, IDs, and rich-text fields in Azure Boards and Azure DevOps&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Describe the Usage of SCA Tool Template</title><link>/docs/tools/to-review-references/markdown-templates/describe-the-usage-of-sca-tool-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/markdown-templates/describe-the-usage-of-sca-tool-template/</guid><description>&lt;p>When a new static code analysis (SCA) tool has been chosen for a product or part of a product, it needs to be described to facilitate its use in the considered and other products.&lt;/p>
&lt;p>This template contains the information that should be part of the documentation for each SCA tool. See
&lt;a href="/docs/tools/to-review-references/static-code-analysis-tools/" >Static Code Analysis Tools&lt;/a> for recommended tools.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Where to find the tool
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(There shall be a description of where to find the tool, how to install it locally if applicable, and/or where to find it on a server.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Description
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Add a short description of the tool and its usage. Can it perform static or dynamic analysis? Does it support the formatting of the code? Which programming languages are supported?)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Motivation
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(What is the reason for choosing this tool in general or for a specific product?)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### How to analyze the code
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to perform the analysis in general. Describe how to handle 3rd-party code.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### New and changed code
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to analyze new and changed code. Describe which rules can be skipped for which codebase, and which rules must be handled.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Existing code base
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to handle an existing code base; if it is possible to baseline issues on the existing code base, and only focus on new issues on added or changed code. Describe the baselined rules for each code base and the rules that must be handled.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## New versions
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to update the tool with a new version. Also, mention who is responsible for performing the update.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Ruleset
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how the ruleset configuration works in the tool. Consider the following subchapters:)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Storage
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe where the ruleset can be found, e.g. is it a part of the code as a configuration file, or stored on a server?)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Version control
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to handle different versions of a ruleset. It must be possible to know exactly which rules have been used for a specific version of a product. A configuration file placed with the code is one way of handling versioning, another way is to have a separate document under version control listing the rules.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Add/remove rules
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to change the ruleset to add and remove rules.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### New rule set from new tool version.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to update the ruleset when a new version of the tool has been provided. Also, mention who is responsible for updating the ruleset.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Standards
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe if the tool can be mapped to for instance security rules to support security standards, e.g. to be compliant with IEC 62443-4-1.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Monitoring
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how the issues found by the tool are monitored, how to detect new issues, how to find already handled and remaining issues, and how to display the severity of not handled issues. Is it possible to integrate the tool in the existing development environment, for instance, Azure DevOps?)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Severity levels
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe the different severity levels of the issues for a specific tool. Some tools like SonarQube have different types of issues (bug, vulnerability, and code smell) and different severities (blocker, critical, major, minor, info). Klocwork only uses severity (critical, error, warning, review).)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## How to handle deviations
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(Describe how to handle false positives and deviations from relevant and correct issues. How and where to add motivation for deviation.)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>DoD for L4 Bugs</title><link>/docs/guides/to-review-references/l4-and-maintenance/dod-for-l4-bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/l4-and-maintenance/dod-for-l4-bugs/</guid><description>&lt;p>The definition of done (DoD) for L4 bugs are the checks performed when an L4 bug is considered completed.&lt;/p>
&lt;p>The product owner and L4 coordinator are responsible for L4 bugs, and the DoD helps them assess the completeness. DoD needs to be fulfilled before a bug is no longer considered an L4 bug.&lt;/p>
&lt;h2 id="what-is-an-l4-bug">What is an L4 bug?&lt;/h2>
&lt;p>An L4 bug is a customer problem escalated to L4/R&amp;amp;D by support level 3 using a bug in Azure DevOps (ADO).&lt;/p>
&lt;p>Then it can only be considered as such if:&lt;/p>
&lt;ul>
&lt;li>A customer is suffering from it.&lt;/li>
&lt;li>A solution or workaround has not been identified.&lt;/li>
&lt;li>The problem is related to a released product (G5 passed).&lt;/li>
&lt;li>The issue is not considered by R&amp;amp;D as product enhancement request .&lt;/li>
&lt;/ul>
&lt;p>Please, note that following issues are not considered L4 bugs:&lt;/p>
&lt;ul>
&lt;li>Issues coming from pilot projects (since such issues are linked to products not released).&lt;/li>
&lt;li>Documentation issues related to L4 bugs, raised by L3 Support in relation to an L3 case management (this can happen if L3 Support close a case with a configuration change and later open a new work item to suggest a documentation change to better describe the configuration, based on the L3 case closure experience).&lt;/li>
&lt;/ul>
&lt;h2 id="dod-for-l4-bugs">DoD for L4 bugs&lt;/h2>
&lt;p>There are two alternative ways for an L4 bug to fulfill DoD:&lt;/p>
&lt;ol>
&lt;li>An investigation has been done, so that:&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>CCB has enough information to decide whether the bug should be corrected (not yet necessarily decided in which version) or not.&lt;/li>
&lt;li>A product issue number (PIN) has been generated and added to the bug if applicable.&lt;/li>
&lt;li>L3 has enough information (from an R&amp;amp;D perspective) to de-escalate the corresponding Salesforce case.&lt;/li>
&lt;/ul>
&lt;ol start="2">
&lt;li>The Salesforce case is closed (the customer has a workaround etc.) after an L4 bug has been created by L3.&lt;/li>
&lt;/ol>
&lt;p>When the DoD is verified, the bug will cease to be an L4 bug and continue as a regular bug.
It will no longer be part of the L4 backlog or statistics.&lt;/p>
&lt;h2 id="l4-bug-identification">L4 bug identification&lt;/h2>
&lt;p>L4 bugs can be identified when the following conditions are satisfied:&lt;/p>
&lt;ul>
&lt;li>The bug is linked to at least one Salesforce case.&lt;/li>
&lt;li>The bug is not categorized as enhancement.&lt;/li>
&lt;li>The bug is not a clone of another bug.&lt;/li>
&lt;li>The status of the bug indicates that initial investigation is not completed and/or a CCB decision is to be taken.&lt;/li>
&lt;/ul>
&lt;p>The &amp;ldquo;External Reference&amp;rdquo; field, which is a part of the
&lt;a href="/docs/tools/to-review-references/devops/standard-bug-template/" >Standard Bug Template&lt;/a>, contains the link between the bug raised in ADO (L4 bug) and Salesforce (customer) case.
Then, if the same issue is suffered by many customers there will be a single ADO item linked to many Salesforce cases.&lt;/p>
&lt;h2 id="l4-bug-age-count">L4 bug age count&lt;/h2>
&lt;p>Age count for L4 bugs:&lt;/p>
&lt;ul>
&lt;li>Begins when one of the following conditions is satisfied:
&lt;ul>
&lt;li>The bug is created by L3 as L4 bug.&lt;/li>
&lt;li>An existing bug (not L4 bug) is linked by L3 to a Salesforce case and become an L4 bug &lt;br>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;/blockquote>
&lt;ul>
&lt;li>Ends when one of the following conditions is satisfied:
&lt;ul>
&lt;li>The bug is closed as &amp;ldquo;Copied to Backlog&amp;rdquo; and cloned to the targeted release proposed to the customer (see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How to Handle Deferred Bugs&lt;/a>).&lt;/li>
&lt;li>The bug status indicates that the investigation is complete and a CCB decision has been made. If a targeted release has already been assigned (e.g. started as an internal bug and was later linked to a Salesforce case by L3, becoming an L4 bug) this status will reflect that.&lt;/li>
&lt;li>Bug is resolved with a workaround or a configuration change (information provided, to be verified on site).&lt;/li>
&lt;li>Bug is closed as rejected.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>NOTE: Refer to
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases/" >How to Handle Bugs in Multiple Releases&lt;/a> if the bug must be addressed in multiple release (e.g. a TC is requested and the fix will also be included in the next release). Please note that this will not affect the age count.&lt;/p></description></item><item><title>dod system epic</title><link>/snippet/dod--system-epic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/snippet/dod--system-epic/</guid><description>&lt;ul>
&lt;li>Confirm epics are completed&lt;/li>
&lt;li>System integration tests (SIT) have passed&lt;/li>
&lt;li>Required documentation is reviewed and approved&lt;/li>
&lt;li>The result is demonstrated and accepted by PPM&lt;/li>
&lt;/ul></description></item><item><title>Definition of Ready and Definition of Done</title><link>/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/</guid><description>&lt;p>The &amp;ldquo;Definition of Ready&amp;rdquo; (DoR) are the checks performed when a system epic, epic, feature, story, or bug is defined and ready to start work on. The &amp;ldquo;Definition of Done&amp;rdquo; (DoD) is the checks performed when the work items are completed before it is closed.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/process-overview.svg" alt="process-overview" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>The Product Owner, Architect, and Scrum Master are responsible for system epics, epics, features, stories, and bugs – and the DoR/DoD helps them to assess the readiness and completeness.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">&lt;h3 id="general-rule">General Rule&lt;/h3>
&lt;ul>
&lt;li>Never &lt;strong>start&lt;/strong> working on something that is &lt;strong>&lt;em>not Ready&lt;/em>&lt;/strong>&lt;/li>
&lt;li>Never &lt;strong>stop&lt;/strong> working on something that is &lt;strong>&lt;em>not Done&lt;/em>&lt;/strong>&lt;/li>
&lt;/ul>
&lt;/span>
&lt;/div>
&lt;p>System epics, epics, features, and stories are secured by both acceptance criteria and DoD. Both need to be fulfilled before closing the work item.&lt;/p>
&lt;p>The difference between the DoD and the acceptance criteria is that acceptance criteria are unique for an individual work item, resulting in test cases while the DoD is generic and the same checks are applied to each work item type including the acceptance criteria.&lt;/p>
&lt;h2 id="dor-and-dod-for-work-items">DoR and DoD for work items&lt;/h2>
&lt;h2 id="system-epic">System-Epic&lt;/h2>
&lt;p>&lt;strong>Definition of Ready&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Functional: The title/description/acceptance criteria come from an approved system requirement&lt;/li>
&lt;li>Enabler/Architectural: Understandable title, description and acceptance criteria&lt;/li>
&lt;li>An initial breakdown into epics involving streams&lt;/li>
&lt;li>The system epic backlog shall be ranked for the target release&lt;/li>
&lt;li>Area path set&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Definition of Done&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Confirm epics are completed&lt;/li>
&lt;li>System integration tests (SIT) have passed&lt;/li>
&lt;li>Required documentation is reviewed and approved&lt;/li>
&lt;li>The result is demonstrated and accepted by PPM&lt;/li>
&lt;/ul>
&lt;h2 id="epic">Epic&lt;/h2>
&lt;p>&lt;strong>Definition of Ready&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Understandable Title and Description&lt;/li>
&lt;li>Testable acceptance criteria established&lt;/li>
&lt;li>If/how to demo defined&lt;/li>
&lt;li>Effort estimated&lt;/li>
&lt;li>Link to System Epic&lt;/li>
&lt;li>Dependencies to other Epics defined&lt;/li>
&lt;li>Preliminary stream architecture&lt;/li>
&lt;li>Draft features&lt;/li>
&lt;li>The area and iteration path is set&lt;/li>
&lt;li>Security impact considered&lt;/li>
&lt;li>The epic is ranked in the backlog&lt;/li>
&lt;li>Epic reviewed&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Definition of Done&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>All child features are closed&lt;/li>
&lt;li>All product integration tests (PIT) passed, and existing bugs have CCB decision&lt;/li>
&lt;li>Product-level documentation approved&lt;/li>
&lt;li>Epic demonstrated&lt;/li>
&lt;li>Input to end-user documentation and release notes provided&lt;/li>
&lt;li>Installation/delivery package updated&lt;/li>
&lt;/ul>
&lt;h2 id="feature">Feature&lt;/h2>
&lt;p>&lt;strong>Definition of Ready&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Understandable Title and Description&lt;/li>
&lt;li>Testable acceptance criteria established&lt;/li>
&lt;li>If/how to demo defined&lt;/li>
&lt;li>The feature is estimated to ensure it can be completed in an increment&lt;/li>
&lt;li>Preliminary design ready&lt;/li>
&lt;li>Draft user stories&lt;/li>
&lt;li>Link to Epic&lt;/li>
&lt;li>Dependencies on other features defined&lt;/li>
&lt;li>The area and iteration path is set&lt;/li>
&lt;li>Security impact considered&lt;/li>
&lt;li>The feature is ranked in the backlog&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Definition of Done&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>All child stories are closed&lt;/li>
&lt;li>All unit and component tests passed&lt;/li>
&lt;li>Component documentation approved&lt;/li>
&lt;li>Demo performed (or planned)&lt;/li>
&lt;/ul>
&lt;h2 id="story">Story&lt;/h2>
&lt;p>&lt;strong>Definition of Ready&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>The story is clarified and accepted.&lt;/li>
&lt;li>Enough information is provided to be able to start task breakdown by the teams.&lt;/li>
&lt;li>The story is estimated to ensure it can be completed in a sprint.&lt;/li>
&lt;li>Acceptance criteria are provided and agreed upon.&lt;/li>
&lt;li>The story/enabler is aligned with the architecture.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Definition of Done&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Confirm tasks are completed.&lt;/li>
&lt;li>Impact on architecture, design, and interfaces identified and updated.&lt;/li>
&lt;li>Code reviewed and issues fixed.&lt;/li>
&lt;li>Static Code Analysis is performed, and issues are fixed.&lt;/li>
&lt;li>Unit tests passed and included in the automated test environment.&lt;/li>
&lt;li>Cumulative unit and functional regression tests passed.&lt;/li>
&lt;li>End-user documentation is updated.&lt;/li>
&lt;li>The story fulfills the acceptance criteria.&lt;/li>
&lt;/ul>
&lt;h2 id="bug">Bug&lt;/h2>
&lt;p>&lt;strong>Definition of Ready&lt;sup>1)&lt;/sup>&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Is sufficient information available to evaluate the bug (e.g., images, dumps, log files)?&lt;/li>
&lt;li>Can the problem be reproduced?&lt;/li>
&lt;li>Are severity, priority, and security effect assigned?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Definition of Done&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Is the code reviewed and issues fixed?&lt;/li>
&lt;li>Is the static code analysis performed and issues fixed?&lt;/li>
&lt;li>Is the user documentation, including release notes, updated?&lt;/li>
&lt;li>Is the architecture and design documentation updated?&lt;/li>
&lt;li>For security-critical components and security-relevant bugs, are the threat models, attack surface and criticality analysis, and the security assessment updated?&lt;/li>
&lt;li>Are the unit, functional, and/or security tests updated and passed?&lt;/li>
&lt;li>Are other similar issues identified?&lt;/li>
&lt;li>Are bugs created for other affected products or product versions?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>&lt;sup>1)&lt;/sup>&lt;/strong> The bug is &amp;ldquo;ready&amp;rdquo; when the investigation can start&lt;/p>
&lt;h2 id="how-to-work-with-doddor">How to work with DoD/DoR&lt;/h2>
&lt;h3 id="adaption-of-doddor">Adaption of DoD/DoR&lt;/h3>
&lt;ul>
&lt;li>Based on the context and needs for a stream the DoR and DoD might need to be tailored.&lt;/li>
&lt;li>Consider the context when adapting the DoR/DoD (HW, SW, FW, Embedded, HMI, DevOps, standards, etc.).&lt;/li>
&lt;li>Ensure that the adapted version is documented and communicate the changes to all members and stakeholders.&lt;/li>
&lt;li>Analyze results in retrospectives and refine the DoR/DoD as the streams and teams mature.&lt;/li>
&lt;li>The &amp;ldquo;Head of Development&amp;rdquo; and &amp;ldquo;Head of Quality&amp;rdquo; approve the adaptations of the DoR/DoD – to make sure mandatory checks are included.&lt;/li>
&lt;/ul>
&lt;h3 id="dordod-when-appgami-not-integrated">DoR/DoD when Appgami not integrated&lt;/h3>
&lt;p>If the Appgami plug-in is not integrated into the collection, the DoR/DoD information needs to be added to the work item differently. There are some options:&lt;/p>
&lt;ul>
&lt;li>add the DoR/DoD checklist to the &amp;ldquo;description&amp;rdquo; field&lt;/li>
&lt;li>add it in the &amp;ldquo;validation&amp;rdquo; field (if present)&lt;/li>
&lt;li>use the &amp;ldquo;discussion&amp;rdquo; field&lt;/li>
&lt;/ul>
&lt;p>For the &amp;ldquo;description&amp;rdquo;/&amp;ldquo;validation&amp;rdquo; fields, the DoR/DoD can be added to a template in ADO to reduce manual work.&lt;/p>
&lt;h3 id="dordod-in-cloud-azure-devops">DoR/DoD in Cloud Azure DevOps&lt;/h3>
&lt;p>The DoR/DoD can be added to cloud Azure DevOps by
&lt;a href="https://marketplace.visualstudio.com/items?itemName=appgami.appgami-checklist&amp;amp;ssr=false#overview" target="_blank"
rel="noopener noreferrer" >Appgami&lt;/a> for epics, features, stories and bugs in the information field.&lt;/p>
&lt;ul>
&lt;li>The “ready” criteria can be added to the &amp;ldquo;Definition of Ready&amp;rdquo; area by choosing a proper template from Appgami.
&lt;ul>
&lt;li>The criteria could be customized inside the project team based on their product development.&lt;/li>
&lt;li>The progress and status could be tracked by checking the criteria one by one.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>The “done” criteria can also be the &amp;ldquo;Definition of Done&amp;rdquo; area by choosing a proper template from Appgami.
&lt;ul>
&lt;li>The criteria could be customized inside the project team based on their product development.&lt;/li>
&lt;li>The sum of all “done” checks above progress corresponds to the recommended “Definition of Done”.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>The teams check the boxes in the DoR/DoD information field before the epic/feature/story is moved to &amp;ldquo;Active&amp;rdquo; or &amp;lsquo;Completed&amp;quot; in ADO.&lt;/li>
&lt;/ul>
&lt;p>If a DoR / DoD is &amp;ldquo;Not Applicable&amp;rdquo; it shall be agreed with relevant stakeholders (PO/RO/Dev Team) and marked as &amp;ldquo;SKIPPED&amp;rdquo; (see example below)&lt;/p>
&lt;p>&lt;strong>IMPORTANT&lt;/strong>: When &amp;ldquo;SKIPPED&amp;rdquo; is applied the criteria must be marked so that the DoD can be closed. (Reach 100%)&lt;/p>
&lt;p>&lt;strong>DoR&lt;/strong>:&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline-2a.png" alt="image-2a.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>&lt;strong>DoD&lt;/strong>:&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline-2b.png" alt="image-2b.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="discipline-dashboard-in-azure-devops">Discipline Dashboard in Azure DevOps&lt;/h3>
&lt;p>Azure DevOps support setting up Dashboards to check the work items (e.g. for orphans, fields not filled in, etc.). The dashboards give an overview of a set of work items and can be combined with the Appgami checklists.&lt;/p>
&lt;ul>
&lt;li>The Discipline Dashboards in Azure DevOps are indicators of some of the checks in a DoD/DoR.&lt;/li>
&lt;li>Use the Discipline Dashboards to regularly monitor issues with the epics, features, and stories, and take action on deviations.&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline-3.png" alt="image.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/devops/recommendedextensions" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Recommended Extensions in Azure DevOps&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/mp028/roles-and-teams/roles/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Roles&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/mp028/process/functional-process/requirements" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Requirements&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/quality-and-kpi/rd-quality-criteria/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>R&amp;amp;D Quality Criteria&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>ELSP R&amp;D Quality Dashboards</title><link>/docs/guides/to-review-references/quality-and-kpi/quality-dashboard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/quality-and-kpi/quality-dashboard/</guid><description>&lt;p>R&amp;amp;D quality dashboards can be automatically created, based on Azure DevOps (ADO) data, to support the organization in visualizing project progress based on quality key performance indicators (KPIs).&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>The quality dashboards provide valuable support to release owners, quality control managers (QCMs), and product owners during meetings.&lt;/p>
&lt;h2 id="useful-info-and-links">Useful info and links&lt;/h2>
&lt;p>For terminology and KPI descriptions, refer to the legend page on respective dashboard (or use the direct links below).&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/quality-dashboard.png" alt="image.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://app.powerbi.com/groups/me/apps/5d002d7e-fb4f-487f-8247-eb233a905f5a/reports/ff9ce33c-0521-4b7d-9258-1911c51fb506/ReportSection346ef7831a03a55bdb25?ctid=372ee9e0-9ce0-4033-a64a-c07073a91ecd&amp;amp;experience=power-bi&amp;amp;clientSideAuth=0&amp;amp;bookmarkGuid=Bookmark939b1e3e39eac00db120" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Project Progress KPIs description&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://app.powerbi.com/groups/me/apps/5d002d7e-fb4f-487f-8247-eb233a905f5a/reports/ff9ce33c-0521-4b7d-9258-1911c51fb506/ReportSection2bcfd57db56831bad893?ctid=372ee9e0-9ce0-4033-a64a-c07073a91ecd&amp;amp;experience=power-bi&amp;amp;clientSideAuth=0&amp;amp;bookmarkGuid=Bookmark38c6f1e261a5e644cb02" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Bug Management KPIs description&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://app.powerbi.com/groups/me/apps/5d002d7e-fb4f-487f-8247-eb233a905f5a/reports/ff9ce33c-0521-4b7d-9258-1911c51fb506/ReportSectioncb733a2f9a100bd1ac26?ctid=372ee9e0-9ce0-4033-a64a-c07073a91ecd&amp;amp;experience=power-bi&amp;amp;clientSideAuth=0&amp;amp;bookmarkGuid=Bookmarkfa29ebe3356ebcbc1610" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Tests KPIs description&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:b:/r/teams/ABBPCPQualityPowerBIReports/Shared%20Documents/General/Documentation%20Business%20Analysis%20%5BPDF%5D/ABB_PCP_BusinessAnalysisv2.pdf?csf=1&amp;amp;web=1&amp;amp;e=kAsrvD" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>Full Business Analysis documentation&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="dashboard-access">Dashboard access&lt;/h2>
&lt;p>Access is provided for all ELSP employees who are part of this
&lt;a href="mailto:de_ia_iasu_pcp_employees@abb.com" >AD group&lt;/a>.&lt;br>
In case of any issues with access, please contact
&lt;a href="mailto:piotr.salamon1@pl.abb.com" >Piotr Salamon&lt;/a>.&lt;/p>
&lt;h2 id="data-upload-schedule">Data upload schedule&lt;/h2>
&lt;p>Automatic data upload (from ADO and Team Foundation Server (TFS)) is scheduled daily at 2 AM CET. The update process, including refreshed dashboards, takes about 1.5 hours and is completed at 4 AM CET.&lt;/p>
&lt;h2 id="projectsreleases-addingupdating">Projects/releases adding/updating&lt;/h2>
&lt;p>Contact the respective QCM to add a new release/project setup or to modify the existing one.&lt;/p>
&lt;h2 id="naming-convention">Naming convention&lt;/h2>
&lt;p>Release names in &amp;ldquo;Dictionary&amp;rdquo; should follow the general pattern which is specific for a given solution described below:&lt;/p>
&lt;ul>
&lt;li>800xA 6.2&lt;/li>
&lt;li>800xA 6.2 - AV&lt;/li>
&lt;li>800xA 7.0&lt;/li>
&lt;li>800xA x.y - xyz&lt;/li>
&lt;li>S+ Phoenix&lt;/li>
&lt;/ul>
&lt;h2 id="tips--tricks">Tips &amp;amp; tricks&lt;/h2>
&lt;ul>
&lt;li>There must be parent/child links between epics and features to make the project progress dashboard work. Additionally, effort and target dates should be filled in in epics and features in ADO/TFS.&lt;/li>
&lt;li>“Project start date” on ConfigApp should be the same as the G2 date (the date when full release scope is committed).&lt;/li>
&lt;li>All new setups and changes are implemented during the next daily data upload (at 2-4 AM CET).&lt;/li>
&lt;li>When using a specific area path for deferred bugs, that area path must also be added in the &amp;ldquo;Product&amp;rdquo; bugs configuration (this may also be required in scope/introduced bugs configuration).&lt;/li>
&lt;li>When configuring the area path for deferred, an &amp;ldquo;and&amp;rdquo; to &amp;ldquo;state closed / reason deferred&amp;rdquo; is required.&lt;/li>
&lt;li>The “deferred” must rely on state (closed) and reason (deferred) to differentiate from open bugs. The configuration cannot rely solely on tags, iteration path, or others to define deferred bugs.&lt;/li>
&lt;li>Project progress dashboard works appropriately only for work items (epics &amp;amp; features) using standard templates. Teams using customized work item templates are encouraged to move to the recommended ones.&lt;/li>
&lt;/ul>
&lt;h3 id="current-issueslimitations">Current issues/limitations&lt;/h3>
&lt;p>If you face the issue while pasting a value, e.g., for a given area path, you may not be able to select it. The workaround is to choose any other area path, then paste the copied one again, and it will work.&lt;/p>
&lt;p>Currently, the test dashboard is limited to test plans coming from TFS only. The issue has been raised to Microsoft and is under investigation/fixing.&lt;/p>
&lt;p>This is a completely new functionality, internally developed and intensively tested. However, we understand that there may be undiscovered issues or difficulties due to a lack of descriptions or guidelines. In this case please contact:
&lt;a href="mailto:piotr.salamon1@pl.abb.com" >Piotr Salamon&lt;/a>.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/demos/2023-05-22-PCP-RnD-quality-dashboard" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Project Progress &amp;amp; Bug management demo recording&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/demos/2024-02-22-PCP-RnD-quality-dashboard" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Test and ConfigApp demo recording&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://apps.powerapps.com/play/e/c11a7c78-1677-e576-a9f9-a0a7df37594f/a/99117318-b605-4290-90ef-29f5415343d0?tenantId=372ee9e0-9ce0-4033-a64a-c07073a91ecd&amp;amp;hint=8b144b48-7d07-4171-a56f-17ed13d11ab0&amp;amp;sourcetime=1707290981563" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>ConfigApp&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://app.powerbi.com/groups/d42b6bd2-150b-4f6b-8d85-f5150235b374/reports/ff9ce33c-0521-4b7d-9258-1911c51fb506/ReportSection34d116c80d5c4c802db9?experience=power-bi&amp;amp;bookmarkGuid=Bookmark879cea8e8583bdaa1758" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>PCP R&amp;amp;D Quality Dashboards&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/quality-and-kpi/rd-quality-criteria/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>PCP R&amp;amp;D Quality Criteria&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>How-to Adopt Standard Work Item Templates</title><link>/docs/guides/to-review-references/configuration-management/how-to-adopt-standard-work-item-templates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/how-to-adopt-standard-work-item-templates/</guid><description>&lt;p>An existing Azure DevOps (ADO) project - on-premises or in the cloud - may differ from the current standard PCP work item templates due to historical reasons or tailoring. This guide lists the steps and tools to adopt standard work item templates in an existing ADO project with existing data.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note&lt;/strong>: ADO templates are complex. Do not hesitate to contact the CM process team or community for expert support and knowledge sharing if needed.&lt;/p>&lt;/blockquote>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Configuration managers.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;p>Due to differences intechnology, the activities to adopt standard templates are executed in different ways in ADO Server (on-prem) and ADO Services (cloud). Therefore, specific instructions are provided for each activity where applicable.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/how-to-adopt-standard-work-item-templates.drawio.png" alt="WIT-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="spot-the-differences">Spot the differences&lt;/h3>
&lt;p>Identify differences between the current project and the standard template (with support from the quality control manager (QCM) or CM team if needed).&lt;/p>
&lt;p>&lt;strong>Tips and tricks&lt;/strong>: The CM team periodically runs a script based on ADO REST API to analyze current templates and export a csv file containing the list of field differences for each collection, project, and work item type.&lt;/p>
&lt;h3 id="decide-how-to-reconcile-differences">Decide how to reconcile differences&lt;/h3>
&lt;p>Apply the strategies below to manage typical template differences (with support from the QCM or CM team if needed).&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Difference&lt;/th>
&lt;th>Strategies&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Missing fields&lt;/td>
&lt;td>This is the most typical case. When a new field is added to the standard template, add it to the project template using the standard template as a reference. The new field will be visible in existing work item data, with empty or default values depending on the field definition.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Different work item names&lt;/td>
&lt;td>Introduce the new work item type in the project with matching fields. Change the work item type of existing data with REST API or bulk editing from a query. Reconfigure the backlog configuration to show the new work item type name if applicable (e.g. &amp;ldquo;Product Requirement&amp;rdquo; -&amp;gt; &amp;ldquo;Feature&amp;rdquo;).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Additional fields&lt;/td>
&lt;td>Desired additional fields can remain unchanged. Unused ones may be hidden, and their value may be copied to &amp;ldquo;Description&amp;rdquo; in historical data.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Different state names&lt;/td>
&lt;td>Update the state machine and backlog visualization configuration. Bulk update existing data.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Different drop-down lists&lt;/td>
&lt;td>Update the template. Bulk update existing data if any values are removed or renamed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Different rules&lt;/td>
&lt;td>Update rules.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Create a work item in the
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx" target="_blank"
rel="noopener noreferrer" >OpEx&lt;/a> project to request the template change. &lt;!-- TODO: Check PCP references -->&lt;/p>
&lt;p>&lt;strong>Tips and tricks&lt;/strong>: In some cases, the difference analysis may trigger process change requests to improve the standard template.&lt;/p>
&lt;h3 id="prepare-the-updated-template">Prepare the updated template&lt;/h3>
&lt;p>The CM team prepares the updated template according to the following:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Where&lt;/th>
&lt;th>How to&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>On-prem&lt;/td>
&lt;td>Edit the xml template of the corresponding project in the
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Configuration Management repo&lt;/a> on a new branch. Copy/paste and adapt the layout as needed from the on-prem standard work item template stored in the same repo. &lt;br/> Import the template to a validation project in the same organization. &lt;br/> Create a pull request describing the change and assign it to the respective ADO project configuration manager for review.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cloud&lt;/td>
&lt;td>If the ADO organization uses the standard template without modifications, import the latest published standard template from the
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement?path=/cloud/ABBStandardizedOnCloudTemplate/MS_Agile_ProcessTemplate.json&amp;amp;version=GBmain&amp;amp;_a=contents" target="_blank"
rel="noopener noreferrer" >Configuration Management repo&lt;/a>. Assign this template to a validation project for review. &lt;br/> If the organization uses a modified template, the CM team cannot import it directly. The project&amp;rsquo;s configuration manager needs to create a copy of the current process in the web UI, apply the change and assign the updated template to a validation project for review.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>(Optional) If the change requires a bulk update of existing data, prepare a validation project with the same template as the project to update. Add some data, either by importing it from the original project with Naked Agility Migration Tools or by creating sample data.&lt;/li>
&lt;li>Update the template in the validation project. Do not change anything in production until the change is validated.&lt;/li>
&lt;li>(Optional) If the change requires a bulk update of existing data, simulate the bulk update using Naked Agility Migration Tools.&lt;/li>
&lt;/ul>
&lt;p>At the end of this activity, the updated project template is available for review in a validation project and/or as code.&lt;/p>
&lt;h3 id="review-the-change">Review the change&lt;/h3>
&lt;p>Review the updated template (with support from the QCM or other roles if needed):&lt;/p>
&lt;ul>
&lt;li>Check if the template works in the validation project.&lt;/li>
&lt;li>Review and complete pull request (on-prem only).&lt;/li>
&lt;/ul>
&lt;h3 id="update-in-production">Update in production&lt;/h3>
&lt;p>After informing the users and selecting an agreed-upon time, the CM team should update the ADO template in production. If required, bulk update the existing data with Naked Agility Migration Tools. This step requires no downtime.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Where&lt;/th>
&lt;th>How to&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Cloud&lt;/td>
&lt;td>Apply the template to the project from the web UI.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>On-prem&lt;/td>
&lt;td>Apply the template to the project using a Witadmin-based script (also, in the Configuration Management repo)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Use one or more of the following methods to &lt;strong>inform users about changes&lt;/strong> in a template applied to a project:&lt;/p>
&lt;ul>
&lt;li>Publish a banner in respective ADO organization with a description of the update.&lt;/li>
&lt;li>Email or other notification to key people.&lt;/li>
&lt;/ul>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="about-work-item-template-updates">About work item template updates&lt;/h3>
&lt;p>On-prem and cloud templates are updated differently. For this, refer to the instructions in the
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement?path=%2F&amp;amp;version=GBmain&amp;amp;_a=contents" target="_blank"
rel="noopener noreferrer" >Configuration Management repo&lt;/a>, which contains standard templates.&lt;/p>
&lt;h3 id="bulk-edit-of-existing-work-items">Bulk edit of existing work items&lt;/h3>
&lt;p>To bulk update work items after a change, write a configuration file for Naked Agility Migration Tools to update data as decided and try it in the validation project until it is validated. Multiple rounds of simulation may be required. It is a good practice to ask some users to check the transformation in the validation project.&lt;/p>
&lt;p>&lt;strong>Tips and tricks&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Examples and experience are available within the CM community to support this step.&lt;/li>
&lt;li>Store the configuration file(s) and the templates in a repo to be able to repeat the process as it was validated.&lt;/li>
&lt;/ul>
&lt;h3 id="motivation-to-align-templates">Motivation to align templates&lt;/h3>
&lt;p>Aligning project templates with the standard ADO template is crucial for maintaining process consistency and enabling the calculation of key performance indicators (KPIs).&lt;/p>
&lt;p>Here are some scenarios that require a change in the ADO template or existing data:&lt;/p>
&lt;ul>
&lt;li>Adopting fields that are used in QMS processes, e.g. &amp;ldquo;Cloned&amp;rdquo; and &amp;ldquo;Security Relevant&amp;rdquo;.&lt;/li>
&lt;li>Changing the list of allowed values for a field, e.g. &amp;ldquo;How Found&amp;rdquo;.&lt;/li>
&lt;li>Changing the state names, e.g. from &amp;ldquo;Proposed&amp;rdquo; to &amp;ldquo;New&amp;rdquo;.&lt;/li>
&lt;li>Migrating a project from on-prem (e.g. tfsa.abb.com) to cloud (e.g.
&lt;a href="https://dev.azure.com/ABB-BCI-PCP" target="_blank"
rel="noopener noreferrer" >dev.azure.com/ABB-BCI-PCP&lt;/a>).&lt;/li>
&lt;li>Bulk editing field values to match standard field values.&lt;/li>
&lt;/ul>
&lt;h3 id="configuration-as-code-approach">Configuration as code approach&lt;/h3>
&lt;p>The process for adopting standard work item templates in projects follows a configuration-as-code approach, ensuring consistency, traceability, and efficiency. All templates are managed as code and stored under source control in a Git repository for each project or set of projects sharing the same template. This allows for version control and traceability of changes to specific process change requests.&lt;/p>
&lt;p>An automated pipeline with multiple stages is used to deploy the templates. Initially, the templates are deployed to a validation project. After successful testing and review, they are then deployed to the production environment. Manual changes in the production environment are strictly prohibited to maintain consistency and traceability.&lt;/p>
&lt;p>The CM team drives the execution of changes, with the support the CM community as needed for executing or reviewing changes. Whenever possible, at least one of the configuration managers of a project is involved in the review and approval for that project. Since changes are reviewed as code, any conflicts in names or layout are resolved before applying the template to production, ensuring smooth and conflict-free deployments.&lt;/p>
&lt;p>This centralized approach is more efficient than the previous decentralized method, although it requires effort to manage and maintain. Priorities are managed to optimize the use of available resources, ensuring that changes are addressed promptly. The process includes tracking where changes have been applied and where they have not, which was not possible with the previous approach.&lt;/p>
&lt;h3 id="for-safety-projects">For safety projects&lt;/h3>
&lt;p>Safety projects are managed according to this process, but can be stored in a separate repository in an appropriate location approved by the Safety team. This approach ensures consistent application of templates across all projects on-premises, provides clear traceability of changes, improves efficiency through centralized management and automated deployment, resolves conflicts before deployment, optimizes resource usage, tracks changes, ensures compliance for safety projects, allows for historical tracking and rollback, eliminates manual errors, and provides a clear audit trail for all changes made.&lt;/p>
&lt;h3 id="tools">Tools&lt;/h3>
&lt;p>The main tool used to manage existing data for this process is
&lt;a href="https://nkdagility.com/learn/azure-devops-migration-tools/" target="_blank"
rel="noopener noreferrer" >Naked Agility Migration Tools&lt;/a>. It is a very powerful tool. This guide&amp;rsquo;s most relevant feature is the ability to migrate and bulk update work items while maintaining their history.&lt;/p>
&lt;p>Examples:&lt;/p>
&lt;ul>
&lt;li>Copy work items from the production project to a validation project.&lt;/li>
&lt;li>Bulk edit the value of a field to a default value.&lt;/li>
&lt;li>Map values to bulk replace them.&lt;/li>
&lt;li>Add a tag.&lt;/li>
&lt;li>If a field has a certain value, set the value of another field as configured.&lt;/li>
&lt;/ul>
&lt;h3 id="qa">Q&amp;amp;A&lt;/h3>
&lt;p>&lt;strong>Q:&lt;/strong> Who initiates the process of adopting standard work item templates in a project?
&lt;strong>A:&lt;/strong> The process is usually initiated by the CM team when a standard work item template is updated or by the Quality team when an ADO project deviates from the standard template (for example when a necessary field to follow a QMS process or to calculate a KPI is missing).&lt;/p>
&lt;p>&lt;strong>Q:&lt;/strong> My project was created using the &lt;strong>Scrum template&lt;/strong>. Do I have to change it to use the &lt;strong>Agile template&lt;/strong>?
&lt;strong>A:&lt;/strong> No, you can update to the Agile template with the same work item types, states, and backlog visualization.&lt;/p>
&lt;p>&lt;strong>Q:&lt;/strong> Is it allowed to have &lt;strong>additional custom fields&lt;/strong>?
&lt;strong>A:&lt;/strong> Additional custom fields are allowed to store more information, provided that the QMS or approved tailored processes are followed.&lt;/p>
&lt;p>&lt;strong>Q:&lt;/strong> Who is responsible for applying standard templates in ADO Services (cloud)?
&lt;strong>A:&lt;/strong> The CM team applies standard templates to
&lt;a href="https://dev.azure.com/ABB-BCI-PCP" target="_blank"
rel="noopener noreferrer" >https://dev.azure.com/ABB-BCI-PCP&lt;/a> and makes templates available that can be imported to other organizations.&lt;/p>
&lt;p>&lt;strong>Q:&lt;/strong> Who is responsible for applying standard templates in ADO Server (on-prem)?
&lt;strong>A:&lt;/strong> The CM team prepares template implementation for each on-prem project and submits a pull review to each project&amp;rsquo;s configuration manager. After successful completion of the pull request, the CM team applies templates to projects. Considering the effort, the CM team may take help from the CM community.&lt;/p></description></item><item><title>How-to Handle Software Vulnerabilities</title><link>/docs/guides/to-review-references/l4-and-maintenance/how-to-handle-software-vulnerabilities/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/l4-and-maintenance/how-to-handle-software-vulnerabilities/</guid><description>&lt;p>This guide describes the process for handling software vulnerabilities in products within PCP R&amp;amp;D. It includes instructions on everything from recording a description of a reported issue to documenting and communicating its remediation.&lt;/p>
&lt;p>A software vulnerability can be detected in many different ways, which impacts &lt;strong>what steps to take&lt;/strong> in this process &lt;strong>according to the following&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>An external party, e.g. researcher, government organization, or customer (also ABB internal), reports a vulnerability in, or malware targeting, a PCP offering and expects a vulnerability handling process. See examples of communication of such incidents under
&lt;a href="https://global.abb/group/en/technology/cyber-security/alerts-and-notifications" target="_blank"
rel="noopener noreferrer" >Cyber security alerts and notifications&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>The &lt;strong>full process&lt;/strong> from first response to notification &lt;strong>shall be followed&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>An external party, e.g. researcher or customer (also ABB internal) reports a problem (e.g. a support case concerning a bug) but doesn&amp;rsquo;t identify it as a vulnerability.
If the problem turns out to be a vulnerability:&lt;/p>
&lt;ul>
&lt;li>Sync with the ABB product security incident response team (PSIRT) (
&lt;a href="mailto:cybersecurity@ch.abb.com" >cybersecurity@ch.abb.com&lt;/a>) to create a unique ID (CVE ID) for this vulnerability.&lt;/li>
&lt;li>&lt;strong>Start&lt;/strong> the process &lt;strong>at &amp;ldquo;Confirmation of vulnerability&amp;rdquo;&lt;/strong>, under
&lt;a href="#initial-triage" >Initial triage&lt;/a>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>A vulnerability is discovered, typically internally within PCP, and there is no specific reporter to interact with. If the problem turns out to be a vulnerability:&lt;/p>
&lt;ul>
&lt;li>Follow the bug management process, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>.&lt;/li>
&lt;li>If it&amp;rsquo;s helpful for the customer(s), a field communications should be considered, see
&lt;a href="https://abb.sharepoint.com/sites/OnePCP-DMS/PCP-BMS/Execution/04%20-%20IBP%20Perform%20Customer%20Care/04-Monitor%20and%20Manage%20Product/Writing%20and%20Publishing%20Field%20Communication.pdf" target="_blank"
rel="noopener noreferrer" >3BUL980146 Writing and Publishing Field Communications&lt;/a>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>It is discovered that malware is affecting a PCP offering and there is no specific reporter to interact with.&lt;/p>
&lt;ul>
&lt;li>Sync with ABB PSIRT (
&lt;a href="mailto:cybersecurity@ch.abb.com" >cybersecurity@ch.abb.com&lt;/a>) to create a unique ID (CVE ID) for this vulnerability.&lt;/li>
&lt;li>&lt;strong>Start&lt;/strong> the process &lt;strong>at &amp;ldquo;Confirmation of vulnerability&amp;rdquo;&lt;/strong>, under
&lt;a href="#initial-triage" >Initial triage&lt;/a>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> The &lt;strong>ending of the process may differ depending on&lt;/strong> the &lt;strong>life cycle status&lt;/strong> of the involved product(s):&lt;/p>
&lt;ul>
&lt;li>For products in the &amp;ldquo;Active&amp;rdquo; and &amp;ldquo;Classic&amp;rdquo; states, the expectation is normally that software vulnerabilities are corrected.&lt;/li>
&lt;li>For products in the “Limited” or “Obsolete” states, this will be determined on a case-by-case basis. One, but not the only, possible decision is to issue a cyber security advisory about the problem, but not to correct it.&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Product managers, product owners, cyber security engineers, and L4 coordinators.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>When a vulnerability is identified and reported to ABB the first point of contact is the PCP head of cyber security.&lt;/p>
&lt;p>PCP head of cyber security appoints a lead person for the subsequent handling of the vulnerability, referred to as the vulnerability handling lead (VHL). This person will ensure that the vulnerability is handled according to this process. In the
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9ADB005047&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >9ADB005047 ABB Software Vulnerability Report&lt;/a>, the person shall be entered as the “ABB lead”.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/l4-and-maintenance/How-to-Handle-Software-Vulnerabilities_Workflow.drawio.png" alt="SVH-0" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Below flowchart with time requirements follows the
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9ADB005046&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >ABB Software Vulnerability Handling Policy&lt;/a>. The timelines are communicated externally and shall be considered customer commitments.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/l4-and-maintenance/How-To-Handle-Software-Vulnerabilities_Process-Overview-1.drawio.png" alt="SVH-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="first-response">First response&lt;/h3>
&lt;p>&lt;strong>Responsible role:&lt;/strong> VHL.&lt;/p>
&lt;ol>
&lt;li>Acknowledge receipt of the vulnerability report. This only applies when the vulnerability is reported from an external source. Security issues can also be identified from internal sources like product development, product tests, or L3 Support.&lt;/li>
&lt;li>Route vulnerability details to the appropriate product development team.&lt;/li>
&lt;li>Sync with the ABB Product Security Incident Response team (
&lt;a href="mailto:cybersecurity@ch.abb.com" >cybersecurity@ch.abb.com&lt;/a>) to create a unique ID (CVE ID) for this vulnerability.&lt;/li>
&lt;li>Create the ABB Software Vulnerability Report, complete section 1, and add an entry in the cyber security core team’s list of vulnerability handling cases. This report will follow the case until closed. Its document number does not need to be related to the document number of the security advisory.
The ABB Software Vulnerability Report is recommended to be stored where the product team stores the other documents related to the case, preferably in OnePCP DMS.&lt;/li>
&lt;li>Notify Group Cyber Security Council (GCSC).&lt;/li>
&lt;/ol>
&lt;h3 id="initial-triage">Initial triage&lt;/h3>
&lt;p>&lt;strong>Responsible role:&lt;/strong> Product owner for the concerned product(s)/system. The cyber security engineer for the concerned product(s)/system assists and shall at least be consulted.&lt;/p>
&lt;ol>
&lt;li>Create a bug in ADO for concerned products (can be one or several products). See also
&lt;a href="/docs/guides/to-review-references/configuration-management/bug-classification/" >Bug Classification&lt;/a> about security tagging of bugs. Add a reference in the ABB Software Vulnerability Report.&lt;/li>
&lt;li>Try to reproduce the vulnerability, if not possible try to get more information from the reporting source.&lt;/li>
&lt;li>Sync with the VHL, who should update the fields related to initial triage in the ABB Software Vulnerability Report.&lt;/li>
&lt;/ol>
&lt;p>The possible results are:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Confirmation&lt;/strong> of vulnerability.&lt;/li>
&lt;li>&lt;strong>Rejection&lt;/strong>, the first analysis gives that this is not a security issue, i.e. a false positive.&lt;/li>
&lt;li>The reported issue is &lt;strong>not relevant&lt;/strong> for PCP (products), forward it to the responsible unit. Involve the VHL for further advice. If the reported issue is in another PCP product, forward it to the responsible product via the VHL.&lt;/li>
&lt;/ul>
&lt;h3 id="investigation">Investigation&lt;/h3>
&lt;p>&lt;strong>Responsible role:&lt;/strong> Product owner for the concerned product(s)/system. The cyber security engineer for the concerned product(s)/system assists and shall at least be consulted.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Follow the defined bug management process described in
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-manage-bugs/" >How-to Manage Bugs&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Fill in the &amp;ldquo;Effect&amp;rdquo; field under &amp;ldquo;Security Analysis&amp;rdquo; as described in the
&lt;a href="/docs/guides/to-review-references/configuration-management/bug-classification/" >Bug Classification&lt;/a> guide.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Calculate the CVSS score (see
&lt;a href="https://www.first.org/cvss/calculator" target="_blank"
rel="noopener noreferrer" >FIRST&amp;rsquo;s Common Vulnerability Scoring System calculator&lt;/a>) and fill in the &amp;ldquo;CVSS&amp;rdquo; field under &amp;ldquo;Security Analysis&amp;rdquo;.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Determine which product(s) is affected and the level of severity.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Determine the root cause and all affected versions.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Effort estimation and impact analysis for fix.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Consider if the same or similar vulnerability may exist in other functions or products and if so, create defects for those.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The product owner and product manager determine possible releases that should include the fix.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Sync with the VHL who should updatee the fields related to investigating in the ABB Software Vulnerability Report.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Decide on potential further actions together with the VHL.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Notify GCSC via the VHL.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="remediation">Remediation&lt;/h3>
&lt;p>&lt;strong>Responsible role:&lt;/strong> Product owner for the concerned product(s)/system. The cyber security engineer for the concerned product(s)/system is responsible for the security advisory/notification.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Follow the defined defect process for fixing the bug and plan for the remediation in agreement with the VHL.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Identify if a workaround exists that can be used temporarily until the solution can be released.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Implement the solution (if the workaround is not sufficient).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Create a &amp;ldquo;security advisory&amp;rdquo; with details about the vulnerability and remediation. The security advisory is a field communication category that is described in
&lt;a href="https://abb.sharepoint.com/sites/OnePCP-DMS/PCP-BMS/Execution/04%20-%20IBP%20Perform%20Customer%20Care/04-Monitor%20and%20Manage%20Product/Writing%20and%20Publishing%20Field%20Communication.pdf" target="_blank"
rel="noopener noreferrer" >3BUL980146 Writing and Publishing Field Communications&lt;/a>. See also the
&lt;a href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/ppm/monitor-and-manage-product" target="_blank"
rel="noopener noreferrer" >3BSE071315 Cyber Security Advisory template&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If the vulnerability is in a 3rd-party product or in the environment where the ABB product operates or has a dependency, a
&lt;a href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/ppm/monitor-and-manage-product" target="_blank"
rel="noopener noreferrer" >2PAA124139 Cyber Security Notification&lt;/a> may be created.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Consider performing an analysis of the root cause to identify why the vulnerability was introduced, why it was not identified by the security development lifecycle process, and whether this process needs to be improved. For more information and guidance about root cause analysis, see
&lt;a href="https://abb.sharepoint.com/sites/IAPCP/ControlledDocuments/Root%20Cause%20Analysis%20-%20Work%20Instruction.pdf" target="_blank"
rel="noopener noreferrer" >2PAA2024-115317 Root Cause Analysis&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>The VHL updates the fields related to remediation in the ABB Software Vulnerability Report and notifies GCSC.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="notification">Notification&lt;/h3>
&lt;p>&lt;strong>Responsible role:&lt;/strong> Product owner for the concerned product(s)/system.&lt;/p>
&lt;ol>
&lt;li>Distribute solutions or workaround to customers along with a security advisory as described in Writing and Publishing Field Communications.&lt;/li>
&lt;li>The VHL updates the fields related to the notification state in the ABB Software Vulnerability Report.&lt;/li>
&lt;li>Report to GCSC using the ABB Software Vulnerability Report.&lt;/li>
&lt;li>If decided by the extended review team (defined in Writing and Publishing Field Communications), make public disclosure at
&lt;a href="https://global.abb/group/en/technology/cyber-security/alerts-and-notifications" target="_blank"
rel="noopener noreferrer" >https://global.abb/group/en/technology/cyber-security/alerts-and-notifications&lt;/a>.&lt;/li>
&lt;li>The ABB Software Vulnerability Report should be reviewed and approved by the PCP Cyber Security Core team when the case is closed.&lt;/li>
&lt;/ol>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="confidentiality-of-vulnerability-information">Confidentiality of vulnerability information&lt;/h3>
&lt;p>
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9AAD126846&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >9AAD126846 Information Classification and Handling Standard&lt;/a> describes that “lists of vulnerabilities in systems” shall be handled as “Confidential information”.&lt;/p>
&lt;p>All departments involved in the vulnerability handling process should understand the sensitivity of the information involved and protect it accordingly. Information should only be transferred or disseminated to those with the need to know.&lt;/p>
&lt;p>Sensitive customer information should be protected in transit and storage. Detailed information about vulnerabilities that affect customers should not be stored on insecure SharePoint sites or file shares.&lt;/p>
&lt;p>The access control provided by ADO and OnePCP DMS is considered to be sufficient. Users who have access to the ADO and OnePCP DMS also have access to security information in cases related to vulnerabilities.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9ADB005047&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >9ADB005047 ABB Software Vulnerability Report (template)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9ADB005046&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >9ADB005046 ABB Software Vulnerability Handling Policy&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://abb.sharepoint.com/sites/OnePCP-DMS/PCP-BMS/Execution/04%20-%20IBP%20Perform%20Customer%20Care/04-Monitor%20and%20Manage%20Product/Writing%20and%20Publishing%20Field%20Communication.pdf" target="_blank"
rel="noopener noreferrer" >3BUL980146 Writing and Publishing Field Communications&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/ppm-templates/monitor-and-manage-product" target="_blank"
rel="noopener noreferrer" >2PAA124139 Cyber Security Notification (template)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9AAD126846&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >9AAD126846 Information Classification and Handling Standard&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/ppm-templates/monitor-and-manage-product" target="_blank"
rel="noopener noreferrer" >3BSE071315 Cyber Security Advisory (template)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://abb.sharepoint.com/sites/OnePCP-DMS/PCP-BMS/Execution/05%20-%20Support%20processes/06-Continuously%20Improve%20&amp;amp;%20Enable%20Change/Manage%20training%20and%20Lean%20Six%20Sigma%20certification/Root%20Cause%20Analysis%20-%20Work%20Instruction.pdf" target="_blank"
rel="noopener noreferrer" >2PAA2024-115317 Root Cause Analysis&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="related">Related&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="/docs/guides/to-review-references/configuration-management/bug-classification/" >Bug Classification&lt;/a>&lt;/li>
&lt;li>
&lt;a href="/docs/guides/to-review-references/l4-and-maintenance/" >How-to Create a Temporary Correction&lt;/a>&lt;/li>
&lt;li>
&lt;a href="/docs/guides/to-review-references/l4-and-maintenance/" >How-to Stop and Start Orders of Manufacturing and Delivery of Products&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>How-to Perform Threat Modeling</title><link>/docs/guides/to-review-references/architecture/how-to-perform-threat-modeling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/architecture/how-to-perform-threat-modeling/</guid><description>&lt;p>Threat modeling is the process of analyzing various business and technical requirements of a system identifying the potential threats, the mitigations of these threats, and documenting the vulnerabilities these threats have on the system.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> Threat modeling isn&amp;rsquo;t a one-time activity. It needs to be repeated in increments and iterations and checked at specific milestones during product development.&lt;/p>&lt;/blockquote>
&lt;p>The purpose of this guide is to explain how to create and maintain a threat model in an agile way, and how to ensure that the threat model is ready at release.&lt;/p>
&lt;p>It walks through the activities to be executed in each increment. For more information on how to compose the threat model, see
&lt;a href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7BA868530F-BD01-4F61-9F82-A5FEABFD4114%7D" target="_blank"
rel="noopener noreferrer" >3BSE070612 Threat Modeling Guideline&lt;/a>.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Architects, cyber security engineers, software developers, test engineers, and product owners.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/architecture/how-to-perform-threat-modeling-1.drawio.png" alt="TM-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="plan-threat-modeling-activities">Plan threat modeling activities&lt;/h3>
&lt;p>Threat modeling is a part of the agile development process, and it shall be planned and performed in each increment. During planning for the &lt;strong>next increment&lt;/strong>, development and architecture teams shall check if planned design changes may affect the existing threat model or if input from other sources indicates an update is needed. If this is the case, plan for the threat model revisions accordingly.&lt;/p>
&lt;p>The threat model updates are transparently planned in Azure DevOps (ADO) as features (enablers) and added to the stream backlogs. Ideally, each increment should have its own features defined to ensure that the threat model is independently checked, whether any changes are required or not.&lt;/p>
&lt;p>The architects identify the threat model requests based on changes in the architecture, and the cyber security engineers identify requests based on design changes.&lt;/p>
&lt;h3 id="update-threat-model">Update threat model&lt;/h3>
&lt;p>In general, involved people shall create and maintain the threat model using the recommended threat modeling tools (Microsoft Threat Modeling tool is highly suggested). Publish the threat model on the ADO wiki to make it visible and accessible to the teams.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> Each development stream shall have its own architecture documentation in ADO wiki (preferred) or GitHub. The threat modeling section on the wiki must be up-to-date with the latest available threat modeling diagram.&lt;/p>&lt;/blockquote>
&lt;p>Document the components that make up your system. A clearly documented model of your entire application simplifies the analysis. Note down use cases, data flows, data schemas, and deployment diagrams.&lt;/p>
&lt;p>There are two types of visualizations you can build:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Data flow diagram (mandatory)&lt;/strong>: It depicts how data is designed to move through your system. It shows the operational level and displays where data enters and exits each component, data stores, processes, interactions, and trust boundaries.&lt;/li>
&lt;li>&lt;strong>Process flow diagram (optional)&lt;/strong>: At an application level, it depicts how users interact and move through various use cases.&lt;/li>
&lt;/ul>
&lt;p>While data flow diagrams focus on how your system works internally, process flow diagrams concentrate on user and third-party interactions with your system.&lt;/p>
&lt;p>Identify the most important actors and assets in the threat model diagrams.&lt;/p>
&lt;h3 id="review-threat-model">Review threat model&lt;/h3>
&lt;p>Review the threat model on the ADO wiki. Check the validity and correctness of the updated threat model, and align the model with the architecture documentation and related software components.&lt;/p>
&lt;p>Use pull requests to capture any review comments or further updates.&lt;/p>
&lt;p>The cyber security engineer moderates the review and makes the final approval of the updates.&lt;/p>
&lt;h3 id="evaluate-threats">Evaluate threats&lt;/h3>
&lt;p>Based on the threat model, identify which one of the assets can be compromised by potential attackers.&lt;/p>
&lt;p>For example, use a STRIDE checklist (spoofing identity, tampering with data, repudiation threats, information disclosure, denial of service, and elevation of privilege) for the dataflows that cross a trust boundary.&lt;/p>
&lt;p>Keep the list of the identified threats and vulnerabilities together with the threat model.&lt;/p>
&lt;p>If changes in the threat model highlight new findings (not known from the previous cycle), these need to be investigated.&lt;/p>
&lt;p>Once the threats are identified, you have a master list or library of threats associated with each asset, its operations, and a list of possible attacker profiles. Analyze which of these threats are applicable to your modeled component/product) and identify proper mitigations in order to reduce the likelihood of the threat (from &amp;ldquo;High&amp;rdquo; to &amp;ldquo;Medium&amp;rdquo; or &amp;ldquo;Low&amp;rdquo;).&lt;/p>
&lt;p>Make an initial ranking of which threats that need to be mitigated or not.&lt;/p>
&lt;h3 id="resolve-threats-or-identify-mitigations">Resolve threats (or identify mitigations)&lt;/h3>
&lt;p>When threats are evaluated, mitigations need to be identified to reduce the likelihood of the threat. The evaluation of the effectiveness of the mitigation requires to identify and accept a certain level of risk, in case the threat occurs, based on the impact on the product.&lt;/p>
&lt;p>From National Institute of Standards and Technology (NIST): “The risk is a measure of the extent to which an entity is threatened by a potential circumstance or event and is typically a function of the adverse impacts that would arise if the circumstance or event occurs and the likelihood of occurrence”.&lt;/p>
&lt;p>The risk assessment addresses the potential adverse impacts to ABB systems and assets, see
&lt;a href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7BA868530F-BD01-4F61-9F82-A5FEABFD4114%7D" target="_blank"
rel="noopener noreferrer" >3BSE070612 Threat Modeling Guideline&lt;/a>).&lt;/p>
&lt;p>Based on the risk analysis of the threats, you can deal with the vulnerabilities in the following ways:&lt;/p>
&lt;ul>
&lt;li>Don&amp;rsquo;t do anything (risk accepted).&lt;/li>
&lt;li>Remove the feature associated with it.&lt;/li>
&lt;li>Turn the feature off or reduce the functionality.&lt;/li>
&lt;li>Make code, infrastructure, architecture, or design fixes.&lt;/li>
&lt;/ul>
&lt;p>Enter the vulnerabilities that need to be addressed in ADO (to be included in increments or iterations). Tag them as &amp;ldquo;security&amp;rdquo; bugs and track them to closure.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> In case the risk is ‘not acceptable’ and no solutions can be applied, the head of cyber security or the cyber security product manager shall be involved for final approval.&lt;/p>&lt;/blockquote>
&lt;h3 id="validate-threats-or-validate-mitigations">Validate threats (or validate mitigations)&lt;/h3>
&lt;p>Mitigations shall be individually validated, by proper test cases defined for them, and the result approved by cyber security engineer.&lt;/p>
&lt;p>Validate (for example in tests) the threats and vulnerabilities that are addressed. Make sure the threat modeling is completed (that features/enablers are closed), the prioritized threats are analyzed, and the vulnerabilities (bugs) are addressed.&lt;/p>
&lt;p>You need to decide the steps for any remaining threats and if they should be included in upcoming updates of the threat model.&lt;/p>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="about-threats-and-vulnerabilities">About threats and vulnerabilities&lt;/h3>
&lt;p>A threat exploits a vulnerability and can damage or destroy an asset. A vulnerability refers to a weakness in your hardware, software, or procedures.&lt;/p>
&lt;p>According to NIST, a threat is any circumstance or event with the potential to adversely impact organizational operations (including mission, functions, image, or reputation), organizational assets, or individuals through an information system via unauthorized access, destruction, disclosure, modification of information, and/or denial of service.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;h3 id="pcp-rd-references">PCP R&amp;amp;D references&lt;/h3>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7BA868530F-BD01-4F61-9F82-A5FEABFD4114%7D" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>3BSE070612: Threat Modeling Guideline (OTX)&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="external-references">External References&lt;/h3>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://www.microsoft.com/security/blog/2007/09/11/stride-chart/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>STRIDE&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://www.first.org/cvss/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>CVSS (Common Vulnerability Scoring System)&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="recommended-tools">Recommended tools&lt;/h3>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://www.microsoft.com/en-us/securityengineering/sdl/threatmodeling" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Microsoft Threat Modeling Tool&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://sparxsystems.us/software/enterprise-architect/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Sparx Enterprise Architect&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>How-to Setup a Team in ADO</title><link>/docs/guides/to-review-references/configuration-management/how-to-setup-a-team-in-ado/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/configuration-management/how-to-setup-a-team-in-ado/</guid><description>&lt;p>Defining a team in Azure DevOps (ADO) allows the use of planning and visualization features, for example, the team backlog, sprints, capacity planning, boards, and team dashboard.&lt;/p>
&lt;p>This guide describes how to request a new team and how to create, configure, and update it.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Configuration managers, scrum masters, product owners, and anyone involved in requesting and updating teams in ADO.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>The team creation procedure requires ADO project administrator access. It can be performed by a configuration manager with access (not all of them have project administrator access, especially in ADO projects shared by many teams or multiple streams) or by the IS ADO support team through a ticket in ServiceNow.&lt;/p>
&lt;p>In both cases, requests and approvals are fully tracked. IS has an always up-to-date knowledge base to identify the right configuration manager to ask for approval.&lt;/p>
&lt;h2 id="activities">Activities&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/How-to-Setup-a-Team-in-ADO.drawio.png" alt="ST-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="request-a-new-team">Request a new team&lt;/h3>
&lt;p>Any team member can request a new team. The following information is needed:&lt;/p>
&lt;ul>
&lt;li>Collection URL.&lt;/li>
&lt;li>Project name.&lt;/li>
&lt;li>Team name.&lt;/li>
&lt;li>Team description (optional).&lt;/li>
&lt;li>List of initial team members:
&lt;ul>
&lt;li>1 or 2 team admins (typically scrum master and product owner).&lt;/li>
&lt;li>Other team members (optional, they can be added later by team admins).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Backlog iteration: by default &amp;ldquo;Team Project Name&amp;rdquo; \ &amp;ldquo;Stream&amp;rdquo; [\ &amp;ldquo;Product Line&amp;rdquo;] \ &amp;ldquo;Teams&amp;rdquo; \ &amp;ldquo;Team Name&amp;rdquo;.&lt;/li>
&lt;li>Backlog area: by default &amp;ldquo;Team Project Name&amp;rdquo; \ &amp;ldquo;Stream&amp;rdquo;.&lt;/li>
&lt;li>Query folder: by default &amp;ldquo;Team Project Name&amp;rdquo; \ &amp;ldquo;Stream&amp;rdquo; [\ &amp;ldquo;Product Line&amp;rdquo;] &amp;quot;Teams&amp;quot; \ &amp;ldquo;Team Name&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;p>There are &lt;strong>two ways&lt;/strong> to request a new team – through an &lt;strong>IS ticket&lt;/strong> or an &lt;strong>Issue work item in ADO&lt;/strong>.&lt;/p>
&lt;p>The configuration manager selects one or both ways and provides guidance and training to the new team as needed.&lt;/p>
&lt;p>&lt;strong>Request a new team through an IS ticket&lt;/strong>&lt;/p>
&lt;p>Use the request type
&lt;a href="https://myservices.abb.com/cs_gr?id=sc_cat_item&amp;amp;sys_id=c8905f6edb39acd0dc3cc14832961933" target="_blank"
rel="noopener noreferrer" >User Access Management - Azure DevOps Global&lt;/a> in MyServices:&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/How-to-Setup-a-Team-in-ADO-User-Access.png" alt="UA" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>IS then requests approval of the team from the configuration manager.&lt;/p>
&lt;p>&lt;strong>Request a new team in ADO&lt;/strong>&lt;/p>
&lt;p>Create a team creation request through an “Issue” work item in ADO. The work item is then assigned to the configuration manager.&lt;/p>
&lt;h3 id="team-creation-and-approval">Team creation and approval&lt;/h3>
&lt;p>The configuration manager reviews the request(s) and ensures that:&lt;/p>
&lt;ul>
&lt;li>The team, team members, admins, etc. are defined with associated permissions.&lt;/li>
&lt;li>The backlogs, iterations, etc. are configured with associated permissions.&lt;/li>
&lt;li>The query folder is created with associated permissions.&lt;/li>
&lt;/ul>
&lt;p>The configuration manager approves the request(s) and creates the new team.&lt;/p>
&lt;h3 id="team-updates">Team Updates&lt;/h3>
&lt;p>Once the initial team creation and configuration are complete, the team admins – typically the scrum master and/or the product owner – can perform routine updates, for example:&lt;/p>
&lt;ul>
&lt;li>Adding or removing team members.&lt;/li>
&lt;li>Creating and selecting iterations to be displayed as sprints.&lt;/li>
&lt;li>Adding sub-areas.&lt;/li>
&lt;li>Configuring board styles.&lt;/li>
&lt;li>Configuring team notifications.&lt;/li>
&lt;/ul>
&lt;p>For further information, see Microsoft&amp;rsquo;s guide on
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/organizations/settings/manage-teams?view=azure-devops" target="_blank"
rel="noopener noreferrer" >Manage and configure team tools&lt;/a>.&lt;/p>
&lt;h2 id="details">Details&lt;/h2>
&lt;h3 id="ado-team-updates-faq">ADO team updates FAQ&lt;/h3>
&lt;p>&lt;strong>After a team has been created and configured, who can add or remove team members?&lt;/strong>
A team administrator, typically a scrum master or product owner, can add or remove team members (or update the team administrators). It is not necessary to ask a project admin or IS.&lt;/p>
&lt;p>For further information, see Microsoft&amp;rsquo;s guide on
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/organizations/security/add-users-team-project?view=azure-devops&amp;amp;tabs=preview-page#add-users-or-groups-to-a-team" target="_blank"
rel="noopener noreferrer" >Add users or groups to a team&lt;/a>.&lt;/p>
&lt;p>&lt;strong>I have access to ADO, and I am a member of a team, but I cannot see the team&amp;rsquo;s repos and wiki. What to do?&lt;/strong>&lt;/p>
&lt;p>If you don’t see the git-based wiki, and you don’t see the repo&amp;rsquo;s menu, it means that you have no license, you are accessing ADO as a stakeholder.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/configuration-management/How-to-Setup-a-Team-in-ADO-No-Repos.png" alt="NR" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Open an IS ticket
&lt;a href="https://abb.service-now.com/myservices?id=sc_cat_item&amp;amp;sys_id=c8905f6edb39acd0dc3cc14832961933" target="_blank"
rel="noopener noreferrer" >&amp;ldquo;User Access Management - Azure DevOps Global&amp;rdquo;&lt;/a>. Usually, the ticket is opened by your line manager, functional manager, or scrum master.&lt;/p>
&lt;ul>
&lt;li>If you have a Visual Studio (MSDN) subscription, request access as a Visual Studio subscriber and provide a screenshot of the license from the Visual Studio portal.&lt;/li>
&lt;li>If you have no license, request a &amp;ldquo;Basic Access&amp;rdquo; level.&lt;/li>
&lt;/ul>
&lt;p>In the IS ticket, specify that you have access to ADO and you need to change the access level to be able to see the wiki.&lt;/p>
&lt;p>For further details, see Microsoft&amp;rsquo;s information
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/organizations/security/access-levels?view=azure-devops" target="_blank"
rel="noopener noreferrer" >About access levels&lt;/a>.&lt;/p></description></item><item><title>How-to Work with Epics and Features</title><link>/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features/</guid><description>&lt;p>The purpose of this guide is to provide hands-on support to the roles involved in defining the requirements in PCP R&amp;amp;D QMS captured in system epics, epics, features, and user stories.&lt;/p>
&lt;p>As background to this guide, there is a conceptual guide -
&lt;a href="/docs/guides/to-review-references/requirements/agile-req-structure/" >Agile Requirement Structure&lt;/a> - focusing on the big picture.&lt;/p>
&lt;p>Epics, features, and user stories include both requirements and planning content. This guide focuses on the requirement part – for more details on planning, prioritization, and follow-up, see the master process.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Product owners, architects, scrum masters, and other roles with interest in the different requirement levels such as release owners and product managers.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>Work item hierarchy as below (every work item can have many children but only one parent). Other work items like document updates and bugs will later (when ready) be connected to the hierarchy.&lt;/p>
&lt;ul>
&lt;li>System epic
&lt;ul>
&lt;li>Epic
&lt;ul>
&lt;li>Feature
&lt;ul>
&lt;li>User story (will be defined later)
&lt;ul>
&lt;li>Task (not included, not defined as a requirement)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="system-epic">System epic&lt;/h2>
&lt;p>System (and technological) requirements are defined in Decision Focus (DFN) for release planning. See Portfolio and Product Management&amp;rsquo;s process description for details:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/OnePCP-DMS/SitePages/Document.aspx?$combinedId=3BSE055359_en&amp;amp;$version=latestApprove" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Managing Market Requirements and System Requirements - Process Description&lt;/span>&lt;/a>
&lt;/div>
&lt;/p>
&lt;p>A system epic is used to represent such a requirement for implementation planning and follow-up within R&amp;amp;D. The technical content of a system epic is automatically replicated from the system requirements. All the work needed by different streams and teams for such a requirement shall be linked to the corresponding system epic.&lt;/p>
&lt;p>A system epic is also used to provide enablers for project/release specific activities, such as gates and release maintenance, architectural work, and other technical enabling efforts like setting up a test framework.&lt;/p>
&lt;p>The system epic can span over several increments and can be implemented by one or several streams but must be finalized in the defined release. The priority of a system epic should relate to the target release priority and technical dependencies with other system epics.&lt;/p>
&lt;p>The system epic overview / life cycle can be described as:&lt;/p>
&lt;p>
&lt;figure id="figure-figure-1-epic-states">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-1b.png" alt="EF-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 1. Epic states
&lt;/figcaption>&lt;/figure> Figure: System epic states&lt;/p>
&lt;h3 id="new">New&lt;/h3>
&lt;p>The system epics related to system requirement, and business type, are automatically initiated and technical content (title/description/acceptance criteria/…) is replicated from the system requirement. Further information, like involved streams, is documented by a product manager, (system) product owner, or (system) release owner.&lt;/p>
&lt;p>System epics of type enabler/architectural are fully described by a (system) product owner, (system) release owner, or (system) architect to provide a parent work item for all work needed towards a specific requirement, project/release activity or architectural investigation/conclusion or other type of enabler.&lt;/p>
&lt;p>The quality of the preparation is controlled by the definition of ready (DoR).&lt;/p>
&lt;p>&lt;strong>System Epic template&lt;/strong>&lt;/p>
&lt;p>The following fields are mandatory (in &lt;strong>bold&lt;/strong>):&lt;/p>
&lt;ul>
&lt;li>
&lt;p>The &lt;strong>title&lt;/strong> is a short name that provides understanding and context.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The &lt;strong>assigned to&lt;/strong> should be set to a relevant responsible person to follow up on the requirement/activity.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The &lt;strong>state&lt;/strong> shall be set to &amp;ldquo;New&amp;rdquo;. For state changes see the
&lt;a href="../configuration-management/work-item-state-description/" >Work Item State Description&lt;/a> guide.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The &lt;strong>area path&lt;/strong> should be set to the targeted release.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The &lt;strong>iteration path&lt;/strong> should initially be set to &amp;ldquo;Planning&amp;rdquo;, and when a first walk-through of the system epic has been performed an estimation in which increment it can be completed should be set.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Details&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>For business type, the field shall include a link to the DFN system requirement.&lt;/li>
&lt;li>For architecture type, it shall include detailed information of what should be completed, and “acceptance criteria” to verify the fulfillment. Limitations should be defined in the form of &amp;ldquo;not included&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>SR description&lt;/strong>, includes information replicated from DFN.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>SR details&lt;/strong>, includes information replicated from DFN.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Classification/Type&lt;/strong>, should be set to proper value depending on the type of system epic.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Business&lt;/strong> – system or technical requirements.&lt;/li>
&lt;li>&lt;strong>Architecture&lt;/strong> – architectural investigations (an enabler related to architecture)&lt;/li>
&lt;li>&lt;strong>Enabler&lt;/strong> - project/release specific activities (refactor, upgrade, gate handling etc.)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Related work&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Make links to epics (child), and consider the different types: architecture, development, enabler, UX, and test.&lt;/li>
&lt;li>It is also recommended to make links to related system epics (e.g. dependencies).
Theses dependencies can be within the same release or to other streams and product lines. Examples: Impacts to Harmony Connectivity for 800xA, Or, NG development customizations for 800xA, Symphony Plus, Freelance.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>In addition, some fields are not mandatory, e.g. priority, risk, and business value.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>DoR for a system epic&lt;/strong>
Before the implementation of a system epic is started the DoR shall be fulfilled. See also related details in the
&lt;a href="../../quality-and-kpi/dor-dod-guideline" >DoR DoD Guideline&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>Functional: The title/description/acceptance criteria come from an approved system requirement&lt;/li>
&lt;li>Enabler/Architectural: Understandable title, description and acceptance criteria&lt;/li>
&lt;li>An initial breakdown into epics involving streams&lt;/li>
&lt;li>The system epic backlog shall be ranked for the target release&lt;/li>
&lt;li>Area path set&lt;/li>
&lt;/ul>
&lt;h3 id="active">Active&lt;/h3>
&lt;p>Implementation of a system epic includes:&lt;/p>
&lt;ul>
&lt;li>When DoR is met and the first child is set to &amp;ldquo;Active&amp;rdquo;, the state is set to &amp;ldquo;Active&amp;rdquo; by the (system) product owner.&lt;/li>
&lt;li>Continuous refinement meetings to refine epics and potentially reprioritize.&lt;/li>
&lt;li>Follow up on progress – remove impediments.&lt;/li>
&lt;li>When all development-related work items (architecture and development) are completed, the (system) product owner sets the system epic to &amp;ldquo;Resolved&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;h3 id="resolved">Resolved&lt;/h3>
&lt;p>&lt;strong>Test of system epic&lt;/strong> System integration test cases to verify the system epics shall be developed in parallel with the implementation of epics. Input to the test cases is the system epic acceptance criteria. Typically, these tests are automated. To be able to follow up on the system epic test activities an epic under the system epic should be created. When all work has finished with a system epic and all underlying features are set to &amp;ldquo;Closed&amp;rdquo; (see feature description) the system product owner / architect goes through the definition of done (DoD). For details about system epic testing, see the
&lt;a href="../test/system-test-overview/" >System Test Overview&lt;/a> guide.&lt;/p>
&lt;p>&lt;strong>DoD for the system epic&lt;/strong> Before a system epic can be set to state &amp;ldquo;Closed&amp;rdquo; the DoD must be checked:&lt;/p>
&lt;ul>
&lt;li>Confirm epics are completed&lt;/li>
&lt;li>System integration tests (SIT) have passed&lt;/li>
&lt;li>Required documentation is reviewed and approved&lt;/li>
&lt;li>The result is demonstrated and accepted by PPM&lt;/li>
&lt;/ul>
&lt;p>The (system) product owner or architect reviews the DoD, sets the system epic to &amp;ldquo;Closed&amp;rdquo;, and informs key stakeholders (e.g. release owner, product manager, system product owner, quality control manager, architect, test lead).&lt;/p>
&lt;h3 id="closed">Closed&lt;/h3>
&lt;p>After DoD is fulfilled, the state can be set to &amp;ldquo;Closed&amp;rdquo;, thereafter the system epic will not be maintained.&lt;/p>
&lt;h3 id="removed">Removed&lt;/h3>
&lt;p>The &amp;ldquo;Removed&amp;rdquo; state shall be used when a system requirement has been removed from DFN (business) or when an architectural system epic is canceled. In the case of a requirement is moved from one release to another the iteration path shall be updated according to the new release destination. If the system epic has been initiated, in the state &amp;ldquo;Active&amp;rdquo;, the state shall be moved back to &amp;ldquo;New&amp;rdquo;.&lt;/p>
&lt;h2 id="epic">Epic&lt;/h2>
&lt;p>Epics are defined as vertical slices of the product with end-user value as the main perspective. When defining an epic, one should think about how the completion of the epic improves the end-user experience.&lt;/p>
&lt;p>In addition to the epics that realize customer value (defined as “Business” in the classification field, see below) there are two other categories of epics. One that enables the business epics or the infrastructure needed (defined as “Enabler” in the classification field). Examples of enabler epics are refactoring, test system/setup, pipeline infrastructure, OS updates, and PLM system work.
The third category is &amp;ldquo;Architectural&amp;rdquo; which is dedicated to architectural efforts.&lt;/p>
&lt;p>An epic must fit the release but can span several increments. An epic can be implemented by one or several teams depending on team setup (e.g. usage of cross-functional teams).&lt;/p>
&lt;h3 id="epic-overview--life-cycle">Epic overview / Life cycle&lt;/h3>
&lt;figure id="figure-figure-1-epic-states">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-1b.png" alt="EF-1" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 1. Epic states
&lt;/figcaption>&lt;/figure>&lt;h3 id="new-1">New&lt;/h3>
&lt;p>Epics are initiated by the product owner or architect to implement the system epic. Epics for system epic breakdown and customer use case definitions (classification &amp;ldquo;Business&amp;rdquo;) are defined by the product owners under alignment with all necessary stakeholders (typically with product managers, architects, scrum masters, and developers). The priority of the epic is given by system epic priority or by technical dependencies.&lt;/p>
&lt;p>In the state &amp;ldquo;New&amp;rdquo;, the epics are detailed by the product owner or architect with support from other stakeholders.
The quality of the epic definition in this phase is controlled by the DoR, but in essence, the epic should contain all the information necessary to understand how it should be implemented. This includes the identification of the different underlying features. Remember to consider more than the development-oriented features. Features related to architecture, enabler, UX, and test should be considered.&lt;/p>
&lt;p>&lt;strong>Epic template&lt;/strong>&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">The epic template is not the same for the different streams – please use the guide as it makes sense to your context.&lt;/span>
&lt;/div>
&lt;p>The following fields are mandatory (in &lt;strong>bold&lt;/strong>):&lt;/p>
&lt;ul>
&lt;li>
&lt;p>The epic &lt;strong>title&lt;/strong> is a short name that provides understanding and context.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The epic &lt;strong>description&lt;/strong> shall contain a “story” and if/how the epic shall be demonstrated. To clarify the scope and avoid “gold plating”, define limitations in the form of “not included” (limitations can be related to functionality, operating systems, services, etc.). Initial ideas on implementation should be documented under “details” with text or links to other material, e.g. an implementation proposal.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The epic &lt;strong>acceptance criteria&lt;/strong> define what must be met and verified for epic acceptance, preferably documented in Gherkin syntax:
Given &amp;lt;initial context&amp;gt; When &amp;lt;event&amp;gt; Then &amp;lt;expected outcome&amp;gt;, this will ensure clear definitions and also support test case automation.&lt;/p>
&lt;p>If system epics don&amp;rsquo;t exist in your Azure DevOps (ADO) template then links to system requirements and related epics can be included in the description. If you want to have a more elaborate epic description there is an example in the appendix.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;figure id="figure-figure-2-epic-description">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-3c.png" alt="EF-3c" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 2. Epic description
&lt;/figcaption>&lt;/figure>&lt;p>Example of a software epic description:&lt;/p>
&lt;figure id="figure-figure-3-software-epic-example">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-4b.png" alt="EF-4" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 3. Software epic example
&lt;/figcaption>&lt;/figure>&lt;p>Example of a hardware epic description:&lt;/p>
&lt;figure id="figure-figure-4-hardware-epic-example">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-5.png" alt="EF-5" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 4. Hardware epic example
&lt;/figcaption>&lt;/figure>&lt;p>&lt;strong>Path&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Area path&lt;/strong> in which release will the epic be delivered.&lt;/li>
&lt;li>&lt;strong>Iteration path&lt;/strong> in which increment will the epic be ready? When an epic is under preparation this field can be left empty, but it shall be filled out no later than it is set to &amp;ldquo;Active&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Effort estimate&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>High-level estimate of the epic in hours. This is the first rough estimate that will be updated when the features are defined and estimated. A recommendation is to start with a t-shirt comparison and if possible, some further refinement. Optionally the product owner / architect can involve development teams and carry out a more thorough estimation by applying planning poker or other techniques.&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Size&lt;/th>
&lt;th style="text-align: left">Hours&lt;/th>
&lt;th style="text-align: left">Comment (An epic can be implemented by one or several teams)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">XS&lt;/td>
&lt;td style="text-align: left">500&lt;/td>
&lt;td style="text-align: left">e.g. 2-3 persons in 7 weeks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">S&lt;/td>
&lt;td style="text-align: left">1000&lt;/td>
&lt;td style="text-align: left">e.g. 2-3 persons in 13 weeks or 4-6 persons in 7 weeks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">M&lt;/td>
&lt;td style="text-align: left">2500&lt;/td>
&lt;td style="text-align: left">e.g. 4 persons in 20 weeks or 6-8 persons in 7 weeks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">L&lt;/td>
&lt;td style="text-align: left">5000&lt;/td>
&lt;td style="text-align: left">e.g. 6 persons in 26 weeks or 8-9 persons for 18 weeks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">XL&lt;/td>
&lt;td style="text-align: left">7500 - Consider splitting&lt;/td>
&lt;td style="text-align: left">e.g. 6-7 persons in 39 weeks or 9-10 persons for 26 weeks&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Example: This epic is slightly larger than a “medium”, so 3000 hours could be a relevant estimate.&lt;/p>
&lt;p>&lt;strong>Classification&lt;/strong>&lt;/p>
&lt;p>Value area&lt;/p>
&lt;ul>
&lt;li>Architectural = Architecture work (An enabler related to architecture)&lt;/li>
&lt;li>Business = Implementing a system requirement.&lt;/li>
&lt;li>Enabler = Solving an enabling technical matter (refactor, upgrade, etc.).&lt;/li>
&lt;/ul>
&lt;p>Security relevant
Consider if it is likely that work will affect a security-critical component, as listed (already or to be) in the security criticality analysis, modify a component&amp;rsquo;s attack surface, or is the work in some other way security-relevant (this may motivate a revised criticality analysis). Some examples are modifications in functionality for authentication, access control, integrity checking, encryption, or protection measures for denial of service (DoS) attacks.&lt;/p>
&lt;p>Details can be found in the
&lt;a href="/docs/guides/cyber-security/security-criticality-analysis" >Security Criticality Analysis&lt;/a> guide.&lt;/p>
&lt;ul>
&lt;li>True = Epic is security relevant.&lt;/li>
&lt;li>False = Epic is NOT security relevant.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Related work&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Make a link to system epic (parent).&lt;/li>
&lt;li>Make links to features (child), and consider the different types: architecture, development, enabler, UX, and test.&lt;/li>
&lt;li>It is also recommended to make links to related epics (e.g. dependencies, within release or to other streams)
If these dependencies impact implementation order use (predecessor) or (successor )&lt;/li>
&lt;/ul>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">All epics shall be linked to a system epic, for new enabler epics a new system epic might be needed.&lt;/span>
&lt;/div>
&lt;p>In addition, some fields are not mandatory, e.g. priority, risk, business value, time criticality, and start/target date.&lt;/p>
&lt;h3 id="dor-for-an-epic">DoR for an epic&lt;/h3>
&lt;p>Before the implementation of an epic is started the DoR shall be fulfilled. See also related details in the
&lt;a href="../../quality-and-kpi/dor-dod-guideline" >DoR DoD Guideline&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>Understandable Title and Description&lt;/li>
&lt;li>Testable acceptance criteria established&lt;/li>
&lt;li>If/how to demo defined&lt;/li>
&lt;li>Effort estimated&lt;/li>
&lt;li>Link to System Epic&lt;/li>
&lt;li>Dependencies to other Epics defined&lt;/li>
&lt;li>Preliminary stream architecture&lt;/li>
&lt;li>Draft features&lt;/li>
&lt;li>The area and iteration path is set&lt;/li>
&lt;li>Security impact considered&lt;/li>
&lt;li>The epic is ranked in the backlog&lt;/li>
&lt;li>Epic reviewed&lt;/li>
&lt;/ul>
&lt;p>The product owner or architect reviews the epic&amp;rsquo;s DoR with participants according to RACI for epics (RACI for epics can be found
&lt;a href="/docs/mp028/process/functional-process/requirements/" >here&lt;/a>).&lt;/p>
&lt;p>Note that for the RACI roles, (R) drives the meeting, (C) needs to either attend the meeting or provide written comments (&amp;ldquo;no comments&amp;rdquo; is of course also ok), while (A) and (I) are invited as optional and do not have to attend or provide comments.&lt;/p>
&lt;p>If someone is important for the review but not covered by the RACI, they should of course be invited as well.&lt;/p>
&lt;p>If it is approved, check the box &lt;strong>&amp;ldquo;Review DoR&amp;rdquo;&lt;/strong> and add a note in the discussion field with the conclusion of the review (including any important note if relevant) and the name of the participants. One review meeting can of course cover many epics.&lt;/p>
&lt;p>If an epic is not subject to review of DoR, the reason shall be noted in the discussion.&lt;/p>
&lt;h3 id="active-1">Active&lt;/h3>
&lt;h4 id="implementation-of-epic">Implementation of epic&lt;/h4>
&lt;ul>
&lt;li>When implementation starts the state is set to &amp;ldquo;Active&amp;rdquo;, and if not yet set, the iteration path must be defined in ADO by the product owner / architect.&lt;/li>
&lt;li>Continuous refinement meetings to refine epics and potentially reprioritize.&lt;/li>
&lt;li>Follow up on progress – remove impediments.&lt;/li>
&lt;li>When all development-related work items (architecture and development) are completed the product owner sets the epic to &amp;ldquo;Resolved&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;p>If the epic needs to be &lt;strong>paused&lt;/strong> (e.g. due to changed product manager priorities, delayed delivery of dependent functionality, or unveiled technical uncertainties) the epic shall be:&lt;/p>
&lt;ul>
&lt;li>Set the epic to “New” with the reason “Implementation halted”.&lt;/li>
&lt;li>Update iteration path to agreed new iteration or without defined iteration if it is not yet set.&lt;/li>
&lt;li>In the discussion field, elaborate on the reason to pause and describe how far the work has proceeded.&lt;/li>
&lt;li>Ensure that linked child work items, not yet closed, have been managed in the same way.&lt;/li>
&lt;li>Ensure that dependent epics are informed.&lt;/li>
&lt;/ul>
&lt;h3 id="resolved-1">Resolved&lt;/h3>
&lt;h4 id="test-of-epic">Test of epic&lt;/h4>
&lt;p>Product integration test cases to verify the epics shall be developed in parallel with the implementation of features. Input to the test cases is the epic acceptance criteria. Typically, these tests are automated and include relevant hardware. To be able to follow up on the epic test activities a feature under the epic should be created. When all work has finished with an epic and all underlying features are set to &amp;ldquo;Closed&amp;rdquo; (see feature description) the product owner / architect goes through the DoD.&lt;/p>
&lt;p>For details about epic testing see the
&lt;a href="../test/product-test-overview/" >Product Test Overview&lt;/a> guide.&lt;/p>
&lt;h4 id="dod-for-the-epic">DoD for the epic&lt;/h4>
&lt;p>Before an epic can be set to state &amp;ldquo;Closed&amp;rdquo; the following work must be done.&lt;/p>
&lt;ul>
&lt;li>All child features are closed&lt;/li>
&lt;li>All product integration tests (PIT) passed, and existing bugs have CCB decision&lt;/li>
&lt;li>Product-level documentation approved&lt;/li>
&lt;li>Epic demonstrated&lt;/li>
&lt;li>Input to end-user documentation and release notes provided&lt;/li>
&lt;li>Installation/delivery package updated&lt;/li>
&lt;/ul>
&lt;p>The product owner or architect reviews the DoD sets the epic to &amp;ldquo;Closed&amp;rdquo; and informs key stakeholders (e.g. release owner, product manager, product owner, quality control manager, architect, test lead).&lt;/p>
&lt;h3 id="closed-1">Closed&lt;/h3>
&lt;p>After closure, the epic will not be maintained.&lt;/p>
&lt;h2 id="feature">Feature&lt;/h2>
&lt;p>Features are a further breakdown of the epic into more details than expressed in the epic. They describe what needs to be implemented in the system in order to realize the epic. Since epics can be of business/architecture the feature follows the same classification.&lt;/p>
&lt;h3 id="feature-overview--lifecycle">Feature overview / Lifecycle&lt;/h3>
&lt;p>The following chapters will describe each step in the feature lifecycle. See the overview of the &amp;ldquo;feature states&amp;rdquo; in the figure below. When a feature is submitted, its state is automatically set to &amp;ldquo;New&amp;rdquo;. In this state, the feature is prepared (see section &amp;ldquo;feature preparation&amp;rdquo;).&lt;/p>
&lt;p>When the feature is prepared, the scrum master checks that DoR is satisfied and changes the state to &amp;ldquo;Active&amp;rdquo;. During the &amp;ldquo;Active&amp;rdquo; phase, all child user stories are being developed. When all user stories have been closed, the scrum master checks the DoD and if that is fulfilled, the state is set to &amp;ldquo;Resolved&amp;rdquo;. In the final step, the product owner closes the feature.&lt;/p>
&lt;figure id="figure-figure-5-feature-states">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-1b.png" alt="EF-2" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 5. Feature states
&lt;/figcaption>&lt;/figure>&lt;h3 id="new-2">New&lt;/h3>
&lt;ul>
&lt;li>Draft features are defined during the epic preparation. When the epic has been set to &amp;ldquo;Active&amp;rdquo;, the work to refine and implement the features is intensified.&lt;/li>
&lt;li>There are different types of features related to architecture, development, enabler, UX, and test.&lt;/li>
&lt;li>Features are refined continuously, the goal is to have work planned for one increment ahead.&lt;/li>
&lt;li>Feature definition includes; solution design, acceptance criteria, draft user stories, an initial estimate, and initial iteration path and is controlled by the DoR.&lt;/li>
&lt;li>Refinement meetings between product owner and teams shall be organized (e.g. weekly) to secure successful transfer from epic to feature.&lt;/li>
&lt;li>The feature shall be implemented in one increment. Split the feature if it is too large or if there exist appropriate smaller slices of functionality. The split shall make sense, avoiding the solution of “Part 1 and Part 2”.&lt;/li>
&lt;/ul>
&lt;h4 id="template-for-feature-description">Template for feature description&lt;/h4>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Feature template is not the same for the different streams – please use the guide as it makes sense to your context.&lt;/span>
&lt;/div>
&lt;p>The following fields are mandatory:&lt;/p>
&lt;ul>
&lt;li>The &lt;strong>Title&lt;/strong> is a short phrase giving a name and the context.&lt;/li>
&lt;li>The &lt;strong>Description&lt;/strong> shall contain a benefit hypothesis, and proposed measurable benefit to the end-user or business. To clarify the description should contain details of the feature. To make the scope clear, clarify by defining what is NOT included.&lt;/li>
&lt;/ul>
&lt;p>If you want to have a more elaborate feature description there is an example in the appendix. If you have dependencies to other features that can&amp;rsquo;t be linked using the normal links (e.g. different template) it is also recommended to include manual links.&lt;/p>
&lt;figure id="figure-figure-6-feature-description">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-6.png" alt="EF-6" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 6. Feature description
&lt;/figcaption>&lt;/figure>&lt;p>Hint! The feature description template can be defined in the feature work item if choosing &amp;ldquo;Actions/Templates/New feature with description and acceptance criteria&amp;rdquo;.&lt;/p>
&lt;p>Use the field &lt;strong>acceptance criteria&lt;/strong> with statements like&lt;/p>
&lt;ul>
&lt;li>It shall be possible to &amp;lt;criteria 1&amp;gt;&lt;/li>
&lt;li>It shall be possible to &amp;lt;criteria 2&amp;gt;&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Path&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Area path&lt;/strong> in which release will the feature be delivered (copy from the epic).&lt;/li>
&lt;li>&lt;strong>Iteration path&lt;/strong> in which increment and sprint will the feature be done (sprint part should be added at program increment planning at the latest)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Effort estimate&lt;/strong>&lt;/p>
&lt;p>The estimation shall cover all work related to the feature (e.g. design, development, test, and documentation). Estimation is done in two steps:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Initial feature estimate is set on draft feature when epic – “agreed”. This estimate is high level and is either done by points or expected effort (But ADO requires hours to be filled in) - &lt;strong>Each release needs to set a common approach.&lt;/strong>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Refined estimate when the feature is “ready”. This new estimate should be based on the draft user story estimates.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;ins>&lt;strong>Remember&lt;/strong> that even if you use points when doing estimates for features, they must be translated to hours when entered into ADO. &lt;ins>&lt;/p>
&lt;p>Below is &lt;strong>an example&lt;/strong> of a table comparing the alternatives:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Points&lt;/th>
&lt;th style="text-align: left">Hours&lt;/th>
&lt;th style="text-align: left">Man weeks&lt;/th>
&lt;th style="text-align: left">Comment - Example of what it could be in reality&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">1&lt;/td>
&lt;td style="text-align: left">60&lt;/td>
&lt;td style="text-align: left">2&lt;/td>
&lt;td style="text-align: left">e.g. 1 team member for 2 weeks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">2&lt;/td>
&lt;td style="text-align: left">120&lt;/td>
&lt;td style="text-align: left">4&lt;/td>
&lt;td style="text-align: left">e.g. 1 team member for 4 weeks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">3&lt;/td>
&lt;td style="text-align: left">180&lt;/td>
&lt;td style="text-align: left">6&lt;/td>
&lt;td style="text-align: left">e.g. 1 team member for half increment (~6,5 weeks)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">5&lt;/td>
&lt;td style="text-align: left">300&lt;/td>
&lt;td style="text-align: left">10&lt;/td>
&lt;td style="text-align: left">e.g. 1 team member for most of increment (~13 weeks)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">8&lt;/td>
&lt;td style="text-align: left">480&lt;/td>
&lt;td style="text-align: left">16&lt;/td>
&lt;td style="text-align: left">e.g. 2-3 team members for half increment (~6,5 weeks)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">13&lt;/td>
&lt;td style="text-align: left">780&lt;/td>
&lt;td style="text-align: left">26&lt;/td>
&lt;td style="text-align: left">e.g. 2 team members for full increment (~13 weeks)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Classification&lt;/strong>&lt;/p>
&lt;p>Value area:&lt;/p>
&lt;ul>
&lt;li>Architectural= Architecture work (an enabler related to architecture)&lt;/li>
&lt;li>Business = Implementing a system requirement (used for development, UX, and test features).&lt;/li>
&lt;li>Enabler = Solving an enabling technical matter (refactor, upgrade, etc.).&lt;/li>
&lt;/ul>
&lt;p>Security-relevant
Consider if it is likely that work will affect a security-critical component, as listed (already or to be) in the security criticality analysis, modify a component&amp;rsquo;s attack surface, or is the work in some other way security-relevant (this may motivate a revised criticality analysis). Some examples are modifications in functionality for authentication, access control, integrity checking, encryption, or protection measures for DoS attacks.&lt;/p>
&lt;p>Details about security criticality analysis can be found in the
&lt;a href="/docs/guides/cyber-security/security-criticality-analysis" >Security Criticality Analysis&lt;/a> guide.&lt;/p>
&lt;ul>
&lt;li>True = Feature is security-relevant&lt;/li>
&lt;li>False = Feature is NOT security-relevant&lt;/li>
&lt;/ul>
&lt;p>If a feature is defined as security-relevant a security-relevant argument must be filled out (in the dedicated field).&lt;/p>
&lt;p>E.g.&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;The feature involves updating component xxx which has been defined as security critical&amp;rdquo;.&lt;/li>
&lt;li>&amp;ldquo;The feature scope includes remote access/back up/input validation/&amp;hellip;&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Related work&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Make links to epic (parent).&lt;/li>
&lt;li>Make links to user stories (child).&lt;/li>
&lt;li>It is also recommended to make links to related features/epics (e.g. dependencies).&lt;/li>
&lt;/ul>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">All features shall be linked to an epic, for new enabler features a new epic might be needed.&lt;/span>
&lt;/div>
&lt;p>In addition, some fields will not be mandatory, e.g. priority, risk, business value, time criticality, and start/target date.&lt;/p>
&lt;h3 id="dor-for-a-feature">DoR for a feature&lt;/h3>
&lt;p>Before work on a feature is started the following must be considered:&lt;/p>
&lt;ul>
&lt;li>Understandable Title and Description&lt;/li>
&lt;li>Testable acceptance criteria established&lt;/li>
&lt;li>If/how to demo defined&lt;/li>
&lt;li>The feature is estimated to ensure it can be completed in an increment&lt;/li>
&lt;li>Preliminary design ready&lt;/li>
&lt;li>Draft user stories&lt;/li>
&lt;li>Link to Epic&lt;/li>
&lt;li>Dependencies on other features defined&lt;/li>
&lt;li>The area and iteration path is set&lt;/li>
&lt;li>Security impact considered&lt;/li>
&lt;li>The feature is ranked in the backlog&lt;/li>
&lt;/ul>
&lt;p>The feature is set to active in ADO by the team and &amp;ldquo;Iteration Path&amp;rdquo; is set. Note that for features, a review of a feature is optional (as opposed to epics).&lt;/p>
&lt;h3 id="active-2">Active&lt;/h3>
&lt;h4 id="implementation-of-features">Implementation of features&lt;/h4>
&lt;ul>
&lt;li>Features are refined into user stories and implemented in the sprints.&lt;/li>
&lt;li>Follow up on progress – remove impediments.&lt;/li>
&lt;/ul>
&lt;p>If the feature needs to be &lt;strong>paused&lt;/strong> (e.g. due to changed product manager priorities, delayed delivery of dependent functionality, or unveiled technical uncertainties) the epic shall be:&lt;/p>
&lt;ul>
&lt;li>Set the feature to “New” with the reason “Implementation halted”.&lt;/li>
&lt;li>Update iteration path to agreed new iteration or without defined iteration if it is not yet set.&lt;/li>
&lt;li>In the discussion field elaborate on the reason to pause, and describe how far the work has proceeded.&lt;/li>
&lt;li>Ensure that linked child work items, not yet closed, have been managed in the same way.&lt;/li>
&lt;li>Ensure that dependent features are informed.&lt;/li>
&lt;/ul>
&lt;h4 id="test-of-features">Test of features&lt;/h4>
&lt;p>Test cases to verify the feature shall be developed in parallel with the implementation of user stories. Input to the test cases is the feature acceptance criteria. These tests are automated and include relevant hardware to secure. To be able to follow up on the feature test activities a user story under the feature should be created.&lt;/p>
&lt;p>When all work has finished with a feature and all underlying user stories (development and test) are set to &amp;ldquo;Closed&amp;rdquo;, the features are set to &amp;ldquo;Resolved&amp;rdquo;.&lt;/p>
&lt;h3 id="resolved-2">Resolved&lt;/h3>
&lt;h4 id="dod-for-a-feature">DoD for a feature&lt;/h4>
&lt;p>Before a feature can be set to state &amp;ldquo;Closed&amp;rdquo; the following DoD must be checked:&lt;/p>
&lt;ul>
&lt;li>All child stories are closed&lt;/li>
&lt;li>All unit and component tests passed&lt;/li>
&lt;li>Component documentation approved&lt;/li>
&lt;li>Demo performed (or planned)&lt;/li>
&lt;/ul>
&lt;p>The scrum master reviews the DoD, sets the feature to &amp;ldquo;Closed&amp;rdquo;, and informs key stakeholders (e.g. product owner, architect, release owner, configuration manager, quality control manager, and test lead).&lt;/p>
&lt;h3 id="closed-2">Closed&lt;/h3>
&lt;p>After closure, the feature will not be maintained.&lt;/p>
&lt;h2 id="the-flow-of-epics-and-features">The flow of epics and features&lt;/h2>
&lt;p>Previous chapters have explained how one epic/feature is managed – this chapter describes how epics/features are handled as a group both from release and increment perspective and also how epics and features relate to each other.&lt;/p>
&lt;h3 id="epic-flow">Epic flow&lt;/h3>
&lt;p>The epic flow in a release is described below:&lt;/p>
&lt;figure id="figure-figure-x-epic-flow">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-7.png" alt="EF-7" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure X. Epic flow
&lt;/figcaption>&lt;/figure>&lt;h3 id="feature-flow">Feature flow&lt;/h3>
&lt;p>The Feature flow in a release is described below:&lt;/p>
&lt;figure id="figure-figure-x-feature-flow">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features-8.png" alt="EF-8" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure X. Feature flow
&lt;/figcaption>&lt;/figure>&lt;h2 id="changes-to-requirements">Changes to requirements&lt;/h2>
&lt;h3 id="system-epics">System epics&lt;/h3>
&lt;ul>
&lt;li>System epics = system requirements (SR).&lt;/li>
&lt;li>Before G1, the product manager changes the SRs continuously.&lt;/li>
&lt;li>Between G1-G2, the product manager changes the SRs with close communication with the product owner.&lt;/li>
&lt;li>After G2 (SR approval), then change requests handling on SRs in CCB. (for details see PM process [1])&lt;/li>
&lt;/ul>
&lt;h3 id="epic-1">Epic&lt;/h3>
&lt;ul>
&lt;li>Before DoR, the product owner (business) / architect (enabler) continuously updates the epics. If changes to epics are identified that significantly differ compared to G/MS 2 assumption, it must be coordinated between the product manager and product owner, and if not possible to resolve escalated to release owner / SteCo.&lt;/li>
&lt;li>Between DoR and DoD, changes to epics shall be discussed and agreed upon with the product owner and development team (the product manager should be considered).
If changes to epics are identified that significantly differ compared to G/MS 2 assumption, it must be coordinated between the product manager and product owner, and if not possible to resolve escalated to release owner / SteCo. The conclusion shall be documented in the epic discussion field, including what was agreed upon, and who was involved.&lt;/li>
&lt;li>After DoD, then no change, instead, create a new epic.&lt;/li>
&lt;/ul>
&lt;h3 id="feature-1">Feature&lt;/h3>
&lt;ul>
&lt;li>Before DoR, the Team and PO continuously update the features.&lt;/li>
&lt;li>Between DoR and DoD, changes to features shall be discussed and agreed upon with the product owner and development team. The conclusion shall be documented in the feature discussion field, including what was agreed upon, and who was involved.&lt;/li>
&lt;li>After DoD, no change, instead, create a new feature.&lt;/li>
&lt;/ul>
&lt;h3 id="user-story">User story&lt;/h3>
&lt;ul>
&lt;li>Before DoR the team continuously updates the user stories.&lt;/li>
&lt;li>Between DoR and DoD the changes are approved by the product owner (often delegated to the scrum master).&lt;/li>
&lt;li>After DoD, no change, instead, create a new user story.&lt;/li>
&lt;/ul>
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>[1] 3BSE055359, Managing Market Requirements, and System Requirements&lt;/li>
&lt;/ul>
&lt;h2 id="appendix">Appendix&lt;/h2>
&lt;h3 id="epic-and-feature-refined-descriptions">Epic and feature refined descriptions&lt;/h3>
&lt;p>Below follows an example of how epics and feature descriptions can be further refined:&lt;/p>
&lt;p>&lt;strong>&lt;em>Epic&lt;/em>&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Customer info&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Example:
Tenet, Norwegian government electrical company
PAEN Dolwin 5 ABB project
ABB responsible contact: Kai Hanssen
Problem Statement: What is the problem this epic solves? From the user/customer perspective? From ABB&amp;rsquo;s perspective?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Benefit statement&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Why is this epic important from the customer&amp;rsquo;s perspective? What will be the main new benefit for the customer?&lt;/li>
&lt;li>A statement describing which problem it is going to solve.&lt;/li>
&lt;li>Tech/architectural changes - what is the benefit for the customer?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Business value&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>What will ABB as a company benefit from this? New market opportunities? Cost savings?&lt;/li>
&lt;li>The context in the bigger picture/overall vision.&lt;/li>
&lt;li>Tech/architectural changes - what is the value for the business?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Assumptions and dependencies&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Any technical and customer dependencies?&lt;/li>
&lt;li>Internal dependencies?&lt;/li>
&lt;li>The motivation of this epic or the dependency it is driving.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Target personas/users&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Example:
Börje - Edge Administrator
Birgitta - L3 support&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Deliverables&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>List of deliverables from the perspective of the customer and/or R&amp;amp;D.&lt;/li>
&lt;li>Info on how this would provide the requested functionality in the end.&lt;/li>
&lt;li>How to provide better guidance? Must be agreed with customers.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Impact analysis&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Mention any impact on current existing functionality.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Nonfunctional requirements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Corporate Social Responsibility.&lt;/li>
&lt;li>Comments and considerations from R&amp;amp;D and customer perspective.&lt;/li>
&lt;li>UX.&lt;/li>
&lt;li>Comments and considerations from R&amp;amp;D and customer perspective.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Documentation&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Comments and considerations from R&amp;amp;D and customer perspective.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>OSS&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Comments and considerations.&lt;/li>
&lt;/ul>
&lt;br/>
&lt;p>&lt;strong>&lt;em>Feature&lt;/em>&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Problem statement&lt;/strong> (What is the problem we are trying to resolve?)&lt;/p>
&lt;ul>
&lt;li>What is the problem we are trying to solve?&lt;/li>
&lt;li>The expectation of the resulting solution.&lt;/li>
&lt;li>Description of the problem.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Benefit statement&lt;/strong> (Why do we want this feature? What is the value added by the feature?)&lt;/p>
&lt;ul>
&lt;li>Why do we want to implement this feature, and what is the value added by doing this?&lt;/li>
&lt;li>Impact analysis.&lt;/li>
&lt;li>Where
&lt;ul>
&lt;li>Where is this needed, in which project or product?&lt;/li>
&lt;li>Customer/project of ABB. e.g. Dolwin.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Requirement owner&lt;/strong> (Who wants this feature?)&lt;/p>
&lt;ul>
&lt;li>Who wants this?&lt;/li>
&lt;li>Who is the stakeholder?&lt;/li>
&lt;li>Source of information.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Target user&lt;/strong> (Who will use this feature?)&lt;/p>
&lt;ul>
&lt;li>Who will use this feature (Personas)?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Target deliverables&lt;/strong> (What are the deliverables? Are there any hard deadlines connected with the deliverables?)&lt;/p>
&lt;ul>
&lt;li>When is this needed?&lt;/li>
&lt;li>Are there multiple deliveries expected?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Solution proposal&lt;/strong> (How are the requirements supposed to be implemented Link to the wiki?)&lt;/p>
&lt;ul>
&lt;li>How requirements are supposed to be implemented?&lt;/li>
&lt;li>Link to wiki.&lt;/li>
&lt;li>Design idea.&lt;/li>
&lt;li>Implementation design.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Architectural considerations&lt;/strong> (Optional)&lt;/p>
&lt;ul>
&lt;li>What part of the system is involved?&lt;/li>
&lt;li>Risks.&lt;/li>
&lt;li>Dependencies.&lt;/li>
&lt;li>What is in scope?&lt;/li>
&lt;li>What is out of scope?&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Front end&lt;/strong> (Optional)&lt;/p>
&lt;ul>
&lt;li>Style guide alignment.&lt;/li>
&lt;li>UX approval on the implemented feature.&lt;/li>
&lt;li>UX concept/prototype.&lt;/li>
&lt;li>Personas.&lt;/li>
&lt;li>User research.&lt;/li>
&lt;/ul></description></item><item><title>How-to Work with System Architecture Epics and Features</title><link>/docs/guides/to-review-references/architecture/how-to-work-with-system-architecture-epic-and-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/architecture/how-to-work-with-system-architecture-epic-and-features/</guid><description>&lt;p>The purpose of this guide is to provide hands-on support to the roles involved in defining the system architecture influenced by requirements, in PCP R&amp;amp;D QMS captured in the system epics, epics, and features.&lt;/p>
&lt;blockquote>
&lt;p>As background to this guide, there is an existing conceptual
&lt;a href="/docs/guides/to-review-references/requirements/agile-req-structure/" >REQ guide&lt;/a> that focuses on the big picture.&lt;/p>&lt;/blockquote>
&lt;p>The System architecture is strongly influenced by Technology and System Requirements. The overall architecture work is broken down into System Epics, Epics, and Features.&lt;/p>
&lt;p>Architectural activities are one type of enabler from the perspective of SAFe methodology. However, to distinguish the architectural activities, this work is identified in ADO as the architectural value area.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;ul>
&lt;li>Architects&lt;/li>
&lt;li>Product owners&lt;/li>
&lt;li>Developers&lt;/li>
&lt;li>Testers&lt;/li>
&lt;/ul>
&lt;p>In addition other roles with interest in the architectural work breakdown like Release owner, Product manager, and Supporting processes.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>Work item hierarchy as below (every work item can have many children but only one parent). Each work item has Architecture as &lt;em>Value Area&lt;/em> to differentiate it from the Technology and System Requirements work items.&lt;/p>
&lt;ul>
&lt;li>System Epic
&lt;ul>
&lt;li>Epic
&lt;ul>
&lt;li>Feature&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>The architectural System Epic is sliced differently, covering multiple Technology and System Requirements.&lt;/p>
&lt;h2 id="architectural-system-epic">Architectural System Epic&lt;/h2>
&lt;p>System and technology requirements are defined in Decision Focus (DF) for release planning. An Architectural System Epic covers one or several requirements, grouping the requirement into an architectural topic. In the process of defining the system architecture, the system architects create the system architecture epics based on the technology requirements.&lt;/p>
&lt;p>The relationship between technology or system requirements and an Architectural System Epic is captured in the SR ID field for the Architectural System Epic.&lt;/p>
&lt;p>A System Epic life cycle duration covers multiple increments. It&amp;rsquo;s active for as long as there are children associated with it, after that point the system epic is closed. If new work within this topic is needed, the system epic is reopened.&lt;/p>
&lt;p>The area path assigned to &lt;em>System Architecture&lt;/em> and Value Area is set to &lt;em>Architectural&lt;/em>.&lt;/p>
&lt;h3 id="system-epics-vs-requirements">System Epics vs. Requirements&lt;/h3>
&lt;p>Although requirements (System, Product, or Technology) are typically Product Managers&amp;rsquo; tools to provide functional and non-functional requirements to R&amp;amp;D, also R&amp;amp;D is entitled to file requirements.&lt;/p>
&lt;p>This is typically done by Architects pushing for non-functional requirements related to architecture, design, and technology. Architects push for such requirements via the R&amp;amp;D toolchain by filing System Epics that will be translated into Epics.&lt;/p>
&lt;p>The System Epics created by Architects (that will eventually translate into Epics/Features/User Stories/Tasks) may have higher or lower priority than a functional requirement created by PMs. This depends on a case by case, but it is important to notice that these epics value as much as the ones created by Product Management Team.&lt;/p>
&lt;p>As happens for functional requirements, also the architectural requirements need to be discussed in regular epic grooming sessions and planned, according to the priority given by the originator, to the proper PI.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">if the requirement is created by Architecture team it may not necessarily have a related SR/TR in DFN to be linked&lt;/span>
&lt;/div>
&lt;h2 id="architectural-epic">Architectural Epic&lt;/h2>
&lt;p>Architectural Epics are defined as a breakdown of the Architectural System Epics, one or several Architectural Epic are strictly associated with one Architectural System Epic as a parent/child relationship.&lt;/p>
&lt;p>Each Architectural Epic always has one Definition of Ready and one Definition of Done, for more details refer to the
&lt;a href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/" >Definition of Ready and Definition of Done Guideline&lt;/a>. Templates are available in &lt;em>AppGami&lt;/em> for Architectural Epic.&lt;/p>
&lt;p>The Architectural Epic can focus either on &lt;em>investigation&lt;/em> or &lt;em>documentation&lt;/em>. Typically an architectural epic produces architectural documentation which would include some investigation. For some more details, an investigation is required, and this can be tracked with an investigation of an architectural epic. Depending on the focus, different DoDs are used.&lt;/p>
&lt;p>An architectural epic can span 2 or more increments and is closed when the Definition of Done is fulfilled.&lt;/p>
&lt;p>The area path assigned to &lt;em>System Architecture&lt;/em> and Value Area is set to &lt;em>Architectural&lt;/em>.&lt;/p>
&lt;h3 id="architectural-epic-overview--life-cycle">Architectural Epic Overview / Life Cycle&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: center">Work Item State&lt;/th>
&lt;th style="text-align: center">Details&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: center">New&lt;/td>
&lt;td style="text-align: center">Work on the activity has not started.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Active&lt;/td>
&lt;td style="text-align: center">Architecture activities has started. Definition of Ready conditions have been met.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Resolved&lt;/td>
&lt;td style="text-align: center">The core activities are completed, but the work is not concluded.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Closed&lt;/td>
&lt;td style="text-align: center">All activities have concluded; Definition of Done conditions have been met.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Removed&lt;/td>
&lt;td style="text-align: center">The work item is no longer applicable, e.g. based on an assessment of need or a change in scope.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="architectural-feature">Architectural Feature&lt;/h2>
&lt;p>Architectural Features are a further breakdown of the architectural epic into more details than expressed in the epic. Feature work items can be used to describe activities related to creating documentation for an architecture feature; for reviewing documents (e.g. for tracking PM-Architect agreement discussions), or for investigations or other objectives. In ADO, the Feature work item:&lt;/p>
&lt;ul>
&lt;li>Is typically scoped for completion within the increment&lt;/li>
&lt;li>Is assigned to a target sprint using the Iteration path field&lt;/li>
&lt;li>Is committed to a PCP System Planning Iteration&lt;/li>
&lt;/ul>
&lt;p>Each Architectural Feature always has one Definition of Ready and one Definition of Done, for more details refer to the
&lt;a href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/" >Definition of Ready and Definition of Done Guideline&lt;/a>. Templates are available in &lt;em>AppGami&lt;/em> for Architectural Features.&lt;/p>
&lt;p>Architecture documents are output from the Architectural Features and are published to the main branch of the wiki. Documents have four phases of readiness:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: center">Status&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: center">draft&lt;/td>
&lt;td style="text-align: left">An architect has published document prior to peer review&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">in-review&lt;/td>
&lt;td style="text-align: left">Architecture team is conducting a peer review&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">pending&lt;/td>
&lt;td style="text-align: left">Document is ready for review by a broader audience (PCP R&amp;amp;D and PMs)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">accepted&lt;/td>
&lt;td style="text-align: left">Reviews are completed by architecture and PMs: the accepted architecture is as documented&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The Architectural Feature is closed when the DoD conditions are met.&lt;/p>
&lt;p>The area path assigned to &lt;em>System Architecture&lt;/em> and Value Area is set to &lt;em>Architectural&lt;/em>.&lt;/p>
&lt;h3 id="architectural-feature-overview--life-cycle">Architectural Feature Overview / Life Cycle&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: center">Work Item State&lt;/th>
&lt;th style="text-align: center">Details&lt;/th>
&lt;th style="text-align: center">Documentation Feature Work Item&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: center">New&lt;/td>
&lt;td style="text-align: center">Work on the activity has not started.&lt;/td>
&lt;td style="text-align: center">The work item may be for creating a new document or revising an existing one.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Active&lt;/td>
&lt;td style="text-align: center">Architecture activities has started. Definition of Ready conditions have been met.&lt;/td>
&lt;td style="text-align: center">Any interim version of the architecture document would have draft status. The document may be published as a draft, or may be in a working branch as draft. If there is an original document it may already be published in some other state.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Resolved&lt;/td>
&lt;td style="text-align: center">The core activities are completed, but the work is not concluded.&lt;/td>
&lt;td style="text-align: center">The document is in review by the architecture team: a pull request is in review.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Closed&lt;/td>
&lt;td style="text-align: center">All activities have concluded; Definition of Done conditions have been met.&lt;/td>
&lt;td style="text-align: center">The document has been reviewed by the architecture team and the document has been published (merged to the main branch) with pending status&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">Removed&lt;/td>
&lt;td style="text-align: center">The work item is no longer applicable, e.g. based on an assessment of need or a change in scope.&lt;/td>
&lt;td style="text-align: center">&amp;ndash;&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Kanban</title><link>/docs/guides/to-review-references/stream-and-team/kanban/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/stream-and-team/kanban/</guid><description>&lt;p>Kanban is a Japanese term meaning signboard or billboard. An industrial engineer named Taiichi Ohno is credited with having developed Kanban at Toyota Motor Corporation to improve manufacturing efficiency&lt;/p>
&lt;h2 id="kanban-for-software-development-teams">Kanban for software development teams&lt;/h2>
&lt;p>While Kanban was created to help with manufacturing, software development teams share many of the same goals, including wanting to increase their flow and throughput. Using some of the guiding principles of Kanban listed below, teams can often improve their efficiency and deliver value to their users faster.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/kanban-1.png" alt="What is Kanban" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>In this article, we’ll focus on Kanban as it applies to software development teams.&lt;/p>
&lt;h2 id="key-kanban-principles">Key Kanban principles&lt;/h2>
&lt;p>&lt;strong>Pull-model&lt;/strong>&lt;/p>
&lt;p>Software development teams historically have had work pushed on them as stakeholders request more functionality. This is often accompanied by tight deadlines. A common side effect of this behavior is that quality suffers as the team is forced to take shortcuts necessary to deliver the functionality within the timeframe.&lt;/p>
&lt;p>Kanban helps a team focus on maintaining an agreed-upon level of quality that must be met before the team can claim a piece of work as done. Stakeholders add requests to a backlog, and then the team “pulls” work into their workflow as capacity becomes available.&lt;/p>
&lt;p>&lt;strong>Visualize work&lt;/strong>&lt;/p>
&lt;p>Understanding the status of a software development team in terms of both process and progress can be challenging. People can more easily understand the current state of work if it is shown using a visual representation rather than a large list of work items or a document describing the work being done.&lt;/p>
&lt;p>Visualization of work is a key Kanban principle. Kanban addresses this visualization using Kanban boards (discussed in more detail later in this article). Visualizing the work to be done as cards on a board, in different states, allows you to easily see the “big picture” of where the project currently stands, as well as identify potential bottlenecks that could affect productivity.&lt;/p>
&lt;p>&lt;strong>Limit work in progress&lt;/strong>&lt;/p>
&lt;p>Teams that try to work on too many things often suffer from reduced productivity due to frequent and costly context-switching. The team is busy, but work just doesn’t seem to be getting done, resulting in unacceptably high lead times. To address this, limiting the number of backlog items a team is working on at any given time helps increase focus while reducing context switching.&lt;/p>
&lt;p>The maximum number of items a team decides to work on at any point in time is known as the WIP limit. A well-disciplined team will work to ensure they are not exceeding their WIP limit. Should this occur, the team will investigate the reason and work to solve the root cause of the issue.&lt;/p>
&lt;p>&lt;strong>Continuous improvement&lt;/strong>&lt;/p>
&lt;p>For software development teams to continuously improve, they need ways to measure their team’s effectiveness and throughput. Kanban, through the use of the Kanban board, provides a dynamic view of the state of work in a workflow. This allows the team to experiment with different processes and evaluate the impact on the flow of work more easily. Teams that practice Kanban often utilizes measurements such as lead times and cycle times and generally embrace the benefits offered for continuous improvement.&lt;/p>
&lt;h2 id="kanban-boards">Kanban boards&lt;/h2>
&lt;p>A Kanban board is just one of many tools you can use to implement Kanban practices in a team. A Kanban board can be a physical board or a software application that shows cards arranged into columns. Typical column names may include To-do, Doing, and Done, but teams can customize this to suit the states in their workflow. For example; New, Development, Testing, UAT, and Done.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/kanban-2.png" alt="Kanban Board" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Software-based Kanban boards can display cards corresponding to Product Backlog Items and include links to things such as tasks and test cases. The following screenshot shows an example of a software-based Kanban board.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/kanban-3.png" alt="Software Kanban Board" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>On a Kanban board, a WIP limit is applied to all “in-progress” columns. The first and last columns on a Kanban board do not have WIP limits. In Figure 3, assuming the WIP limit is 5, the testing column is exceeding the limit as illustrated by the bold column title and the change in color to red. This indicates that there may be a bottleneck in testing that is impeding the team’s flow. Once identified, the team can determine an appropriate course of action to remove the bottleneck.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/kanban-4.png" alt="Kanban Board with Testing" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="cumulative-flow-diagrams">Cumulative flow diagrams&lt;/h2>
&lt;p>A common addition to software-based Kanban boards is a chart called a Cumulative Flow Diagram (CFD). This chart illustrates the number of items in each state over time, typically multiple months. The horizontal axis shows the timeline, while the vertical axis shows the number of Product Backlog Items. Colors are used to indicate the state (or column) the cards are currently in.&lt;/p>
&lt;p>This chart is particularly useful for identifying trends over time, including bottlenecks and other disruptions to a team’s velocity. An example of a good CFD would show a consistent upward trend while the team is working on the project. The various “stripes” across the top of the chart area should be roughly parallel if the team is working within their WIP limits.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/kanban-5.png" alt="Cumulative Flow Diagram" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>IF one or more of the stripes show a bulge, this is usually a clear indicator of a bottleneck or impediment in the team’s flow. In the CFD shown below, you can see the completed work (green) is flat, while the previous state, Testing, is growing, which indicates a probable bottleneck.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/kanban-6.png" alt="Cumulative Flow Diagram" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="agile-scrum-and-kanban">Agile, Scrum, and Kanban&lt;/h2>
&lt;p>While broadly fitting under the umbrella of Agile, both Scrum and Kanban are quite different. A few of the most notable differentiators include; scrum focuses on fixed-length sprints where Kanban is more of a continuous flow model; Scrum has defined roles where Kanban does not define any specific roles for the team, and Scrum uses velocity as a key metric whereas Kanban champions the use of cycle time.&lt;/p>
&lt;p>In calling out the differences in the previous paragraph, it is also common for teams to adopt aspects of both Scrum and Kanban to help them work most effectively. Remember, regardless of which characteristics you choose, you can always review and adapt until you get the best fit for your team. Start simple and don’t lose sight of the most important thing – delivering value regularly to your users!&lt;/p></description></item><item><title>Klocwork</title><link>/docs/tools/to-review-references/static-code-analysis-tools/klocwork/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/static-code-analysis-tools/klocwork/</guid><description>&lt;p>Klocwork static code analysis tool identifies software security, safety, quality, and reliability issues helping to enforce compliance with standards. The tool has many rules to choose from.&lt;/p>
&lt;p>This is one of the ABB global SCA tools, and the only one approved for safety.&lt;/p>
&lt;h2 id="where-to-find-the-tool">Where to find the tool&lt;/h2>
&lt;p>Klocwork can be found here:
&lt;a href="https://www.perforce.com/products/klocwork" target="_blank"
rel="noopener noreferrer" >https://www.perforce.com/products/klocwork&lt;/a>&lt;/p>
&lt;p>It can be used locally and on a build server. There are Klocwork Desktop plug-ins available, e.g. for Visual Studio and Eclipse.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>Klocwork static code analysis tool supports C, C++, C#, Java, and JavaScript. The tool has many rules and collections of rules to choose from. The used ruleset is overlapping with other tools but forms a base and leverages what the tool is capable of.&lt;/p>
&lt;h3 id="motivation">Motivation&lt;/h3>
&lt;p>Klocwork identifies critical security and safety vulnerabilities and quality defects and helps developers create more maintainable code.&lt;/p>
&lt;h3 id="how-to-analyze-the-code">How to analyze the code&lt;/h3>
&lt;h4 id="desktop-plugin-analysis">Desktop plugin analysis&lt;/h4>
&lt;p>C/C++ code: By default, the Klocwork Visual Studio extension runs whenever you save a file. If you prefer, you can use on-the-fly analysis instead so that Klocwork detects issues when you open files and as you type.&lt;/p>
&lt;p>C# code: For pure C# or mixed C/C++ and C# solutions, right-click the solution and select Analyze Solution. Or right-click a project and select Analyze Selection. A full solution or project analysis detects both C/C++ and C# issues.&lt;/p>
&lt;p>When Klocwork detects issues in a file, you see issue markers on the left and right margins of the editor. The left markers (chevrons) scroll with the text. When Klocwork detects more than one issue on the same line, the left gutter markers display only the highest-priority issue.&lt;/p>
&lt;h4 id="server-analysis">Server analysis&lt;/h4>
&lt;p>An analysis shall be run on the server as part of a pull request or before integrating the code. A full analysis shall be performed regularly, for instance, every night. The issues are listed on the Klocwork server per project.&lt;/p>
&lt;h3 id="new-and-changed-code">New and changed code&lt;/h3>
&lt;p>New and changed code shall be analyzed during the code review, e.g. as part of a pull request.&lt;/p>
&lt;h3 id="existing-codebase">Existing codebase&lt;/h3>
&lt;p>It is possible to baseline the existing issues in the codebase. Critical security errors and warnings shall be fixed, other issues are recommended to baseline.&lt;/p>
&lt;h2 id="new-versions">New versions&lt;/h2>
&lt;p>
&lt;a href="https://www.perforce.com/products/klocwork" target="_blank"
rel="noopener noreferrer" >Klocwork&lt;/a> release schedule is one new version each quarter, hence version naming is &lt;code>year.quarter&lt;/code>.&lt;/p>
&lt;p>The release notes state which Visual Studio versions are supported. When using a newer version one can expect issues with the analysis of STL as Microsoft frequently changes its implementation.&lt;/p>
&lt;p>Reevaluate all overrides, done in file &lt;code>overrides.h&lt;/code>, to see if the analysis engine has improved. The Modern engine should hopefully be able to parse the code cleanly without workarounds.&lt;/p>
&lt;h2 id="ruleset">Ruleset&lt;/h2>
&lt;h3 id="storage">Storage&lt;/h3>
&lt;p>The ruleset for a project is stored in one configuration file together with the code, e.g. in a git repo.&lt;/p>
&lt;h3 id="version-control">Version control&lt;/h3>
&lt;p>One configuration file &lt;code>analysis_profile.pconf&lt;/code> for each project is placed and version-controlled together with the code.&lt;/p>
&lt;h3 id="addremove-rules">Add/remove rules&lt;/h3>
&lt;p>Rules are modified, added, and removed by changing the &lt;code>analysis_profile.pconf&lt;/code> file.&lt;/p>
&lt;h3 id="new-rule-set-from-new-tool-version">New rule set from new tool version&lt;/h3>
&lt;p>When a new version of the tool has been provided, a tool responsible needs to read the release notes for the new version and consider if new rules should be used in the ruleset. By default, the new rules are normally enabled, which can cause a lot of new issues in the Klocwork analysis. The configuration file should be updated to reflect this.&lt;/p>
&lt;h3 id="standards">Standards&lt;/h3>
&lt;p>Klocwork has checkers for the CWE Top 25 most dangerous software weaknesses, which complies with the standard IEC 62443-4-1.&lt;/p>
&lt;h2 id="monitoring">Monitoring&lt;/h2>
&lt;p>Monitoring is done on the Klocwork server, where different views can be set up to view different issues, statuses, severities, etc. Issues can be filtered in many ways.&lt;/p>
&lt;p>A pull-request in Azure DevOps shall be set up with a required check that blocks the pull request from completing while there are unhandled new Klocwork issues in the code.&lt;/p>
&lt;p>Deviation reports can be produced from Klocwork.&lt;/p>
&lt;h2 id="severity-levels">Severity levels&lt;/h2>
&lt;p>An issue severity is made up of a level from 1 through 10, plus a label such as Warning. Each checker has a default severity. By default, checkers are assigned severities 1 through 4. Custom checkers are assigned severity 4 by default.
The available severity levels and their default labels are as follows:
1 - Critical
2 - Error
3 - Warning
4 - Review
5 - Severity 5
6 - Severity 6
7 - Severity 7
8 - Severity 8
9 - Severity 9
10 - Severity 10&lt;/p>
&lt;h2 id="how-to-handle-deviations">How to handle deviations&lt;/h2>
&lt;p>Newfound issues that require some sort of deviation shall be commented in the ongoing pull request and resolved by a reviewer:&lt;/p>
&lt;ol>
&lt;li>Klocwork pipeline finds an issue. The issue ID shall be documented in a comment in the pull request on the failing source code row.&lt;/li>
&lt;li>Handle issue in Klocwork by setting the correct status and in the motivating comment refer to the pull request id. Possible statuses:
&lt;ul>
&lt;li>Not a problem: Used for false positives.&lt;/li>
&lt;li>Ignore: suppress issue that can&amp;rsquo;t be fixed in code, or usage of 3rd Party API, etc.&lt;/li>
&lt;li>Defer: avoid using it, but present due to legacy issues.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Pull request reviewer (preferable the team member being familiar with the code) resolves the comment if motivation in Klocwork is sufficient. The reviewer also adds a &amp;ldquo;Reviewed by N N&amp;rdquo; statement to the Klocwork comment.&lt;/li>
&lt;/ol>
&lt;h2 id="abb-klocwork-security-compliance">ABB Klocwork security compliance&lt;/h2>
&lt;p>The ABB taxonomy &amp;lsquo;ABB minimum security checks&amp;rsquo; in Klocwork can be used to fulfill the ABB Minimum Cyber Security Requirements in Klocwork.&lt;/p>
&lt;p>Klocwork has checkers for the CWE Top 25 most dangerous software weaknesses.&lt;/p></description></item><item><title>List of Document Templates</title><link>/docs/tools/to-review-references/document-templates/list-of-document-templates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/document-templates/list-of-document-templates/</guid><description>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/OnePCP-DMS/TemplateWorkingLibrary/Forms/AllItems.aspx" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>PCP R&amp;amp;D document templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Approved templates in Templafy&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/list-of-markdown-templates" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Recommended markdown templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/OnePCP-DMS/TemplateWorkingLibrary/Brownfield" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Brownfield legacy templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/other/organization" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Process Teams&lt;/span>&lt;/a>
&lt;/div>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">&lt;p>Approved templates are available in
&lt;a href="https://abb.templafy.com/library" target="_blank"
rel="noopener noreferrer" >Templafy&lt;/a>&lt;/p>
&lt;p>Please first consider using the
&lt;a href="/docs/tools/to-review-references/markdown-templates/list-of-markdown-templates/" >recommended markdown templates&lt;/a> for the ADO Wiki.&lt;/p>
&lt;p>Please use the legacy templates only when updating already released systems and products or for new safety development (
&lt;a href="https://abb.sharepoint.com/sites/OnePCP-DMS/TemplateWorkingLibrary/Brownfield" target="_blank"
rel="noopener noreferrer" >brownfield&lt;/a>).&lt;/p>
&lt;p>Talk to the
&lt;a href="/docs/other/organization/" >Process Teams&lt;/a> for further recommendations.&lt;/p>
&lt;/span>
&lt;/div>
&lt;h2 id="requirements">Requirements&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE001280_en&lt;/td>
&lt;td>Requirement specification.docx&lt;/td>
&lt;td>Template for requirements. Should be avoided, since requirements are managed in DFN and ADO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE080616_en&lt;/td>
&lt;td>Requirement Specification (TFS and Scribe).docx&lt;/td>
&lt;td>Template used when generating requirements from TFS in Control.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE025506_en&lt;/td>
&lt;td>Implementation Proposal.docx&lt;/td>
&lt;td>Implementation Proposal (IMP) for analyzing requirements (dev. stream) and propose a solution&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE039052_en&lt;/td>
&lt;td>Implementation Proposal System.docx&lt;/td>
&lt;td>Implementation Proposal (IMP) for analyzing system requirements (system stream) and propose solution&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE039362_en&lt;/td>
&lt;td>Implementation Proposal Estimation.xlsx&lt;/td>
&lt;td>Implementation Proposal (IMP) Estimation&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Requirement templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/requirements" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/requirements" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="architecture">Architecture&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE062407_en&lt;/td>
&lt;td>Architecture Description (EA and Scribe).docx&lt;/td>
&lt;td>Generated from Enterprise Architect (EA). Used for system and product architecture in Control.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Architecture templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/architecture" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="hardware-development">Hardware Development&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE044948_en&lt;/td>
&lt;td>Description of Function HW.docx&lt;/td>
&lt;td>HW function. Ref to requirements, application, features, block diagram, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE093821_en&lt;/td>
&lt;td>Design Description HW.docx&lt;/td>
&lt;td>HW design. SIL, explosion protection, electrical safety. PCBs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE042061_en&lt;/td>
&lt;td>Environmental Type Test Description.docx&lt;/td>
&lt;td>Describes environmental tests, like climate endurance, mechanical endurance, corrosive gas, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE044172_en&lt;/td>
&lt;td>Environmental Type Test Record.docx&lt;/td>
&lt;td>Record of the result of environmental tests&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE084851_en&lt;/td>
&lt;td>EMS Checklist.xlsx&lt;/td>
&lt;td>EMS = Electronic Manufacturing Services&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA008756_en&lt;/td>
&lt;td>Samples approval checklist&lt;/td>
&lt;td>For Mechanical samples&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA006927_en&lt;/td>
&lt;td>Engineering Service Request&lt;/td>
&lt;td>For requests by engineering services, primarily GPV&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA012480_en&lt;/td>
&lt;td>RCA Report template(Lifecycle Parts Services offering)&lt;/td>
&lt;td>Inspection and test report&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Hardware Development templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/hardware-development" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/hardware-development" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h3 id="specific-templates-for-explosion-protection-development">Specific templates for Explosion protection development&lt;/h3>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>7PAA000912_en&lt;/td>
&lt;td>Ex Component List.xslx&lt;/td>
&lt;td>Used by Ex team for Certification purposes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA007159_en&lt;/td>
&lt;td>Ex Application Report Template.docx&lt;/td>
&lt;td>Used by Ex team for certification&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA007991_en&lt;/td>
&lt;td>Ex type test record template.docx&lt;/td>
&lt;td>Used by Ex team for certification&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Explosion Protection templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/specific-templates-for-explosion-protection-dev" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/specific-templates-for-ex-protection-development" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="software-development">Software Development&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE040221_en&lt;/td>
&lt;td>Description of Function.docx&lt;/td>
&lt;td>Describes function and design. References back to requirements. Covers performance, limitations, security, safety aspects, etc. Not recommended for new development.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE041242_en&lt;/td>
&lt;td>Description of Function XYZLib.docx&lt;/td>
&lt;td>Describe control libraries, similar to DoF&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE056640_en&lt;/td>
&lt;td>Description of Function SW (EA and Scribe).docx&lt;/td>
&lt;td>Template used when generating information from EA&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE040497_en&lt;/td>
&lt;td>Design Description.docx&lt;/td>
&lt;td>Design of systems and subsystems. Interfaces and class diagrams.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE056642_en&lt;/td>
&lt;td>Design Description SW (EA and Scribe).docx&lt;/td>
&lt;td>Generated from Enterprise Architect (EA), used by Control&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE056641_en&lt;/td>
&lt;td>Interface Description SW (EA and Scribe)&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE037724_en&lt;/td>
&lt;td>Design_Module Test Description and Record.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE041149_en&lt;/td>
&lt;td>Function or Component Type Test Record.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE041148_en&lt;/td>
&lt;td>Function_Component Type Test Description.docx&lt;/td>
&lt;td>Description of functional type tests of a component&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE037719_en&lt;/td>
&lt;td>Function_Component Type Test Description and Record.docx&lt;/td>
&lt;td>Functional test and record of a component.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE024269_en&lt;/td>
&lt;td>Code Review Record.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Software Development templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/software-development" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="test">Test&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>7PAA015399_en&lt;/td>
&lt;td>Test Strategy and Plan.docx&lt;/td>
&lt;td>Describes the test strategy, plan, structure, environments, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE034593_en&lt;/td>
&lt;td>Product Type Test Description.docx&lt;/td>
&lt;td>All test cases in ADO. Not recommended for new development.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE043864_en&lt;/td>
&lt;td>Product Type Test Record.docx&lt;/td>
&lt;td>Product type test record. The test result is captured in ADO. Not recommended for new development.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE010767_en&lt;/td>
&lt;td>Type Test Plan.docx&lt;/td>
&lt;td>Type test plan contains information about test strategy, structure, etc. (not to be confused with ADO Test Plan). Not recommended for new development.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE045565_en&lt;/td>
&lt;td>Test Summary and Final Conclusion of Test.xlsx&lt;/td>
&lt;td>A summary of all tests performed on all test levels - ST, LLIT, FTT, ETT, PTT, SVT, SRT, STT.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE061530_en&lt;/td>
&lt;td>Checklist for Beta, IVA and Start of Type Test.xslx&lt;/td>
&lt;td>Checklist for Beta and Start of PTT/STT/RAT/IVA/SVT&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE086887_en&lt;/td>
&lt;td>PTTD Safety Requirement Validation (TFS and Scribe).docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Test templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/test" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/test" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="release">Release&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE039313_en&lt;/td>
&lt;td>Names on RACI.xlsx&lt;/td>
&lt;td>Assigns people to roles involved in review/approval of documents&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Release templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/release" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="l4--maintenance">L4 &amp;amp; Maintenance&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>7PAA001404_en&lt;/td>
&lt;td>TC and Rollup Release Notes.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE045796_en&lt;/td>
&lt;td>Customer Authorization Temporary Correction non-Safety.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE046924_en&lt;/td>
&lt;td>Checklist for temporary correction.xlsm&lt;/td>
&lt;td>Checklist for TCs and interference free TCs&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>L4 &amp;amp; Maintenance templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/l4-maintenance" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/l4-maintenance" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;p>&lt;strong>Additional Templates&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>The Field Communication templates are owned by Product and Portfolio Management (PPM) and used by &amp;ldquo;L4 &amp;amp; Maintenance&amp;rdquo;.&lt;/p>&lt;/blockquote>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE037120&lt;/td>
&lt;td>Safety Report.docx&lt;/td>
&lt;td>Select a template depending on the DMS you use&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE037123&lt;/td>
&lt;td>Technical Description.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE071315&lt;/td>
&lt;td>Cyber Security Advisory.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA124139&lt;/td>
&lt;td>Cyber Security Notification.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA123022&lt;/td>
&lt;td>Product Bulletin Internal.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA123021&lt;/td>
&lt;td>Technical Description Internal.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE052609&lt;/td>
&lt;td>Product Alert.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE037122&lt;/td>
&lt;td>Product Bulletin.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small>&lt;strong>L4 &amp;amp; Maintenance additional templates:&lt;/strong>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/ppm-templates/monitor-and-manage-product" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="configuration-management">Configuration Management&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>7PAA001177F&lt;/td>
&lt;td>Configuration Management Plan.docx&lt;/td>
&lt;td>PCP level Configuration Management Plan template&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA004621F&lt;/td>
&lt;td>Safety Tool Selection Report.docx&lt;/td>
&lt;td>Tool evaluation for approval by Safety&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE042287&lt;/td>
&lt;td>HW Version Log.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE001281&lt;/td>
&lt;td>Version Specification.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE039765&lt;/td>
&lt;td>Baseline Plan.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE054357&lt;/td>
&lt;td>Version List.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE041627&lt;/td>
&lt;td>Configuration Management Compliance Plan.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE052347&lt;/td>
&lt;td>Release Preparations.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE044689&lt;/td>
&lt;td>Archiving Record.docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE054110&lt;/td>
&lt;td>PCA Checklist and Report.docx&lt;/td>
&lt;td>Not recommended for new development. See
&lt;a href="../../../guides/to-review-references/configuration-management/how-to-perform-configuration-audits/" >How-to Perform Configuration Audits&lt;/a>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE054108&lt;/td>
&lt;td>FCA Checklist and Report.docx&lt;/td>
&lt;td>Not recommended for new development. See
&lt;a href="../../../guides/to-review-references/configuration-management/how-to-perform-configuration-audits/" >How-to Perform Configuration Audits&lt;/a>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE057007&lt;/td>
&lt;td>Approved SW and HW Versions for Test.xlsx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Configuration Management templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/configuration-management" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/configuration-management" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="3rd-party-and-oss">3rd-party and OSS&lt;/h2>
&lt;blockquote>
&lt;p>Placeholder for 3rd-party and OSS templates. Most information is captured in ADO and DFN (no templates needed)&lt;/p>&lt;/blockquote>
&lt;h2 id="quality--kpis">Quality &amp;amp; KPIs&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>7PAA003088_en&lt;/td>
&lt;td>Quality Plan.docx&lt;/td>
&lt;td>Quality Plan with release goals, KPIs, process deviations, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA003087_en&lt;/td>
&lt;td>Quality Report.pptx&lt;/td>
&lt;td>Quality Report for milestones and gates&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Quality &amp;amp; KPIs templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/quality-kpis" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/presentations/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/quality-kpis" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>PowerPoint Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="intellectual-property">Intellectual Property&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>2PAA121471_en&lt;/td>
&lt;td>IP Risk Register.xlsm&lt;/td>
&lt;td>Intellectual Property Risks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121473_en&lt;/td>
&lt;td>IP Strategy.docx&lt;/td>
&lt;td>Intellectual Property Strategy&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Intellectual Property templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/intellectual-property" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/intellectual-property" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="cyber-security">Cyber Security&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>7PAA013087&lt;/td>
&lt;td>PAPCP Product Security Assessment Tool&lt;/td>
&lt;td>PAPCP tool based on 9AKK108467A3796 Product Security Standard - Assessment Tool Rev A&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA013086&lt;/td>
&lt;td>PAPCP Security Development Life Cycle Assessment Tool&lt;/td>
&lt;td>PAPCP tool based on 9AKK108467A3794 Security Development Life Cycle Standard - Assessment Tool Rev A&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA013273&lt;/td>
&lt;td>PAPCP Cloud Security Assessment Tool&lt;/td>
&lt;td>PAPCP tool based on 9AKK108467A3795 Cloud Security Assessment Tool Rev A&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA014751&lt;/td>
&lt;td>PAPCP Light Weight Assessment Checklist&lt;/td>
&lt;td>PAPCP Assessment Checklist based on 7PAA013086 PAPCP Security Development Life Cycle Assessment Tool and PAPCP Product Security Assessment Tool&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small> &lt;strong>Cyber Security templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/cyber-security" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="functional-safety">Functional Safety&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE087886_en&lt;/td>
&lt;td>Impact Analysis Report (TFS and Scribe).docx&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small>&lt;strong>Functional Safety templates&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:f:/r/sites/OnePCP-DMS/TemplateWorkingLibrary/Brownfield?csf=1&amp;amp;web=1&amp;amp;e=1w67Cd" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Brownfield templates and documentation&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="integrated-project-management">Integrated Project Management&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3BSE034121_en&lt;/td>
&lt;td>Project Description and Plan.docx&lt;/td>
&lt;td>Description of the project (release)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE015958_en&lt;/td>
&lt;td>Final Project Report.docx&lt;/td>
&lt;td>Final project report before project is closed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE055542_en&lt;/td>
&lt;td>System Integration Plan.docx&lt;/td>
&lt;td>System integration plan with integration points&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA007509_en&lt;/td>
&lt;td>Document Control Plan.xslx&lt;/td>
&lt;td>Document Control Plan (DCP) lists all documents for the project (release) and status&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE034486_en&lt;/td>
&lt;td>Action (ADI) list.xlsx&lt;/td>
&lt;td>Action/Decision/Information (ADI) list used to capture minutes from SteCo meetings&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE040876_en&lt;/td>
&lt;td>Rollup Checklist.xlsx&lt;/td>
&lt;td>Checklist for rollups, certified correction and small projects (releases)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small>&lt;strong>Integrated Project Management templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/integrated-project-management" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/integrated-project-management" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;p>&lt;strong>Additional Templates&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>Templates used but not owned by R&amp;amp;D&lt;/p>&lt;/blockquote>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>2PAA121451&lt;/td>
&lt;td>R&amp;amp;D and Technology - R&amp;amp;D and Technology - Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Milestone tracker for R&amp;amp;D, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121438&lt;/td>
&lt;td>Project Status Update - SteCo Meeting.pptx&lt;/td>
&lt;td>SteCo meeting template, managed by PMO. It contains IPM schedule, risks overview, ADI, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121462&lt;/td>
&lt;td>Risk Register.xlsx&lt;/td>
&lt;td>Risk Register to capture and monitor risks (can be generated from ADO)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121452&lt;/td>
&lt;td>PPM and Divisions Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Used for System releases, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121454&lt;/td>
&lt;td>Business Processes &amp;amp; IS - Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Used for System releases, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121453&lt;/td>
&lt;td>L3 Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Used for System releases, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121456&lt;/td>
&lt;td>P&amp;amp;F Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Used for System releases, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121455&lt;/td>
&lt;td>P&amp;amp;L Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Used for System releases, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121457&lt;/td>
&lt;td>IE Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Used for System releases, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2PAA121458&lt;/td>
&lt;td>SQM Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Used for System releases, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA008779&lt;/td>
&lt;td>PA PCP Gate Model Checklist.xlsx&lt;/td>
&lt;td>Used for System release, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA015786&lt;/td>
&lt;td>PPM-SE Project Execution Deliverables and Milestone Tracker.xlsm&lt;/td>
&lt;td>Sales Enablement, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA015789&lt;/td>
&lt;td>Checklist for Yearly and Frequent Release.xlsm&lt;/td>
&lt;td>Used for frequent/yearly release, managed by PMO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7PAA016242&lt;/td>
&lt;td>Lesson Learned.xlsx&lt;/td>
&lt;td>Used for lesson learned, managed by PMO&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small>&lt;strong>IPM additional templates&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pmo-templates" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="document-management">Document Management&lt;/h2>
&lt;table class="document-templates">
&lt;thead>
&lt;tr>
&lt;th>Id&lt;/th>
&lt;th>Name&lt;/th>
&lt;th>Comment&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>2PAA104551_en&lt;/td>
&lt;td>Review record.xlsm&lt;/td>
&lt;td>Review record to capture comments in document reviews&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3BSE028024_en&lt;/td>
&lt;td>Checklist for Reviews&lt;/td>
&lt;td>Checklist for formal review&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>▶️&lt;small>&lt;strong>Document Management Templates in Templafy&lt;/strong>:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/spreadsheets/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/document-management" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Excel Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.templafy.com/library/documents/PCP%20-%20Process%20Control%20Platform/pcp-r-d-qms/document-management" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Word Templates&lt;/span>&lt;/a>
&lt;/div>
&lt;/small>&lt;/p>
&lt;h2 id="sources">Sources&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.templafy.com/library" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Templafy - PCP Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/OnePCP-DMS/TemplateWorkingLibrary/Forms/AllItems.aspx?id=%2Fsites%2FOnePCP-DMS%2FTemplateWorkingLibrary%2FBrownfield" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>DMS - Safety/Brownfield Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://sites.abb.com/Sites/Quality%20Management/Templates1/Forms/AllItems.aspx" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>SharePoint Template Area&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/DocTemplate/Industrial%20Automation%20IA/Forms/AllItems.aspx?RootFolder=%2Fsites%2FDocTemplate%2FIndustrial%20Automation%20IA%2FPCP%20-%20Process%20Control%20Platform%20%28PCP%29%2FField%20Communication&amp;amp;FolderCTID=0x012000948155D08AA67D4281D2660F847A6B2F" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Field Communication Template Area&lt;/span>&lt;/a>
&lt;/div>
&lt;p>Document number generator:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://idg.ch.abb.com/idg,iadiv/MainPart/GenerateNumber/6744" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>IDG - Generate number on 7PAANNNNNN&lt;/span>&lt;/a>
&lt;/div>
&lt;!----------------------------------------------->
&lt;!-- Style to fix the table layout on the page -->
&lt;!----------------------------------------------->
&lt;style>
table.document-templates {
display: table;
table-layout: fixed;
width: 100%;
}
table.document-templates th:nth-child(1) {
width: 2cm;
}
table.document-templates th:nth-child(2) {
width: 4cm;
}
table.document-templates th:nth-child(3) {
width: 4cm;
}
table.document-templates th:nth-child(4) {
width: 1.5cm;
}
&lt;/style></description></item><item><title>List of Markdown Templates</title><link>/docs/tools/to-review-references/markdown-templates/list-of-markdown-templates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/markdown-templates/list-of-markdown-templates/</guid><description>&lt;p>List of PCP R&amp;amp;D markdown templates recommended for streams and teams.&lt;/p>
&lt;div class="flex px-4 py-3 mb-6 rounded-md bg-primary-100 dark:bg-primary-900">
&lt;span class="pr-3 pt-1 text-primary-600 dark:text-primary-300">
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/>&lt;/svg>
&lt;/span>
&lt;span class="dark:text-neutral-300">Talk to the
&lt;a href="/docs/other/organization/" >Process Teams&lt;/a> for further recommendations.&lt;/span>
&lt;/div>
&lt;h2 id="requirements">Requirements&lt;/h2>
None
&lt;h2 id="architecture">Architecture&lt;/h2>
&lt;table class=".table" width="100%">
&lt;thead>
&lt;tr>
&lt;th width="30%">Name&lt;/th>&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="/docs/tools/to-review-references/markdown-templates/architecture-review/">Architecture Review Checklist&lt;/a>&lt;/td>
&lt;td>&lt;p>Architecture review checklist for pull requests in Markdown.&lt;/p> &lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="/docs/tools/to-review-references/markdown-templates/product-capability-template/">Product Capability Template&lt;/a>&lt;/td>
&lt;td>&lt;p>Product capability markdown template for ADO.&lt;/p> &lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="software-development">Software Development&lt;/h2>
&lt;table class=".table" width="100%">
&lt;thead>
&lt;tr>
&lt;th width="30%">Name&lt;/th>&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="/docs/tools/to-review-references/markdown-templates/component-capability-template/">Component Capability Template&lt;/a>&lt;/td>
&lt;td>&lt;p>Component capability markdown template.&lt;/p> &lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="/docs/tools/to-review-references/markdown-templates/component-dynamic-behavior-template/">Component Dynamic Behavior Template&lt;/a>&lt;/td>
&lt;td>&lt;p>Dynamic behavior template for components.&lt;/p> &lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="/docs/tools/to-review-references/markdown-templates/describe-the-usage-of-sca-tool-template/">Describe the Usage of SCA Tool Template&lt;/a>&lt;/td>
&lt;td>&lt;p>When a new static code analysis (SCA) tool has been chosen for a product or part of a product, it needs to be described to facilitate its use in the considered and other products.&lt;/p> &lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="hardware-development">Hardware Development&lt;/h2>
None
&lt;h2 id="test">Test&lt;/h2>
None
&lt;h2 id="release">Release&lt;/h2>
None
&lt;h2 id="configuration-management">Configuration Management&lt;/h2>
None
&lt;h2 id="documentation">Documentation&lt;/h2>
None
&lt;h2 id="processes-and-guides">Processes and Guides&lt;/h2>
None</description></item><item><title>Performance Testing</title><link>/docs/guides/to-review-references/software-development/performance-testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/performance-testing/</guid><description>&lt;p>Performance is a quality (non-functional) attribute, which should be defined in the requirement specification. Other quality attributes that may be important to be tested are usability, maintainability, efficiency, and reliability.&lt;/p>
&lt;p>Performance testing is similar to requirements-based testing, i.e. the purpose is to evaluate the requirements at different test levels (mainly at the &lt;em>component level&lt;/em>, which is therefore considered part of &lt;em>Component Testing&lt;/em>). Hence, an important input to performance testing is the performance requirements. Without requirements, expected output cannot be stated when designing the test cases. There exist different types of performance testing, and in IEC 61508, performance testing is divided into stress testing, response timings and memory constraints, and performance requirements.&lt;/p>
&lt;p>The purpose of testing against performance requirements is to design test cases that demonstrate whether the requirements are fulfilled or not. Examples of performance requirements are:&lt;/p>
&lt;ul>
&lt;li>A download to the controller with a small project should not take more than x minutes in 95% of the cases&lt;/li>
&lt;li>In a standard workload, CPU usage should be less than 50%&lt;/li>
&lt;li>OLU for a normal-size project should not take more than x minutes (excluding user communication) in 95% of the cases&lt;/li>
&lt;/ul>
&lt;p>The purpose of stress testing is to break the system, i.e. find circumstances under which the system will crash. During the process of determining the limits of the system, testing provides evidence that the system will work under normal conditions. Stress testing reveals faults like, for example, waste memory space, errors in timing sequence, and deadlocks. It is preferable to use a tool when stress testing. A load generator can simulate many users of the system, many processes, much data input to the system, and so forth.&lt;/p>
&lt;p>Response timings are how long it takes for the system to respond to a request for a piece of information. The request could be initiated by a user, another system, or another process. Memory constraints are a definition of how large memory is allowed to be used. The testing of response timings and memory constraints should be done for average as well as worst-case conditions. Examples of response timings are:&lt;/p>
&lt;ul>
&lt;li>The time to download a project to the controller&lt;/li>
&lt;li>The time to open a new project&lt;/li>
&lt;li>The time it takes the SM to answer a specific request from the PM&lt;/li>
&lt;/ul></description></item><item><title>Product Capabilities</title><link>/docs/guides/to-review-references/architecture/product-capabilities/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/architecture/product-capabilities/</guid><description>&lt;p>Product capabilities describe what the product “can do” for anyone who wants to understand its capabilities. They represent the product&amp;rsquo;s property and are updated throughout its lifecycle through multiple releases.&lt;/p>
&lt;p>This guide describes the most basic parts of product capabilities. Specific add-ons, such as those to ensure Safety compliance, may be needed in the future.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Product owners, test leads, architects, and product managers.&lt;/p>
&lt;h2 id="purpose">Purpose&lt;/h2>
&lt;p>Why do we write product capabilities?&lt;/p>
&lt;ul>
&lt;li>Product capabilities documents serve as one consolidated place to describe high-level product capabilities. Without product capabilities, this kind of documentation would be scattered in epics, features, and the component&amp;rsquo;s capabilities. It would be difficult to get an overview of the product&amp;rsquo;s capabilities, and existing documentation would be too low-level.&lt;/li>
&lt;li>Product capabilities are foremost intended for product managers, owners, and architects to understand whether the product meets expectations and for developers, testers, and new employees to get an overview of the current state of the product.
Product capabilities also provide traceability to product tests. By reading product capabilities, the reader is informed about what has currently passed product tests. The test cases can also be analyzed in the associated product test suite.&lt;/li>
&lt;/ul>
&lt;h2 id="definition-and-clarifications">Definition and clarifications&lt;/h2>
&lt;h3 id="what-and-not-how">&amp;ldquo;What&amp;rdquo; and not &amp;ldquo;How&amp;rdquo;&lt;/h3>
&lt;p>Product capabilities shall describe what the product “can do” for anyone who wants to understand what the product is capable of.&lt;/p>
&lt;p>The capabilities shall be described in a short format focusing on the &amp;ldquo;what&amp;rdquo; (without detailing internal interfaces/functionality that are not important to know about when using the product), while the &amp;ldquo;how&amp;rdquo; is defined in architecture and detailed design documentation. A bullet list is a common format in a product capabilities file since it usually lists all supported functionality briefly and concisely.&lt;/p>
&lt;h3 id="end-usercustomer-perspective">End-user/customer perspective&lt;/h3>
&lt;p>Product capabilities are written from an end-user or customer perspective. This means that product capabilities state what the end user can do when using the product in its current state, or in other words, which capabilities are interesting for the end user to know about to exploit the product fully.&lt;/p>
&lt;p>Functionality support is described at a very high abstraction level. For example, the control platform&amp;rsquo;s capability to receive and use configuration files sent from the engineering tool is not stated in a product capability (but rather in the component capabilities). That would be too much &amp;ldquo;under the hood.&amp;rdquo; Instead, the product capability would state that the product supports the control execution of logic using Structured Text since it is important for the end user to know when using the product.&lt;/p>
&lt;h3 id="the-current-state-of-implemented-and-verified-functionality">The current state of implemented and verified functionality&lt;/h3>
&lt;p>Capabilities serve as internal (ABB) documentation of what a product can do in its current state.&lt;/p>
&lt;p>Future functionalities should not be written in a product capability. Only verified functionality should be stated in a product capability. Hence, the product capability updates can only be merged when the functionality has been tested.&lt;/p>
&lt;p>Before closing an epic, the newly implemented functionality shall be documented in the corresponding product capabilities.&lt;/p>
&lt;h3 id="structure---what-abstraction-level-defines-a-product">Structure - what abstraction level defines a product?&lt;/h3>
&lt;p>A product is the abstraction level above components and should be aligned with what the architecture documentation defines as products. Therefore it is important to &lt;strong>involve the architect&lt;/strong> When defining a new product in this context.&lt;/p>
&lt;h3 id="traceability">Traceability&lt;/h3>
&lt;p>The automated product test cases are in the same repository as the product capabilities. They shall use the same naming conventions to make it easy to understand what test cases have been executed to verify each capability. If manual tests have been executed, a link to the location of their descriptions shall be provided.&lt;/p>
&lt;p>Product capabilities, architecture documentation, and detailed design documentation should follow the same naming convention to make the relationship between the content of the different artifacts easy to understand.&lt;/p>
&lt;p>&amp;ldquo;Traceability by naming convention&amp;rdquo; means that if, for example, &amp;ldquo;AC800M Execution Service&amp;rdquo; is a defined product in the architecture documentation, the exact same name must be used throughout the rest of the documentation and product test framework.&lt;/p>
&lt;p>While traceability by naming convention in product capabilities, detail design documentation, architecture documentation, and product tests is considered enough in the initial phase of PCP QMS, it will be investigated if the traceability should be strengthened with product IDs in the future.&lt;/p>
&lt;p>A product capability should also provide a link (linking can be done in different ways depending on stream conventions) to the location of the architecture design and detailed design documentation to make it easy for readers to find if they are interested in further reading.&lt;/p>
&lt;h3 id="what-is-not-a-product-capability">What is not a product capability&lt;/h3>
&lt;ul>
&lt;li>A product capability is not a direct translation of traditional product requirements. Although product capabilities often will be drafted in temporary branches in parallel with implementation, the final merge of a product capability update is done after the capability has been implemented and tested. As input to implementation, system epics, epics, and features will be used (these work items are replacing the previously used product requirements). See the workflow visualization below for a better understanding.&lt;/li>
&lt;li>A product capability should not be confused with architecture or detailed design documentation. Product capabilities are written as an outcome of implemented and tested epics or bug corrections and these work items were in an earlier step potentially defined with architecture and detailed design documentation as input.&lt;/li>
&lt;li>In general, unsupported functionality should not be mentioned in a product capability. However, exceptions can be made if they help the reader understand the product&amp;rsquo;s current state.&lt;/li>
&lt;li>A product capability does not describe full system functions but is limited to the product&amp;rsquo;s contribution to those system functions.&lt;/li>
&lt;/ul>
&lt;h2 id="usageworkflow">Usage/Workflow&lt;/h2>
&lt;h3 id="input">Input&lt;/h3>
&lt;p>Input to a product capability is an epic description and the epic acceptance criteria. Although epics should be sufficient input for writing product capabilities, sometimes component capabilities can be used as additional input when writing product capabilities (often, product capabilities refer to component capabilities for more details.)&lt;/p>
&lt;h3 id="reviewers">Reviewers&lt;/h3>
&lt;p>The product capabilities are written in Markdown (.md) files in the same repository as the product test source code. When the product&amp;rsquo;s capability is updated, it should be merged with a pull request &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup> linked to the corresponding task for the update. Through the parent-child links, the task is traceable to the corresponding epic (via user stories and features).&lt;/p>
&lt;p>The pull request including the product capabilities update should be reviewed by the product manager, product owner, and the product tester (product capabilities are often written in collaboration between the product owner and product tester). The architect and relevant scrum masters are informed as optional reviewers.&lt;/p>
&lt;h3 id="consumers">Consumers&lt;/h3>
&lt;p>Examples of consumers of a product capability are product managers, product owners, and architects who agree that the implementation meets expectations. Consumers can also be developers and new employees who understand the current state of implementation on a high level. Finally, testers (especially on the product test level) consume product capabilities to understand what high-level functionality has already been tested.&lt;/p>
&lt;p>Product capabilities may also serve as input to end-user documentation.&lt;/p>
&lt;h3 id="workflowtraceability-diagram">Workflow/traceability diagram&lt;/h3>
&lt;p>As seen below, input to implementation and documentation starts with system epics, which are then refined into smaller, more detailed work packages. The information input to a product capability comes mainly from an epic since they have corresponding abstraction levels. However, there will be tasks (small work packages) to update the product capabilities and track the actual progress of the update.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/architecture/product-capabilities-1.drawio.png" alt="workflow_product_capabilities.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="links">Links&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://dev.azure.com/ABB-PA-CommonComponents/IA_Common/_git/Control_Tools?path=/documentation/ControlLogicCompiler/AC800MCompiler/Capabilities.md&amp;amp;_a=preview" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Example of a product capability&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/markdown-templates/product-Capability-Template" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Product Capabilities Template&lt;/span>&lt;/a>
&lt;/div>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Pull requests in Git repositories correspond to check-in in Team Foundation Version Control (TFVC) repositories.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Product Capability Template</title><link>/docs/tools/to-review-references/markdown-templates/product-capability-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/markdown-templates/product-capability-template/</guid><description>&lt;p>Product capability markdown template for ADO.&lt;/p>
&lt;h2 id="markdown-template">Markdown template&lt;/h2>
&lt;blockquote>
&lt;p>Copy the contents to an empty markdown file and start editing.
Remove the help text in block quotes and any unused sections.&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># \&amp;lt;Product name\&amp;gt; capabilities (E.g. NC800M capabilities)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># Table of contents
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[&lt;span class="nt">1. Overview&lt;/span>](&lt;span class="na">#Overview&lt;/span>)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[&lt;span class="nt">2. Capabilities&lt;/span>](&lt;span class="na">#Chapter-2.-Capabilities&lt;/span>)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Chapter 1. Overview
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Describe an overview of the product.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">It might be a good idea to prepare a block diagram in plantUML if it supports the reader&amp;#39;s understanding.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Chapter 2. Capabilities
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Here details about the supported capabilities can be given.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Include plantUML sequence diagrams if they will help the reader&amp;#39;s understanding.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Chapter 2.1 Subchapter (E.g. Connectivity capabilities)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Chapter 2.2 Subchapter (E.g. Redundancy capabilities)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### Chapter 2.3 Subchapter (E.g. OS Support capabilities)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Chapter 3. Product tests
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The described capabilities above have been verified using automated tests located in the same repository as this document and using manual tests described in the Test Suite(?) found here: [Link]()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Chapter 4. Related documentation
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">For a detailed design and architecture description of NC800M, follow these links:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> [&lt;span class="nt">Architecture of NC800M&lt;/span>](&lt;span class="na">https://dev.azure.com/ABB-PA-CommonComponents/IA_Common/_wiki/wikis/System%20Architecture?pagePath=/System%20Parts/NC800M&lt;/span>)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> Detail design: NC800M Platform: file://abb-is-000633.nmea.abb.com/Successful_Builds/CCCP/continuous_integration/Platform/int/SDKs/LatestDocumentation/html/index.html
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> Detail design: NC800M Execution service: file://abb-is-000633.nmea.abb.com/Successful_Builds/CCCP/continuous_integration/AC800MExecService/LatestDocumentation/html/index.html
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Related components and links to their component capabilities documents:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Components |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| [&lt;span class="nt">AC800M Execution Service&lt;/span>](&lt;span class="na">https://dev.azure.com/ABB-PA-CommonComponents/IA_Common/_git/Control_AC800MExecService?path=/AC800MExecService/documentation/AC800M/Capabilities.md&amp;amp;_a=preview&lt;/span>) |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| [&lt;span class="nt">Component X&lt;/span>](&lt;span class="na">https://google.com&lt;/span>) |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Chapter 5. Definitions/terminology
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Term | Definition |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| :---: | :-------------------- |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| ARM | Advanced RISC Machine |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Chapter 6. References
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Ref | Document Identity | Document Title |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| :---: | :----------------------------------------------------------------: | :------------------------ |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| [ReX] | [&lt;span class="nt">Document ID&lt;/span>](&lt;span class="na">https://google.com&lt;/span>) | Threat model for NC800M |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| [ReY] | [&lt;span class="nt">PlantUML Sequence Diagram&lt;/span>](&lt;span class="na">https://plantuml.com/sequence-diagram&lt;/span>) | PlantUML Sequence Diagram |
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>R&amp;D KPIs</title><link>/docs/guides/to-review-references/quality-and-kpi/rnd_kpis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/quality-and-kpi/rnd_kpis/</guid><description>&lt;p>Key performance indicators (KPIs) are used within ELSP R&amp;amp;D to better understand, control, and manage the organization.&lt;/p>
&lt;p>This guide describes the principles of KPIs, the standard KPIs for R&amp;amp;D releases, and the roles and responsibilities involved in KPIs.&lt;/p>
&lt;h2 id="intended-for">Intended for&lt;/h2>
&lt;p>Quality control managers (QCMs) and release owners.&lt;/p>
&lt;h2 id="principles">Principles&lt;/h2>
&lt;p>Some KPIs describe the outcome of an event, while others indicate a potential future result. At ELSP R&amp;amp;D, the focus is on KPIs that help to act in time to meet expected results.&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/RnD_KPIs_LL.PNG" alt="KPI.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
Examples of different indicators.&lt;/p>
&lt;h2 id="kpis-on-different-levels">KPIs on different levels&lt;/h2>
&lt;p>In ELSP, the overall focus is on on-time delivery, cost, quality, and innovation. In R&amp;amp;D, different levels contribute to this in their specific way:&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/RnD_KPIs_pyramid.PNG" alt="KPI.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
The different levels with examples of what they measure and follow up.&lt;/p>
&lt;h2 id="roles-and-responsibilities">Roles and responsibilities&lt;/h2>
&lt;p>The key roles involved with working with KPIs:&lt;/p>
&lt;ul>
&lt;li>Quality team provides standard
&lt;ul>
&lt;li>Provides standard KPI set.&lt;/li>
&lt;li>Provides standard discipline dashboard.&lt;/li>
&lt;li>Provides standard Power BI dashboard.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Release owner
&lt;ul>
&lt;li>Proposes release-specific KPIs in the quality plan (QCM can help if needed).
This includes adding/deleting KPIs as well as setting specific targets.&lt;/li>
&lt;li>Owns release-specific dashboards (QCM can help if needed).&lt;/li>
&lt;li>Reports data to the steering group.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Steering group
&lt;ul>
&lt;li>Approves quality plan with KPIs.&lt;/li>
&lt;li>Decides on release, based on data provided.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Product owner / development teams
&lt;ul>
&lt;li>Keep work item data updated.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="standard-kpis-for-releases">Standard KPIs for releases&lt;/h2>
&lt;!-- markdownlint-disable MD060 -->
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>ID&lt;/strong>&lt;/th>
&lt;th>&lt;strong>Description&lt;/strong>&lt;/th>
&lt;th>&lt;strong>Motivation​&lt;/strong>&lt;/th>
&lt;th>&lt;strong>Type&lt;/strong>&lt;/th>
&lt;th>&lt;strong>Target&lt;/strong> (recommended)&lt;/th>
&lt;th>&lt;strong>Measured&lt;/strong> (where/when)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>M1&lt;/td>
&lt;td>Completion (burndown) of system epics (System level)&lt;/td>
&lt;td>To control release progress.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>100% done at G5.&lt;/td>
&lt;td>ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M2&lt;/td>
&lt;td>System epics distribution per state (System level)&lt;/td>
&lt;td>To control release progress.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>No target, continuously monitored.&lt;/td>
&lt;td>ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M3&lt;/td>
&lt;td>Completion of epics by effort (burndown). This metric will add up the effort of underlying features which are not in closed/done state (Product level)&lt;/td>
&lt;td>To control release progress.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>100% done at M5.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M4&lt;/td>
&lt;td>Epics distribution by state and effort. For effort: this metric will add up the effort of underlying features (Product level)&lt;/td>
&lt;td>To control release progress.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>100% done at M5, continuously monitored.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M5&lt;/td>
&lt;td>Completion (burndown) of features (Product level)&lt;/td>
&lt;td>To control release progress.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>100% done at M5.&lt;/td>
&lt;td>ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M6&lt;/td>
&lt;td>Features list by states (Product level)&lt;/td>
&lt;td>To control release progress.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>No target, continuously monitored.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M7&lt;/td>
&lt;td>Completion of the scope bugs (Open Bugs Trend). Scope bugs: bugs detected in previous releases and targeted to be fixed in the current release (Product level)&lt;/td>
&lt;td>To control release progress.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>All bugs closed (fixed, will not fix, deferred, as design &amp;hellip;) at M5.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M8&lt;/td>
&lt;td>Completion of the introduced bugs (Open Bugs Trend). Introduced bugs: bugs detected in the current release (Product level)&lt;/td>
&lt;td>To follow up of introduced bugs in the release.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>All bugs closed (fixed, will not fix, deferred, as design &amp;hellip;) at M5.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M9&lt;/td>
&lt;td>Number of added/removed system epics after G2 (System level)&lt;/td>
&lt;td>To follow up on scope volatility.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>No target, continuously monitored.&lt;/td>
&lt;td>ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M10&lt;/td>
&lt;td>Number of added/removed epics after G2 (Product level)&lt;/td>
&lt;td>To follow up on scope volatility.&lt;/td>
&lt;td>Scope&lt;/td>
&lt;td>No target, continuously monitored.&lt;/td>
&lt;td>ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M11&lt;/td>
&lt;td>Number of added/removed scope bugs after G2. Scope bugs: bugs detected in previous releases and targeted to be fixed in the current release (Product level)&lt;/td>
&lt;td>To follow up on scope volatility.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>No target, continuously monitored.&lt;/td>
&lt;td>ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M12&lt;/td>
&lt;td>Open bugs distribution per product, severity, state, how found (originator) (Product level)&lt;/td>
&lt;td>To follow up on bug status.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>No target, continuously monitored.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M13&lt;/td>
&lt;td>Bugs introduced by the release: inflow and remaining bugs shown by severity (Product level)&lt;/td>
&lt;td>To follow up on bug status.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;2 weeks of decreasing trend (inflow and open bugs) during active testing before setting M5.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M14&lt;/td>
&lt;td>Number of critical and high bugs not fixed (implemented and integrated in build) at M4 (Product level)&lt;/td>
&lt;td>To follow up on bug status.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M15&lt;/td>
&lt;td>Number of deferred bugs. Metric should be available for all bugs, scope bugs and introduced bugs (Product level)&lt;/td>
&lt;td>To follow up on bug status.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>No target, continuously monitored.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M16&lt;/td>
&lt;td>Product test (PT) status: total, passed, failed and blocked. Metric should be able to be sliced on unique test points and all test points (Product level)&lt;/td>
&lt;td>To follow up on status of PT.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>0 blocked by M4; 0 blocked by M5; 0 failed test cases not properly addressed/tracked (release notes, test report&amp;hellip;) at M5.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M17&lt;/td>
&lt;td>System test (ST) status: total, passed, failed and blocked. Metric should be able to be sliced on unique test points and all test points (System level)&lt;/td>
&lt;td>To follow up on status of ST.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>0 blocked by G4; 0 blocked by G5; 0 failed test cases not properly addressed/tracked (release notes, test report&amp;hellip;) at G5.&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M18&lt;/td>
&lt;td>Unit test coverage (on new and changed code) (Product level)&lt;/td>
&lt;td>To follow up on code quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;80%&lt;/td>
&lt;td>SonarQube or similar (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M19&lt;/td>
&lt;td>Static code analysis coverage (%) (Product level)&lt;/td>
&lt;td>To follow up on code quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>100%&lt;/td>
&lt;td>SonarQube or similar (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M20&lt;/td>
&lt;td>Fix rate of static code analysis warnings/errors (%) (Product level)&lt;/td>
&lt;td>To follow up on code quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;80%&lt;/td>
&lt;td>SonarQube or similar (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M21&lt;/td>
&lt;td>Data quality dashboard: missing data, parent-child relationship issues, open items in old iterations (System level and Product level)&lt;/td>
&lt;td>To follow up on process adherence.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>Green (no errors).&lt;/td>
&lt;td>ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M22&lt;/td>
&lt;td>Monthly spending (System level and Product level)&lt;/td>
&lt;td>To control budget.&lt;/td>
&lt;td>Cost&lt;/td>
&lt;td>According to budget.&lt;/td>
&lt;td>SAP (monthly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M23&lt;/td>
&lt;td>Gate/MS on time (System level and Product level)&lt;/td>
&lt;td>To control time schedule.&lt;/td>
&lt;td>Time&lt;/td>
&lt;td>100%&lt;/td>
&lt;td>SAP (monthly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M24&lt;/td>
&lt;td>Epics/features test coverage by product tests. This metric will look for linked test cases in ADO. The epic pie chart will account for underlying features (Product level)&lt;/td>
&lt;td>To follow up test quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;85%&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M25&lt;/td>
&lt;td>Epics/features test coverage by system tests. This metric will look for linked test cases in ADO. The epic pie chart will account for underlying features (System level)&lt;/td>
&lt;td>To follow up test quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;85%&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M26&lt;/td>
&lt;td>Product tests automation coverage (Product level)&lt;/td>
&lt;td>To follow up test quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;80%&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M27&lt;/td>
&lt;td>System tests automation coverage (System level)&lt;/td>
&lt;td>To follow up test quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;80%&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard / ADO (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M28&lt;/td>
&lt;td>System Integration Test Automation coverage&lt;/td>
&lt;td>To follow up test quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;gt;80%&lt;/td>
&lt;td>Power BI R&amp;amp;D Dashboard (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M29&lt;/td>
&lt;td>Security vulnerabilities: number of security vulnerabilities (SonarQube, BlackDuck, DSAC, Bugs)&lt;/td>
&lt;td>To follow up on code quality.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>0 (zero) unreviewed bugs at M5 or component release&lt;/td>
&lt;td>Azure DevOps (dashboard + release pipeline gates, bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M30&lt;/td>
&lt;td>Bug answering performance: the answer time needed to set a bug to the &amp;ldquo;Closed&amp;rdquo; status from the moment it is received. It is measured in order to keep bug backlog under control.&lt;/td>
&lt;td>To follow up on bug status.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>0 bugs older than 3 months&lt;/td>
&lt;td>Azure DevOps (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M31&lt;/td>
&lt;td>Critical, high severity and priority 1 bug handling: important defects are resolved in a timely manner.&lt;/td>
&lt;td>To follow up on bug status.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>0 Critical, High or Prio 1 bugs are older than 2 weeks&lt;/td>
&lt;td>Azure DevOps (bi-weekly)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>M32&lt;/td>
&lt;td>Bug leakage from development: customers, Pilots, FI-STT and SIT are finding % of bugs that were supposed to be caught by a previous level of testing (development teams).&lt;/td>
&lt;td>To follow up on bug status.&lt;/td>
&lt;td>Quality&lt;/td>
&lt;td>&amp;lt;10%&lt;/td>
&lt;td>Azure DevOps (bi-weekly)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- markdownlint-enable MD060 -->
&lt;h2 id="references">References&lt;/h2>
&lt;!-- markdownlint-disable MD034 -->
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://app.powerbi.com/groups/d42b6bd2-150b-4f6b-8d85-f5150235b374/reports/ff9ce33c-0521-4b7d-9258-1911c51fb506/ReportSection34d116c80d5c4c802db9?experience=power-bi&amp;amp;bookmarkGuid=Bookmark879cea8e8583bdaa1758" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>PCP R&amp;amp;D Quality Dashboards&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/document-templates/list-of-document-templates#quality--kpis" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Quality Plan&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/guides/to-review-references/quality-and-kpi/data-discipline-dashboard/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Discipline Dashboard&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://app.powerbi.com/groups/me/apps/6a187e51-137c-4c15-bf84-4eb7341741c0/reports/1c83efac-4d63-4c5c-9af3-6d5aaf41b588/ReportSection?experience=power-b" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>PCP Analytics Portal Info Page - Power BI&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://app.powerbi.com/groups/me/reports/3ebabbd3-742d-4d39-8985-3c4a3bf83436/ReportSectione42e4a4c7ec84bae77f5?experience=power-bi" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>PCP R&amp;amp;D SPI KPI&lt;/span>&lt;/a>
&lt;/div>
&lt;!-- markdownlint-enable MD034 --></description></item><item><title>R&amp;D Quality Criteria</title><link>/docs/guides/to-review-references/quality-and-kpi/rd-quality-criteria/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/quality-and-kpi/rd-quality-criteria/</guid><description>&lt;p>The &amp;ldquo;R&amp;amp;D Quality Criteria&amp;rdquo; is a tool and checklist for Quality Control Managers (QCM), and is used to plan quality audits and assessments for project milestones and report quality status.&lt;/p>
&lt;p>This Quality Checklist is a summary of ABB R&amp;amp;D milestone checklist items at each main project milestone:&lt;/p>
&lt;ul>
&lt;li>M2 Quality Criteria&lt;/li>
&lt;li>M3 Quality Criteria&lt;/li>
&lt;li>M4 Quality Criteria&lt;/li>
&lt;li>M5 Quality Criteria&lt;/li>
&lt;li>M6 Quality Criteria&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/quality-and-kpi/rd-quality-criteria-3.png" alt="image.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>The quality criteria shall be checked by QCM before each required milestone. RO and CM support with the necessary information to help QCM perform the quality assessment.&lt;/p>
&lt;p>The respective gaps and findings shall be analyzed and listed in a Quality Report by QCM and communicated to relevant stakeholders.&lt;/p>
&lt;p>For release aspects (alpha, beta, etc.), see
&lt;a href="/docs/guides/to-review-references/release/release-stages/" >Release Stages Guide&lt;/a>.&lt;/p>
&lt;h2 id="m2">M2&lt;/h2>
&lt;h3 id="development-status">Development status&lt;/h3>
&lt;ul>
&lt;li>System/Technology Requirements are approved.&lt;/li>
&lt;li>System epics are approved (Including epic links and area path).&lt;/li>
&lt;li>Epics are agreed upon (including description, acceptance criteria, high-level estimate, target date and area/iteration path).&lt;/li>
&lt;li>A &amp;ldquo;baseline&amp;rdquo; of the agreed system epics, epics, and scope bugs is created (M2 agreement).&lt;/li>
&lt;li>Implementation Proposals (if needed) are approved.&lt;/li>
&lt;li>&lt;strong>Safety:&lt;/strong> Product and Safety Requirement Specifications are approved.&lt;/li>
&lt;li>&lt;strong>Safety:&lt;/strong> Safety System Architecture, System FMEA, Preliminary Hazard Report, and Tool Selection Report are created and approved.&lt;/li>
&lt;li>&lt;strong>Safety:&lt;/strong> System Software Critically analysis and Impact Analysis Report are created (draft).&lt;/li>
&lt;/ul>
&lt;h3 id="test-status">Test status&lt;/h3>
&lt;ul>
&lt;li>The Product Test Strategy and Plan is approved.&lt;/li>
&lt;li>The Product Test plan/Test suites high level plan created in ADO.&lt;/li>
&lt;li>A method of ensuring planned requirements are developed and tested is established (method for requirements traceability).&lt;/li>
&lt;/ul>
&lt;h3 id="bug-status">Bug status&lt;/h3>
&lt;ul>
&lt;li>A &amp;ldquo;baseline&amp;rdquo; of the agreed scope bugs exist (see development status).&lt;/li>
&lt;/ul>
&lt;h3 id="release-status">Release status&lt;/h3>
&lt;ul>
&lt;li>Project Description and Plan created and approved (including scope and capacity plan).&lt;/li>
&lt;li>Quality Plan including KPIs is created and approved.&lt;/li>
&lt;li>Dashboards are created.&lt;/li>
&lt;li>Configuration Management Plan is created and approved.&lt;/li>
&lt;li>Names on RACI is created and approved.&lt;/li>
&lt;li>A Document Control Plan is created (draft)&lt;/li>
&lt;li>User Document Control Plan is created (draft).&lt;/li>
&lt;li>The Cyber Security preliminary assessment is done.&lt;/li>
&lt;li>Already known new or modified 3rd party software is updated in DFN (draft).&lt;/li>
&lt;/ul>
&lt;h3 id="m2-status">M2 status&lt;/h3>
&lt;ul>
&lt;li>M2 is planned and the R&amp;amp;D checklist is up to date.&lt;/li>
&lt;li>All previous remarks resolved or accepted and resolution planned.&lt;/li>
&lt;/ul>
&lt;h3 id="system-status">System status&lt;/h3>
&lt;ul>
&lt;li>System Test Strategy and Plan is documented and agreed upon.&lt;/li>
&lt;li>System Test plan/Test suites high level plan created in ADO.&lt;/li>
&lt;li>System Integration Plan is approved, and milestones are derived.&lt;/li>
&lt;li>A beta site delivery plan is created.&lt;/li>
&lt;/ul>
&lt;h2 id="m3">M3&lt;/h2>
&lt;h3 id="development-status-1">Development status&lt;/h3>
&lt;ul>
&lt;li>Drafts of key technical documentation, like architecture, threat model, design and interface exist.&lt;/li>
&lt;li>Change requests of system requirements completed for any changes in scope since M2.&lt;/li>
&lt;li>Epics/feature progress is on target to be completed by the planned date.&lt;/li>
&lt;li>DoD of closed epics/features has been applied.&lt;/li>
&lt;/ul>
&lt;h3 id="test-status-1">Test status&lt;/h3>
&lt;ul>
&lt;li>Product integration and test (PIT) is progressing and showing good quality of deliveries.&lt;/li>
&lt;/ul>
&lt;h3 id="bug-status-1">Bug status&lt;/h3>
&lt;ul>
&lt;li>Bugs of severity critical and high are under control (a reasonable amount).&lt;/li>
&lt;li>Scope bug progress is on target to be completed by the planned date.&lt;/li>
&lt;li>Introduced bugs are being fixed as they are found, backlog is not continuously growing.&lt;/li>
&lt;/ul>
&lt;h3 id="release-status-1">Release status&lt;/h3>
&lt;ul>
&lt;li>Documentation is up to date.&lt;/li>
&lt;li>Quality dashboard reviewed (KPI &amp;amp; Data quality).&lt;/li>
&lt;/ul>
&lt;h3 id="m3-status">M3 status&lt;/h3>
&lt;ul>
&lt;li>M3 is planned and the R&amp;amp;D checklist is up to date.&lt;/li>
&lt;li>All previous remarks resolved or accepted and resolution planned.&lt;/li>
&lt;/ul>
&lt;h3 id="system-status-1">System status&lt;/h3>
&lt;ul>
&lt;li>Change requests of system requirements completed for any changes in scope since G2.&lt;/li>
&lt;li>System epics progress is on target to be completed by the planned date.&lt;/li>
&lt;li>DoD of closed system epics has been applied.&lt;/li>
&lt;li>System integration and test (SIT) is progressing and showing good quality of deliveries.&lt;/li>
&lt;/ul>
&lt;h2 id="m4">M4&lt;/h2>
&lt;h3 id="development-status-2">Development status&lt;/h3>
&lt;ul>
&lt;li>All software and hardware functionality (including change requests and scope bugs) are implemented.&lt;/li>
&lt;li>The design documentation is reviewed and approved. Consider software, hardware, firmware, cyber security, etc.&lt;/li>
&lt;li>&lt;strong>Safety:&lt;/strong> safety-related documents like architecture model, Hazop, and FMEA are updated and approved.&lt;/li>
&lt;/ul>
&lt;h3 id="test-status-2">Test status&lt;/h3>
&lt;ul>
&lt;li>Unit tests and component tests (e.g, MT/DT/FT/CT) are finalized. Related test descriptions are approved, tests executed and test reports are approved.&lt;/li>
&lt;li>Product integration and test (PIT) completed.&lt;/li>
&lt;li>Product type test (PTT) descriptions are reviewed and approved (ready for the start of PTT).&lt;/li>
&lt;li>The product has achieved beta status. That is, the beta criteria are fulfilled, documented, and the decision meeting was held.&lt;/li>
&lt;li>Pre-DSAC has been successfully completed, findings are documented in ADO.&lt;/li>
&lt;li>&lt;strong>Safety:&lt;/strong> SVT descriptions are reviewed and approved (ready for the start of formal tests).&lt;/li>
&lt;li>&lt;strong>Hardware:&lt;/strong> Environmental tests (ET) are executed. Related test descriptions are approved, tests executed, and test reports are available.&lt;/li>
&lt;/ul>
&lt;h3 id="bug-status-2">Bug status&lt;/h3>
&lt;ul>
&lt;li>Bugs of severity critical are investigated and corrected.&lt;/li>
&lt;li>Bugs of severity high have been investigated, analyzed, and selected for implementation or deferral.&lt;/li>
&lt;li>The number of bugs that have not reached successful validation yet (closed state) is reasonable.&lt;/li>
&lt;li>The number of critical and high-severity bugs reported by week is declining.&lt;/li>
&lt;/ul>
&lt;h3 id="release-status-2">Release status&lt;/h3>
&lt;ul>
&lt;li>User manuals have been updated (draft). User manuals with new functionality have been reviewed at least once.&lt;/li>
&lt;li>A draft of the Release Note is available.&lt;/li>
&lt;li>OSS Scan is done, reports are received and there are work items in place to mitigate eventual findings.&lt;/li>
&lt;li>The Cyber Security assessment is done and reviewed with Cyber Security Team, and there are work items in place to mitigate eventual findings.&lt;/li>
&lt;li>The list of 3rd party software in use is updated and approved in DFN.&lt;/li>
&lt;li>Quality dashboard reviewed (KPI &amp;amp; Data quality).&lt;/li>
&lt;/ul>
&lt;h3 id="m4-status">M4 status&lt;/h3>
&lt;ul>
&lt;li>M4 is planned and the R&amp;amp;D checklist is up to date.&lt;/li>
&lt;li>All previous remarks resolved or accepted and resolution planned.&lt;/li>
&lt;/ul>
&lt;h3 id="system-status-2">System status&lt;/h3>
&lt;ul>
&lt;li>System Test plan/Test suites are reviewed and approved.&lt;/li>
&lt;li>System test strategy and plan updated, reviewed, and approved.&lt;/li>
&lt;li>System integration and test (SIT) completed.&lt;/li>
&lt;li>The checklist for the start of STT is approved, and the meeting was held. Ready to start STT in all products and test benches.&lt;/li>
&lt;li>User manuals have been updated (draft). User manuals with new functionality have been reviewed at least once.&lt;/li>
&lt;li>The NLS project (if any) has passed M2.&lt;/li>
&lt;/ul>
&lt;h2 id="m5">M5&lt;/h2>
&lt;h3 id="development-status-3">Development status&lt;/h3>
&lt;ul>
&lt;li>All planned work items (scope backlog, requirements, scope bugs, and change requests) are implemented and validated.&lt;/li>
&lt;li>&lt;strong>Safety:&lt;/strong> the impact analysis reports are reviewed and approved.&lt;/li>
&lt;/ul>
&lt;h3 id="test-status-3">Test status&lt;/h3>
&lt;ul>
&lt;li>PTT is finalized. Tests are executed and test reports are approved.&lt;/li>
&lt;li>The requirements-test traceability is in place (as per the method defined in M2). Test coverage can be demonstrated.&lt;/li>
&lt;li>DSAC has been successfully completed, findings are documented in ADO.&lt;/li>
&lt;li>&lt;strong>Safety:&lt;/strong> SVT is finalized. Tests are executed, test reports are approved, and CoT is done.&lt;/li>
&lt;/ul>
&lt;h3 id="bug-status-3">Bug status&lt;/h3>
&lt;ul>
&lt;li>Bugs of severity critical are investigated, corrected, and validated.&lt;/li>
&lt;li>Bugs of severity high, medium, and low have been investigated and are a) implemented and validated or b) deferred (dispositioned and justified by CCB).&lt;/li>
&lt;/ul>
&lt;h3 id="release-status-3">Release Status&lt;/h3>
&lt;ul>
&lt;li>All user manuals are reviewed and approved.&lt;/li>
&lt;li>The Release Note is reviewed and approved.&lt;/li>
&lt;li>The Cyber Security assessment is approved, including approval of all exceptions.&lt;/li>
&lt;li>The OSS scanning is completed, and all exceptions are accepted.&lt;/li>
&lt;li>The 3rd party software in use is approved, and all exceptions are accepted.&lt;/li>
&lt;li>FCA and PCA are performed, and reports are approved.&lt;/li>
&lt;li>Quality dashboard reviewed (KPI &amp;amp; Data quality).&lt;/li>
&lt;/ul>
&lt;h3 id="m5-status">M5 status&lt;/h3>
&lt;ul>
&lt;li>M5 is planned and the R&amp;amp;D checklist is up to date.&lt;/li>
&lt;li>All previous remarks resolved or accepted and resolution planned.&lt;/li>
&lt;/ul>
&lt;h3 id="system-status-3">System status&lt;/h3>
&lt;ul>
&lt;li>STT is finalized. Tests are executed and test reports are approved.&lt;/li>
&lt;li>The RAT checklist is completed and approved.&lt;/li>
&lt;li>RAT is finalized. Tests are executed and test reports are approved.&lt;/li>
&lt;li>The IVA checklist is completed and approved.&lt;/li>
&lt;li>The status of system requirements validation is clear (passed/failed/not done).&lt;/li>
&lt;li>ST recommendations for the system for release are given. Recommendations and any remarks by STT are documented.&lt;/li>
&lt;/ul>
&lt;h2 id="m6">M6&lt;/h2>
&lt;h3 id="development-status-4">Development status&lt;/h3>
&lt;ul>
&lt;li>NA&lt;/li>
&lt;/ul>
&lt;h3 id="test-status-4">Test status&lt;/h3>
&lt;ul>
&lt;li>NA&lt;/li>
&lt;/ul>
&lt;h3 id="bug-status-4">Bug status&lt;/h3>
&lt;ul>
&lt;li>NA&lt;/li>
&lt;/ul>
&lt;h3 id="release-status-4">Release status&lt;/h3>
&lt;ul>
&lt;li>Final report is approved.&lt;/li>
&lt;li>Document Control Plan up to date.&lt;/li>
&lt;li>User Document Control Plan approved.&lt;/li>
&lt;li>Stand-alone deliveries (if any are planned at M2) are finalized.&lt;/li>
&lt;li>Quality dashboard reviewed (KPI &amp;amp; Data quality).&lt;/li>
&lt;/ul>
&lt;h3 id="m6-status">M6 status&lt;/h3>
&lt;ul>
&lt;li>M6 is planned and the R&amp;amp;D checklist is up to date.&lt;/li>
&lt;li>No old remarks remain.&lt;/li>
&lt;/ul>
&lt;h3 id="system-status-4">System status&lt;/h3>
&lt;ul>
&lt;li>The NLS project has passed M5.&lt;/li>
&lt;/ul>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/docs/mp028/process/supporting-processes/quality/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Quality Process&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/document-templates/list-of-document-templates#quality--kpis" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Quality Templates&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/mp028/process/program-processes/integrated-project-management/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Integrated Project Management&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Recommended Component Test Frameworks</title><link>/docs/guides/to-review-references/software-development/suggested-frameworks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/suggested-frameworks/</guid><description>&lt;p>The following component test frameworks are recommended but not mandatory.&lt;/p>
&lt;h3 id="googletest">GoogleTest&lt;/h3>
&lt;p>Used for example in the Control Software stream, e.g. for Next Generation control development.
The format is XML because there is an own-developed test framework on top of the GoogleTest framework that processes an XML-format file as input.&lt;/p>
&lt;p>Example of a component test:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-XML" data-lang="XML">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;TestCases&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- Each TestCase needs a unique Id number --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestCase&lt;/span> &lt;span class="na">Id=&lt;/span>&lt;span class="s">&amp;#34;1&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span> &lt;span class="c">&amp;lt;!-- Description if the test case. --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Documentation&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Configure an empty Ac800m configuration service and the AlarmAndEvent service lib with condition
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> files at startup, then do a reconfiguration. Alarm conditions are activated and deactivated
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> cyclically from code.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Description&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Setup&amp;gt;&lt;/span>Correct configuration files are used to configure Ac800m and AlarmAndEvent.&lt;span class="nt">&amp;lt;/Setup&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;ExpectedResult&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Ac800m and AlarmAndEvent register and unregister the alarm conditions correctly. The alarm conditions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> are toggled between activated and deactivated.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/ExpectedResult&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Documentation&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- START OF CONFIGURATION --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- Operation: AddControlService: add service to start list --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;AddControlService&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span> &lt;span class="c">&amp;lt;!-- Add the service for Execution service --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;InstanceName&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AC800MExecService&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;DefaultConfig&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0001_AEConditions/AEConditions_ConfigCollection.xml&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- Operation: Start: start the platform with the given start list. --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;Start&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- START OF SUCCESSFUL RECONFIGURATION --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;HighlevelConfig&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Operation&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;Connect&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;OPCUAurl&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;[ConfigMgrDefaultUrl]&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;HighlevelConfig&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Operation&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;OpenConfigCollection&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;ClientNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;ReceiverID&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AC800MExecService&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;HighlevelConfig&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Operation&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;TransferCollectionFile&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;ClientNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;CollectionNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;1&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;ManifestPath&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0001_AEConditions/AEConditions_ConfigCollection.xml&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;FilePath&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0001_AEConditions/AEConditions.signals.xml&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;FilePath&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0001_AEConditions/AEConditions.conditions.xml&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;FilePath&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0001_AEConditions/AEConditions.ncac.xml&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;FilePath&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0001_AEConditions/AEConditions.ncos.xml&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;FilePath&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0001_AEConditions/AEConditions.task.xml&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;HighlevelConfig&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Operation&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;PrepareConfigCollection&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;ClientNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;CollectionNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;1&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;HighlevelConfig&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Operation&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CommitAndCloseConfigCollection&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;ClientNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;CollectionNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;1&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;HighlevelConfig&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Operation&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;Disconnect&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;ClientNumber&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;0&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- END OF SUCCESSFUL RECONFIGURATION --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- Operation: VerifyLog: inspect log files. --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;VerifyLog&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- Find text (with regex) on any row in log file --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;LogFolder&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AC800MExecService&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- DbgPrint Id=5 v1=1 v2=0 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AEConditionManager::RegisterCondition: size=0, and inputSize=2.&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AEConfigurableComponent::EndCommit completed.&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AEConditionManager::RegisterCondition: size=2, and inputSize=2.&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AEConfigurableComponent::EndCommit completed.&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Active:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Acknowledged:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Retain:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / ConditionId:\&amp;#39;-AEConditions.Program1.alarm1Obj\&amp;#39;&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm2_SrcName / CN:alarm2_CondName / Active:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Acknowledged:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm2_SrcName / CN:alarm2_CondName / Retain:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Active:false&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Acknowledged:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Retain:false&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm2_SrcName / CN:alarm2_CondName / Active:false&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Acknowledged:true&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;CEN: SN:alarm1_SrcName / CN:alarm1_CondName / Retain:false&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AEConditionManager::UnregisterCondition: size=4 and inputSize=2.&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Parameter&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Text&amp;#34;&lt;/span> &lt;span class="na">Value=&lt;/span>&lt;span class="s">&amp;#34;AEConfigurableComponent::CleanupConfigInternal completed.&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestStep&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- Operation: Stop: halt platform and ApplicationServices --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TestStep&lt;/span> &lt;span class="na">Operation=&lt;/span>&lt;span class="s">&amp;#34;Stop&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/TestCase&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;/TestCases&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="mstest">MSTest&lt;/h3>
&lt;p>Used for example in the Operations stream for Symphony Plus, e.g. in backend services written with C++ and C#.&lt;/p>
&lt;p>Example of a C#/C++ test to write and read a tag:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-C++" data-lang="C++">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">TestMethod&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="n">ItemsReadWrite&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">newValue&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Assert.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">Assert&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">IsTrue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">CReadWriteField&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">TestSetAndGet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">newValue&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">WriteLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Test finished.&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="n">CReadWriteField&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">TestSetAndGet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">newValue&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">CString&lt;/span> &lt;span class="n">strLogMessage&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Prepare to Set new info
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">TAGINFOEX&lt;/span> &lt;span class="n">tInfo&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">SetTagInfo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tInfo&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_tVt&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">newValue&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">dwSubParam&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">SetSubParam&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_tType&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Notice: tInfo is not preserved by all settings. need to have a copy
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">TAGINFOEX&lt;/span> &lt;span class="n">eInfo&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tInfo&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">bool&lt;/span> &lt;span class="n">bRet&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">_si&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">SetInfo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_tType&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">tInfo&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dwSubParam&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">bRet&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">_paramConfig&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ApiTestUtil&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Message&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;%s.%s - Set Info failed&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_si&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">GetName&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">_paramName&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">_paramConfig&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ApiTestUtil&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Message&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;%s.%s - Set Info suceeded but not flagged as config&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_si&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">GetName&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">_paramName&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Wait for Data Processing (if any is requested)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">_tVt&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">vt_TVX&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1000&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Read back and compare
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">PwInfo&lt;/span> &lt;span class="n">rInfo&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">_si&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">GetInfo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_tType&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dwSubParam&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">rInfo&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GetVarDataType&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">vt_UNDEF&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ApiTestUtil&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Message&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;%s.%s - read back failed&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_si&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">GetName&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">_paramName&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">TAGINFOEX&lt;/span> &lt;span class="nf">rrInfo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">rInfo&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GetTaginfo&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">rInfo&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GetVarDataType&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">CompareInfo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_tType&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rrInfo&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">eInfo&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ApiTestUtil&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Message&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;%s.%s - comparison failed. Is %s - expected %s&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_si&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">GetName&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">_paramName&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rInfo&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ToString&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">eInfo&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ToString&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="manual-tests">Manual tests&lt;/h3>
&lt;p>Manual test cases are rare in software unit and component tests.&lt;/p>
&lt;p>In cases they are needed, they should be defined in Test Case work items and be part of a Test suite in Azure DevOps.
When the manual test cases are being performed, execution of the Test suite should be triggered so that the test result is registered directly in Azure DevOps together with the result of the automated tests.&lt;/p>
&lt;p>To do this, manual tests and recording of the test results for each test step can be done using Microsoft Test Runner (which will be started automatically when you trigger the execution of test points in your test suite defined in Azure).&lt;/p>
&lt;p>You can run tests for both web applications and desktop apps. For more details, check Microsoft&amp;rsquo;s guides:
&lt;a href="https://learn.microsoft.com/en-us/azure/devops/test/run-manual-tests?view=azure-devops" target="_blank"
rel="noopener noreferrer" >Run manual tests&lt;/a>&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/software-development/suggested-frameworks-1.png" alt="image" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure></description></item><item><title>Recommended Extensions</title><link>/docs/tools/to-review-references/devops/recommendedextensions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/recommendedextensions/</guid><description>&lt;p>This page contains a list of Azure DevOps extensions that are pre-approved for use in PCP.&lt;/p>
&lt;p>If you wish to start using an extension, please contact your Configuration Manager or Quality Control Manager first.&lt;/p>
&lt;p>It is possible to request a new extension with a
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/Quality%20Management%20System/_workitems/create/Issue?templateId=f629effc-0c44-459d-a258-3281e7f3a7cc&amp;amp;ownerId=b3057ed0-b9eb-44f7-b2bf-42266f9d979b" target="_blank"
rel="noopener noreferrer" >Process Change Request&lt;/a>.&lt;/p>
&lt;p>The request will be evaluated by the Configuration Management process group and possibly other groups as needed. After the extension has been approved, the CM will contact an Azure DevOps Collection Admin with sufficient permissions to install the extension.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Extension&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Resources&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Retrospectives&lt;br />(Microsoft DevLabs)&lt;/td>
&lt;td>Extension to do retrospective sessions and track actions, especially useful when collaborating remotely&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-devlabs.team-retrospectives&amp;amp;targetId=3be0af8b-e11f-47d2-9f97-0564e9a878ca&amp;amp;utm_source=vstsproduct&amp;amp;utm_medium=ExtHubManageList" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Estimate&lt;br />(Microsoft DevLabs)&lt;/td>
&lt;td>Planning Poker estimation extension&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-devlabs.estimate&amp;amp;targetId=3be0af8b-e11f-47d2-9f97-0564e9a878ca&amp;amp;utm_source=vstsproduct&amp;amp;utm_medium=ExtHubManageList" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;br />
&lt;a href="https://abb.sharepoint.com/teams/IA-PCPDevOps/_layouts/15/Doc.aspx?OR=teams&amp;amp;action=edit&amp;amp;sourcedoc=%7b6FEEF55C-4D1A-44AE-BCFA-96EB4A8F2EBC%7d" target="_blank"
rel="noopener noreferrer" >Training slides&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Appgami Checklist&lt;br />(Appgami)&lt;/td>
&lt;td>Auto-population of checklist and track progress on Work item form&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=appgami.appgami-checklist&amp;amp;ssr=false#overview" target="_blank"
rel="noopener noreferrer" >Marketplace Link&lt;/a>&lt;br/>
&lt;a href="https://abb.sharepoint.com/:v:/r/teams/IA-PCPDevOps/Shared%20Documents/General/Appgami_checklist_extension/Demo%20on%20Appgami%20checklist%20integration%20for%20IOM%20team-20210920_133514-Meeting%20Recording.mp4?csf=1&amp;amp;web=1&amp;amp;e=cOQS9D" target="_blank"
rel="noopener noreferrer" >Demo&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Generate Release Notes (Crossplatform)&lt;/td>
&lt;td>This extension generates a release notes file based on a user defined Handlbars template. It can be used inside any Azure DevOps Classic Build, Classic Release or Multistage YAML Pipeline.&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=richardfennellBM.BM-VSTS-XplatGenerateReleaseNotes" target="_blank"
rel="noopener noreferrer" >Marketplace Link&lt;/a> containing extensive documentation and examples&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Code signing with Software Trust Manager&lt;/td>
&lt;td>DigiCert® Secure Software Manager automates code signing workflows, improving software security and integrating seamlessly with DevOps processes. Secure Software Manager client tools enable developers to sign binaries with signing tools on a wide range of platforms securely and efficiently. Secure Software Manager client tools extension expedite the installation and setup of client and signing tools to get developers signing-ready fast in Azure hosted environment.&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=Digicert.ssm-client-tools-extension" target="_blank"
rel="noopener noreferrer" >https://marketplace.visualstudio.com/items?itemName=Digicert.ssm-client-tools-extension&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PublishHTMLReports&lt;/td>
&lt;td>This extension publishes any .html report to Build Pipeline and it is immensely useful and easy to read for most of our stakeholders in a single view of the pipelines result, quite user friendly&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=LakshayKaushik.PublishHTMLReports&amp;amp;targetId=3be0af8b-e11f-47d2-9f97-0564e9a878ca" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Jupyter Notebook&lt;br />(Microsoft DevLabs)&lt;/td>
&lt;td>Render your .ipynb notebook files directly in Azure DevOps&lt;/td>
&lt;td>
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/_settings/extensions?tab=requested&amp;amp;status=pending&amp;amp;extension=ms-air-aiagility.ipynb-renderer" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Allure Report Viewer&lt;/td>
&lt;td>This Azure DevOps extension provides a task for publishing an allure report by inlining all related files and embedding it into a Build and Release page as separate tab&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=MichaelClay.azure-pipelines-allure-report-viewer" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>POSTMAN Report&lt;/td>
&lt;td>This Azure DevOps extension provides task for Publishing Postman / Newman HTML Reports into built into Azure Storage&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=MaciejMaciejewski.postman-report&amp;amp;targetId=3be0af8b-e11f-47d2-9f97-0564e9a878ca" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Newman the cli Companion for Postman&lt;/td>
&lt;td>This extension helps to effortlessly run and test a Postman Collections directly from the command-line and in a task&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=carlowahlstedt.NewmanPostman&amp;amp;targetId=3be0af8b-e11f-47d2-9f97-0564e9a878ca" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Wiql Editor&lt;/td>
&lt;td>Search work items with the expressiveness of the work item query language. Explore the wiql syntax on the wiql playground. This extension helps to define WIQL queries, that support more operators than normal queries, for example ASOF for historical queries.&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ottostreifel.wiql-editor&amp;amp;ssr=false&amp;amp;referrer=https%3A%2F%2Fapp.vssps.visualstudio.com%2F#overview" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Terraform &lt;br />(Microsoft DevLabs)&lt;/td>
&lt;td>Terraform extension by MicrosoftDevLabs that supports &amp;ldquo;Infrastructure as Code&amp;rdquo; to define and provision infrastructure using a high-level configuration language&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-devlabs.custom-terraform-tasks" target="_blank"
rel="noopener noreferrer" >Marketplace Link&lt;/a> &lt;br />
&lt;a href="https://abb.sharepoint.com/:f:/r/teams/IA-PCPDevOps/Shared%20Documents/General/Microsoft_Training/Terraform%20and%20GitOps%20using%20Azure%20Arc%20K8%20training?csf=1&amp;amp;web=1&amp;amp;e=lT7GoA" target="_blank"
rel="noopener noreferrer" >Training recording&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OpenShift &lt;br />(Red Hat)&lt;/td>
&lt;td>This Azure DevOps extension offers tasks for integrating OpenShift into your build and release pipelines, for example by executing user defined oc commands.&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=redhat.openshift-vsts" target="_blank"
rel="noopener noreferrer" >Marketplace Link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Multivalue control &lt;br />(Microsoft DevLabs)&lt;/td>
&lt;td>This extension provides a custom control for work items to define a field with multiple values. This is used by AV to implement Target System Release.&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vsts-extensions-multivalue-control" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Invicti Enterprise &lt;br />(Invicti Ltd)&lt;/td>
&lt;td>Invicti Enterprise is an automated, yet fully configurable, web application security scanner. It enables you to scan websites, web applications, and web services identify security flaws. &lt;br/> Invicti can scan all types of web applications, regardless of the platform or the language with which they are built.&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=InvictiLtd.netsparker-cloud-extension" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CloneBug&lt;/td>
&lt;td>This is an extension that enables users to easily clone Bugs within ABB PCP Azure environment and automatically create links and copy/clean decided attributes to new workitem. &lt;br> &lt;br> This extension is only visible to specified organizations/collections and requests to add new organizations/collections can be done by placing a PCR to
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/Quality%20Management%20System/_workitems/create/Issue?templateId=f629effc-0c44-459d-a258-3281e7f3a7cc&amp;amp;ownerId=b3057ed0-b9eb-44f7-b2bf-42266f9d979b" target="_blank"
rel="noopener noreferrer" >Configuration Management process team&lt;/a>&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=georgdrobnyms.CloneBug&amp;amp;targetId=3be0af8b-e11f-47d2-9f97-0564e9a878ca&amp;amp;utm_source=vstsproduct&amp;amp;utm_medium=ExtHubManageList" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Dependabot&lt;/td>
&lt;td>This extension enables users to run Dependabot inside a build pipeline in Azure DevOps&lt;/td>
&lt;td>
&lt;a href="https://marketplace.visualstudio.com/items?itemName=tingle-software.dependabot" target="_blank"
rel="noopener noreferrer" >Marketplace link&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Recommended Settings for Feeds</title><link>/docs/tools/to-review-references/devops/feedrecommendations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/feedrecommendations/</guid><description>&lt;p>Each feed created in an organization is highly recommended to use the below settings.
Below recommended settings are based on the need for development and cost estimate for ABB.&lt;/p>
&lt;h3 id="feed-details-page">&amp;ldquo;Feed Details&amp;rdquo; page&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Configuration &lt;br/> name&lt;/th>
&lt;th>Value / &lt;br/> Setting&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Hide deleted package versions&lt;/td>
&lt;td>&amp;ldquo;Activated&amp;rdquo; &lt;br/> &amp;ldquo;Ticked&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Enable package badges&lt;/td>
&lt;td>&amp;ldquo;Activated&amp;rdquo; &lt;br/> &amp;ldquo;Ticked&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Enable package retention&lt;/td>
&lt;td>&amp;ldquo;Activated&amp;rdquo; &lt;br/> &amp;ldquo;Ticked&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Maximum number of versions per package&lt;/td>
&lt;td>12&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Days to keep recently downloaded packages&lt;/td>
&lt;td>30&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;pre>&lt;code>A package promoted from local will not be counted in the
12 versions to keep, i.e., packages in views &amp;quot;Pre-Release&amp;quot;
or &amp;quot;Release&amp;quot; is not counted towards these 12 versions.
If version 13 (and upwards) is in a package that has not been
downloaded the last 30 days will be deleted (both criteria
needs to be fulfilled for a version to be deleted).
&lt;/code>&lt;/pre>
&lt;h3 id="permissions-page">&amp;ldquo;Permissions&amp;rdquo; page&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>User/Group&lt;/th>
&lt;th>Role&lt;/th>
&lt;th>Inherited&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>[&amp;lt;&amp;ldquo;Project name&amp;rdquo;&amp;gt;]\Contributors&lt;/td>
&lt;td>Contributor&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;pre>&lt;code>All others default
&lt;/code>&lt;/pre>
&lt;h3 id="views-page">&amp;ldquo;Views&amp;rdquo; page&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>View&lt;/th>
&lt;th>Access Permissions&lt;/th>
&lt;th>Default view&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Local&lt;/td>
&lt;td>Feed users&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Prerelease&lt;/td>
&lt;td>Feed users; All feeds and people in &amp;lt;&amp;ldquo;your organization name&amp;rdquo;&amp;gt;&lt;/td>
&lt;td>&amp;ldquo;Activated&amp;rdquo; &lt;br/> &amp;ldquo;Ticked&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Release&lt;/td>
&lt;td>Feed users; All feeds and people in &amp;lt;&amp;ldquo;your organization name&amp;rdquo;&amp;gt;&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="upstream-sources-page">&amp;ldquo;Upstream sources&amp;rdquo; page&lt;/h3>
&lt;pre>&lt;code>&amp;quot;Empty&amp;quot; - No upstream sources configured
Or
Use upstream feeds as needed for your project.
&lt;/code>&lt;/pre></description></item><item><title>Recommended Unit Test Frameworks</title><link>/docs/guides/to-review-references/software-development/suggested-unit-test-frameworks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/suggested-unit-test-frameworks/</guid><description>&lt;p>The following unit test frameworks are recommended but not mandatory.&lt;/p>
&lt;h3 id="googletest">GoogleTest&lt;/h3>
&lt;p>Used for example in the Control Software stream, e.g. for Next Generation control development using C++.&lt;/p>
&lt;p>Example of a unit test:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-C++" data-lang="C++">&lt;span class="line">&lt;span class="cl">&lt;span class="n">TEST&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GTestCaseClass&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">TestFibonacci&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">​&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="err">​&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">TEST_ID&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;001&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">TEST_DESCRIPTION&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Test of Fibonacci property&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">TEST_EXPECTED_RESULT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;The correct fibonacci number is returned for position 1-3.&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Setup
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">EngineerSw&lt;/span> &lt;span class="n">engineer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">EngineerSw&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="err">​&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Test and verify
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// Stops current function.​
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// Use when continuing after failure doesn&amp;#39;t make sense​
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">ASSERT_EQ&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">engineer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">fibonacci&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">));&lt;/span>&lt;span class="err">​&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Use when you want the test to continue to reveal more errors after the assertion failure​
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">EXPECT_EQ&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">engineer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">fibonacci&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">));&lt;/span>&lt;span class="err">​&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">EXPECT_EQ&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">engineer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">fibonacci&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">));&lt;/span>&lt;span class="err">​&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="xunit">xUnit&lt;/h3>
&lt;p>Used for example in the Operations stream for Next Generation HMI development, e.g. in backend services written with C#.&lt;/p>
&lt;p>Example of a unit test:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-C#" data-lang="C#">&lt;span class="line">&lt;span class="cl">&lt;span class="na">[Fact]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">public&lt;/span> &lt;span class="k">void&lt;/span> &lt;span class="n">GetBinGraphic200_Test&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Arrange&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">var&lt;/span> &lt;span class="n">filename&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">&amp;#34;test&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">var&lt;/span> &lt;span class="n">binGraphic&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">BinGraphic&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">Name&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">&amp;#34;test&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">BinGraphicStream&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="kt">byte&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DbContext&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">BinGraphics&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binGraphic&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DbContext&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SaveChanges&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">var&lt;/span> &lt;span class="n">expected&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">MemoryStream&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binGraphic&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">BinGraphicStream&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">binGraphic&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">BinGraphicStream&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Length&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Act&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">var&lt;/span> &lt;span class="n">controller&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">LooxWasmController&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">logger&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DbContext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">testValuesSource&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Object&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">simulationConfig&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">var&lt;/span> &lt;span class="n">resultAPI&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">controller&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GetBinGraphic&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">FileStreamResult&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">var&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">MemoryStream&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">resultAPI&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">FileStream&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">CopyTo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Assert&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Assert&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">True&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">expected&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ToArray&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">Equals&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ToArray&lt;/span>&lt;span class="p">()));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="jest">Jest&lt;/h3>
&lt;p>Used for example in the Operations stream for Next Generation HMI development, e.g. in frontend services written with Typescript Javascript.&lt;/p>
&lt;p>Example of a unit test:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Typescript" data-lang="Typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">describe&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;LooxAPIService&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">()&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">test&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Should correctly fetch graphics list&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">()&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Arrange and Act
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">looxService&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;test&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">let&lt;/span> &lt;span class="nx">graphicsList&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="nx">looxService&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getGraphicsList&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Assert
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">expect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">graphicsList&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">toEqual&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">lastFetch&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="mstest">MSTest&lt;/h3>
&lt;p>Used for example in the Operations stream for Symphony Plus, e.g. in backend services written with C#.&lt;/p>
&lt;p>Example of a unit test:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-C#" data-lang="C#">&lt;span class="line">&lt;span class="cl">&lt;span class="na">[TestMethod]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">[Description(&amp;#34;Check Quality is expected&amp;#34;)]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">public&lt;/span> &lt;span class="k">void&lt;/span> &lt;span class="n">SamplingListTest_AverageQuality&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//PREPARATION&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DateTime&lt;/span> &lt;span class="n">normalizeddt&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">DateTime&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">UtcNow&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">normalizeddt&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">normalizeddt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AddSeconds&lt;/span>&lt;span class="p">(-&lt;/span>&lt;span class="n">normalizeddt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Second&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">List&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="n">SPlusValue&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">values&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">List&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="n">SPlusValue&lt;/span>&lt;span class="p">&amp;gt;();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">SPlusValue&lt;/span> &lt;span class="n">testvalue&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">SPlusValue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Dt&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">normalizeddt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AddMinutes&lt;/span>&lt;span class="p">(-&lt;/span>&lt;span class="m">5&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Value&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="m">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Qual&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">SPlusQuality&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Channelfailure&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">values&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">testvalue&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">testvalue&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">SPlusValue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Dt&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">normalizeddt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AddMinutes&lt;/span>&lt;span class="p">(-&lt;/span>&lt;span class="m">3&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Value&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="m">1000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Qual&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">SPlusQuality&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Good&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">values&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">testvalue&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//ACT - FUNCTION TO BE TESTED&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">List&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="n">SPlusValue&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">t&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">SamplerGenerator&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AverageSamplingList&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">values&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">normalizeddt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AddMinutes&lt;/span>&lt;span class="p">(-&lt;/span>&lt;span class="m">6&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">normalizeddt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AddMinutes&lt;/span>&lt;span class="p">(-&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="m">300&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//ASSERT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Assert&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AreEqual&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">?[&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="p">]?.&lt;/span>&lt;span class="n">Qual&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">SPlusQuality&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Channelfailure&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Release Stages</title><link>/docs/guides/to-review-references/release/release-stages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/release/release-stages/</guid><description>&lt;p>This guide provides insights and definitions for the various release stages of a component, function, product, or system.&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>During the development of new products, functions, or components, release stages are used to describe the level of maturity of the coming release. The release stages are alpha, beta candidate, beta, release candidate, and release.&lt;/p>
&lt;h2 id="release-stages---overview">Release stages - overview&lt;/h2>
&lt;p>The table below gives an overview of the &lt;strong>maturity level&lt;/strong> and &lt;strong>use&lt;/strong> of the different release stages.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Alpha&lt;/th>
&lt;th>Beta candidate&lt;/th>
&lt;th>Beta&lt;/th>
&lt;th>Release candidate&lt;/th>
&lt;th>Release&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>- Functionality not complete&lt;br /> - Not fully tested&lt;/td>
&lt;td>- (Close to) full functionality&lt;br /> - Component and product test initiated&lt;br /> - User documentation available as drafts&lt;/td>
&lt;td>- Full functionality&lt;br /> - Component test completed&lt;br /> - Partly product/system tested&lt;/td>
&lt;td>- Product version aimed to be released&lt;br /> - Formal product and system tests executed&lt;/td>
&lt;td>- Final version, market release&lt;br /> - Release acceptance test&lt;br /> - Safety validation test (for safety products)&lt;br /> - Media verification&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>- Early integration &amp;amp; testing (no external distribution).&lt;/td>
&lt;td>- Internal interim use&lt;br /> - External test labs&lt;/td>
&lt;td>- Formal product/system test&lt;br /> - At selected beta sites.&lt;/td>
&lt;td>- Final tests (no major changes expected ahead)&lt;/td>
&lt;td>- Release&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>In Azure DevOps (ADO), there are “only” three artifacts relating to the maturity level of a release, mapping to the release stages like this:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Artifact in Azure DevOps&lt;/th>
&lt;th>Release stage&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>- Local&lt;/td>
&lt;td>- Unclassified (e.g. daily build, pull request)&lt;br /> - Alpha&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>- Prerelease&lt;/td>
&lt;td>- Beta candidate&lt;br /> - Beta&lt;br /> - Release candidate&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>- Release&lt;/td>
&lt;td>- Release&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="release-stages---descriptions">Release stages - descriptions&lt;/h2>
&lt;h3 id="alpha-version-α">Alpha version (α)&lt;/h3>
&lt;p>An alpha (α) version is a pre-release version where functionality is not complete, and not fully tested. A clear description in the “version notes” (or similar) of which functionality is available, and which is not available, is required.&lt;/p>
&lt;p>Alpha quality in a function/component is not sufficient to permit distribution to external customers or users. An alpha version is used by other functions/components and products under development, for early integration and testing.&lt;/p>
&lt;h3 id="beta-versions">Beta Versions&lt;/h3>
&lt;p>There are two beta definitions: beta candidate and beta. Both are pre-release versions. The criteria for acceptance of the two beta versions are described in the following sections. The main differences between beta candidate and beta are described in the table below:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Beta candidate&lt;/th>
&lt;th>Beta&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>A beta candidate has full functionality, or close to full functionality. In cases when some functionality is missing, it should be well defined.&lt;/td>
&lt;td>A beta always has full functionality.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Beta candidates are intended for interim use as “internal betas”. They may also be used by internal/external test labs to build up a system environment when testing products and systems.&lt;/td>
&lt;td>A beta has higher quality level than a beta candidate and has undergone a longer test time, see
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a> for details.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>A beta candidate may in restricted cases be used at beta sites in limited and non-critical areas, for example during engineering work at a customer site.&lt;/td>
&lt;td>A beta may be used for shipments to defined beta sites.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="beta-candidate-version-of-a-product-βc">Beta candidate version of a product (βC)&lt;/h4>
&lt;p>A beta candidate version of a product (e.g. stand-alone product, product part of a system, or a system) has full functionality, or close to full functionality. A formal decision is required if the product is in the beta candidate stage or not, documented in the beta checklist
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/p>
&lt;p>The following criteria define the quality expected for the beta candidate release stage of a product:&lt;/p>
&lt;ol>
&lt;li>The product has full functionality, or close to full functionality according to the requirements and epics. In case of missing functionality, the scope of included and missing functionality in the beta candidate shall be well-defined and documented in &amp;ldquo;version notes&amp;rdquo; (or similar).&lt;/li>
&lt;li>A formal component test has been executed.&lt;/li>
&lt;li>An informal product test has been executed.&lt;/li>
&lt;li>Integration tests have been executed, including tests with other dependent products (if applicable).&lt;/li>
&lt;li>Hardware: informal hardware and firmware tests have been executed.&lt;/li>
&lt;li>User documentation, including the installation guide, is available as drafts.&lt;/li>
&lt;/ol>
&lt;h4 id="beta-version-of-a-product-β">Beta version of a product (β)&lt;/h4>
&lt;p>A beta version of a product (e.g. stand-alone product, product part of a system, or a system) has full functionality. A formal decision is required if the product is in the beta stage or not, documented in the beta checklist
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/p>
&lt;p>The following criteria define the quality expected for the beta release stage of a product:&lt;/p>
&lt;ol>
&lt;li>The product has full functionality according to the requirements and epics.&lt;/li>
&lt;li>All the above quality criteria for beta candidate versions are fulfilled.&lt;/li>
&lt;li>Digital code signing: the product is release signed (using external certificates).&lt;/li>
&lt;li>Pre-DSAC has been executed with findings documented and accepted.&lt;/li>
&lt;li>3rd party software OSS scan has been executed with findings documented and accepted.&lt;/li>
&lt;li>Cyber security assessment executed with findings documented and accepted.&lt;/li>
&lt;li>An informal product test has been executed with findings documented and accepted.&lt;/li>
&lt;li>An informal system test has been executed with findings documented and accepted.&lt;/li>
&lt;li>Start of product type test criteria are fulfilled
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/li>
&lt;li>Start of system type test criteria are fulfilled (if applicable)
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/li>
&lt;/ol>
&lt;p>To increase the test coverage, beta versions can be shared with customers who are selected as beta sites. Note that shipment of beta versions to customers shall always be done with the expressed understanding by the customer that the product is a beta version and any tests shall be executed in accordance with any beta test program instructions and shall be subject to conditions of use as described in a signed beta test agreement [2].&lt;/p>
&lt;h3 id="release-candidate-versions-rc--rc-hi">Release candidate versions (RC &amp;amp; RC HI)&lt;/h3>
&lt;p>A release candidate (RC) is the product version that is aimed to be released either as part of a system release or as a stand-alone product. All type tests are finished except the specified release acceptance test (RAT), standard regression test (SRT), and safety validation test (SVT).&lt;/p>
&lt;p>Release candidate high integrity (RC HI) is a proposed safety product version and in addition to the quality requirements for a release candidate shall also fulfill the quality requirements covered by the checkpoint for SVT (checklist for &amp;ldquo;start of test&amp;rdquo; is fulfilled, see ref.
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>).&lt;/p>
&lt;p>A formal decision is required if the product is in the release candidate stage or not, documented in the &amp;ldquo;Start of RAT&amp;rdquo; checklist
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/p>
&lt;p>The following criteria define the quality expected for the release candidate stage of a product:&lt;/p>
&lt;ol>
&lt;li>The product has full functionality according to the requirements and epics.&lt;/li>
&lt;li>All the above quality criteria for beta candidates and beta versions are fulfilled.&lt;/li>
&lt;li>DSAC has been executed.&lt;/li>
&lt;li>A formal product test has been executed.&lt;/li>
&lt;li>A formal system test has been executed.&lt;/li>
&lt;li>&amp;ldquo;Start of RAT&amp;rdquo; criteria are fulfilled
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h3 id="release-version">Release version&lt;/h3>
&lt;p>The release version is the final version ready for market release.
A formal decision is required if the product is ready for market release, documented in the internal validation acceptance (IVA) checklist
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/p>
&lt;p>The following criteria define the quality expected for the release version of a product:&lt;/p>
&lt;ol>
&lt;li>All the above quality criteria for beta candidate, beta and release candidate versions are fulfilled.&lt;/li>
&lt;li>IVA criteria are fulfilled
&lt;a href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank"
rel="noopener noreferrer" >3BSE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h3 id="criteria-for-external-delivery">Criteria for external delivery&lt;/h3>
&lt;p>A beta version or a release candidate version may be used for shipments to defined beta sites. Also, a beta candidate may in restricted cases be used at beta sites in limited and safe areas, for example during engineering work at a customer site.&lt;/p>
&lt;p>An external delivery outside R&amp;amp;D (to divisions or end customers) can have different designations, depending on the quality level, the targeted audience, and intended usage.&lt;/p>
&lt;p>The following criteria define the quality expected for an external delivery of a product:&lt;/p>
&lt;ol>
&lt;li>The above quality criteria for beta versions are fulfilled (or non-fulfilled items are accepted).&lt;/li>
&lt;li>Quality for beta shipment is fulfilled (verified through e.g. installation test, regression test, and specific customer use case tests)&lt;/li>
&lt;li>3rd-party software approved, OSS obligations fulfilled.&lt;/li>
&lt;li>Pre-DSAC has been executed.&lt;/li>
&lt;li>Export control classification (ECCN) approved.&lt;/li>
&lt;li>License handling: license/license file available for the receiver (e.g. demo license)&lt;/li>
&lt;li>Virus scanning (using virus scanners according to defined requirements).&lt;/li>
&lt;li>Hardware modules marked as beta components (e.g. non-removable marking/sticker).&lt;/li>
&lt;li>Ex: components to be Ex-certified must not have Ex-marking until the Ex-certification is granted.&lt;/li>
&lt;li>Safety: high integrity controller firmware shall either not be part of the delivery (for non-HI projects), or NON-CERT-marked (for HI projects). (CERT-marked controller firmware is only allowed to be distributed after explicit approval from the assessor).&lt;/li>
&lt;li>Beta indication/marking in software in about boxes, logs, and user interfaces (if applicable).&lt;/li>
&lt;li>Support strategy defined, and support organization trained.&lt;/li>
&lt;li>A beta agreement has been signed by the external receiver and by the internal accountable.&lt;/li>
&lt;li>“PA PCP Early Delivery” delivery request approved.&lt;/li>
&lt;li>HW delivery: Each component serial number is documented and stored in the “PA PCP Early Delivery” SharePoint site
&lt;a href="https://abb.sharepoint.com/sites/IAPCPEarlyDelivery/Lists/Request%20for%20early%20delivery/AllItems.aspx?OR=Teams%2DHL&amp;amp;CT=1644914097963&amp;amp;sourceId=&amp;amp;params=%7B%22AppName%22%3A%22Teams%2DDesktop%22%2C%22AppVersion%22%3A%2227%2F22010300409%22%7D" target="_blank"
rel="noopener noreferrer" >PA PCP Early Delivery - SharePoint site&lt;/a>.&lt;/li>
&lt;li>Software uploaded to the “PA PCP Early Delivery” -site.&lt;/li>
&lt;/ol>
&lt;h2 id="release-stage-definitions">Release stage definitions&lt;/h2>
&lt;p>The figure below shows the evolution of the different release stages throughout the project lifecycle and the alignment between the release stages and test phases.
This defines the criteria for each release stage. However, it is allowed to fulfill release stage criteria in an earlier stage, or in a combined release stage, which can be the case for products not part of a system, and products developed in a fully agile environment. If a product is released without going through the stages separately, all applicable release stage criteria must still be fulfilled before release.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/release/release-stages.drawio.png" alt="release-stages.drawio.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Each of the release stages is subject to the configuration change control process. Any changes made in a version such as a defect correction or improved functionality shall be handled as described in the process for configuration change control.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:x:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B96E8E9D0-5987-404C-9837-4A5E79C123E7%7D" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>SE061530 Checklist for Beta, IVA, and STT.xlsx&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B882E1E99-9236-4D7F-8A5D-F682F46E6B68%7D" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>SR000887 FIELD BETA - TEST AGREEMENT&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/IAPCPEarlyDelivery/Lists/Request%20for%20early%20delivery/AllItems.aspx?OR=Teams%2DHL&amp;amp;CT=1644914097963&amp;amp;sourceId=&amp;amp;params=%7B%22AppName%22%3A%22Teams%2DDesktop%22%2C%22AppVersion%22%3A%2227%2F22010300409%22%7D" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg> PCP Early Delivery - SharePoint site&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Scrum</title><link>/docs/guides/to-review-references/stream-and-team/scrum/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/stream-and-team/scrum/</guid><description>&lt;p>Scrum is a framework used by teams to manage their work. Scrum implements the principles of Agile as a concrete set of artifacts, practices, and roles.&lt;/p>
&lt;h2 id="the-scrum-lifecycle">The Scrum lifecycle&lt;/h2>
&lt;p>The following diagram details the iterative Scrum lifecycle. The entire lifecycle is completed in a fixed time box called a sprint. The sprint is typically 2-4 weeks long.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/scrum-1.png" alt="Scrum Lifecycle Diagram" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="scrum-roles">Scrum Roles&lt;/h2>
&lt;p>Scrum prescribes three specific roles.&lt;/p>
&lt;p>&lt;strong>Product Owner&lt;/strong>&lt;/p>
&lt;p>Responsible for what the team is building and why they are building it. The product owner is responsible for keeping the backlog up-to-date and in priority order.&lt;/p>
&lt;p>&lt;strong>Scrum Master&lt;/strong>&lt;/p>
&lt;p>Responsible to ensure the scrum process is followed by the team. Scrum masters are continually on the lookout for how the team can improve while also resolving impediments (blocking issues) that arise during the sprint. Scrum masters are part coach, part team member, and part cheerleader.&lt;/p>
&lt;p>&lt;strong>Scrum Team&lt;/strong>&lt;/p>
&lt;p>These are the individuals that build the product. The team owns the engineering of the product and the quality that goes with it.&lt;/p>
&lt;h2 id="product-backlog">Product Backlog&lt;/h2>
&lt;p>The Product Backlog is a prioritized list based on the value the team can deliver. The Product Owner owns the backlog and adds, changes, and reprioritizes as needed. The items at the top of the backlog should always be ready for the team to execute.&lt;/p>
&lt;h2 id="sprint-planning-and-sprint-backlog">Sprint Planning and Sprint Backlog&lt;/h2>
&lt;p>In Sprint Planning, the team chooses the backlog items they will work on in the upcoming sprint. The team chooses backlog items based on priority and what they believe they can complete in the sprint. The Sprint Backlog is the list of items the team plans to deliver in the sprint. Often, each item on the Sprint Backlog is broken down into tasks. Once all members agree that the Sprint Backlog is achievable, the sprint starts.&lt;/p>
&lt;h2 id="sprint-execution-and-daily-scrum">Sprint Execution and Daily Scrum&lt;/h2>
&lt;p>Once the sprint starts, the team executes the Sprint Backlog. Scrum does not specify how the team should execute. That is left for the team to decide.&lt;/p>
&lt;p>Scrum defines a practice called a Daily Scrum, often called the Daily Standup. The Daily Scrum is a daily meeting limited to 15 minutes. Team members often stand during the meeting to ensure it stays brief. Each team member briefly reports their progress since yesterday, the plans for today, and anything impeding their progress.&lt;/p>
&lt;p>To aid the Daily Scrum, teams often review two artifacts:&lt;/p>
&lt;h3 id="the-task-board">The Task Board&lt;/h3>
&lt;p>The task board lists each backlog item the team is working on, broken down into the tasks required to complete it. Tasks are placed in &amp;ldquo;To do&amp;rdquo;, &amp;ldquo;In progress&amp;rdquo;, and &amp;ldquo;Done&amp;rdquo; columns based on their status. It provides a visual way of tracking progress for each backlog item.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/stream-and-team/scrum-2.png" alt="Task Board" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="the-sprint-burndown">The Sprint Burndown&lt;/h3>
&lt;p>The sprint burndown is a graph that plots the daily total of remaining work. The remaining work is typically in hours. It provides a visual way of showing whether the team is on track to complete all the work by the end of the sprint.&lt;/p>
&lt;h2 id="sprint-review-and-sprint-retrospective">Sprint Review and Sprint Retrospective&lt;/h2>
&lt;p>At the end of the sprint, the team performs two practices:&lt;/p>
&lt;h3 id="sprint-review">Sprint Review&lt;/h3>
&lt;p>The team demonstrates what they have accomplished to stakeholders. They demo the software and show its value.&lt;/p>
&lt;h3 id="sprint-retrospective">Sprint Retrospective&lt;/h3>
&lt;p>The team takes time to reflect on what went well and which areas need improvement. The outcomes from the retrospective are actions for the next sprint.&lt;/p>
&lt;h2 id="increment">Increment&lt;/h2>
&lt;p>The product of a Sprint is called the &amp;ldquo;Increment&amp;rdquo; or &amp;ldquo;Potentially Shippable Increment&amp;rdquo;. Regardless of the term, a sprint’s output should be of shippable quality, even if it’s part of something bigger and can’t ship by itself. It should meet all the quality criteria set by the team and Product Owner.&lt;/p>
&lt;h2 id="repeat-learn-and-improve">Repeat, Learn, and Improve&lt;/h2>
&lt;p>The entire cycle is repeated for the next sprint. Sprint Planning selects the next items on the Product Backlog, and the cycle repeats. While the team is executing the sprint, the Product Owner is ensuring the items at the top of the backlog are ready to execute in the following sprint.&lt;/p>
&lt;p>This shorter, iterative cycle provides the team with lots of opportunities to learn and improve. A traditional project often has a long lifecycle, say 6-12 months. While a team can learn from a traditional project, the opportunities are far less than a team who executes in 2-week sprints, for example.&lt;/p>
&lt;p>This iterative cycle is, in many ways, the essence of Agile.&lt;/p>
&lt;p>Scrum is very popular because it provides just enough framework to guide teams while giving them flexibility in how they execute. Its concepts are simple and easy to learn. Teams can get started quickly and learn as they go. All of this makes Scrum a great choice for teams just starting to implement Agile principles.&lt;/p></description></item><item><title>Secure Coding Guideline</title><link>/docs/guides/to-review-references/software-development/secure-coding-guideline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/secure-coding-guideline/</guid><description>&lt;p>Secure coding standards are guidelines, best practices, and coding conventions that can be used by software developers to prevent security vulnerabilities and improve the overall quality of the software during the software design &amp;amp; development phases.&lt;/p>
&lt;p>The guidelines are intended as a reference and best practice guidelines complement static code analysis tools like Klocwork or Sonarqube. It can help address code smells and design vulnerabilities which are usually missed during static code analysis. It also ensures adherence to best practices and commonly accepted security standards.&lt;/p>
&lt;p>This wiki lists the secure coding guidelines followed within ABB. It also provides references to official and generic security best practices &amp;amp; software coding guidelines categorized based on programming language stacks.&lt;/p>
&lt;h2 id="abb-secure-coding-guidelines">ABB Secure Coding Guidelines&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/R%26D%20QMS/Cyber%20Security/3BSE084586_Secure%20Coding%20Guideline.docx?d=w78b350b0a8a14c069655796946a189cf&amp;amp;csf=1&amp;amp;web=1&amp;amp;e=PTsVIn" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>3BSE084586 Secure Coding Guideline&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="programming-language-specific-coding-guidelines">Programming Language-Specific Coding Guidelines&lt;/h2>
&lt;h3 id="c">C&lt;/h3>
&lt;h4 id="security-guidelines">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://wiki.sei.cmu.edu/confluence/display/c/SEI&amp;#43;CERT&amp;#43;C&amp;#43;Coding&amp;#43;Standard" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>SEI CERT C Coding Standard wiki&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://resources.sei.cmu.edu/downloads/secure-coding/assets/sei-cert-c-coding-standard-2016-v01.pdf" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>SEI CERT C Coding Standard pdf&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="c-1">C++&lt;/h3>
&lt;h4 id="security-guidelines-1">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://isocpp.org/wiki/faq/coding-standards#coding-std-wars" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>ISO C&amp;#43;&amp;#43; Core Guidelines&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://wiki.sei.cmu.edu/confluence/display/cplusplus" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>SEI Cert Secure Coding guidelines&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://www.misra.org.uk/shop/%29%20%28paid" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>MISRA C&amp;#43;&amp;#43; guides&lt;/span>&lt;/a>
&lt;/div>
&lt;h4 id="style-guides">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B1759C5DF-6512-4AB9-8FC7-136DBDA8FDC6%7D" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>ABB PA C&amp;#43;&amp;#43; Style guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B432799E4-74DE-427C-8326-C722B363DF91%7D" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>ABB PA ControlIT C&amp;#43;&amp;#43; Static Code Analysis Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://google.github.io/styleguide/cppguide.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60.436 60.436 0 0 0-.491 6.347A48.627 48.627 0 0 1 12 20.904a48.627 48.627 0 0 1 8.232-4.41a60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.57 50.57 0 0 0-2.658-.813A59.905 59.905 0 0 1 12 3.493a59.902 59.902 0 0 1 10.399 5.84a51.39 51.39 0 0 0-2.658.814m-15.482 0A50.697 50.697 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/>&lt;/svg>Google C&amp;#43;&amp;#43; Style guide&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="netc">.Net/C#&lt;/h3>
&lt;h4 id="security-guidelines-2">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://docs.microsoft.com/en-us/dotnet/standard/security/secure-coding-guidelines" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>.Net Secure coding guidelines&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://cheatsheetseries.owasp.org/cheatsheets/DotNet_Security_Cheat_Sheet.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>OWASP .Net security cheat sheet&lt;/span>&lt;/a>
&lt;/div>
&lt;h4 id="style-guides-1">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Microsoft C# coding conventions&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/:w:/r/sites/OnePCP-DMS/_layouts/15/Doc.aspx?sourcedoc=%7B263A6527-921E-4593-AFF5-BD633D7CBF05%7D" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>ABB PA C# Style guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://google.github.io/styleguide/csharp-style.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google Style guide&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="java">Java&lt;/h3>
&lt;h4 id="security-guidelines-3">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://docs.oracle.com/javase/10/security/toc.htm" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Java Security: developers guide - official&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://www.oracle.com/java/technologies/javase/seccodeguide.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Java Secure coding guidelines&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://wiki.sei.cmu.edu/confluence/display/java/SEI&amp;#43;CERT&amp;#43;Oracle&amp;#43;Coding&amp;#43;Standard&amp;#43;for&amp;#43;Java" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>SEI CERT Coding Standard for Java&lt;/span>&lt;/a>
&lt;/div>
&lt;h4 id="style-guides-2">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://github.com/openjdk/jdk/blob/master/doc/hotspot-style.md" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>OpenJDK Style Guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://google.github.io/styleguide/javaguide.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google Java Style Guide&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="javascript">JavaScript&lt;/h3>
&lt;h4 id="security-guidelines-4">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://github.com/Checkmarx/JS-SCP/blob/master/dist/js-webapp-scp.pdf" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>JavaScript Secure coding practices&lt;/span>&lt;/a>
&lt;/div>
&lt;h4 id="style-guides-3">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://google.github.io/styleguide/jsguide.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google JavaScript Style Guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://github.com/airbnb/javascript" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Airbnb JavaScript Style Guide&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="typescript">TypeScript&lt;/h3>
&lt;h4 id="style-guides-4">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://google.github.io/styleguide/tsguide.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google Style Guide - Typescript&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="angularjs">AngularJS&lt;/h3>
&lt;h4 id="security-guidelines-5">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://angular.io/guide/security" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Official Angular security best practices&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://angular.io/api/platform-browser/DomSanitizer" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Angular docs on DomSanitizer&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://angular.io/guide/http#security-xsrf-protection" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Angular docs on XSRF protection&lt;/span>&lt;/a>
&lt;/div>
&lt;h4 id="style-guides-5">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://angular.io/guide/styleguide" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Angular style guide&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="reactjs">ReactJS&lt;/h3>
&lt;h4 id="security-guidelines-6">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://reactresources.com/topics/security" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>ReactJS Security guides&lt;/span>&lt;/a>
&lt;/div>
&lt;h4 id="style-guides-6">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://github.com/airbnb/javascript/tree/master/react" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Airbnb React Style guide&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="go">Go&lt;/h3>
&lt;h4 id="security-guidelines-7">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://github.com/OWASP/Go-SCP/blob/master/dist/go-webapp-scp.pdf" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Go Secure Coding Guideline-OWASP&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="python">Python&lt;/h3>
&lt;h4 id="style-guides-7">Style Guides&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://www.python.org/dev/peps/pep-0008/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Python style guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://google.github.io/styleguide/pyguide.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google Style guide-Python&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="perl">Perl&lt;/h3>
&lt;h4 id="security-guidelines-8">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://wiki.sei.cmu.edu/confluence/display/perl/SEI&amp;#43;CERT&amp;#43;Perl&amp;#43;Coding&amp;#43;Standard" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>SEI CERT Perl Coding Standard&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="android">Android&lt;/h3>
&lt;h4 id="security-guidelines-9">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://wiki.sei.cmu.edu/confluence/display/android/Android&amp;#43;Secure&amp;#43;Coding&amp;#43;Standard" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Android Secure coding standard&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="nodejs">NodeJS&lt;/h3>
&lt;h4 id="security-guidelines-10">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://github.com/lirantal/nodejssecurity/blob/master/manuscript/secure-code-guidelines.md" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>NodeJS Security Guidelines&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="docker">Docker&lt;/h3>
&lt;h4 id="security-guidelines-11">Security Guidelines&lt;/h4>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>OWASP Docker security cheat sheet&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="cloud">Cloud&lt;/h3>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://docs.microsoft.com/en-us/azure/security/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Microsoft Azure&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://cloud.google.com/security/best-practices" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google Cloud&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://docs.aws.amazon.com/security/?secd_intro2" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>AWS&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="rest">REST&lt;/h3>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://github.com/microsoft/api-guidelines/blob/vNext/Guidelines.md" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Microsoft REST API Guidelines&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="security-best-practices--guidelines">Security Best Practices &amp;amp; Guidelines&lt;/h2>
&lt;p>The below links point to generic security best practice guidelines and recommendations that can be referred to during the software design and development phases.&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://rules.sonarsource.com/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>SonarSource Security Rules&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://www.microsoft.com/en-us/securityengineering/sdl/resources" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Microsoft Secure Development Lifecycle&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://www.securityknowledgeframework.org/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Security Knowledge Framework&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://www.sans.org/top25-software-errors/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>CWE/SANS TOP 25 Most Dangerous Software Errors&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://cwe.mitre.org/top25/archive/2021/2021_cwe_top25.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>CWE Top 25 Vulnerabilities&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>OWASP Secure Coding Practices - Quick Reference Guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://cheatsheetseries.owasp.org/index.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>OWASP Cheat Sheets&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://github.com/dotnet/announcements/issues?q=is%3Aopen&amp;#43;is%3Aissue&amp;#43;label%3ASecurity" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Microsoft CVE Vulnerabilities&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://developers.google.com/web/fundamentals/security" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google Web Security Guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://github.com/google/styleguide" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Google Style guides&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Secure Coding Guideline, .NET</title><link>/docs/guides/to-review-references/software-development/secure-coding-guideline-dotnet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/secure-coding-guideline-dotnet/</guid><description>&lt;p>This document describes the secure coding guidelines for the .NET programming language. Some of the guidelines are generic, whereas some are specific to the .NET programming language.&lt;/p>
&lt;h2 id="net-framework-guidance">.Net Framework Guidance&lt;/h2>
&lt;h3 id="data-access">Data Access&lt;/h3>
&lt;ul>
&lt;li>Use Parameterized SQL commands for all data access, without exception.&lt;/li>
&lt;li>Do not use &lt;code>SqlCommand&lt;/code> with a string parameter made up of a concatenated SQL String.&lt;/li>
&lt;li>Whitelist allowable values coming from the user. Use &lt;code>enums&lt;/code>, &lt;code>TryParse&lt;/code>, or &lt;code>lookup&lt;/code> values to assure that the data coming from the user is as expected.
&lt;ul>
&lt;li>&lt;code>Enums&lt;/code> are still vulnerable to unexpected values because .NET only validates a successful cast to the underlying data type, integer by default. &lt;code>Enum.IsDefined&lt;/code> can validate whether the input value is valid within the list of defined constants.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Apply the principle of least privilege when setting up the Database User in your database of choice. The database user should only be able to access items that make sense for the use case.&lt;/li>
&lt;li>The use of the Entity Framework is a very effective SQL injection prevention mechanism. Remember that building your own ad hoc queries in EF is just as susceptible to SQLi as a plain SQL query.&lt;/li>
&lt;li>When using SQL Server, prefer integrated authentication over SQL authentication.&lt;/li>
&lt;li>Use &lt;code>Always Encrypted&lt;/code> where possible for sensitive data (SQL Server 2016 and SQL Azure),&lt;/li>
&lt;/ul>
&lt;h3 id="encryption">Encryption&lt;/h3>
&lt;ul>
&lt;li>Never, ever write your own encryption.&lt;/li>
&lt;li>Use the Windows Data Protection API (DPAPI) for secure local storage of sensitive data.&lt;/li>
&lt;li>Use a strong hash algorithm.
&lt;ul>
&lt;li>In .NET (both Framework and Core), the strongest hashing algorithm for general hashing requirements is &lt;code>System.Security.Cryptography.SHA512&lt;/code>.&lt;/li>
&lt;li>In the .NET framework, the strongest algorithm for password hashing is PBKDF2, implemented as System.&lt;code>Security.Cryptography.Rfc2898DeriveBytes&lt;/code>.&lt;/li>
&lt;li>In .NET Core, the strongest algorithm for password hashing is PBKDF2, implemented as Microsoft.&lt;code>AspNetCore.Cryptography.KeyDerivation.Pbkdf2&lt;/code>, which has several significant advantages over &lt;code>Rfc2898DeriveBytes&lt;/code>.&lt;/li>
&lt;li>When using a hashing function to hash non-unique inputs such as passwords, use a salt value added to the original value before hashing.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Make sure your application or protocol can easily support a future change in cryptographic algorithms.&lt;/li>
&lt;li>Use Nuget to keep all of your packages up to date. Watch the updates on your development setup, and plan updates to your applications accordingly.&lt;/li>
&lt;/ul>
&lt;h3 id="general">General&lt;/h3>
&lt;ul>
&lt;li>Lockdown the config file.
&lt;ul>
&lt;li>Remove all aspects of configuration that are not in use.&lt;/li>
&lt;li>Encrypt sensitive parts of the web.config using &lt;code>aspnet_regiis -pe&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>For Click Once applications, the .Net Framework should be upgraded to use version 4.6.2 to ensure TLS 1.1/1.2 support.&lt;/li>
&lt;/ul>
&lt;h2 id="securing-state-data">Securing State Data&lt;/h2>
&lt;p>Applications that handle sensitive data or make any kind of security decisions need to keep that data under their own control and cannot allow other potentially malicious code to access the data directly. The best way to protect data in memory is to declare the data as private or internal (with a scope limited to the same assembly) variables. However, even if this data is subject to access you should be aware of:&lt;/p>
&lt;ul>
&lt;li>Using reflection mechanisms, highly trusted code that can reference your object can get and set private members.&lt;/li>
&lt;li>Using serialization, highly trusted code can effectively get and set private members if it can access the corresponding data in the serialized form of the object.&lt;/li>
&lt;li>Under debugging, this data can be read.&lt;/li>
&lt;/ul>
&lt;p>Make sure none of your methods or properties exposes these values unintentionally.&lt;/p>
&lt;h2 id="security-and-user-input">Security and User Input&lt;/h2>
&lt;p>User data, which is any kind of input (data from a Web request or URL, input to controls of a Microsoft Windows Forms application, and so on), can adversely influence code because often that data is used directly as parameters to call other code. This situation is analogous to malicious code calling your code with strange parameters, and the same precautions should be taken. User input is harder to make safe because there is no stack frame to trace the presence of potentially untrusted data.&lt;/p>
&lt;p>These are among the subtlest and hardest security bugs to find because, although they can exist in code that is seemingly unrelated to security, they are a gateway to pass bad data through to other code. To look for these bugs, follow any kind of input data, imagine what the range of possible values might be, and consider whether the code seeing this data can handle all those cases. You can fix these bugs through range checking and rejecting any input the code cannot handle.&lt;/p>
&lt;p>Some important considerations involving user data include the following:&lt;/p>
&lt;ul>
&lt;li>Any user data in a server response runs in the context of the server&amp;rsquo;s site on the client. If your Web server takes user data and inserts it into the returned Web page, it might, for example, include a &amp;lt;script&amp;gt; tag and run as if from the server.&lt;/li>
&lt;li>Remember that the client can request any URL.&lt;/li>
&lt;li>Consider tricky or invalid paths:
&lt;ul>
&lt;li>&lt;code>..\&lt;/code>, extremely long paths.&lt;/li>
&lt;li>Use of wild card characters (*).&lt;/li>
&lt;li>Token expansion (%token%).&lt;/li>
&lt;li>Strange forms of paths with special meaning.&lt;/li>
&lt;li>Alternate file system stream names such as filename::$DATA.&lt;/li>
&lt;li>Short versions of file names such as &lt;code>longfi~1&lt;/code> for &lt;code>longfilename&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Remember that &lt;code>Eval(userdata)&lt;/code> can do anything.&lt;/li>
&lt;li>Be wary of late binding to a name that includes some user data.&lt;/li>
&lt;li>If you are dealing with Web data, consider the various forms of escapes that are permissible, including:
&lt;ul>
&lt;li>Hexadecimal escapes (%nn).&lt;/li>
&lt;li>Unicode escapes (%nnn).&lt;/li>
&lt;li>Overlong UTF-8 escapes (%nn%nn).&lt;/li>
&lt;li>Double escapes (%nn becomes %mmnn, where %mm is the escape for &amp;lsquo;%&amp;rsquo;).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Be wary of user names that might have more than one canonical format. For example, you can often use either the MYDOMAIN\username form or the
&lt;a href="mailto:username@mydomain.example.com" >username@mydomain.example.com&lt;/a> form.&lt;/li>
&lt;/ul>
&lt;h2 id="security-and-race-conditions">Security and Race Conditions&lt;/h2>
&lt;p>Another area of concern is the potential for security holes exploited by race conditions. There are several ways in which this might happen. The subtopics that follow outline some of the major pitfalls that the developer must avoid.&lt;/p>
&lt;h3 id="race-conditions-in-the-dispose-method">Race Conditions in the Dispose Method&lt;/h3>
&lt;p>If a class&amp;rsquo;s &lt;code>Dispose&lt;/code> method (for more information, see Garbage Collection) is not synchronized, the cleanup code inside &lt;code>Dispose&lt;/code> can be run more than once, as shown in the following example.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">void&lt;/span> &lt;span class="n">Dispose&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">myObj&lt;/span> &lt;span class="p">!=&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Cleanup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">myObj&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">myObj&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Because this Dispose implementation is not synchronized, it is possible for Cleanup to be called by the first thread and then a second thread before &lt;code>_myObj&lt;/code> is set to null. Whether this is a security concern depends on what happens when the Cleanup code runs.&lt;/p>
&lt;p>A major issue with unsynchronized Dispose implementations involves the use of resource handles such as files. Improper disposal can cause the wrong handle to be used, which often leads to security vulnerabilities.&lt;/p>
&lt;h3 id="race-conditions-in-constructors">Race Conditions in Constructors&lt;/h3>
&lt;p>In some applications, it might be possible for other threads to access class members before their class constructors have completely run. You should review all class constructors to make sure that there are no security issues if this should happen or synchronize threads if necessary.&lt;/p>
&lt;h3 id="race-conditions-with-cached-objects">Race Conditions with Cached Objects&lt;/h3>
&lt;p>Code that caches security information or uses the code access security Assert operation might also be vulnerable to race conditions if other parts of the class are not appropriately synchronized, as shown in the following example.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">void&lt;/span> &lt;span class="n">SomeSecureFunction&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">SomeDemandPasses&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fCallersOk&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DoOtherWork&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fCallersOk&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">void&lt;/span> &lt;span class="n">DoOtherWork&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">fCallersOK&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DoSomethingTrusted&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DemandSomething&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DoSomethingTrusted&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If there are other paths to &lt;code>DoOtherWork&lt;/code> that can be called from another thread with the same object, an untrusted caller can slip past a demand.&lt;/p>
&lt;p>If your code caches security information, make sure that you review it for this vulnerability.&lt;/p>
&lt;h3 id="race-conditions-in-finalizers">Race Conditions in Finalizers&lt;/h3>
&lt;p>Race conditions can also occur in an object that references a static or unmanaged resource that it then frees in its finalizer. If multiple objects share a resource that is manipulated in a class&amp;rsquo;s finalizer, the objects must synchronize all access to that resource.&lt;/p>
&lt;h2 id="security-and-on-the-fly-code-generation">Security and On-the-Fly Code Generation&lt;/h2>
&lt;p>Some libraries operate by generating code and running it to perform some operations for the caller. The basic problem is generating code on behalf of lesser-trust code and running it at a higher trust. The problem worsens when the caller can influence code generation, so you must ensure that only code you consider safe is generated.&lt;/p>
&lt;p>You need to know exactly what code you are generating at all times. This means that you must have strict controls on any values that you get from a user, be they quote-enclosed strings (which should be escaped so they cannot include unexpected code elements), identifiers (which should be checked to verify that they are valid identifiers), or anything else. Identifiers can be dangerous because a compiled assembly can be modified so that its identifiers contain strange characters, which will probably break it (although this is rarely a security vulnerability).&lt;/p>
&lt;p>It is recommended that you generate code with reflection emit, which often helps you avoid many of these problems.&lt;/p>
&lt;p>When you compile the code, consider whether there is some way a malicious program could modify it. Is there a small window of time during which malicious code can change source code on disk before the compiler reads it or before your code loads the .dll file? If so, you must protect the directory containing these files, using an Access Control List in the file system, as appropriate.&lt;/p>
&lt;h2 id="role-based-security">Role-Based Security&lt;/h2>
&lt;p>Roles are often used in financial or business applications to enforce a policy. For example, an application might impose limits on the size of the transaction being processed depending on whether the user making the request is a member of a specified role. Clerks might have the authorization to process transactions that are less than a specified threshold, supervisors might have a higher limit, and vice presidents might have a still higher limit (or no limit at all). Role-based security can also be used when an application requires multiple approvals to complete an action. Such a case might be a purchasing system in which an employee can generate a purchase request, but only a purchasing agent can convert that request into a purchase order that can be sent to a supplier.&lt;/p>
&lt;p>.NET Framework role-based security supports authorization by making information about the principal, which is constructed from an associated identity, available to the current thread. The identity (and the principal it helps to define) can be either based on a Windows account or be a custom identity unrelated to a Windows account. .NET Framework applications can make authorization decisions based on the principal&amp;rsquo;s identity or role membership or both. A role is a named set of principals that have the same security privileges (such as a teller or a manager). A principal can be a member of one or more roles. Therefore, applications can use role membership to determine whether a principal is authorized to perform the requested action.&lt;/p>
&lt;p>To provide ease of use and consistency with code access security, the .NET Framework role-based security provides &lt;code>System.Security.Permissions.PrincipalPermission&lt;/code> objects that enable the common language runtime to perform authorization in a way that is similar to code access security checks. The PrincipalPermission class represents the identity or role that the principal must match and is compatible with both declarative and imperative security checks. You can also access a principal&amp;rsquo;s identity information directly and perform role and identity checks in your code when needed.&lt;/p>
&lt;p>The .NET Framework provides role-based security support that is flexible and extensible enough to meet the needs of a wide spectrum of applications. You can choose to interoperate with existing authentication infrastructures, such as COM+ 1.0 Services, or to create a custom authentication system. Role-based security is particularly well-suited for use in ASP.NET Web applications, which are processed primarily on the server. However, .NET Framework role-based security can be used on either the client or the server.&lt;/p>
&lt;h2 id="securing-resource-access">Securing resource access&lt;/h2>
&lt;p>When designing and writing your code, you need to protect and limit the access that code has to resources, especially when using or invoking code of unknown origin. So, keep in mind the following techniques to ensure your code is secure:&lt;/p>
&lt;ul>
&lt;li>Do not use Code Access Security (CAS).&lt;/li>
&lt;li>Do not use partially trusted code.&lt;/li>
&lt;li>Do not use the AllowPartiallyTrustedCaller attribute (APTCA).&lt;/li>
&lt;li>Do not use .NET Remoting.&lt;/li>
&lt;li>Do not use Distributed Component Object Model (DCOM).&lt;/li>
&lt;li>Do not use binary formatters.&lt;/li>
&lt;/ul>
&lt;p>Code Access Security and Security-Transparent Code are not supported as a security boundary with partially trusted code. We advise against loading and executing code of unknown origins without putting alternative security measures in place. The alternative security measures are:&lt;/p>
&lt;ul>
&lt;li>Virtualization&lt;/li>
&lt;li>AppContainers&lt;/li>
&lt;li>Operating System (OS) users and permissions&lt;/li>
&lt;li>Hyper-V containers&lt;/li>
&lt;/ul>
&lt;h2 id="external-references">External References&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://docs.microsoft.com/en-us/dotnet/standard/security/index" target="_blank"
rel="noopener noreferrer" >https://docs.microsoft.com/en-us/dotnet/standard/security/index&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://blogs.msdn.microsoft.com/wriju/2008/03/26/the-developer-highway-code-free-e-book/" target="_blank"
rel="noopener noreferrer" >https://blogs.msdn.microsoft.com/wriju/2008/03/26/the-developer-highway-code-free-e-book/&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/sa4se9bc%28v%3dvs.100%29" target="_blank"
rel="noopener noreferrer" >https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/sa4se9bc%28v%3dvs.100%29&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/8a3x2b7f%28v%3dvs.100%29" target="_blank"
rel="noopener noreferrer" >https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/8a3x2b7f%28v%3dvs.100%29&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://owasp.org/www-project-secure-coding-practices-quick-reference-guide" target="_blank"
rel="noopener noreferrer" >https://owasp.org/www-project-secure-coding-practices-quick-reference-guide&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.codeproject.com/articles/13086/%2fArticles%2f13086%2fSecure-Coding-Guidelines" target="_blank"
rel="noopener noreferrer" >https://www.codeproject.com/articles/13086/%2fArticles%2f13086%2fSecure-Coding-Guidelines&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://docs.microsoft.com/en-us/dotnet/standard/security/secure-coding-guidelines" target="_blank"
rel="noopener noreferrer" >https://docs.microsoft.com/en-us/dotnet/standard/security/secure-coding-guidelines&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://docs.microsoft.com/en-us/dotnet/standard/security/index" target="_blank"
rel="noopener noreferrer" >https://docs.microsoft.com/en-us/dotnet/standard/security/index&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://wiki.sei.cmu.edu/confluence/display/seccode/Top&amp;#43;10&amp;#43;Secure&amp;#43;Coding&amp;#43;Practices" target="_blank"
rel="noopener noreferrer" >https://wiki.sei.cmu.edu/confluence/display/seccode/Top+10+Secure+Coding+Practices&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://process-assets.in.abb.com/incrc/docs/prd/eng/imp/ENG_IMP_GDL_9ARD4-004_CSharp_Style_Guideline.pdf" target="_blank"
rel="noopener noreferrer" >https://process-assets.in.abb.com/incrc/docs/prd/eng/imp/ENG_IMP_GDL_9ARD4-004_CSharp_Style_Guideline.pdf&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Secure Coding Guideline, C</title><link>/docs/guides/to-review-references/software-development/secure-coding-guideline-c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/secure-coding-guideline-c/</guid><description>&lt;p>This document describes the secure coding guidelines for the C programming language. Some of the guidelines are generic, whereas some of them are specific to the C programming language.&lt;/p>
&lt;h2 id="code-priority-classification">Code Priority Classification&lt;/h2>
&lt;p>Courtesy: Microsoft SDL documentation.&lt;/p>
&lt;p>The source code being developed or reviewed should be classified as below.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Code Priority&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tr>
&lt;td>Priority 1&lt;/td>
&lt;td>
&lt;ul>
&lt;li>All Internet or network-facing code.&lt;/li>
&lt;li>Code in the Trusted Computing Base (TCB) (for example, code executing in kernel mode).&lt;/li>
&lt;li>Code running under root account.&lt;/li>
&lt;li>Code running as an elevated user&lt;/li>
&lt;li>Any code that handles secret data, such as encryption keys and passwords.&lt;/li>
&lt;li>All code-supporting functionality is exposed on the maximum attack surface&lt;/li>
&lt;/ul>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Priority 2&lt;/td>
&lt;td>
&lt;ul>
&lt;li>Code that runs under a non-root account&lt;/li>
&lt;/ul>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Priority 3&lt;/td>
&lt;td>
&lt;ul>
&lt;li>Test scripts, automation scripts&lt;/li>
&lt;/ul>
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h2 id="security-bugs">Security Bugs&lt;/h2>
&lt;h3 id="security-bug-bar">Security Bug Bar&lt;/h3>
&lt;p>Courtesy: Microsoft SDL documentation
&lt;a href="https://docs.microsoft.com/en-us/previous-versions/windows/desktop/cc307404%28v=msdn.10%29" target="_blank"
rel="noopener noreferrer" >here&lt;/a>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Classification&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tr>
&lt;td>Critical&lt;/td>
&lt;td>
&lt;p>Elevation of privilege: The ability to either execute arbitrary code or obtain more privilege than authorized.&lt;/p>
&lt;p>Remote anonymous users.&lt;/p>
&lt;p>&lt;strong>Examples&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Unauthorized file system access: arbitrary writing to the file system&lt;/li>
&lt;li>Execution of arbitrary code&lt;/li>
&lt;li>SQL injection (that allows code execution)&lt;/li>
&lt;li>All write access violations (AV), exploitable read AVs, or integer overflows in remote anonymously callable code&lt;/li>
&lt;/ul>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>High&lt;/td>
&lt;td>
&lt;ul>
&lt;li>Code that runs under a non-root account&lt;/li>
&lt;/ul>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Priority 3&lt;/td>
&lt;td>
&lt;ul>
&lt;li>Test scripts, automation scripts&lt;/li>
&lt;/ul>
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3 id="security-bug-classification">Security Bug classification&lt;/h3>
&lt;h2 id="generic">Generic&lt;/h2>
&lt;h2 id="c-secure-coding-guidelines">C secure coding guidelines&lt;/h2>
&lt;h3 id="introduction">Introduction&lt;/h3>
&lt;p>C has been intensely criticized as an insecure programming language. Despite the many vulnerabilities attributed to buffer overflows and point manipulation, secure code can still be developed with C.&lt;/p>
&lt;p>This document summarizes the common guidelines for C. Further details and other guidelines are available in the CERT C Secure Coding Standard. In addition to this document, you should utilize Klocwork (a static analyzer for which ABB has an enterprise license) to analyze your code. Review the general coding guidelines for aspects such as input validation and resource management.&lt;/p>
&lt;h3 id="avoid-unsafe-methods">Avoid Unsafe Methods&lt;/h3>
&lt;p>Avoid using unsafe methods such as &lt;code>gets()&lt;/code>, &lt;code>strcat()&lt;/code>, and &lt;code>strcpy()&lt;/code>. These methods do not check boundaries when copying data to the destination. As such, it becomes possible to insert arbitrary code into the system.&lt;/p>
&lt;h3 id="header-files">Header Files&lt;/h3>
&lt;h4 id="use-parenthesis-within-macros-around-parameter-names">Use parenthesis within macros around parameter names&lt;/h4>
&lt;p>When defining macros, parenthesis should surround any parameters, except in a list separated by commas. This prevents issues with unexpected operator precedence when such macros are expanded.
(CERT C, PRE-01-C)&lt;/p>
&lt;h4 id="macros-should-not-end-with-a-semi-colon">Macros should not end with a semi-colon&lt;/h4>
&lt;p>When a macro ends with a semi-colon, it can lead to an empty statement being produced for the output, affecting the intended output.
(CERT C, PRE-11-C)&lt;/p>
&lt;h3 id="declarations-and-initialization">Declarations and Initialization&lt;/h3>
&lt;h4 id="variable-arguments">Variable Arguments&lt;/h4>
&lt;p>When feasible, avoid the use of variable argument functions. If such functions are necessary, ensure the “contract” between caller and callee is maintained.
(CERT C, DCL-10,11)&lt;/p>
&lt;h4 id="declare-zero-parameters-functions-with-void">Declare Zero Parameters Functions with Void&lt;/h4>
&lt;p>For functions that do not take any parameters, declare these with a “void” parameter. This will force compiler warnings if such a function is called with parameters.
(CERT C, DCL-20)&lt;/p>
&lt;h3 id="expressions">Expressions&lt;/h3>
&lt;h4 id="parenthesis">Parenthesis&lt;/h4>
&lt;p>Use parentheses to ensure proper precedence with operations.
(CERT C, EXP00-C)&lt;/p>
&lt;h4 id="type-sizes">Type Sizes&lt;/h4>
&lt;p>Do not use the size of a pointer to assume that it is the same size as the associated type. Do not assume the size of a structure is the sum of the size of the members.
(CERT C, EXP01-C, EXP-03C)&lt;/p>
&lt;h4 id="pointer-arithmetic">Pointer Arithmetic&lt;/h4>
&lt;p>Ensure pointer arithmetic is used properly. Otherwise, the wrong memory address is referenced.
(CERT C, EXP-08-C)&lt;/p>
&lt;h3 id="integers">Integers&lt;/h3>
&lt;h3 id="define-integer-constants-safely">Define Integer Constants Safely&lt;/h3>
&lt;p>Integer constants are often used to specify bit-masks and other boundary checks. As the size of integers can vary across platforms, constants should be specified in a platform-independent manner.
(CERT C, INT-17-C)&lt;/p>
&lt;h3 id="floating-point">Floating Point&lt;/h3>
&lt;h4 id="understand-floating-point-limitations">Understand Floating Point Limitations&lt;/h4>
&lt;p>Floating-point numbers have finite precision and are prone to errors with rounding. If exact values are needed, then another type should be selected. Additionally, no guarantees on the underlying specifics of the floating-point system exist, so no assumptions should be made on the precision and/or range.
(CERT C, FLP-00-C)&lt;/p>
&lt;h3 id="arrays">Arrays&lt;/h3>
&lt;h4 id="do-not-use-the-sizeof-operator-to-the-array-pointer">Do not use the &lt;code>sizeof&lt;/code> operator to the array pointer&lt;/h4>
&lt;p>This returns the size of the pointer itself rather than the data structure it references.
(CERT C, ARR-01-C)&lt;/p>
&lt;h4 id="check-array-boundaries">Check Array Boundaries&lt;/h4>
&lt;p>Ensure that you only access legitimate portions of the array. Array indexing starts at zero. This is especially critical when expressions are used to index the array.&lt;/p>
&lt;h3 id="strings">Strings&lt;/h3>
&lt;p>A multitude of security issues has arisen from C’s poor implementation of strings. Issues exist among the representation, management, and manipulation of C-style strings. For representation, the strings are null-terminated. Thus it is necessary to scan the entire string to find the length or last location.&lt;/p>
&lt;p>While strings can also be managed by using standard, well-proven functions of &lt;code>malloc()&lt;/code>, &lt;code>free()&lt;/code>, &lt;code>strlen()&lt;/code>, &lt;code>memcpy()&lt;/code>, and &lt;code>snprintf()&lt;/code>, these functions can be difficult to use correctly in practice and have poor abstractions compared to languages such as Java and C#. The edge security team relies on CSA safe string functions. E.g., &lt;code>CSA_StrLen&lt;/code> should be used instead of &lt;code>strlen&lt;/code>, and &lt;code>OSA_snprintf&lt;/code> should be used instead of &lt;code>sprintf&lt;/code>.&lt;/p>
&lt;h4 id="check-string-bounds">Check String Bounds&lt;/h4>
&lt;p>When implementing strings, use functions that check the string boundaries to overflow issues.&lt;/p>
&lt;h3 id="memory">Memory&lt;/h3>
&lt;p>Memory management is one of the more difficult tasks to correctly implement within C programs. Any time memory is allocated, you must ensure the memory is deallocated when no longer required. Consider using a library to track your memory usage while the application executes. Once the memory is allocated, you will need to initialize it. Once you have freed memory, you should no longer access it.&lt;/p>
&lt;h3 id="input--output">Input / Output&lt;/h3>
&lt;p>All open files should be closed when no longer in use. Ensure when opening files specified by a user that the name is valid and isn’t being referenced to a location that should not otherwise be accessed. E.g., using “..” to move up the directory structure to a new file location. When creating an output format string, ensure that it is properly formatted – especially if such a string originated from the user.&lt;/p>
&lt;h3 id="environment">Environment&lt;/h3>
&lt;h4 id="avoid-system">Avoid System()&lt;/h4>
&lt;p>Where possible, avoid the use of the &lt;code>system()&lt;/code> to call executable programs. Either user existing C functions if possible or exec().
(CERT-C ENV04-C)&lt;/p>
&lt;h4 id="signals">Signals&lt;/h4>
&lt;p>Avoid using signals to implement normal functionality or flow of control. Ensure code accessed within signal handlers is thread-safe, does not access shared memory, and is asynchronous-safe. Many common standard libraries such as &lt;code>free()&lt;/code> and &lt;code>fprintf()&lt;/code> are not appropriate to use within signal handlers.
(CERT-C SIG00-C, CERT-CSIG30-C)&lt;/p>
&lt;p>Error Handling:&lt;/p>
&lt;p>Return values from all functions should be checked, with the error handling functionality implemented correctly.&lt;/p>
&lt;p>Link to common return values:
&lt;a href="https://wiki.sei.cmu.edu/confluence/display/c/ERR33-C.&amp;#43;Detect&amp;#43;and&amp;#43;handle&amp;#43;standard&amp;#43;library&amp;#43;errors" target="_blank"
rel="noopener noreferrer" >https://wiki.sei.cmu.edu/confluence/display/c/ERR33-C.+Detect+and+handle+standard+library+errors&lt;/a>.
(CERT-C, ERR33-C)&lt;/p>
&lt;h3 id="concurrency">Concurrency&lt;/h3>
&lt;p>Applications often have multiple threads of control. Care must be taken to ensure shared resources such as memory are appropriately protected by synchronization mechanisms to ensure the application stays within a consistent state.&lt;/p>
&lt;p>Wikipedia
&lt;a href="https://en.wikipedia.org/wiki/Synchronization_%28computer_science%29" target="_blank"
rel="noopener noreferrer" >https://en.wikipedia.org/wiki/Synchronization_(computer_science)&lt;/a> presents several of the common synchronization methods. These methods are often unique to a particular operating system, although the POSIX Thread library has been established as a standard. A good overview of threads is available at
&lt;a href="https://hpc-tutorials.llnl.gov/posix/" target="_blank"
rel="noopener noreferrer" >https://hpc-tutorials.llnl.gov/posix/&lt;/a>.&lt;/p></description></item><item><title>Secure Coding Guideline, ReactJS</title><link>/docs/guides/to-review-references/software-development/secure-coding-guideline-reactjs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/secure-coding-guideline-reactjs/</guid><description>&lt;p>This document describes the secure coding guidelines for ReactJS. Some of the guidelines are generic, whereas others are specific to ReactJS.&lt;/p>
&lt;h2 id="reactjs-framework-guidance">ReactJS Framework Guidance&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Input validation – It should handle validations on the presentation and application layers for user inputs to prevent injection attacks rather than implementing complex custom validations.&lt;/p>
&lt;p>Ex - Validating e-mail addresses using the Validator.js library&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">validator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;validator&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">isValidEmail&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">validator&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">isEmail&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;foo@bar.com&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>Output encoding — Data passing from the backend to the UI should be encoded or sanitized properly from malicious payloads. If it&amp;rsquo;s not encoded properly, potential security threats should occur while loading the UI.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>While rendering the user name on UI, the hacker will execute and inject the script.
So, to prevent this, a proper encoding library should be used.&lt;/p>
&lt;p>Example – using the &lt;code>node-esapi&lt;/code> library&lt;/p>
&lt;p>Encoding output in the context of HTML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">esapi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;node-esapi&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">esapiEncoder&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">esapi&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">encoder&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">htmlOutput&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">esapiEncoder&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">encodeForHTML&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&amp;lt;div&amp;gt; User Name &amp;lt;script type=&amp;#34;javascript&amp;#34;&amp;gt; alert(&amp;#34;Your site hacked!&amp;#34;) &amp;lt;/script&amp;gt; &amp;lt;/div&amp;gt;&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The result of &lt;code>htmlOutput&lt;/code> will be encoded appropriately to escape the malicious script tags:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl"> &lt;span class="ni">&amp;amp;lt;&lt;/span>div&lt;span class="ni">&amp;amp;gt;&lt;/span> User Name &lt;span class="ni">&amp;amp;#x21;&lt;/span> &lt;span class="ni">&amp;amp;lt;&lt;/span>script type&lt;span class="ni">&amp;amp;#x3d;&amp;amp;quot;&lt;/span>javascript&lt;span class="ni">&amp;amp;quot;&amp;amp;gt;&lt;/span> alert&lt;span class="ni">&amp;amp;#x28;&amp;amp;quot;&lt;/span> Your site hacked &lt;span class="ni">&amp;amp;#x21;&amp;amp;quot;&lt;/span>&lt;span class="err">&amp;amp;&lt;/span>#
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Regular Expressions – if some common regular expressions aren’t properly written, they can degrade CPU performance and raise performance issues in your applications.&lt;/p>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">re&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sr">/^((abc)*)+$/&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">re&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exec&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabca&amp;#39;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After running this in the local development machine, it took approximately 40 seconds, as can be seen:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-cmd" data-lang="cmd">&lt;span class="line">&lt;span class="cl"> $ time node re.js
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> node re.js  41.88s user 0.00s system 99% cpu 41.883 total
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So to avoid this, some Safe Regular Expression libraries can be used like Safe – Regex&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">saferegex&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;safe-regex&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">emailRegex&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sr">/^([a-zA-Z0-9])(([\-.]|[_]+)?([a-zA-Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1}[a-z]{2,3}))$/&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">saferegex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">emailRegex&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>JavaScript&amp;rsquo;s Strict Mode - Strict mode was introduced in ECMAScript 5.1 to enable a restricted version of JavaScript for enhanced security and error management.&lt;/p>
&lt;p>If a strict mode has been followed, then compilation time will enforce its rules.&lt;/p>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">‘&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="err">’&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="c1">// condition will be true without strict mode
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">‘&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="err">’&lt;/span> &lt;span class="o">===&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="c1">// condition will be false in strict mode
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Cryptography Practices - cryptographic functions like MD5 and SHA can be used to prevent server breaches or data leakage through SQL Injection or other attacks.&lt;/p>
&lt;p>Preventing XSS attacks&lt;/p>
&lt;p>Always sanitize the users&amp;rsquo; content that comes from forms.&lt;/p>
&lt;p>Always prefer to serialize instead of &lt;code>JSON.stringify&lt;/code>.&lt;/p>
&lt;p>Use &lt;code>dangerouslySetInnerHTML&lt;/code> only when absolutely necessary.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Do unit tests for all your components, and try to cover all the possible XSS attacks that some users could do.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Always encrypt the passwords with &lt;code>sha1&lt;/code> and &lt;code>md5&lt;/code> (together), and also add a salt value (for example, if the password is abc123, then your salt can be encrypted like this: &lt;code>sha1(md5('$4lT3xt_abc123'))&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If you use cookies to store sensitive information (personal information and passwords mainly), you can save the cookie with Base64 to obfuscate the data.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Protect your APIs (using security tokens) unless you need a public API.&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Software Artifact Model</title><link>/docs/guides/to-review-references/software-development/software-artifact-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/software-artifact-model/</guid><description>&lt;p>The software artifact model describes the relationship between artifacts used in software development.&lt;/p>
&lt;p>The picture below visualizes the software artifact model.&lt;/p>
&lt;figure id="figure-figure-1-software-artifact-model">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/guides/to-review-references/software-development/software-artifact-model-1.drawio.png" alt="sw_artifact_model" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 1: Software Artifact Model
&lt;/figcaption>&lt;/figure>&lt;h2 id="component-capability">Component Capability&lt;/h2>
&lt;p>Component capabilities describe what the corresponding version of a component is capable of in its currently implemented state.&lt;/p>
&lt;p>For more details, follow this link:
&lt;a href="/docs/guides/to-review-references/software-development/component-capabilities-guideline/" >Component Capabilities Guideline&lt;/a>&lt;/p>
&lt;h2 id="detailed-design">Detailed Design&lt;/h2>
&lt;p>Detailed Design is based on architecture documentation along with Feature descriptions and acceptance criteria. Part of the design work is a Feature breakdown into User Stories and Tasks. The design is documented in the repository of the source code. This also holds for SDK documentation.&lt;/p>
&lt;p>Modeling is done using an approved UML diagrams tool (e.g. PlantUML, Enterprise Architect is used for products that have already been modeled using Enterprise Architect).&lt;/p>
&lt;p>Also, Threat modeling is a related but more high-level activity.&lt;/p>
&lt;h2 id="code">Code&lt;/h2>
&lt;p>Implementation includes the following:&lt;/p>
&lt;ul>
&lt;li>Writing code on short-lived Git branches using the established collection of coding guidelines.&lt;/li>
&lt;li>Writing Unit and Component tests (see section further below).&lt;/li>
&lt;/ul>
&lt;h2 id="pull-requests">Pull requests&lt;/h2>
&lt;p>When a task for updating documentation, test cases, or source code has been implemented, a pull request&lt;sup>*)&lt;/sup> is created and linked to the Task work item.&lt;/p>
&lt;p>The completion of the pull request includes the following steps:&lt;/p>
&lt;ul>
&lt;li>Code and documentation review (done as part of the pull request completion)&lt;/li>
&lt;li>Execution of Pull request build job which performs:
&lt;ul>
&lt;li>Static code analysis&lt;/li>
&lt;li>Execution of automated tests (including regression tests)&lt;/li>
&lt;li>Check on code coverage&lt;/li>
&lt;li>Generation of HTML site using Doxygen&lt;/li>
&lt;li>Build and publication of artifacts to be picked up by a Release pipeline&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;sup>*)&lt;/sup> If using Team Foundation Version Control (TFVC) instead of Git, pull requests correspond to check-ins and branches to shelve requests.&lt;/p>
&lt;h2 id="unit-test-cases">Unit Test cases&lt;/h2>
&lt;p>A Unit test is usually a box test of a separate class or function to verify its behavior. Automatic tests are developed for all code and executed as part of the pull request before the code is integrated.&lt;/p>
&lt;p>Test cases shall be independent of the order of test case execution. Code coverage is measured during execution and compared with the defined minimum acceptable level.&lt;/p>
&lt;p>Unit test cases are described (including steps and expected results) together with the test code, or in a Test case work item linked to the test code.
How to include the documentation depends on the framework and is included in the framework descriptions.&lt;/p>
&lt;p>The test result will be analyzed in the data of the pull request execution (e.g. the pull request will not finish if there are failed tests).&lt;/p>
&lt;h2 id="component-test-cases">Component Test cases&lt;/h2>
&lt;p>Component tests shall test the feature and user story acceptance criteria. Component tests are mostly automated and executed in pipeline build jobs.&lt;/p>
&lt;p>Similarly to unit tests, component tests are documented together with the test code or in a test-case work item linked to the test code.&lt;/p>
&lt;p>The result of the component test execution can be analyzed in the build job output.&lt;/p>
&lt;p>Manual test cases are rare in software unit and component tests. In cases they are needed, they should be defined in Test Case work items and be part of a Test suite in Azure DevOps. When the manual test cases are being performed, execution of the Test suite should be triggered so that the test result is registered directly in Azure DevOps.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;p>For more detailed guidance about software development, please find the relevant guides at the following link where you can learn more about component capabilities, static code analysis, code review, secure coding, and much more:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="/category/Software-Development" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Software Guides&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>SonarQube</title><link>/docs/tools/to-review-references/static-code-analysis-tools/sonarqube/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/static-code-analysis-tools/sonarqube/</guid><description>&lt;p>SonarQube is a shared static code analysis tool hosted on the ABB LAN network.&lt;/p>
&lt;h2 id="where-to-find-the-tool">Where to find the tool&lt;/h2>
&lt;p>SonarQube as a web-based tool is hosted in a web server available under the following link -
&lt;a href="https://xc-s-zw00510.xc.abb.com/projects" target="_blank"
rel="noopener noreferrer" >https://xc-s-zw00510.xc.abb.com/projects&lt;/a>.&lt;/p>
&lt;p>There is also a client-side tool designated for Visual Studio and Visual Studio Code IDE integration called &amp;ldquo;Sonar Lint&amp;rdquo; - which is available under the following link
&lt;a href="https://www.sonarlint.org" target="_blank"
rel="noopener noreferrer" >https://www.sonarlint.org&lt;/a>.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>SonarQube is an open-source platform developed by SonarSource for continuous inspection of code quality to perform automatic reviews with static analysis of code to detect bugs, code smells, and security vulnerabilities in 20+ programming languages. SonarQube offers reports on duplicated code, coding standards, unit tests, code coverage, code complexity, comments, bugs, and security vulnerabilities.&lt;/p>
&lt;p>SonarQube can record metrics history and provide evolution graphs. SonarQube provides fully automated analysis and integration with Maven, Ant, Gradle, MSBuild, and continuous integration tools (Azure DevOps, Jenkins, etc.)​.&lt;/p>
&lt;p>SonarQube integrates with Eclipse, Visual Studio, and IntelliJ IDEA development environments through the SonarLint plug-ins, and also integrates with external tools like LDAP, Active Directory, GitHub, and others. SonarQube is expandable with the use of plug-ins​.&lt;/p>
&lt;h3 id="motivation">Motivation&lt;/h3>
&lt;p>SonarQube identifies all types of issues that may come during the development cycle covering all aspects of security issues, vulnerabilities, and quality defects. SonarQube improves code maintainability in the short and long run.&lt;/p>
&lt;p>The cyber security team together with the DevOps team did a tool evaluation which is available in
&lt;a href="https://teams.microsoft.com/l/file/3309F017-A3D7-4487-8496-54E7D8A2C29D?tenantId=372ee9e0-9ce0-4033-a64a-c07073a91ecd&amp;amp;fileType=pptx&amp;amp;objectUrl=https%3A%2F%2Fabb.sharepoint.com%2Fteams%2FIA-PCPDevOps%2FShared%20Documents%2FGeneral%2FDevSecOps%20tool%20evaluation.pptx&amp;amp;baseUrl=https%3A%2F%2Fabb.sharepoint.com%2Fteams%2FIA-PCPDevOps&amp;amp;serviceName=teams&amp;amp;threadId=19:9610112abc8a4a369cbdd46575c0aa79@thread.skype&amp;amp;groupId=9ffb1850-9dc6-4ea6-b218-d8a60784f69f" target="_blank"
rel="noopener noreferrer" >Microsoft Team Share&lt;/a>.&lt;/p>
&lt;h3 id="how-to-analyze-the-code">How to analyze the code&lt;/h3>
&lt;p>With proper integration, the tool will inform the developer early during development on the fly, so the developer can see how to correct problems even before preparing a pull request. The second analysis is done during the pull request process, via a mechanism called pull request decoration. This prevents from put on master branch unwanted quality issues.&lt;/p>
&lt;h3 id="new-and-changed-code">New and changed code&lt;/h3>
&lt;p>SonarQube is presenting information about new and changed code which is going to be put on the master branch - this is called &amp;ldquo;new code&amp;rdquo;, and is blocked on pull requests until all quality conditions are met. This way developers can distinguish between the existing code base and new changes. Blocking mechanisms ensure the focus of quality practices among the teams.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/static-code-analysis-tools/sonarqube-1.png" alt="New Code" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="existing-code-base">Existing code base&lt;/h3>
&lt;p>SonarQube presents information about existing code quality, which is in the form of a web page dashboard. It is organized as a flag that simply informs about two states (passed, failed).&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/static-code-analysis-tools/sonarqube-2.png" alt="Existing Code Base" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="new-versions">New versions&lt;/h2>
&lt;p>This is the responsibility of the team administering SonarQube inside ABB.&lt;/p>
&lt;h2 id="rule-set">Rule set&lt;/h2>
&lt;p>Configuration of the rule set is under the SonarQube administrator&amp;rsquo;s responsibility.&lt;/p>
&lt;p>Official documentation regarding rules in SonarQube can be found under the following links:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://docs.sonarqube.org/latest/user-guide/rules/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Rules User Guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://docs.sonarsource.com/sonarqube/latest/extension-guide/adding-coding-rules/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Adding Coding Rules&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="storage">Storage&lt;/h3>
&lt;p>All SonarQube rules are stored on the server.&lt;/p>
&lt;p>Defined rules for each programming language can be found in the &amp;lsquo;Rules&amp;rsquo; tab on the SonarQube web page.&lt;/p>
&lt;p>
&lt;a href="https://xc-s-zw00510.xc.abb.com/coding_rules" target="_blank"
rel="noopener noreferrer" >SonarQube Rules in ABB Instance&lt;/a>&lt;/p>
&lt;h3 id="version-control">Version control&lt;/h3>
&lt;p>This is the responsibility of the team administering SonarQube inside ABB.&lt;/p>
&lt;h3 id="addremove-rules">Add/remove rules&lt;/h3>
&lt;p>Configuring the rule set is under the SonarQube administrator&amp;rsquo;s responsibility.&lt;/p>
&lt;p>Official documentation regarding rules in SonarQube can be found under the following links:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://docs.sonarqube.org/latest/user-guide/rules/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Rules User Guide&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://sonarqube.inria.fr/sonarqube/documentation/extend/adding-coding-rules/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Adding Coding Rules&lt;/span>&lt;/a>
&lt;/div>
&lt;h3 id="new-rule-set-from-new-tool-version">New rule set from new tool version&lt;/h3>
&lt;p>The built-in rules get updated when either the version of SonarQube is upgraded or the language-specific extensions are updated. The custom rulesets are updated and managed by teams. SonarQube team normally sends out notifications regarding any planned upgrades. The product page of SonarSource maintains a
&lt;a href="https://www.sonarsource.com/products/sonarqube/whats-new/" target="_blank"
rel="noopener noreferrer" >changelog&lt;/a> of all the changes.&lt;/p>
&lt;p>SonarQube update is the responsibility of the SonarQube administration team.&lt;/p>
&lt;h3 id="standards">Standards&lt;/h3>
&lt;p>The SonarQube Quality Model has three different types of rules: Reliability (bug), Vulnerability (security), and Maintainability (code smell) rules.&lt;/p>
&lt;p>The vast majority of security-related rules originate from established standards: CWE, SANS Top 25, and OWASP Top 10.&lt;/p>
&lt;p>Official documentation regarding security rules in SonarQube can be found under the following link:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://docs.sonarqube.org/latest/user-guide/security-rules/" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Security Rules User Guide&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="monitoring">Monitoring&lt;/h2>
&lt;p>Monitoring is done on the SonarQube server, where different dashboards can be used to view different issues, statuses, or severities. A pull request in Azure DevOps shall be set up with a required check that blocks the pull request from completing while there are unhandled SonarQube issues in the code.&lt;/p>
&lt;h2 id="severity-levels">Severity levels&lt;/h2>
&lt;p>This is specific to the tool, severity metrics are set up automatically based on rules defined in the software. Then developer team can change that to reflect real-life situations. (quality issue, false positive).&lt;/p>
&lt;h2 id="how-to-handle-deviations">How to handle deviations&lt;/h2>
&lt;p>In case of bugs, security hotspots, and vulnerabilities those can be handled with appropriate status: To review, Fixed, Safe.&lt;/p>
&lt;p>In case of code smell deviation it can be handled as well with appropriate status: Open, Confirm, Resolve as fixed, Resolve as false positive, Resolve as won&amp;rsquo;t fix. The overall status of the analysis is updated accordingly.&lt;/p>
&lt;p>Deviations in code coverage are &amp;ldquo;work in progress&amp;rdquo;.&lt;/p>
&lt;h2 id="materials">Materials&lt;/h2>
&lt;p>Materials and recordings regarding SonarQube are available in the
&lt;a href="https://teams.microsoft.com/_#/files/General?groupId=24b16da8-e00f-415f-ac92-fe330d06e52c&amp;amp;threadId=19%3A9610112abc8a4a369cbdd46575c0aa79%40thread.skype&amp;amp;ctx=channel&amp;amp;context=SonarQube&amp;amp;rootfolder=%252Fteams%252FIA-PCPDevOps%252FShared%2520Documents%252FGeneral%252FSonarQube" target="_blank"
rel="noopener noreferrer" >DevOps team in Microsoft Teams&lt;/a>.&lt;/p></description></item><item><title>Standard Bug Templates</title><link>/docs/tools/to-review-references/devops/standard-bug-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/standard-bug-template/</guid><description>&lt;p>This guideline describes the custom standard fields used in bug templates. For a more general picture of the standard work item template change process in Azure DevOps, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >ADO standard work item template change management process&lt;/a>.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>The bug template is an ABB customized template displaying the minimum requirements of fields including standard state as in the Azure DevOps Agile template plus ABB-specific fields. These specific fields are described below.&lt;/p>
&lt;p>The CM process group is responsible for updating the standard bug template that is found in
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Opex - Repos - Configuration Management&lt;/a>. Both templates used on-premises and in the cloud are managed by the group.&lt;/p>
&lt;p>List of standard custom fields to add&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="#effect" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Effect&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#cvss" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>CVSS&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#cvsscalc" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>CVSS Calculator&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#regression" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Regression&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#how-found" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>How Found&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#product-issue-number-pin" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Product Issue Number (PIN)&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#external-reference" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>External Reference&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#definition-of-ready--definition-of-done" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Definition of Ready / Definition of Done&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#scopebug" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Scope Bug&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#cloned" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Cloned&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#impact-analysis" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Impact Analysis&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#introduced-in" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Introduced In&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="security-fields">Security fields&lt;/h2>
&lt;p>To capture any potential impact on security issues, three security fields are added to be filled in case the bug is a security bug:&lt;/p>
&lt;h3 id="effect">Effect&lt;/h3>
&lt;p>The Effect field states the security effect of the bug. Effect is a mandatory field. For more information, see
&lt;a href="/docs/guides/to-review-references/configuration-management/bug-classification/" >Bug Classification&lt;/a>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/bug_effect.png" alt="Effect" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p>
&lt;h3 id="cvss">CVSS&lt;/h3>
&lt;p>CVSS (Common Vulnerability Scoring System) is a standard used to estimate the severity of system vulnerabilities.
Example: 8.3&lt;/p>
&lt;h3 id="cvsscalc">CVSSCalc&lt;/h3>
&lt;p>CVSSCalc provides the link
&lt;a href="https://www.first.org/cvss/calculator/" target="_blank"
rel="noopener noreferrer" >https://www.first.org/cvss/calculator/&lt;/a> to the CVSS standard web page where CVSS can be estimated to a numerical value.
The calculation vector is stored in this field to show how the CVSS score was calculated.&lt;/p>
&lt;p>Example:
&lt;a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:H/SA:N/MPR:L/MVC:L/R:A/RE:L/U:Green" target="_blank"
rel="noopener noreferrer" >https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:H/SA:N/MPR:L/MVC:L/R:A/RE:L/U:Green&lt;/a>&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/bug_cvss.png" alt="CVSS" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="regression">Regression&lt;/h2>
&lt;p>For a definition of regression bugs, see the
&lt;a href="/docs/guides/to-review-references/configuration-management/regression-bugs/" >Regression Bugs&lt;/a> guide.&lt;/p>
&lt;p>The field named Regression is false by default and is set to True if the bug is a regression bug.&lt;/p>
&lt;h2 id="how-found">How Found&lt;/h2>
&lt;p>The How Found field is used to track when a bug was found. This is mandatory to fill in when registering the bug. One of the following items can be selected:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Entry&lt;/th>
&lt;th>Bug found&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>01-Requirements&lt;/td>
&lt;td>due to wrong/ambiguity requirement&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>02-Design&lt;/td>
&lt;td>due to wrong design&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>03-Development&lt;/td>
&lt;td>during development/unit testing&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>04-Deployment&lt;/td>
&lt;td>during deployment&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>05-Dev Test&lt;/td>
&lt;td>during manual testing&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>06-Dev Test Automation&lt;/td>
&lt;td>during automatic testing&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>07-Documentation&lt;/td>
&lt;td>during User documentation validation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>08-SIT&lt;/td>
&lt;td>during System Integration test&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>09-STT&lt;/td>
&lt;td>during System Type test&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10-STT Automation&lt;/td>
&lt;td>during automatic System Type test&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>11-Media Verification&lt;/td>
&lt;td>during Media verification test&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>12-Pilot&lt;/td>
&lt;td>during pilot phase by LBL/customer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>13-Post Release&lt;/td>
&lt;td>after release, by customer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>14-Forward Port&lt;/td>
&lt;td>fixing the bug in a newer version&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="product-issue-number-pin">Product Issue Number (PIN)&lt;/h2>
&lt;p>Product Issue Number (PIN) is a unique identifier for every problem reported for the product life cycle and it is not changed once assigned.
A Product Issue Number shall be the only used identifier for an issue during communication via support cases, Field Communications, etc.&lt;/p>
&lt;h2 id="external-reference">External Reference&lt;/h2>
&lt;p>External reference is the link between the Bug raised in ADO (L4 bug) and Salesforce (customer) case.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/bug_externalref.png" alt="ExternalRef" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="definition-of-ready--definition-of-done">Definition of Ready / Definition of Done&lt;/h2>
&lt;p>
&lt;a href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/" >Definition of Ready and Definition of Done&lt;/a> is implemented as a custom control using the Appgami checklist extension.&lt;/p>
&lt;p>Prerequisite: The Appgami checklist extension is needed and it requires a commercial license for each organization. If the extension is not available, work item type definitions cannot be loaded correctly. If the license expires, data will still be available in work items, and queries will still work, but checklists will not be visualized by the custom control.&lt;/p>
&lt;p>DoR is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Ready&lt;/li>
&lt;li>DoR Progress&lt;/li>
&lt;li>DOR Completion&lt;/li>
&lt;/ul>
&lt;p>DoD is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Done&lt;/li>
&lt;li>DoD Progress&lt;/li>
&lt;li>DOD Completion&lt;/li>
&lt;/ul>
&lt;p>Example:&lt;/p>
&lt;p>How to find work items where the Definition of Ready is not complete?
DoR Completion &amp;lt;&amp;gt; Yes&lt;/p>
&lt;h2 id="scopebug">ScopeBug&lt;/h2>
&lt;p>Boolean field that represents whether the bug is considered a scope bug or not. It is false for introduced bugs found during internal testing, true for deferred bugs and post release bugs.&lt;/p>
&lt;p>See
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How-to Handle Deferred Bugs&lt;/a> and
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases/" >How to Handle Bugs in Multiple Releases&lt;/a>.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/bug_scopebug.png" alt="ScopeBug" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="cloned">Cloned&lt;/h2>
&lt;p>Yes/No field that represents whether the bug is a clone of another one. (Note: It is a Yes/No text field and not boolean due to historical reasons)&lt;/p>
&lt;p>Default value: No&lt;/p>
&lt;p>The original bug has Cloned=No, the new bug cloned from it has Cloned=Yes.&lt;/p>
&lt;p>See
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-deferred-bugs/" >How-to Handle Deferred Bugs&lt;/a> and
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-handle-bugs-in-multiple-releases/" >How to Handle Bugs in Multiple Releases&lt;/a>.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/bug_cloned.png" alt="Cloned" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="impact-analysis">Impact Analysis&lt;/h2>
&lt;p>Free text field to be used to answer impact analysis questions. The questions can be customized depending on project.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/impact_analysis.png" alt="Impact Analysis" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="introduced-in">Introduced In&lt;/h2>
&lt;p>The oldest release where the bug is known, where it was first introcuded.
The allowed values are the same as area path.
If multiple instances (duplicates) of this bug exist, this field is readonly in the copies and can be written only in the original bug, the one having &amp;ldquo;Cloned&amp;rdquo;=No.&lt;/p></description></item><item><title>Standard Document Update Template</title><link>/docs/tools/to-review-references/devops/standard-document-update-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/standard-document-update-template/</guid><description>&lt;p>This guideline describes the Document Update work item type and the custom standard fields used in its template. For a more general picture of the standard work item template change process in Azure DevOps, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >ADO standard work item template change management process&lt;/a>.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>The Document Update work item is an ABB specific work item used to track changes on documents under formal change management e.g project steering document or a product document.&lt;/p>
&lt;p>Document Updates can also be used to manage changes to any document stored in the Document Management System to facilitate more controlled handling of documents.
The Document Update work item is used for both new documents and for updates in previously approved ones. One work item is used to handle updates in one document.
The request to change a document could come from a change in requirement, an impact analysis or updates needed due to errors or modifications in functionality.&lt;/p>
&lt;p>The Document Update work item can be used as a task and linked to a user story or bug. If an error is found in a manual or other customer documentation, a bug, and not a document update, should be created.&lt;/p>
&lt;h2 id="review-details">Review Details&lt;/h2>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/review_details.png" alt="Review Details" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>
When the document is reviewed and approved, add the names of the reviewers if review type is ‘Minor’, or a reference to full review record if review type is ‘Full’.&lt;/p>
&lt;h2 id="document-data">Document Data&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/document_data.png" alt="Document data" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="document-id">Document Id&lt;/h3>
&lt;p>The id of the document as the identifier.&lt;/p>
&lt;h3 id="rep-doc-revision">Rep. Doc. Revision&lt;/h3>
&lt;p>The current revision of the document to be updated. &amp;ldquo;New&amp;rdquo;, if it is a new document.&lt;/p>
&lt;h3 id="document-type">Document Type&lt;/h3>
&lt;p>The type of the document to be updated. The document type should be the same as in OnePCP DMS.&lt;/p>
&lt;h3 id="changed-doc-revision">Changed Doc. Revision&lt;/h3>
&lt;p>The revision of the document after update.&lt;/p>
&lt;h2 id="review-decisions">Review Decisions&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/review_decisions.png" alt="Review Decisions" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h3 id="review-type">Review Type&lt;/h3>
&lt;p>The type of review needed for the update. Review type is decided by the CCB.&lt;/p>
&lt;p>Different types:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Full&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Minor - The change is an enhancement or an error correction with minor impact on design, no impact on safety or safety concept, and no consequences for any other components (hardware related) or modules (software related). A minor change is only possible when no new requirement or no change of an existing requirement has to be done. A minor review is sufficient if the previous statements are fulfilled, unless:&lt;/p>
&lt;ul>
&lt;li>It is more than 2 years since the last approved full review was done&lt;/li>
&lt;li>The document has been approved 3 times without a full review.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Not Applicable&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="review-date">Review Date&lt;/h3>
&lt;p>Date of the review meeting.&lt;/p></description></item><item><title>Standard Epic Template</title><link>/docs/tools/to-review-references/devops/standard-epic-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/standard-epic-template/</guid><description>&lt;p>This guideline describes the custom standard fields used in the Epic template. For a more general picture of the standard work item template change process in Azure DevOps, see the
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >ADO standard work item template change management process&lt;/a>.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>The Epic template is an ABB customized template displaying the minimum requirements of fields including standard state as in the Azure DevOps Agile template plus ABB specific fields. These specific fields are described below.&lt;/p>
&lt;p>The Configuration Management process team is responsible for updating the standard bug template that is found in
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Opex - Repos - Configuration Management&lt;/a>. Both templates used on-premises and in the cloud are available.&lt;/p>
&lt;p>List of standard custom fields to add:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="#overview" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Overview&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#definition-of-ready--definition-of-done" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Definition of Ready / Definition of Done&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#security-relevant" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Security Relevant&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="definition-of-ready--definition-of-done">Definition of Ready / Definition of Done&lt;/h2>
&lt;p>
&lt;a href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/" >Definition of Ready and Definition of Done&lt;/a> are implemented as a custom control using the Appgami checklist extension.&lt;/p>
&lt;p>Prerequisite: The Appgami checklist extension is needed and it requires a commercial license for each organization. If the extension is not available, work item type definitions cannot be loaded correctly. If the license expires, data will still be available in work items, and queries will still work, but checklists will not be visualized by the custom control.&lt;/p>
&lt;p>DoR is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Ready&lt;/li>
&lt;li>DoR Progress&lt;/li>
&lt;li>DOR Completion&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/epic_dor.png" alt="DoR" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>DoD is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Done&lt;/li>
&lt;li>DoD Progress&lt;/li>
&lt;li>DOD Completion&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/epic_dod.png" alt="DoR" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Example:&lt;/p>
&lt;p>How to find work items where the Definition of Ready is not complete?
DoR Completion &amp;lt;&amp;gt; Yes&lt;/p>
&lt;h2 id="security-relevant">Security Relevant&lt;/h2>
&lt;p>Security Relevant is a string field with a picklist (Empty by default/True/False)&lt;/p>
&lt;p>Is it likely that work will affect a security-critical component?&lt;/p>
&lt;p>See
&lt;a href="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features/" >How-to Work with Features and Epics&lt;/a>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/epic_securityrelevant.png" alt="DoR" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;/p></description></item><item><title>Standard Feature Template</title><link>/docs/tools/to-review-references/devops/standard-feature-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/standard-feature-template/</guid><description>&lt;p>This guideline describes the custom standard fields used in the Feature template. For a more general picture of the standard work item template change process in Azure DevOps, see the
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >ADO standard work item template change management process&lt;/a>.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>The Feature template is an ABB customized template displaying the minimum requirements of fields including standard state as in the Azure DevOps Agile template plus ABB-specific fields. These specific fields are described below.&lt;/p>
&lt;p>The Configuration Management process team is responsible for updating the standard bug template that is found in
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Opex - Repos - Configuration Management&lt;/a>. Both templates used on-premises and in the cloud are available.&lt;/p>
&lt;p>List of standard custom fields to add:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="#overview" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Overview&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#definition-of-ready--definition-of-done" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Definition of Ready / Definition of Done&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#security-relevant" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Security Relevant&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#security-relevant-argument" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Security Relevant Argument&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#impact-analysis" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Impact Analysis&lt;/span>&lt;/a>
&lt;/div>
&lt;h2 id="definition-of-ready--definition-of-done">Definition of Ready / Definition of Done&lt;/h2>
&lt;p>
&lt;a href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/" >Definition of Ready and Definition of Done&lt;/a> are implemented as a custom control using the Appgami checklist extension.&lt;/p>
&lt;p>Prerequisite: The Appgami checklist extension is needed and it requires a commercial license for each organization. If the extension is not available, work item type definitions cannot be loaded correctly. If the license expires, data will still be available in work items, and queries will still work, but checklists will not be visualized by the custom control.&lt;/p>
&lt;p>DoR is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Ready&lt;/li>
&lt;li>DoR Progress&lt;/li>
&lt;li>DOR Completion&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/feature_dor.png" alt="DoR" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>DoD is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Done&lt;/li>
&lt;li>DoD Progress&lt;/li>
&lt;li>DOD Completion&lt;/li>
&lt;/ul>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/feature_dod.png" alt="DoD" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>Example:&lt;/p>
&lt;p>How to find work items where the Definition of Ready is not complete?
DoR Completion &amp;lt;&amp;gt; Yes&lt;/p>
&lt;h2 id="security-relevant">Security Relevant&lt;/h2>
&lt;p>Security Relevant is a string field with a picklist (Empty by default/True/False)&lt;/p>
&lt;p>Is it likely that work will affect a security-critical component?&lt;/p>
&lt;p>See
&lt;a href="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features/" >How-to Work with Epics and Features&lt;/a>&lt;/p>
&lt;h2 id="security-relevant-argument">Security Relevant Argument&lt;/h2>
&lt;p>If a feature is defined as security-relevant, &amp;ldquo;Security Relevant Argument&amp;rdquo; is mandatory.
This is a multi-line text field.&lt;/p>
&lt;p>See
&lt;a href="/docs/guides/to-review-references/requirements/how-to-work-with-epic-and-features/" >How-to Work with Epics and Features&lt;/a>&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/feature_security.png" alt="SecurityRelevant" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;h2 id="impact-analysis">Impact Analysis&lt;/h2>
&lt;p>Free text field used to write the impact analysis for development work.&lt;/p>
&lt;p>Questions are pre-filled but can be customized depending on the project.&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/impact_analysis.png" alt="ImpactAnalysis" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure></description></item><item><title>Standard System Epic Template</title><link>/docs/tools/to-review-references/devops/standard-system-epic-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/standard-system-epic-template/</guid><description>&lt;p>This guideline describes the custom standard fields used in the System Epic template.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>Requirements (System, Product, or Technology) in DFN are typically Product Managers&amp;rsquo; tools to provide functional and non-functional requirements to R&amp;amp;D . Also R&amp;amp;D is entitled to file requirements. R&amp;amp;D Team can translate these requirements further to Epics/Features/User Story etc. System Epic is a custom Work Item which is a replica in Azure DevOps to hold these System Requirement information kept in DFN by Product management .&lt;/p>
&lt;p>The System Epic template is an ABB customized template , similar to Epic displaying the minimum requirements of fields including standard state as in the Azure DevOps Agile template plus DFN specific fields. These specific fields are listed below.&lt;/p>
&lt;h2 id="dfn-specific-information">DFN Specific Information&lt;/h2>
&lt;p>Following Field values in System Epic will get Synchronized with the same set of Field values in DFN System Requirement.&lt;/p>
&lt;hr>
&lt;p>SR Description&lt;/p>
&lt;p>SR Details&lt;/p>
&lt;p>SR ID&lt;/p>
&lt;p>SR Status&lt;/p>
&lt;p>SR Product Line&lt;/p>
&lt;p>SR Category&lt;/p>
&lt;p>SR Rank&lt;/p>
&lt;p>SR Target Release&lt;/p>
&lt;p>SR Change Date&lt;/p>
&lt;p>SR Owner&lt;/p>
&lt;p>MO Id&lt;/p>
&lt;hr>
&lt;h2 id="classification">Classification&lt;/h2>
&lt;p>This Field gives indication of what type of Requirement is this System Epic hold.
Value Area value - Architecture/Business/Enablers
(This may be called Type in some projects on prem due to historical reasons)&lt;/p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="/docs/tools/to-review-references/devops/media/systemepic_classification_type.png" alt="SystemEpic_Classification_Type.png" loading="lazy" data-zoomable class="img-light" />&lt;/div>
&lt;/div>&lt;/figure>&lt;p>For more information on working with System Architecture Epic : see
&lt;a href="/docs/guides/to-review-references/architecture/how-to-work-with-system-architecture-epic-and-features/" >System Architecture Epic&lt;/a>.&lt;/p>
&lt;p>For a more general picture of the standard work item template change process in Azure DevOps, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >ADO standard work item template change management process&lt;/a>.&lt;/p></description></item><item><title>Standard Test Case Template</title><link>/docs/tools/to-review-references/devops/standard-test-case-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/standard-test-case-template/</guid><description>&lt;p>This guideline describes the custom standard fields used in the Test Case template. For a more general picture of the standard work item template change process in Azure DevOps, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >ADO standard work item template change management process&lt;/a>.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>The Test Case template is an ABB customized template displaying the minimum requirements of fields including standard state as in the Azure DevOps Agile template plus ABB specific fields. These specific fields are described below.&lt;/p>
&lt;p>The Configuration Management process team is responsible for updating the standard bug template that is found in
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Opex - Repos - Configuration Management&lt;/a>. Both templates used on-premises and in the cloud are available.&lt;/p>
&lt;p>List of standard custom fields to add:&lt;/p>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="#review-summary" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Review Summary&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#automation-date" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Automation Date&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#automated-by" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Automated By&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#regression" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Regression&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#automation-date" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Automation Date&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="#automated-by" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Automated By&lt;/span>&lt;/a>
&lt;/div>
&lt;p>Some fields are locked as readonly when the Test Case is in state Ready:&lt;/p>
&lt;ul>
&lt;li>Title&lt;/li>
&lt;li>Description&lt;/li>
&lt;li>Steps&lt;/li>
&lt;li>Parameters&lt;/li>
&lt;li>Priority&lt;/li>
&lt;li>Test Type (if applicable)&lt;/li>
&lt;/ul>
&lt;h2 id="review-summary">Review Summary&lt;/h2>
&lt;p>Review Summary is a multi line text field.&lt;/p>
&lt;p>It is used To track review comments and implementation status. It should have following information like Reviewer, Comment type (Major/Minor), Review Comment, Implementation status.&lt;/p>
&lt;h2 id="automation-date">Automation Date&lt;/h2>
&lt;p>Datetime field
When the test case was automated&lt;/p>
&lt;h2 id="automated-by">Automated By&lt;/h2>
&lt;p>Itentity field&lt;/p>
&lt;p>Person who has automated the test case&lt;/p>
&lt;h2 id="regression">Regression&lt;/h2>
&lt;h2 id="test-type">Test Type&lt;/h2></description></item><item><title>Standard User Story Template</title><link>/docs/tools/to-review-references/devops/standard-user-story-template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/standard-user-story-template/</guid><description>&lt;p>This guideline describes the custom standard fields used in the User Story template. For a more general picture of the standard work item template change process in Azure DevOps, see
&lt;a href="/docs/guides/to-review-references/configuration-management/how-to-change-standard-wi-template/" >ADO standard work item template change management process&lt;/a>.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>The User Story template is an ABB customized template displaying the minimum requirements of fields including standard state as in the Azure DevOps Agile template plus ABB specific fields. These specific fields are described below.&lt;/p>
&lt;p>The Configuration Management process team is responsible for updating the standard bug template that is found in
&lt;a href="https://dev.azure.com/ABB-BCI-PCP/OpEx/_git/ConfigurationManagement" target="_blank"
rel="noopener noreferrer" >Opex - Repos - Configuration Management&lt;/a>. Both templates used on-premises and in the cloud are available.&lt;/p>
&lt;p>List of standard custom fields to add:
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="#definition-of-ready--definition-of-done" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Definition of Ready / Definition of Done&lt;/span>&lt;/a>
&lt;/div>
&lt;/p>
&lt;h2 id="definition-of-ready--definition-of-done">Definition of Ready / Definition of Done&lt;/h2>
&lt;p>
&lt;a href="/docs/guides/to-review-references/quality-and-kpi/dor-dod-guideline/" >Definition of Ready and Definition of Done&lt;/a> are implemented as a custom control using the Appgami checklist extension.&lt;/p>
&lt;p>Prerequisite: The Appgami checklist extension is needed and it requires a commercial license for each organization. If the extension is not available, work item type definitions cannot be loaded correctly. If the license expires, data will still be available in work items, queries will still work, but checklists will not be visualized by the custom control.&lt;/p>
&lt;p>DoR is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Ready&lt;/li>
&lt;li>DoR Progress&lt;/li>
&lt;li>DOR Completion&lt;/li>
&lt;/ul>
&lt;p>DoD is made of 3 fields:&lt;/p>
&lt;ul>
&lt;li>Definition of Done&lt;/li>
&lt;li>DoD Progress&lt;/li>
&lt;li>DOD Completion&lt;/li>
&lt;/ul>
&lt;p>Example:&lt;/p>
&lt;p>How to find work items where Definition of Ready is not complete?
DoR Completion &amp;lt;&amp;gt; Yes&lt;/p></description></item><item><title>Static Code Analysis</title><link>/docs/guides/to-review-references/software-development/static-code-analysis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/static-code-analysis/</guid><description>&lt;p>Static source code analysis is a method for analyzing the source code without executing it.&lt;/p>
&lt;p>ABB’s
&lt;a href="https://search.abb.com/library/Download.aspx?DocumentID=9AKK108467A1778&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank"
rel="noopener noreferrer" >Security Development Lifecycle Standard&lt;/a> requires Static Code Analysis of at least all new and changed code. If a static analysis tool is available for the language then such a tool shall be used. The compiler is also a type of static analyzer; however, it analyzes the code for programming language syntax and semantics while advanced static analysis techniques perform a much deeper analysis of the code to uncover potential run-time defects.&lt;/p>
&lt;h2 id="code-on-which-static-code-analysis-shall-be-applied">Code on which static code analysis shall be applied&lt;/h2>
&lt;p>Static code analysis is required for software projects and customized third-party libraries if standard languages such as C/C++, C#, and Java are used. All new and changed code has to be analyzed. When analyzing an existing code base, it is not required to fix all warnings, instead, a baseline can be made. But some findings, e.g. security warnings can be required to handle. After baselining, only the differences have to be handled when changing the code if this is supported by the tool.&lt;/p>
&lt;p>When changing or upgrading the tool, new warnings may appear and it has to be decided from case to case how to handle these, depending on the severity of the warnings.&lt;/p>
&lt;h2 id="selection-of-tools">Selection of tools&lt;/h2>
&lt;p>Static code analysis tools shall be chosen for each applicable product or part of the product, see
&lt;a href="/docs/tools/to-review-references/static-code-analysis-tools/" >Static Code Analysis Tools&lt;/a> for recommended tools. More than one tool can be used if suitable since different tools can have different findings. It is recommended to choose tools that can be smoothly integrated into the &amp;ldquo;build environment&amp;rdquo; on the desktop or build server.&lt;/p>
&lt;p>The tool shall to the greatest extent support the applicable standards to reduce the use of checklist items for manual code reviews. The relevant R&amp;amp;D cluster lead and the release owner have the responsibility for choosing the tools. It is recommended to use the latest versions of the tools to utilize new and improved rules. For each project, it shall be decided which version of the tools to be used (the latest or a specific version), but it is the R&amp;amp;D cluster lead together with the release owner that has the final responsibility.&lt;/p>
&lt;p>If no tool is available for the language then all security checks have to be done during manual code review.&lt;/p>
&lt;h2 id="selection-of-rule-set">Selection of rule set&lt;/h2>
&lt;p>For each applicable product, a rule set shall be chosen. The static code analysis tools will analyze the code based on those rules. It is recommended that the code responsible for a product (e.g. repo gate-keeper in git) chooses the rule set, based on the applicable standards and best practices. If no gatekeeper exists, there can be one or several persons responsible for the rule set.&lt;/p>
&lt;p>The relevant release owner has the final responsibility of the decision of the rule set. The selected rules shall be defined and placed under version control. The rule set can be defined in the configuration file for the tool if applicable or in a separate document. For further recommendations and best practices relating to secure coding, see
&lt;a href="/docs/guides/to-review-references/software-development/secure-coding-guideline/" >Secure Coding Guideline&lt;/a>, where there also are links to programming language-specific coding guidelines.&lt;/p>
&lt;p>The rules set needs to fulfill the security requirements and include checks that specifically address security vulnerabilities. Known weaknessess are listed by Mitre.org and their lists are good input to the selection of rules.&lt;/p>
&lt;p>
&lt;a href="https://cwe.mitre.org/top25/archive/2021/2021_cwe_top25.html" target="_blank"
rel="noopener noreferrer" >CWE Top 25 Most Dangerous Software Weaknesses&lt;/a> lists the most common and impactful issues experienced over the previous two calendar years. These weaknesses are dangerous because they are often easy to find and exploit. They can allow adversaries to completely take over a system, steal data, or prevent an application from working. &lt;br/>&lt;/p>
&lt;p>New rules provided by a tool (e.g. with a new version of the tool) need to be considered continuously. There shall exist evidence of which rule sets have been used for the released code.&lt;/p>
&lt;h2 id="documentation">Documentation&lt;/h2>
&lt;p>For each product it should be defined and documented&lt;/p>
&lt;ul>
&lt;li>which tool(s) to use&lt;/li>
&lt;li>what rule set(s) to use&lt;/li>
&lt;li>how the results will be handled&lt;/li>
&lt;/ul>
&lt;p>Each new release can reference this documentation together with any modifications of for example version of the tool, changes in rule set, frequency of running the tool.&lt;/p>
&lt;h2 id="build-policy">Build policy&lt;/h2>
&lt;p>Developers should run the static code analysis tool and handle warnings before integrating the code.&lt;/p>
&lt;p>For an effective static analysis adoption, the static code analysis tool should run periodically on the entire product. The frequency shall be defined by the release owner. It is recommended to run it daily as part of the daily build process.&lt;/p>
&lt;p>When using git, this should be a part of the commit rules for the pull request, and the pull request should not be possible to complete before all warnings have been handled.&lt;/p>
&lt;h2 id="policy-for-handling-deviations">Policy for handling deviations&lt;/h2>
&lt;p>For new and changed code, all warnings shall be analyzed and resolved before integrating the code. The number of warnings shall be monitored and controlled. The number of warnings shall decrease over time, i.e. new implementation shall not introduce new warnings.&lt;/p>
&lt;p>False positives are reported incorrect warnings; they are not really bugs. The false positives show the weakness of the analyzer, hence this needs to be communicated to the tool vendors so that they can improve the tool.&lt;/p>
&lt;p>If the warning is correct, then it has to be triaged if the warning is relevant. Deviations from the rules are acceptable if they are motivated. The motivation shall be put in a comment next to the code that caused the warning, or in the tool depending on the tool. If supported by the tool, these deviations from the rules should be handled before checking in. It is recommended that it is the code responsible for a product that approves deviations during code review.&lt;/p>
&lt;p>There shall exist evidence of the deviations that have been done in the released code.&lt;/p>
&lt;p>If a rule gives too many false positives to be useful or is not helpful for the code quality, it is recommended to disable the rule. This does not include rules that are mandatory if required by for example standards, e.g. security rules. Otherwise, it can be decided by the code responsible for a product.&lt;/p>
&lt;h2 id="progress-monitoring">Progress monitoring&lt;/h2>
&lt;p>The project&amp;rsquo;s progress needs to be monitored by assessing the improvements in the code&amp;rsquo;s quality. The metrics established in the beginning could be used to compare the code quality improvement since the previous builds. Based on the progress, action items could be defined for further static analysis activity.&lt;/p>
&lt;p>The R&amp;amp;D cluster lead and the release owner are responsible for making sure that the status of the warnings is followed up during the project and that suitable actions have been taken.&lt;/p>
&lt;p>It is recommended metrics are used to follow up on the status of the static code analysis, e.g. the number of warnings that needs to be addressed. It should also be possible to create a report of the remaining warnings and deviations to ensure everything has been handled, e.g. at the end of increments/iterations and before the release.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="../software-development/secure-coding-guideline.md" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Secure Coding Guideline&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="/docs/tools/to-review-references/static-code-analysis-tools/" >
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>Static Code Analysis Tools&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://search.abb.com/library/Download.aspx?DocumentID=9AKK108467A1778&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>ABB’s Security Development Lifecycle Standard&lt;/span>&lt;/a>
&lt;a
class="hb-card group"href="https://cwe.mitre.org/top25/archive/2021/2021_cwe_top25.html" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>&lt;/svg>CWE Top 25 Most Dangerous Software Weaknesses&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>System Requirement Review Guideline</title><link>/docs/guides/to-review-references/requirements/systemrequirement-review/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/requirements/systemrequirement-review/</guid><description>&lt;p>A system requirement review intends to improve the quality of the requirements. It applies both to system requirements and technology requirements.&lt;/p>
&lt;p>The purpose of the checklist is to support PCP R&amp;amp;D members, typically product owners and release owners, when invited to review system requirements.&lt;/p>
&lt;h2 id="system-requirement-review-goals">System Requirement Review Goals&lt;/h2>
&lt;ul>
&lt;li>Eliminate problems and rework at an early stage&lt;/li>
&lt;li>Improve product quality&lt;/li>
&lt;li>Ensure common understanding between PPM and R&amp;amp;D on what should be developed&lt;/li>
&lt;li>Secure the development flow by ensuring that R&amp;amp;D receives well-defined and prioritized requirements to implement and test&lt;/li>
&lt;/ul>
&lt;h2 id="system-requirement-review-checklist">System Requirement Review Checklist&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Traceability to Market Opportunity&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Consistent with Market Opportunity&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Wanted functionality and not a technical solution&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Clear/Crisp description – not a broad statement&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Consistent with other SRs (conflict, overlap)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Performance aspects covered (if relevant)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Reasonable size or possible to split&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Possible to understand impact on the different products&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Need for exceptions/limitations&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Testable or need for verification criteria&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Priority&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;input disabled="" type="checkbox"> Security&lt;/p>
&lt;pre>&lt;code>1) required capability security level (SL-C) of the system/product,
2) security context including scope and boundaries in a physical and a logical way, and
3) required security capabilities related to installation, operation, maintenance, and decommissioning.
&lt;/code>&lt;/pre>
&lt;/li>
&lt;/ul>
&lt;h2 id="ppms-directive-for-writing-system-requirements">PPMs directive for writing System Requirements&lt;/h2>
&lt;p>To understand PPMs way of working, see their directive for writing the system requirement bellow.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;ins>Title&lt;/ins>&lt;/strong>: Title of the SR, should briefly describe the functionality without pointing to a specific product or product line or version.&lt;/li>
&lt;li>&lt;strong>&lt;ins>Description&lt;/ins>&lt;/strong>: More detailed description&lt;/li>
&lt;li>&lt;strong>Motivation&lt;/strong>: State the reason for doing this requirement. If there is no associated MO, the business motivation should be put here.&lt;/li>
&lt;li>&lt;strong>Exceptions&lt;/strong>: Document any exceptions or limitations to the requirement.&lt;/li>
&lt;li>&lt;strong>Verification criteria&lt;/strong>: Describe suggestions/requirements in how the requirement shall be validated, either on system or product level&lt;/li>
&lt;li>&lt;strong>Market Opportunity&lt;/strong>: Reference to related Market Opportunity. Life cycle related System Requirements and Technology Requirements might not have MOs if the need for development is not associated with any change in market functionality.&lt;/li>
&lt;li>&lt;strong>Priority&lt;/strong>: Priority relative within one MO, 1 – 5, Used if more than one SR is connected to the same market requirement.&lt;/li>
&lt;li>&lt;strong>Target release&lt;/strong>: Do not use if not a specific target release is known, leave empty&lt;/li>
&lt;li>&lt;strong>&lt;ins>Product Line&lt;/ins>&lt;/strong>: E.g.: 800xA Extensions; Advanced Services; Compact Product Suite; Digital, etc.&lt;/li>
&lt;li>&lt;strong>&lt;ins>Compatibility&lt;/ins>&lt;/strong>: Indicate to which category Evolution &amp;mdash; Enhancement &amp;mdash; New Feature&lt;/li>
&lt;li>&lt;strong>Requirement type&lt;/strong>: e.g. Life Cycle Maintenance; Productization &amp;amp; Logistics; Product Function; Performance &amp;amp; Capacity; Security; Safety; Topology and Deployment; System Management&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>&lt;ins>Underlined&lt;/ins>&lt;/strong> are mandatory fields, for more details see PPM&amp;rsquo;s process description:
&lt;a href="https://abb.sharepoint.com/sites/OnePCP-DMS/SitePages/Document.aspx?$combinedId=3BSE055359_en&amp;amp;$version=latestApproved" target="_blank"
rel="noopener noreferrer" >Managing Market Requirements and System Requirements&lt;/a>&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;">
&lt;a
class="hb-card group"href="https://abb.sharepoint.com/sites/OnePCP-DMS/SitePages/Document.aspx?$combinedId=3BSE055359_en&amp;amp;$version=latestApproved" target="_blank" rel="noreferrer">
&lt;span class="hb-card-title p-4">
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/>&lt;/svg>Managing Market Requirements and System Requirements&lt;/span>&lt;/a>
&lt;/div></description></item><item><title>Test Techniques</title><link>/docs/guides/to-review-references/software-development/test-techniques/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/test-techniques/</guid><description>&lt;p>This guideline gives a brief description of test techniques used at the different test levels. A description of the test levels and when to use the various test techniques are defined in each project. The purpose of this document is not to describe all test techniques, but to describe the techniques that have been decided to be appropriate to use in development projects at ABB.&lt;/p>
&lt;p>The intended readers of the guideline are developers and testers who design test cases at different levels in order to verify functionality and requirements.&lt;/p>
&lt;h2 id="the-goal">The goal&lt;/h2>
&lt;p>The goal of testing is to detect as many faults as possible and to demonstrate that the product works according to the specification. Since it is impossible to test all different inputs (exhaustive testing), test strategies and techniques are used to make the testing efficient. This document describes some commonly used techniques.&lt;/p>
&lt;p>Despite what test techniques are used both positive and negative tests are needed. Positive tests demonstrate the normal / specified behavior of the system. Negative tests run the system with different input conditions to check whether the system can handle unlikely conditions of the application.
In order to efficiently design test cases that verify positive, negative, and unspecified conditions, black-box and white-box testing techniques are used. Black-box techniques are used at all levels of testing, while white-box testing is mostly conducted on the lower levels.&lt;/p>
&lt;h2 id="black-box-testing">Black-box testing&lt;/h2>
&lt;p>Black-box testing is a test strategy that investigates the input-output conditions of a program without considering the internal structure. The purpose is to test against a specification (requirements and design) and no insight into or knowledge about the implementation is needed. Hence, the tester does not examine the programming code and does not need any further knowledge of the program other than its specifications. Since only the specification is needed, test cases can be designed as soon as the specifications are complete.&lt;/p>
&lt;p>Using the black-box techniques will achieve good coverage of the implemented functionality since all normal execution paths are covered. However, error sequences, recovery situations, and timing/performance issues are difficult to catch with these techniques and should be tested by other techniques. The purpose of the black-box techniques described in this section is to detect functional faults.&lt;/p>
&lt;h3 id="equivalence-class-partitioning-testing">Equivalence class partitioning (testing)&lt;/h3>
&lt;p>An equivalence class is a set of data for which the software’s behavior is assumed to be the same. Thus the result of testing a single value from an equivalence partition is considered representative of the complete partition. This technique reduces the number of different values, for which test cases should be created.&lt;/p>
&lt;p>When testing a function (method in a class), equivalence class testing uses the associated parameters (attributes for a method in a class). Each parameter is analyzed and all equivalence classes are determined.
An example of equivalence class partitioning is described in Appendix A.&lt;/p>
&lt;h3 id="boundary-value-analysis">Boundary value analysis&lt;/h3>
&lt;p>Boundary value analysis can be considered a special case of equivalence class partitioning, since it concentrates the selection of test cases on and around the partition class limits, realizing that many problems can be found when testing on and around limits. Typically also, for boundary value analysis, is to test something with zero as input, max integer value, counters overflow, and testing when something gets full (e.g. the heap) or empty, etc.&lt;/p>
&lt;p>An example of boundary value analysis is described in Appendix A.&lt;/p>
&lt;h3 id="interface-testing">Interface testing&lt;/h3>
&lt;p>Testing is conducted to evaluate whether systems or components pass data and control correctly to one another. Faults found during interface testing can be:&lt;/p>
&lt;ul>
&lt;li>Interface misuse – a calling component calls another component and makes an error in its use of its interface, e.g. parameters in the wrong order.&lt;/li>
&lt;li>Interface misunderstanding – a calling component embeds assumptions about the behavior of the called component which are incorrect.&lt;/li>
&lt;li>Timing errors – the calling and called components operate at different speeds and out-of-date information is accessed.&lt;/li>
&lt;/ul>
&lt;p>Interface testing is often conducted by using equivalence class partitioning or boundary value analysis.&lt;/p>
&lt;h3 id="dynamic-testing-of-sequence-diagrams">Dynamic testing of sequence diagrams&lt;/h3>
&lt;p>A sequence diagram describes how groups of objects collaborate in accomplishing some system behavior. This collaboration is implemented as a series of messages between objects. Typically, a sequence diagram describes the detailed implementation of a single use case (or one variation of a single use case). Sequence diagrams are not useful for showing the behavior within an object. Test of sequence diagrams is often a part of functional testing.&lt;/p>
&lt;p>Testing of sequence diagrams is performed by stimulating the program with the start value of the sequence diagram and then checking whether the program&amp;rsquo;s correct flow is made in the program. The sequence diagram itself defines input, correct flow, and expected output (end state). At the design test level, the code is either stepped through manually, run through automatically with printouts for each passed operation, or automatically checked in the test program.&lt;/p>
&lt;h3 id="state-transition-diagrams">State-transition diagrams&lt;/h3>
&lt;p>State-transition diagrams describe all of the states that an object can have, the events under which an object changes states (transitions), the conditions that must be fulfilled before the transition will occur (guards), and the activities undertaken during the life of an object (actions). State-transition diagrams are very useful for describing the behavior of individual objects over the full set of use cases that affect those objects. State-transition diagrams are not useful for describing the collaboration between objects that cause the transitions.&lt;/p>
&lt;p>It is important to test the transitions and not the states described in the diagram to get a full understanding of the functionality. The different states are the expected output of the test cases for the transitions. To show that the different transitions and states have been tested, either the test program automatically has to check it or printouts should be added to the test code.&lt;/p>
&lt;p>An example of state-transition diagrams testing is described in Appendix B.&lt;/p>
&lt;h3 id="error-guessing">Error guessing&lt;/h3>
&lt;p>The purpose of error guessing is to use the experience and intuition of a tester to detect faults. The idea is to make educated guesses on which areas are most error-prone and what types of faults are injected in these areas. A procedure for error guessing cannot be given and the best way to explain the concept is to present an example:&lt;/p>
&lt;p>When testing a sorting subroutine, the following are situations to explore:&lt;/p>
&lt;ul>
&lt;li>The input list is empty&lt;/li>
&lt;li>The input list contains one entry&lt;/li>
&lt;li>All entries in the input list have the same value&lt;/li>
&lt;li>The input list is already sorted&lt;/li>
&lt;/ul>
&lt;p>Thus, by using the experience of a tester the special cases that might have been overlooked are enumerated. Then, the test case design is carried out to expose the possible faults.&lt;/p>
&lt;p>Working with error guessing, earlier experiences from the system, and knowledge about commonly made faults are very valuable inputs.&lt;/p>
&lt;h2 id="white-box-testing">White-box testing&lt;/h2>
&lt;p>White-box testing (equal to structure-based testing) is a test strategy that investigates the internal structure of a program. The purpose is to design test cases that verify that all the code has been executed, and is correct. Hence, white-box testing does not guarantee that the complete specification has been implemented. In order to conduct white-box testing, a coverage criterion needs to be defined. The coverage criterion defines what is meant by “all code has been executed”.&lt;/p>
&lt;h3 id="workflow">Workflow&lt;/h3>
&lt;p>There are two main ways to work with white-box methods and coverage analysis. If test cases have been derived, these can be used as input. Then the coverage of the code is checked. If not full coverage is fulfilled, a decision has to be taken in order to reach full coverage. The test execution with coverage analysis is preferably done with a tool that pre-processes the code.&lt;/p>
&lt;h3 id="coverage-methods">Coverage methods&lt;/h3>
&lt;p>In order to know whether full coverage has been achieved, a coverage measure has to be defined. There are several different coverage measures. In this document, only the most commonly used are described. The following program example is used for all coverage measures:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">if A&amp;gt;10 and B&amp;gt;10 then
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D:=20;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">end;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Statement coverage&lt;/strong> is defined as every statement in a program that has been executed once. This is the weakest coverage requirement and it does not consider, for example, simple if-statements, logical operators, and loop termination decisions.&lt;/p>
&lt;p>An example of a test case for the program example is:
a) A=11, B=11 =&amp;gt; all statements have been executed&lt;/p>
&lt;p>&lt;strong>Branch (decision) coverage&lt;/strong> is defined as every decision in a program that has taken all possible outcomes at least once. A decision is a boolean operand that controls the flow of the program, for example, in an if or while statement. One example of decision coverage is shown below. In this case, the program should be exercised with test cases that cause the if-statement to be both true and false.&lt;/p>
&lt;p>Examples of test cases for the program example are:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">a) A=11, B=11 =&amp;gt; if-statement is true
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">b) A=0, B=11 =&amp;gt; if-statement is false
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hence, the program has taken both decisions in the if-statements.&lt;/p>
&lt;p>An example of branch coverage is described in Appendix C.&lt;/p>
&lt;p>&lt;strong>Condition coverage&lt;/strong> is defined as every condition in a program that has been both true and false at least once. A condition is a boolean operand in a statement, for example, in an if or while statement.&lt;/p>
&lt;p>Examples of test cases for the program example are:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">a) A=11, B=0 =&amp;gt; Condition (A&amp;gt;10) is true and (B&amp;gt;10) is false
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">b) A=0, B=11 =&amp;gt; Condition (A&amp;gt;10) is false and (B&amp;gt;10) is true
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hence, the program has been exercised with test cases that cause the conditions in the if-statement to be both true and false.&lt;/p>
&lt;p>&lt;strong>Condition/Decision coverage&lt;/strong> is defined as every condition in a decision in a program and every decision in the program has taken all possible outcomes at least once.&lt;/p>
&lt;p>Examples of test cases for the program example are:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">a) A=11, B=11 =&amp;gt; Condition (A&amp;gt;10) is true, (B&amp;gt;10) is true, if-statement is true
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">b) A=0, B=0 =&amp;gt; Condition (A&amp;gt;10) is false, (B&amp;gt;10) is false, if-statement is false
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hence, the program has been exercised with test cases that cause the conditions in the if-statement to be both true and false, and the program has taken both decisions in the if-statement.&lt;/p>
&lt;p>&lt;strong>Modified condition/decision coverage (MCDC)&lt;/strong> is defined as every condition in a decision that has taken all possible outcomes at least once, and each condition has been shown to affect that decision outcome independently. A condition is shown to affect a decision’s outcome independently by varying just that decision while holding fixed all other possible conditions.&lt;/p>
&lt;p>Examples of test cases are:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">a) A=11, B=11 =&amp;gt; if-statement is true
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">b) A=0, B=11 =&amp;gt; if-statement is false, condition (A&amp;gt;10) affects the outcome
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c) A=11, B=0 =&amp;gt; if-statement is false, condition (B&amp;gt;10) affects the outcome
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hence, the program has taken both decisions in the if-statement and this has been done by independently varying the conditions.
An example of MCDC is described in Appendix C.&lt;/p>
&lt;!--
## Q&amp;A
(optional - add questions and answers)
## References
- TBD
--></description></item><item><title>Tool Support</title><link>/docs/tools/to-review-references/devops/tool-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/tools/to-review-references/devops/tool-support/</guid><description>&lt;p>This page contains support contacts for commonly used DevOps tools.
Although the Configuration Manager (CM) often plays a major role to integrate these tools in pipelines, the CM is not responsible to support in case of issues with the tool, like tool bugs, upgrades, service unavailability. In most cases, these tools are managed and supported by IS. IS will take care of tickets in ServiceNow and will open requests to the vendor if required.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tool&lt;/th>
&lt;th>Support Contact&lt;/th>
&lt;th>Resources&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Azure DevOps Server and Services&lt;/td>
&lt;td>
&lt;a href="https://abb.service-now.com/_myservices?id=is" target="_blank"
rel="noopener noreferrer" >https://abb.service-now.com/_myservices?id=is&lt;/a> &lt;br/> Common ticket types: General Request - Azure DevOps Global, User Access Management - Azure DevOps Global&lt;/td>
&lt;td>
&lt;a href="https://teams.microsoft.com/l/team/19%3A9178b7774f18496e9df41b11fb8b0387%40thread.skype/conversations?groupId=7a73fbf7-5c9d-406b-b6bb-2a5c7372bc6d&amp;amp;tenantId=372ee9e0-9ce0-4033-a64a-c07073a91ecd" target="_blank"
rel="noopener noreferrer" >Teams: Development Community (Azure DevOps , SonarQube , Tasktop , TFS , ALM)&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Black Duck Hub (Synopsys Detect)&lt;/td>
&lt;td>
&lt;a href="mailto:sanjeev.s@in.abb.com" >sanjeev.s@in.abb.com&lt;/a>&lt;/td>
&lt;td>
&lt;a href="https://abb.sharepoint.com/sites/SDIP/Portal/SitePages/OCC.aspx" target="_blank"
rel="noopener noreferrer" >https://abb.sharepoint.com/sites/SDIP/Portal/SitePages/OCC.aspx&lt;/a> &lt;br/>
&lt;a href="https://abb.sharepoint.com/sites/SDIP/Portal/SitePages/Synopsys%20Detect%20-%20Scanning%20Tool.aspx" target="_blank"
rel="noopener noreferrer" >https://abb.sharepoint.com/sites/SDIP/Portal/SitePages/Synopsys%20Detect%20-%20Scanning%20Tool.aspx&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>SonarQube&lt;/td>
&lt;td>
&lt;a href="https://abb.service-now.com/_myservices?id=is" target="_blank"
rel="noopener noreferrer" >https://abb.service-now.com/_myservices?id=is&lt;/a> &lt;br/> Ticket type: Multipurpose Request to SonarQube - ABB SonarQube Global&lt;/td>
&lt;td>
&lt;a href="https://codescan.abb.com/" target="_blank"
rel="noopener noreferrer" >https://codescan.abb.com/&lt;/a> &lt;br/>
&lt;a href="https://teams.microsoft.com/l/channel/19%3Ae90d69c84c4b4f16bdd8e999829cc82e%40thread.skype/SonarQube?groupId=7a73fbf7-5c9d-406b-b6bb-2a5c7372bc6d&amp;amp;tenantId=372ee9e0-9ce0-4033-a64a-c07073a91ecd" target="_blank"
rel="noopener noreferrer" >Teams: SonarQube channel&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Metadefender&lt;/td>
&lt;td>
&lt;a href="https://abb.service-now.com/_myservices?id=is" target="_blank"
rel="noopener noreferrer" >https://abb.service-now.com/_myservices?id=is&lt;/a> &lt;br/> Common ticket types: Submit False Positives Detected by MetaDefender Multiscanning, Add or Remove Access to MetaDefender Multiscanning&lt;/td>
&lt;td>
&lt;a href="https://abb.service-now.com/_myservices?id=cp2_kb_article_view&amp;amp;table=kb_knowledge&amp;amp;sys_kb_id=a5d5bd8a870f1d14913965f90cbb3501&amp;amp;searchTerm=metadefender" target="_blank"
rel="noopener noreferrer" >Knowledge base&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Unit Test Overview</title><link>/docs/guides/to-review-references/software-development/unit-test-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/unit-test-overview/</guid><description>&lt;p>This guide is a quick overview of what a unit test is and when and how it should be used.&lt;/p>
&lt;h2 id="what-is-and-general-definitions">What is and general definitions&lt;/h2>
&lt;p>A &lt;em>unit test&lt;/em> is a code validating that any other code (under test) is working as expected.&lt;/p>
&lt;p>Validation should ensure the following things:&lt;/p>
&lt;ul>
&lt;li>Code executes successfully when correct data is passed.&lt;/li>
&lt;li>Throw proper error messages when incorrect data is passed.&lt;/li>
&lt;/ul>
&lt;p>A &lt;em>Unit test&lt;/em>:&lt;/p>
&lt;ul>
&lt;li>Runs in memory&lt;/li>
&lt;li>Is fully automated&lt;/li>
&lt;li>Has full control of everything that it does&lt;/li>
&lt;li>A &lt;em>Unit test&lt;/em> verifies individual software components or methods, also known as a &amp;ldquo;unit of work&amp;rdquo; or &amp;ldquo;unit of code&amp;rdquo;.&lt;/li>
&lt;li>A &lt;em>unit of code&lt;/em> is the smallest piece of code that can be tested.&lt;/li>
&lt;li>&lt;em>Unit Testing&lt;/em> is a practice in software development for validating that a unit of code will behave as intended and the tested code will produce the same result every time the test is executed.&lt;/li>
&lt;li>A &lt;em>Unit test&lt;/em> is usually a white box test of a separate class or function to verify its behavior.&lt;/li>
&lt;li>A &lt;em>unit test&lt;/em> should only test the functionality of a single method, also called &lt;em>method under test&lt;/em> or &lt;em>system under test&lt;/em> (&lt;strong>SUT&lt;/strong>).&lt;/li>
&lt;li>The &amp;ldquo;&lt;em>System under test&lt;/em>&amp;rdquo; refers to the code that you&amp;rsquo;re writing unit tests against, this could be an object, service, or anything else that exposes testable functionality.&lt;/li>
&lt;li>&lt;em>Code coverage&lt;/em> is a measurement of the amount of code that is run by unit tests - either lines, branches, or methods.&lt;/li>
&lt;/ul>
&lt;h2 id="the-goal">The goal&lt;/h2>
&lt;p>Isolate each part of a program (even a very complex one) and demonstrate that the individual parts are correct and &lt;em>requirements&lt;/em> are satisfied.&lt;/p>
&lt;p>The ultimate goal is minimizing bugs and allowing developers to focus on the functionalities and logic of the product relying on the fact that individual pieces of code are &amp;ldquo;correct&amp;rdquo;.&lt;/p>
&lt;h2 id="when-and-how">When and How&lt;/h2>
&lt;p>&lt;em>Unit test cases&lt;/em> are described (including steps and expected results) together with the test code, or in a Test case Work Item linked to the test code.&lt;/p>
&lt;p>Unit tests should only test code within the developer&amp;rsquo;s control. They do not test infrastructure concerns. (Infrastructure concerns include interacting with databases, file systems, and network resources).&lt;/p>
&lt;p>How to include the &lt;em>documentation&lt;/em> depends on the framework and is included in the framework descriptions.&lt;/p>
&lt;p>&lt;em>Test cases&lt;/em> shall be independent of the order of test case execution. Code coverage is measured during execution and compared with the defined minimum acceptable level which should be &lt;strong>80%&lt;/strong>.&lt;/p>
&lt;p>All tests will be run continually to the code change requests (&lt;em>pull request&lt;/em> in Git, &amp;ldquo;&lt;em>check-in&lt;/em>&amp;rdquo; in TFS, and so on)&lt;/p>
&lt;p>&lt;em>The test result&lt;/em> will be analyzed in the data of the pull request execution (e.g. the pull request will not finish if there are failed tests).&lt;/p>
&lt;p>All &lt;em>class interfaces&lt;/em> will also be tested by exploring the boundary values of each parameter.&lt;/p>
&lt;h2 id="general-characteristics">General Characteristics&lt;/h2>
&lt;ol>
&lt;li>First Class Citizens (Unit test code should be treated as good as your production code, like first-class citizens).&lt;/li>
&lt;li>Unit test code should be clean, readable, and maintainable.&lt;/li>
&lt;li>No code logic in unit tests (no &lt;code>if&lt;/code>, &lt;code>else&lt;/code> or &lt;code>for&lt;/code>, &lt;code>foreach&lt;/code>, &lt;code>while&lt;/code> loops)&lt;/li>
&lt;li>Isolated - one unit test should not call another unit test method.&lt;/li>
&lt;li>Not too specific or general - try to cover all scenarios like passing null, empty collection, and filled collection according to the characteristics of the system under test&lt;/li>
&lt;/ol>
&lt;!--
## Q&amp;A
(optional - add questions and answers)
-->
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>TBD&lt;/li>
&lt;/ul></description></item><item><title>Unit Test Writing Guideline</title><link>/docs/guides/to-review-references/software-development/unit-test-write-guideline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/guides/to-review-references/software-development/unit-test-write-guideline/</guid><description>&lt;p>In writing a unit test we should keep in mind the following four characteristics (acronym &lt;strong>RTFM&lt;/strong>):&lt;/p>
&lt;ul>
&lt;li>Readable&lt;/li>
&lt;li>Trustworthy&lt;/li>
&lt;li>Fast&lt;/li>
&lt;li>Maintainable&lt;/li>
&lt;/ul>
&lt;p>All of these characteristics are equally important and none can be removed without jeopardizing the result.&lt;/p>
&lt;h3 id="readable">Readable&lt;/h3>
&lt;ul>
&lt;li>Tests should be easy to locate (file structure, how to find a test for a class or method).&lt;/li>
&lt;li>Tests should be self-contained, like a little story. Write simple code: do this, call that, assert this.&lt;/li>
&lt;li>Test one thing only.&lt;/li>
&lt;li>Avoid magic values.&lt;/li>
&lt;li>Care a lot about naming your variables (examples…).&lt;/li>
&lt;li>Do not prefix with the test if not required by your framework.&lt;/li>
&lt;li>Method names for the test (are the only ones where we should not care about the length):
&lt;ul>
&lt;li>you will never have to type them a second-time&lt;/li>
&lt;li>use underscore (if not forbidden by your coding guideline) rather than camelCase, it is easier to read when names get long&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Naming the test is not that hard, it requires three things:
&lt;ul>
&lt;li>the thing that is tested.&lt;/li>
&lt;li>scenario, state under test.&lt;/li>
&lt;li>expected behavior/return value.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Where to put this information is dependent on the framework, usually, the method name is good enough.&lt;/li>
&lt;li>If it is the same test, but with different parameters, just add an index.&lt;/li>
&lt;/ul>
&lt;h3 id="trustworthy">Trustworthy&lt;/h3>
&lt;ul>
&lt;li>Never accept a failing test&lt;/li>
&lt;li>Never accept a sporadically failing test&lt;/li>
&lt;li>Code coverage is &lt;strong>worthless&lt;/strong> without test-code review&lt;/li>
&lt;li>Avoid any logic in test code&lt;/li>
&lt;li>Avoid any logic in asserts (more often than anticipated this is copy+paste business logic)&lt;/li>
&lt;li>Stupid, readable code. Hardcoded values (especially in asserts).&lt;/li>
&lt;li>Never use resources that keep changing (time, random, threads, etc. ).&lt;/li>
&lt;li>A good strategy during peer review: introduce a bug in the code and run the unit test, expect it to fail&lt;/li>
&lt;/ul>
&lt;h3 id="fast">Fast&lt;/h3>
&lt;p>That is kind of obvious, but an important property nonetheless to get fast turnaround times during development.&lt;/p>
&lt;p>A slow unit test is unlikely to be called frequently, but it should!&lt;/p>
&lt;h3 id="maintainable">Maintainable&lt;/h3>
&lt;ul>
&lt;li>Starting from the public interface, they usually start some use cases in the system&lt;/li>
&lt;li>Testing private API makes the test brittle, also there needs to be a public method that eventually calls a private method anyway&lt;/li>
&lt;li>There shall be no dependency between tests, each test needs to be fully consistent, running alone/altogether/any -order.
if there is common work for multiple tests:
&lt;ul>
&lt;li>Create objects using common methods (factory, make_XX())&lt;/li>
&lt;li>Manipulate objects / initial state using common methods (init_XX())&lt;/li>
&lt;li>Run Common tests in common methods (verify_XX())&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Separation:
&lt;ul>
&lt;li>a single thing per test:
&lt;ul>
&lt;li>only one &lt;strong>mock&lt;/strong> object per test (but you can have &lt;strong>stub&lt;/strong> objects just for faking, not asserting)&lt;/li>
&lt;li>test are hard to name/describe when not separated&lt;/li>
&lt;li>multiple asserts are a &lt;strong>code smell&lt;/strong>, especially if they are on different objects&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Each test should fail individually (do not early exit as soon as one test fails, you always want to get the full picture. Other tests may pass and give a hint on the nature of the problem) will likely lead to more debugging if tests are not separated&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item></channel></rss>