敏捷开发下的测试(一)敏捷测试核心

本文是参考ThoughtWork冰玉老师(https://blog.csdn.net/bingyulin)讲的敏捷课程加上自己的理解写的,想听原版可以关注ThonghtWork公众号,里面有课程回顾

传统测试和敏捷测试的区别

传统测试:

  • 独立的测试部门
  • 测试工作主要由测试人员承担
  • 详尽的测试用例文档
  • 集中的回归测试
  • 发现更多的 bug

敏捷测试:

在敏捷开发过程的所有进行质量把控的一种活动

  • 敏捷测试不能独立存在,不是一种测试类型或方法
  • 敏捷测试不仅是测试人员的工作,是团队的活动
  • 抛开敏捷开发谈敏捷测试没有意义

敏捷测试的目标:

更快速的交付高质量软件

如何实现敏捷测试的目标

#mermaid-svg-pvOZMhWBuMOwqZo7 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .label text{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .node rect,#mermaid-svg-pvOZMhWBuMOwqZo7 .node circle,#mermaid-svg-pvOZMhWBuMOwqZo7 .node ellipse,#mermaid-svg-pvOZMhWBuMOwqZo7 .node polygon,#mermaid-svg-pvOZMhWBuMOwqZo7 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-pvOZMhWBuMOwqZo7 .node .label{text-align:center;fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .node.clickable{cursor:pointer}#mermaid-svg-pvOZMhWBuMOwqZo7 .arrowheadPath{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-pvOZMhWBuMOwqZo7 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-pvOZMhWBuMOwqZo7 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-pvOZMhWBuMOwqZo7 .edgeLabel rect{opacity:0.9}#mermaid-svg-pvOZMhWBuMOwqZo7 .edgeLabel span{color:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-pvOZMhWBuMOwqZo7 .cluster text{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-pvOZMhWBuMOwqZo7 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-pvOZMhWBuMOwqZo7 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-pvOZMhWBuMOwqZo7 .actor-line{stroke:grey}#mermaid-svg-pvOZMhWBuMOwqZo7 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .sequenceNumber{fill:#fff}#mermaid-svg-pvOZMhWBuMOwqZo7 #sequencenumber{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .messageText{fill:#333;stroke:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-pvOZMhWBuMOwqZo7 .labelText,#mermaid-svg-pvOZMhWBuMOwqZo7 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-pvOZMhWBuMOwqZo7 .loopText,#mermaid-svg-pvOZMhWBuMOwqZo7 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-pvOZMhWBuMOwqZo7 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-pvOZMhWBuMOwqZo7 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-pvOZMhWBuMOwqZo7 .noteText,#mermaid-svg-pvOZMhWBuMOwqZo7 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-pvOZMhWBuMOwqZo7 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-pvOZMhWBuMOwqZo7 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-pvOZMhWBuMOwqZo7 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-pvOZMhWBuMOwqZo7 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .section{stroke:none;opacity:0.2}#mermaid-svg-pvOZMhWBuMOwqZo7 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-pvOZMhWBuMOwqZo7 .section2{fill:#fff400}#mermaid-svg-pvOZMhWBuMOwqZo7 .section1,#mermaid-svg-pvOZMhWBuMOwqZo7 .section3{fill:#fff;opacity:0.2}#mermaid-svg-pvOZMhWBuMOwqZo7 .sectionTitle0{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .sectionTitle1{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .sectionTitle2{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .sectionTitle3{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-pvOZMhWBuMOwqZo7 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .grid path{stroke-width:0}#mermaid-svg-pvOZMhWBuMOwqZo7 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-pvOZMhWBuMOwqZo7 .task{stroke-width:2}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskText:not([font-size]){font-size:11px}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-pvOZMhWBuMOwqZo7 .task.clickable{cursor:pointer}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskText0,#mermaid-svg-pvOZMhWBuMOwqZo7 .taskText1,#mermaid-svg-pvOZMhWBuMOwqZo7 .taskText2,#mermaid-svg-pvOZMhWBuMOwqZo7 .taskText3{fill:#fff}#mermaid-svg-pvOZMhWBuMOwqZo7 .task0,#mermaid-svg-pvOZMhWBuMOwqZo7 .task1,#mermaid-svg-pvOZMhWBuMOwqZo7 .task2,#mermaid-svg-pvOZMhWBuMOwqZo7 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutside0,#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutside2{fill:#000}#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutside1,#mermaid-svg-pvOZMhWBuMOwqZo7 .taskTextOutside3{fill:#000}#mermaid-svg-pvOZMhWBuMOwqZo7 .active0,#mermaid-svg-pvOZMhWBuMOwqZo7 .active1,#mermaid-svg-pvOZMhWBuMOwqZo7 .active2,#mermaid-svg-pvOZMhWBuMOwqZo7 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-pvOZMhWBuMOwqZo7 .activeText0,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeText1,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeText2,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeText3{fill:#000 !important}#mermaid-svg-pvOZMhWBuMOwqZo7 .done0,#mermaid-svg-pvOZMhWBuMOwqZo7 .done1,#mermaid-svg-pvOZMhWBuMOwqZo7 .done2,#mermaid-svg-pvOZMhWBuMOwqZo7 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-pvOZMhWBuMOwqZo7 .doneText0,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneText1,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneText2,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneText3{fill:#000 !important}#mermaid-svg-pvOZMhWBuMOwqZo7 .crit0,#mermaid-svg-pvOZMhWBuMOwqZo7 .crit1,#mermaid-svg-pvOZMhWBuMOwqZo7 .crit2,#mermaid-svg-pvOZMhWBuMOwqZo7 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCrit0,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCrit1,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCrit2,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCrit0,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCrit1,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCrit2,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-pvOZMhWBuMOwqZo7 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-pvOZMhWBuMOwqZo7 .milestoneText{font-style:italic}#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCritText0,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCritText1,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCritText2,#mermaid-svg-pvOZMhWBuMOwqZo7 .doneCritText3{fill:#000 !important}#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCritText0,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCritText1,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCritText2,#mermaid-svg-pvOZMhWBuMOwqZo7 .activeCritText3{fill:#000 !important}#mermaid-svg-pvOZMhWBuMOwqZo7 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-pvOZMhWBuMOwqZo7 g.classGroup text .title{font-weight:bolder}#mermaid-svg-pvOZMhWBuMOwqZo7 g.clickable{cursor:pointer}#mermaid-svg-pvOZMhWBuMOwqZo7 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-pvOZMhWBuMOwqZo7 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-pvOZMhWBuMOwqZo7 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-pvOZMhWBuMOwqZo7 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-pvOZMhWBuMOwqZo7 .dashed-line{stroke-dasharray:3}#mermaid-svg-pvOZMhWBuMOwqZo7 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 .commit-id,#mermaid-svg-pvOZMhWBuMOwqZo7 .commit-msg,#mermaid-svg-pvOZMhWBuMOwqZo7 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-pvOZMhWBuMOwqZo7 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-pvOZMhWBuMOwqZo7 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-pvOZMhWBuMOwqZo7 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-pvOZMhWBuMOwqZo7 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-pvOZMhWBuMOwqZo7 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-pvOZMhWBuMOwqZo7 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-pvOZMhWBuMOwqZo7 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-pvOZMhWBuMOwqZo7 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-pvOZMhWBuMOwqZo7 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-pvOZMhWBuMOwqZo7 .edgeLabel text{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pvOZMhWBuMOwqZo7 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-pvOZMhWBuMOwqZo7 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-pvOZMhWBuMOwqZo7 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-pvOZMhWBuMOwqZo7 .note-edge{stroke-dasharray:5}#mermaid-svg-pvOZMhWBuMOwqZo7 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-pvOZMhWBuMOwqZo7 .error-icon{fill:#522}#mermaid-svg-pvOZMhWBuMOwqZo7 .error-text{fill:#522;stroke:#522}#mermaid-svg-pvOZMhWBuMOwqZo7 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-pvOZMhWBuMOwqZo7 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-pvOZMhWBuMOwqZo7 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-pvOZMhWBuMOwqZo7 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-pvOZMhWBuMOwqZo7 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-pvOZMhWBuMOwqZo7 .marker{fill:#333}#mermaid-svg-pvOZMhWBuMOwqZo7 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-pvOZMhWBuMOwqZo7 {color: rgba(0, 0, 0, 0.75);font: ;}

敏捷测试的核心是质量内建
#mermaid-svg-oZaRudPsWRySKrKy .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-oZaRudPsWRySKrKy .label text{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .node rect,#mermaid-svg-oZaRudPsWRySKrKy .node circle,#mermaid-svg-oZaRudPsWRySKrKy .node ellipse,#mermaid-svg-oZaRudPsWRySKrKy .node polygon,#mermaid-svg-oZaRudPsWRySKrKy .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-oZaRudPsWRySKrKy .node .label{text-align:center;fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .node.clickable{cursor:pointer}#mermaid-svg-oZaRudPsWRySKrKy .arrowheadPath{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-oZaRudPsWRySKrKy .flowchart-link{stroke:#333;fill:none}#mermaid-svg-oZaRudPsWRySKrKy .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-oZaRudPsWRySKrKy .edgeLabel rect{opacity:0.9}#mermaid-svg-oZaRudPsWRySKrKy .edgeLabel span{color:#333}#mermaid-svg-oZaRudPsWRySKrKy .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-oZaRudPsWRySKrKy .cluster text{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-oZaRudPsWRySKrKy .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-oZaRudPsWRySKrKy text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-oZaRudPsWRySKrKy .actor-line{stroke:grey}#mermaid-svg-oZaRudPsWRySKrKy .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-oZaRudPsWRySKrKy .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-oZaRudPsWRySKrKy #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-oZaRudPsWRySKrKy .sequenceNumber{fill:#fff}#mermaid-svg-oZaRudPsWRySKrKy #sequencenumber{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy #crosshead path{fill:#333;stroke:#333}#mermaid-svg-oZaRudPsWRySKrKy .messageText{fill:#333;stroke:#333}#mermaid-svg-oZaRudPsWRySKrKy .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-oZaRudPsWRySKrKy .labelText,#mermaid-svg-oZaRudPsWRySKrKy .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-oZaRudPsWRySKrKy .loopText,#mermaid-svg-oZaRudPsWRySKrKy .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-oZaRudPsWRySKrKy .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-oZaRudPsWRySKrKy .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-oZaRudPsWRySKrKy .noteText,#mermaid-svg-oZaRudPsWRySKrKy .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-oZaRudPsWRySKrKy .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-oZaRudPsWRySKrKy .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-oZaRudPsWRySKrKy .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-oZaRudPsWRySKrKy .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .section{stroke:none;opacity:0.2}#mermaid-svg-oZaRudPsWRySKrKy .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-oZaRudPsWRySKrKy .section2{fill:#fff400}#mermaid-svg-oZaRudPsWRySKrKy .section1,#mermaid-svg-oZaRudPsWRySKrKy .section3{fill:#fff;opacity:0.2}#mermaid-svg-oZaRudPsWRySKrKy .sectionTitle0{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .sectionTitle1{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .sectionTitle2{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .sectionTitle3{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-oZaRudPsWRySKrKy .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .grid path{stroke-width:0}#mermaid-svg-oZaRudPsWRySKrKy .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-oZaRudPsWRySKrKy .task{stroke-width:2}#mermaid-svg-oZaRudPsWRySKrKy .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .taskText:not([font-size]){font-size:11px}#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-oZaRudPsWRySKrKy .task.clickable{cursor:pointer}#mermaid-svg-oZaRudPsWRySKrKy .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-oZaRudPsWRySKrKy .taskText0,#mermaid-svg-oZaRudPsWRySKrKy .taskText1,#mermaid-svg-oZaRudPsWRySKrKy .taskText2,#mermaid-svg-oZaRudPsWRySKrKy .taskText3{fill:#fff}#mermaid-svg-oZaRudPsWRySKrKy .task0,#mermaid-svg-oZaRudPsWRySKrKy .task1,#mermaid-svg-oZaRudPsWRySKrKy .task2,#mermaid-svg-oZaRudPsWRySKrKy .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutside0,#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutside2{fill:#000}#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutside1,#mermaid-svg-oZaRudPsWRySKrKy .taskTextOutside3{fill:#000}#mermaid-svg-oZaRudPsWRySKrKy .active0,#mermaid-svg-oZaRudPsWRySKrKy .active1,#mermaid-svg-oZaRudPsWRySKrKy .active2,#mermaid-svg-oZaRudPsWRySKrKy .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-oZaRudPsWRySKrKy .activeText0,#mermaid-svg-oZaRudPsWRySKrKy .activeText1,#mermaid-svg-oZaRudPsWRySKrKy .activeText2,#mermaid-svg-oZaRudPsWRySKrKy .activeText3{fill:#000 !important}#mermaid-svg-oZaRudPsWRySKrKy .done0,#mermaid-svg-oZaRudPsWRySKrKy .done1,#mermaid-svg-oZaRudPsWRySKrKy .done2,#mermaid-svg-oZaRudPsWRySKrKy .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-oZaRudPsWRySKrKy .doneText0,#mermaid-svg-oZaRudPsWRySKrKy .doneText1,#mermaid-svg-oZaRudPsWRySKrKy .doneText2,#mermaid-svg-oZaRudPsWRySKrKy .doneText3{fill:#000 !important}#mermaid-svg-oZaRudPsWRySKrKy .crit0,#mermaid-svg-oZaRudPsWRySKrKy .crit1,#mermaid-svg-oZaRudPsWRySKrKy .crit2,#mermaid-svg-oZaRudPsWRySKrKy .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-oZaRudPsWRySKrKy .activeCrit0,#mermaid-svg-oZaRudPsWRySKrKy .activeCrit1,#mermaid-svg-oZaRudPsWRySKrKy .activeCrit2,#mermaid-svg-oZaRudPsWRySKrKy .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-oZaRudPsWRySKrKy .doneCrit0,#mermaid-svg-oZaRudPsWRySKrKy .doneCrit1,#mermaid-svg-oZaRudPsWRySKrKy .doneCrit2,#mermaid-svg-oZaRudPsWRySKrKy .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-oZaRudPsWRySKrKy .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-oZaRudPsWRySKrKy .milestoneText{font-style:italic}#mermaid-svg-oZaRudPsWRySKrKy .doneCritText0,#mermaid-svg-oZaRudPsWRySKrKy .doneCritText1,#mermaid-svg-oZaRudPsWRySKrKy .doneCritText2,#mermaid-svg-oZaRudPsWRySKrKy .doneCritText3{fill:#000 !important}#mermaid-svg-oZaRudPsWRySKrKy .activeCritText0,#mermaid-svg-oZaRudPsWRySKrKy .activeCritText1,#mermaid-svg-oZaRudPsWRySKrKy .activeCritText2,#mermaid-svg-oZaRudPsWRySKrKy .activeCritText3{fill:#000 !important}#mermaid-svg-oZaRudPsWRySKrKy .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-oZaRudPsWRySKrKy g.classGroup text .title{font-weight:bolder}#mermaid-svg-oZaRudPsWRySKrKy g.clickable{cursor:pointer}#mermaid-svg-oZaRudPsWRySKrKy g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-oZaRudPsWRySKrKy g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-oZaRudPsWRySKrKy .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-oZaRudPsWRySKrKy .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-oZaRudPsWRySKrKy .dashed-line{stroke-dasharray:3}#mermaid-svg-oZaRudPsWRySKrKy #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy .commit-id,#mermaid-svg-oZaRudPsWRySKrKy .commit-msg,#mermaid-svg-oZaRudPsWRySKrKy .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-oZaRudPsWRySKrKy g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-oZaRudPsWRySKrKy g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-oZaRudPsWRySKrKy g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-oZaRudPsWRySKrKy .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-oZaRudPsWRySKrKy .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-oZaRudPsWRySKrKy .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-oZaRudPsWRySKrKy .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-oZaRudPsWRySKrKy .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-oZaRudPsWRySKrKy .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-oZaRudPsWRySKrKy .edgeLabel text{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZaRudPsWRySKrKy .node circle.state-start{fill:black;stroke:black}#mermaid-svg-oZaRudPsWRySKrKy .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-oZaRudPsWRySKrKy #statediagram-barbEnd{fill:#9370db}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-state .divider{stroke:#9370db}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-oZaRudPsWRySKrKy .note-edge{stroke-dasharray:5}#mermaid-svg-oZaRudPsWRySKrKy .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-oZaRudPsWRySKrKy .error-icon{fill:#522}#mermaid-svg-oZaRudPsWRySKrKy .error-text{fill:#522;stroke:#522}#mermaid-svg-oZaRudPsWRySKrKy .edge-thickness-normal{stroke-width:2px}#mermaid-svg-oZaRudPsWRySKrKy .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-oZaRudPsWRySKrKy .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-oZaRudPsWRySKrKy .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-oZaRudPsWRySKrKy .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-oZaRudPsWRySKrKy .marker{fill:#333}#mermaid-svg-oZaRudPsWRySKrKy .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-oZaRudPsWRySKrKy {color: rgba(0, 0, 0, 0.75);font: ;}

测试左移
持续测试
测试驱动开发
  • 质量内建的核心就是预防缺陷大于发现缺陷
  • 缺陷发现的越晚,修复的成本就越高,所以尽可能的开发初期就尽可能的发现缺陷

测试左移

我们先看下敏捷开发的生命周期及每轮迭代生命周期

#mermaid-svg-rZMNTmmoy29BlWcf .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-rZMNTmmoy29BlWcf .label text{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .node rect,#mermaid-svg-rZMNTmmoy29BlWcf .node circle,#mermaid-svg-rZMNTmmoy29BlWcf .node ellipse,#mermaid-svg-rZMNTmmoy29BlWcf .node polygon,#mermaid-svg-rZMNTmmoy29BlWcf .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-rZMNTmmoy29BlWcf .node .label{text-align:center;fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .node.clickable{cursor:pointer}#mermaid-svg-rZMNTmmoy29BlWcf .arrowheadPath{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-rZMNTmmoy29BlWcf .flowchart-link{stroke:#333;fill:none}#mermaid-svg-rZMNTmmoy29BlWcf .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-rZMNTmmoy29BlWcf .edgeLabel rect{opacity:0.9}#mermaid-svg-rZMNTmmoy29BlWcf .edgeLabel span{color:#333}#mermaid-svg-rZMNTmmoy29BlWcf .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-rZMNTmmoy29BlWcf .cluster text{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-rZMNTmmoy29BlWcf .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-rZMNTmmoy29BlWcf text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-rZMNTmmoy29BlWcf .actor-line{stroke:grey}#mermaid-svg-rZMNTmmoy29BlWcf .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-rZMNTmmoy29BlWcf .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-rZMNTmmoy29BlWcf #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-rZMNTmmoy29BlWcf .sequenceNumber{fill:#fff}#mermaid-svg-rZMNTmmoy29BlWcf #sequencenumber{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf #crosshead path{fill:#333;stroke:#333}#mermaid-svg-rZMNTmmoy29BlWcf .messageText{fill:#333;stroke:#333}#mermaid-svg-rZMNTmmoy29BlWcf .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-rZMNTmmoy29BlWcf .labelText,#mermaid-svg-rZMNTmmoy29BlWcf .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-rZMNTmmoy29BlWcf .loopText,#mermaid-svg-rZMNTmmoy29BlWcf .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-rZMNTmmoy29BlWcf .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-rZMNTmmoy29BlWcf .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-rZMNTmmoy29BlWcf .noteText,#mermaid-svg-rZMNTmmoy29BlWcf .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-rZMNTmmoy29BlWcf .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-rZMNTmmoy29BlWcf .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-rZMNTmmoy29BlWcf .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-rZMNTmmoy29BlWcf .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .section{stroke:none;opacity:0.2}#mermaid-svg-rZMNTmmoy29BlWcf .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-rZMNTmmoy29BlWcf .section2{fill:#fff400}#mermaid-svg-rZMNTmmoy29BlWcf .section1,#mermaid-svg-rZMNTmmoy29BlWcf .section3{fill:#fff;opacity:0.2}#mermaid-svg-rZMNTmmoy29BlWcf .sectionTitle0{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .sectionTitle1{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .sectionTitle2{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .sectionTitle3{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-rZMNTmmoy29BlWcf .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .grid path{stroke-width:0}#mermaid-svg-rZMNTmmoy29BlWcf .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-rZMNTmmoy29BlWcf .task{stroke-width:2}#mermaid-svg-rZMNTmmoy29BlWcf .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .taskText:not([font-size]){font-size:11px}#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-rZMNTmmoy29BlWcf .task.clickable{cursor:pointer}#mermaid-svg-rZMNTmmoy29BlWcf .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-rZMNTmmoy29BlWcf .taskText0,#mermaid-svg-rZMNTmmoy29BlWcf .taskText1,#mermaid-svg-rZMNTmmoy29BlWcf .taskText2,#mermaid-svg-rZMNTmmoy29BlWcf .taskText3{fill:#fff}#mermaid-svg-rZMNTmmoy29BlWcf .task0,#mermaid-svg-rZMNTmmoy29BlWcf .task1,#mermaid-svg-rZMNTmmoy29BlWcf .task2,#mermaid-svg-rZMNTmmoy29BlWcf .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutside0,#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutside2{fill:#000}#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutside1,#mermaid-svg-rZMNTmmoy29BlWcf .taskTextOutside3{fill:#000}#mermaid-svg-rZMNTmmoy29BlWcf .active0,#mermaid-svg-rZMNTmmoy29BlWcf .active1,#mermaid-svg-rZMNTmmoy29BlWcf .active2,#mermaid-svg-rZMNTmmoy29BlWcf .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-rZMNTmmoy29BlWcf .activeText0,#mermaid-svg-rZMNTmmoy29BlWcf .activeText1,#mermaid-svg-rZMNTmmoy29BlWcf .activeText2,#mermaid-svg-rZMNTmmoy29BlWcf .activeText3{fill:#000 !important}#mermaid-svg-rZMNTmmoy29BlWcf .done0,#mermaid-svg-rZMNTmmoy29BlWcf .done1,#mermaid-svg-rZMNTmmoy29BlWcf .done2,#mermaid-svg-rZMNTmmoy29BlWcf .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-rZMNTmmoy29BlWcf .doneText0,#mermaid-svg-rZMNTmmoy29BlWcf .doneText1,#mermaid-svg-rZMNTmmoy29BlWcf .doneText2,#mermaid-svg-rZMNTmmoy29BlWcf .doneText3{fill:#000 !important}#mermaid-svg-rZMNTmmoy29BlWcf .crit0,#mermaid-svg-rZMNTmmoy29BlWcf .crit1,#mermaid-svg-rZMNTmmoy29BlWcf .crit2,#mermaid-svg-rZMNTmmoy29BlWcf .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-rZMNTmmoy29BlWcf .activeCrit0,#mermaid-svg-rZMNTmmoy29BlWcf .activeCrit1,#mermaid-svg-rZMNTmmoy29BlWcf .activeCrit2,#mermaid-svg-rZMNTmmoy29BlWcf .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-rZMNTmmoy29BlWcf .doneCrit0,#mermaid-svg-rZMNTmmoy29BlWcf .doneCrit1,#mermaid-svg-rZMNTmmoy29BlWcf .doneCrit2,#mermaid-svg-rZMNTmmoy29BlWcf .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-rZMNTmmoy29BlWcf .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-rZMNTmmoy29BlWcf .milestoneText{font-style:italic}#mermaid-svg-rZMNTmmoy29BlWcf .doneCritText0,#mermaid-svg-rZMNTmmoy29BlWcf .doneCritText1,#mermaid-svg-rZMNTmmoy29BlWcf .doneCritText2,#mermaid-svg-rZMNTmmoy29BlWcf .doneCritText3{fill:#000 !important}#mermaid-svg-rZMNTmmoy29BlWcf .activeCritText0,#mermaid-svg-rZMNTmmoy29BlWcf .activeCritText1,#mermaid-svg-rZMNTmmoy29BlWcf .activeCritText2,#mermaid-svg-rZMNTmmoy29BlWcf .activeCritText3{fill:#000 !important}#mermaid-svg-rZMNTmmoy29BlWcf .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-rZMNTmmoy29BlWcf g.classGroup text .title{font-weight:bolder}#mermaid-svg-rZMNTmmoy29BlWcf g.clickable{cursor:pointer}#mermaid-svg-rZMNTmmoy29BlWcf g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-rZMNTmmoy29BlWcf g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-rZMNTmmoy29BlWcf .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-rZMNTmmoy29BlWcf .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-rZMNTmmoy29BlWcf .dashed-line{stroke-dasharray:3}#mermaid-svg-rZMNTmmoy29BlWcf #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf .commit-id,#mermaid-svg-rZMNTmmoy29BlWcf .commit-msg,#mermaid-svg-rZMNTmmoy29BlWcf .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-rZMNTmmoy29BlWcf g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-rZMNTmmoy29BlWcf g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-rZMNTmmoy29BlWcf g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-rZMNTmmoy29BlWcf .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-rZMNTmmoy29BlWcf .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-rZMNTmmoy29BlWcf .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-rZMNTmmoy29BlWcf .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-rZMNTmmoy29BlWcf .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-rZMNTmmoy29BlWcf .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-rZMNTmmoy29BlWcf .edgeLabel text{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-rZMNTmmoy29BlWcf .node circle.state-start{fill:black;stroke:black}#mermaid-svg-rZMNTmmoy29BlWcf .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-rZMNTmmoy29BlWcf #statediagram-barbEnd{fill:#9370db}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-state .divider{stroke:#9370db}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-rZMNTmmoy29BlWcf .note-edge{stroke-dasharray:5}#mermaid-svg-rZMNTmmoy29BlWcf .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-rZMNTmmoy29BlWcf .error-icon{fill:#522}#mermaid-svg-rZMNTmmoy29BlWcf .error-text{fill:#522;stroke:#522}#mermaid-svg-rZMNTmmoy29BlWcf .edge-thickness-normal{stroke-width:2px}#mermaid-svg-rZMNTmmoy29BlWcf .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-rZMNTmmoy29BlWcf .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-rZMNTmmoy29BlWcf .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-rZMNTmmoy29BlWcf .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-rZMNTmmoy29BlWcf .marker{fill:#333}#mermaid-svg-rZMNTmmoy29BlWcf .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-rZMNTmmoy29BlWcf {color: rgba(0, 0, 0, 0.75);font: ;}

敏捷开发生命周期
#mermaid-svg-iITT6yBin4PleQVK .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-iITT6yBin4PleQVK .label text{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .node rect,#mermaid-svg-iITT6yBin4PleQVK .node circle,#mermaid-svg-iITT6yBin4PleQVK .node ellipse,#mermaid-svg-iITT6yBin4PleQVK .node polygon,#mermaid-svg-iITT6yBin4PleQVK .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-iITT6yBin4PleQVK .node .label{text-align:center;fill:#333}#mermaid-svg-iITT6yBin4PleQVK .node.clickable{cursor:pointer}#mermaid-svg-iITT6yBin4PleQVK .arrowheadPath{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-iITT6yBin4PleQVK .flowchart-link{stroke:#333;fill:none}#mermaid-svg-iITT6yBin4PleQVK .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-iITT6yBin4PleQVK .edgeLabel rect{opacity:0.9}#mermaid-svg-iITT6yBin4PleQVK .edgeLabel span{color:#333}#mermaid-svg-iITT6yBin4PleQVK .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-iITT6yBin4PleQVK .cluster text{fill:#333}#mermaid-svg-iITT6yBin4PleQVK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-iITT6yBin4PleQVK .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-iITT6yBin4PleQVK text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-iITT6yBin4PleQVK .actor-line{stroke:grey}#mermaid-svg-iITT6yBin4PleQVK .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-iITT6yBin4PleQVK .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-iITT6yBin4PleQVK #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-iITT6yBin4PleQVK .sequenceNumber{fill:#fff}#mermaid-svg-iITT6yBin4PleQVK #sequencenumber{fill:#333}#mermaid-svg-iITT6yBin4PleQVK #crosshead path{fill:#333;stroke:#333}#mermaid-svg-iITT6yBin4PleQVK .messageText{fill:#333;stroke:#333}#mermaid-svg-iITT6yBin4PleQVK .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-iITT6yBin4PleQVK .labelText,#mermaid-svg-iITT6yBin4PleQVK .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-iITT6yBin4PleQVK .loopText,#mermaid-svg-iITT6yBin4PleQVK .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-iITT6yBin4PleQVK .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-iITT6yBin4PleQVK .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-iITT6yBin4PleQVK .noteText,#mermaid-svg-iITT6yBin4PleQVK .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-iITT6yBin4PleQVK .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-iITT6yBin4PleQVK .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-iITT6yBin4PleQVK .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-iITT6yBin4PleQVK .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .section{stroke:none;opacity:0.2}#mermaid-svg-iITT6yBin4PleQVK .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-iITT6yBin4PleQVK .section2{fill:#fff400}#mermaid-svg-iITT6yBin4PleQVK .section1,#mermaid-svg-iITT6yBin4PleQVK .section3{fill:#fff;opacity:0.2}#mermaid-svg-iITT6yBin4PleQVK .sectionTitle0{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .sectionTitle1{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .sectionTitle2{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .sectionTitle3{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-iITT6yBin4PleQVK .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .grid path{stroke-width:0}#mermaid-svg-iITT6yBin4PleQVK .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-iITT6yBin4PleQVK .task{stroke-width:2}#mermaid-svg-iITT6yBin4PleQVK .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .taskText:not([font-size]){font-size:11px}#mermaid-svg-iITT6yBin4PleQVK .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-iITT6yBin4PleQVK .task.clickable{cursor:pointer}#mermaid-svg-iITT6yBin4PleQVK .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-iITT6yBin4PleQVK .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-iITT6yBin4PleQVK .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-iITT6yBin4PleQVK .taskText0,#mermaid-svg-iITT6yBin4PleQVK .taskText1,#mermaid-svg-iITT6yBin4PleQVK .taskText2,#mermaid-svg-iITT6yBin4PleQVK .taskText3{fill:#fff}#mermaid-svg-iITT6yBin4PleQVK .task0,#mermaid-svg-iITT6yBin4PleQVK .task1,#mermaid-svg-iITT6yBin4PleQVK .task2,#mermaid-svg-iITT6yBin4PleQVK .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-iITT6yBin4PleQVK .taskTextOutside0,#mermaid-svg-iITT6yBin4PleQVK .taskTextOutside2{fill:#000}#mermaid-svg-iITT6yBin4PleQVK .taskTextOutside1,#mermaid-svg-iITT6yBin4PleQVK .taskTextOutside3{fill:#000}#mermaid-svg-iITT6yBin4PleQVK .active0,#mermaid-svg-iITT6yBin4PleQVK .active1,#mermaid-svg-iITT6yBin4PleQVK .active2,#mermaid-svg-iITT6yBin4PleQVK .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-iITT6yBin4PleQVK .activeText0,#mermaid-svg-iITT6yBin4PleQVK .activeText1,#mermaid-svg-iITT6yBin4PleQVK .activeText2,#mermaid-svg-iITT6yBin4PleQVK .activeText3{fill:#000 !important}#mermaid-svg-iITT6yBin4PleQVK .done0,#mermaid-svg-iITT6yBin4PleQVK .done1,#mermaid-svg-iITT6yBin4PleQVK .done2,#mermaid-svg-iITT6yBin4PleQVK .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-iITT6yBin4PleQVK .doneText0,#mermaid-svg-iITT6yBin4PleQVK .doneText1,#mermaid-svg-iITT6yBin4PleQVK .doneText2,#mermaid-svg-iITT6yBin4PleQVK .doneText3{fill:#000 !important}#mermaid-svg-iITT6yBin4PleQVK .crit0,#mermaid-svg-iITT6yBin4PleQVK .crit1,#mermaid-svg-iITT6yBin4PleQVK .crit2,#mermaid-svg-iITT6yBin4PleQVK .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-iITT6yBin4PleQVK .activeCrit0,#mermaid-svg-iITT6yBin4PleQVK .activeCrit1,#mermaid-svg-iITT6yBin4PleQVK .activeCrit2,#mermaid-svg-iITT6yBin4PleQVK .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-iITT6yBin4PleQVK .doneCrit0,#mermaid-svg-iITT6yBin4PleQVK .doneCrit1,#mermaid-svg-iITT6yBin4PleQVK .doneCrit2,#mermaid-svg-iITT6yBin4PleQVK .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-iITT6yBin4PleQVK .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-iITT6yBin4PleQVK .milestoneText{font-style:italic}#mermaid-svg-iITT6yBin4PleQVK .doneCritText0,#mermaid-svg-iITT6yBin4PleQVK .doneCritText1,#mermaid-svg-iITT6yBin4PleQVK .doneCritText2,#mermaid-svg-iITT6yBin4PleQVK .doneCritText3{fill:#000 !important}#mermaid-svg-iITT6yBin4PleQVK .activeCritText0,#mermaid-svg-iITT6yBin4PleQVK .activeCritText1,#mermaid-svg-iITT6yBin4PleQVK .activeCritText2,#mermaid-svg-iITT6yBin4PleQVK .activeCritText3{fill:#000 !important}#mermaid-svg-iITT6yBin4PleQVK .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-iITT6yBin4PleQVK g.classGroup text .title{font-weight:bolder}#mermaid-svg-iITT6yBin4PleQVK g.clickable{cursor:pointer}#mermaid-svg-iITT6yBin4PleQVK g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-iITT6yBin4PleQVK g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-iITT6yBin4PleQVK .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-iITT6yBin4PleQVK .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-iITT6yBin4PleQVK .dashed-line{stroke-dasharray:3}#mermaid-svg-iITT6yBin4PleQVK #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK .commit-id,#mermaid-svg-iITT6yBin4PleQVK .commit-msg,#mermaid-svg-iITT6yBin4PleQVK .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-iITT6yBin4PleQVK g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-iITT6yBin4PleQVK g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-iITT6yBin4PleQVK g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-iITT6yBin4PleQVK g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-iITT6yBin4PleQVK .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-iITT6yBin4PleQVK .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-iITT6yBin4PleQVK .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-iITT6yBin4PleQVK .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-iITT6yBin4PleQVK .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-iITT6yBin4PleQVK .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-iITT6yBin4PleQVK .edgeLabel text{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-iITT6yBin4PleQVK .node circle.state-start{fill:black;stroke:black}#mermaid-svg-iITT6yBin4PleQVK .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-iITT6yBin4PleQVK #statediagram-barbEnd{fill:#9370db}#mermaid-svg-iITT6yBin4PleQVK .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-iITT6yBin4PleQVK .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-iITT6yBin4PleQVK .statediagram-state .divider{stroke:#9370db}#mermaid-svg-iITT6yBin4PleQVK .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-iITT6yBin4PleQVK .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-iITT6yBin4PleQVK .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-iITT6yBin4PleQVK .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-iITT6yBin4PleQVK .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-iITT6yBin4PleQVK .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-iITT6yBin4PleQVK .note-edge{stroke-dasharray:5}#mermaid-svg-iITT6yBin4PleQVK .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-iITT6yBin4PleQVK .error-icon{fill:#522}#mermaid-svg-iITT6yBin4PleQVK .error-text{fill:#522;stroke:#522}#mermaid-svg-iITT6yBin4PleQVK .edge-thickness-normal{stroke-width:2px}#mermaid-svg-iITT6yBin4PleQVK .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-iITT6yBin4PleQVK .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-iITT6yBin4PleQVK .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-iITT6yBin4PleQVK .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-iITT6yBin4PleQVK .marker{fill:#333}#mermaid-svg-iITT6yBin4PleQVK .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-iITT6yBin4PleQVK {color: rgba(0, 0, 0, 0.75);font: ;}初期迭代开发与持续发布生产迭代0->>迭代1>迭代2>迭代3···->>迭代N>初期迭代开发与持续发布生产
#mermaid-svg-yDAb0s4NCg8gjho4 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .label text{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .node rect,#mermaid-svg-yDAb0s4NCg8gjho4 .node circle,#mermaid-svg-yDAb0s4NCg8gjho4 .node ellipse,#mermaid-svg-yDAb0s4NCg8gjho4 .node polygon,#mermaid-svg-yDAb0s4NCg8gjho4 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-yDAb0s4NCg8gjho4 .node .label{text-align:center;fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .node.clickable{cursor:pointer}#mermaid-svg-yDAb0s4NCg8gjho4 .arrowheadPath{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-yDAb0s4NCg8gjho4 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-yDAb0s4NCg8gjho4 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-yDAb0s4NCg8gjho4 .edgeLabel rect{opacity:0.9}#mermaid-svg-yDAb0s4NCg8gjho4 .edgeLabel span{color:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-yDAb0s4NCg8gjho4 .cluster text{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-yDAb0s4NCg8gjho4 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-yDAb0s4NCg8gjho4 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-yDAb0s4NCg8gjho4 .actor-line{stroke:grey}#mermaid-svg-yDAb0s4NCg8gjho4 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-yDAb0s4NCg8gjho4 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .sequenceNumber{fill:#fff}#mermaid-svg-yDAb0s4NCg8gjho4 #sequencenumber{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .messageText{fill:#333;stroke:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-yDAb0s4NCg8gjho4 .labelText,#mermaid-svg-yDAb0s4NCg8gjho4 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-yDAb0s4NCg8gjho4 .loopText,#mermaid-svg-yDAb0s4NCg8gjho4 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-yDAb0s4NCg8gjho4 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-yDAb0s4NCg8gjho4 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-yDAb0s4NCg8gjho4 .noteText,#mermaid-svg-yDAb0s4NCg8gjho4 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-yDAb0s4NCg8gjho4 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-yDAb0s4NCg8gjho4 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-yDAb0s4NCg8gjho4 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-yDAb0s4NCg8gjho4 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .section{stroke:none;opacity:0.2}#mermaid-svg-yDAb0s4NCg8gjho4 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-yDAb0s4NCg8gjho4 .section2{fill:#fff400}#mermaid-svg-yDAb0s4NCg8gjho4 .section1,#mermaid-svg-yDAb0s4NCg8gjho4 .section3{fill:#fff;opacity:0.2}#mermaid-svg-yDAb0s4NCg8gjho4 .sectionTitle0{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .sectionTitle1{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .sectionTitle2{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .sectionTitle3{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-yDAb0s4NCg8gjho4 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .grid path{stroke-width:0}#mermaid-svg-yDAb0s4NCg8gjho4 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-yDAb0s4NCg8gjho4 .task{stroke-width:2}#mermaid-svg-yDAb0s4NCg8gjho4 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .taskText:not([font-size]){font-size:11px}#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-yDAb0s4NCg8gjho4 .task.clickable{cursor:pointer}#mermaid-svg-yDAb0s4NCg8gjho4 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yDAb0s4NCg8gjho4 .taskText0,#mermaid-svg-yDAb0s4NCg8gjho4 .taskText1,#mermaid-svg-yDAb0s4NCg8gjho4 .taskText2,#mermaid-svg-yDAb0s4NCg8gjho4 .taskText3{fill:#fff}#mermaid-svg-yDAb0s4NCg8gjho4 .task0,#mermaid-svg-yDAb0s4NCg8gjho4 .task1,#mermaid-svg-yDAb0s4NCg8gjho4 .task2,#mermaid-svg-yDAb0s4NCg8gjho4 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutside0,#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutside2{fill:#000}#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutside1,#mermaid-svg-yDAb0s4NCg8gjho4 .taskTextOutside3{fill:#000}#mermaid-svg-yDAb0s4NCg8gjho4 .active0,#mermaid-svg-yDAb0s4NCg8gjho4 .active1,#mermaid-svg-yDAb0s4NCg8gjho4 .active2,#mermaid-svg-yDAb0s4NCg8gjho4 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-yDAb0s4NCg8gjho4 .activeText0,#mermaid-svg-yDAb0s4NCg8gjho4 .activeText1,#mermaid-svg-yDAb0s4NCg8gjho4 .activeText2,#mermaid-svg-yDAb0s4NCg8gjho4 .activeText3{fill:#000 !important}#mermaid-svg-yDAb0s4NCg8gjho4 .done0,#mermaid-svg-yDAb0s4NCg8gjho4 .done1,#mermaid-svg-yDAb0s4NCg8gjho4 .done2,#mermaid-svg-yDAb0s4NCg8gjho4 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-yDAb0s4NCg8gjho4 .doneText0,#mermaid-svg-yDAb0s4NCg8gjho4 .doneText1,#mermaid-svg-yDAb0s4NCg8gjho4 .doneText2,#mermaid-svg-yDAb0s4NCg8gjho4 .doneText3{fill:#000 !important}#mermaid-svg-yDAb0s4NCg8gjho4 .crit0,#mermaid-svg-yDAb0s4NCg8gjho4 .crit1,#mermaid-svg-yDAb0s4NCg8gjho4 .crit2,#mermaid-svg-yDAb0s4NCg8gjho4 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-yDAb0s4NCg8gjho4 .activeCrit0,#mermaid-svg-yDAb0s4NCg8gjho4 .activeCrit1,#mermaid-svg-yDAb0s4NCg8gjho4 .activeCrit2,#mermaid-svg-yDAb0s4NCg8gjho4 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-yDAb0s4NCg8gjho4 .doneCrit0,#mermaid-svg-yDAb0s4NCg8gjho4 .doneCrit1,#mermaid-svg-yDAb0s4NCg8gjho4 .doneCrit2,#mermaid-svg-yDAb0s4NCg8gjho4 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-yDAb0s4NCg8gjho4 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-yDAb0s4NCg8gjho4 .milestoneText{font-style:italic}#mermaid-svg-yDAb0s4NCg8gjho4 .doneCritText0,#mermaid-svg-yDAb0s4NCg8gjho4 .doneCritText1,#mermaid-svg-yDAb0s4NCg8gjho4 .doneCritText2,#mermaid-svg-yDAb0s4NCg8gjho4 .doneCritText3{fill:#000 !important}#mermaid-svg-yDAb0s4NCg8gjho4 .activeCritText0,#mermaid-svg-yDAb0s4NCg8gjho4 .activeCritText1,#mermaid-svg-yDAb0s4NCg8gjho4 .activeCritText2,#mermaid-svg-yDAb0s4NCg8gjho4 .activeCritText3{fill:#000 !important}#mermaid-svg-yDAb0s4NCg8gjho4 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-yDAb0s4NCg8gjho4 g.classGroup text .title{font-weight:bolder}#mermaid-svg-yDAb0s4NCg8gjho4 g.clickable{cursor:pointer}#mermaid-svg-yDAb0s4NCg8gjho4 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-yDAb0s4NCg8gjho4 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-yDAb0s4NCg8gjho4 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-yDAb0s4NCg8gjho4 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-yDAb0s4NCg8gjho4 .dashed-line{stroke-dasharray:3}#mermaid-svg-yDAb0s4NCg8gjho4 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 .commit-id,#mermaid-svg-yDAb0s4NCg8gjho4 .commit-msg,#mermaid-svg-yDAb0s4NCg8gjho4 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-yDAb0s4NCg8gjho4 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-yDAb0s4NCg8gjho4 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-yDAb0s4NCg8gjho4 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-yDAb0s4NCg8gjho4 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-yDAb0s4NCg8gjho4 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-yDAb0s4NCg8gjho4 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-yDAb0s4NCg8gjho4 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-yDAb0s4NCg8gjho4 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-yDAb0s4NCg8gjho4 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-yDAb0s4NCg8gjho4 .edgeLabel text{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yDAb0s4NCg8gjho4 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-yDAb0s4NCg8gjho4 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-yDAb0s4NCg8gjho4 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-yDAb0s4NCg8gjho4 .note-edge{stroke-dasharray:5}#mermaid-svg-yDAb0s4NCg8gjho4 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-yDAb0s4NCg8gjho4 .error-icon{fill:#522}#mermaid-svg-yDAb0s4NCg8gjho4 .error-text{fill:#522;stroke:#522}#mermaid-svg-yDAb0s4NCg8gjho4 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-yDAb0s4NCg8gjho4 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-yDAb0s4NCg8gjho4 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-yDAb0s4NCg8gjho4 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-yDAb0s4NCg8gjho4 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-yDAb0s4NCg8gjho4 .marker{fill:#333}#mermaid-svg-yDAb0s4NCg8gjho4 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-yDAb0s4NCg8gjho4 {color: rgba(0, 0, 0, 0.75);font: ;}

迭代生命周期
#mermaid-svg-zzuqwboH9bYWrvVo .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-zzuqwboH9bYWrvVo .label text{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .node rect,#mermaid-svg-zzuqwboH9bYWrvVo .node circle,#mermaid-svg-zzuqwboH9bYWrvVo .node ellipse,#mermaid-svg-zzuqwboH9bYWrvVo .node polygon,#mermaid-svg-zzuqwboH9bYWrvVo .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-zzuqwboH9bYWrvVo .node .label{text-align:center;fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .node.clickable{cursor:pointer}#mermaid-svg-zzuqwboH9bYWrvVo .arrowheadPath{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-zzuqwboH9bYWrvVo .flowchart-link{stroke:#333;fill:none}#mermaid-svg-zzuqwboH9bYWrvVo .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-zzuqwboH9bYWrvVo .edgeLabel rect{opacity:0.9}#mermaid-svg-zzuqwboH9bYWrvVo .edgeLabel span{color:#333}#mermaid-svg-zzuqwboH9bYWrvVo .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-zzuqwboH9bYWrvVo .cluster text{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-zzuqwboH9bYWrvVo .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-zzuqwboH9bYWrvVo text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-zzuqwboH9bYWrvVo .actor-line{stroke:grey}#mermaid-svg-zzuqwboH9bYWrvVo .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-zzuqwboH9bYWrvVo .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-zzuqwboH9bYWrvVo #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-zzuqwboH9bYWrvVo .sequenceNumber{fill:#fff}#mermaid-svg-zzuqwboH9bYWrvVo #sequencenumber{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo #crosshead path{fill:#333;stroke:#333}#mermaid-svg-zzuqwboH9bYWrvVo .messageText{fill:#333;stroke:#333}#mermaid-svg-zzuqwboH9bYWrvVo .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-zzuqwboH9bYWrvVo .labelText,#mermaid-svg-zzuqwboH9bYWrvVo .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-zzuqwboH9bYWrvVo .loopText,#mermaid-svg-zzuqwboH9bYWrvVo .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-zzuqwboH9bYWrvVo .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-zzuqwboH9bYWrvVo .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-zzuqwboH9bYWrvVo .noteText,#mermaid-svg-zzuqwboH9bYWrvVo .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-zzuqwboH9bYWrvVo .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-zzuqwboH9bYWrvVo .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-zzuqwboH9bYWrvVo .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-zzuqwboH9bYWrvVo .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .section{stroke:none;opacity:0.2}#mermaid-svg-zzuqwboH9bYWrvVo .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-zzuqwboH9bYWrvVo .section2{fill:#fff400}#mermaid-svg-zzuqwboH9bYWrvVo .section1,#mermaid-svg-zzuqwboH9bYWrvVo .section3{fill:#fff;opacity:0.2}#mermaid-svg-zzuqwboH9bYWrvVo .sectionTitle0{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .sectionTitle1{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .sectionTitle2{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .sectionTitle3{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-zzuqwboH9bYWrvVo .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .grid path{stroke-width:0}#mermaid-svg-zzuqwboH9bYWrvVo .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-zzuqwboH9bYWrvVo .task{stroke-width:2}#mermaid-svg-zzuqwboH9bYWrvVo .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .taskText:not([font-size]){font-size:11px}#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-zzuqwboH9bYWrvVo .task.clickable{cursor:pointer}#mermaid-svg-zzuqwboH9bYWrvVo .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-zzuqwboH9bYWrvVo .taskText0,#mermaid-svg-zzuqwboH9bYWrvVo .taskText1,#mermaid-svg-zzuqwboH9bYWrvVo .taskText2,#mermaid-svg-zzuqwboH9bYWrvVo .taskText3{fill:#fff}#mermaid-svg-zzuqwboH9bYWrvVo .task0,#mermaid-svg-zzuqwboH9bYWrvVo .task1,#mermaid-svg-zzuqwboH9bYWrvVo .task2,#mermaid-svg-zzuqwboH9bYWrvVo .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutside0,#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutside2{fill:#000}#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutside1,#mermaid-svg-zzuqwboH9bYWrvVo .taskTextOutside3{fill:#000}#mermaid-svg-zzuqwboH9bYWrvVo .active0,#mermaid-svg-zzuqwboH9bYWrvVo .active1,#mermaid-svg-zzuqwboH9bYWrvVo .active2,#mermaid-svg-zzuqwboH9bYWrvVo .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-zzuqwboH9bYWrvVo .activeText0,#mermaid-svg-zzuqwboH9bYWrvVo .activeText1,#mermaid-svg-zzuqwboH9bYWrvVo .activeText2,#mermaid-svg-zzuqwboH9bYWrvVo .activeText3{fill:#000 !important}#mermaid-svg-zzuqwboH9bYWrvVo .done0,#mermaid-svg-zzuqwboH9bYWrvVo .done1,#mermaid-svg-zzuqwboH9bYWrvVo .done2,#mermaid-svg-zzuqwboH9bYWrvVo .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-zzuqwboH9bYWrvVo .doneText0,#mermaid-svg-zzuqwboH9bYWrvVo .doneText1,#mermaid-svg-zzuqwboH9bYWrvVo .doneText2,#mermaid-svg-zzuqwboH9bYWrvVo .doneText3{fill:#000 !important}#mermaid-svg-zzuqwboH9bYWrvVo .crit0,#mermaid-svg-zzuqwboH9bYWrvVo .crit1,#mermaid-svg-zzuqwboH9bYWrvVo .crit2,#mermaid-svg-zzuqwboH9bYWrvVo .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-zzuqwboH9bYWrvVo .activeCrit0,#mermaid-svg-zzuqwboH9bYWrvVo .activeCrit1,#mermaid-svg-zzuqwboH9bYWrvVo .activeCrit2,#mermaid-svg-zzuqwboH9bYWrvVo .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-zzuqwboH9bYWrvVo .doneCrit0,#mermaid-svg-zzuqwboH9bYWrvVo .doneCrit1,#mermaid-svg-zzuqwboH9bYWrvVo .doneCrit2,#mermaid-svg-zzuqwboH9bYWrvVo .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-zzuqwboH9bYWrvVo .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-zzuqwboH9bYWrvVo .milestoneText{font-style:italic}#mermaid-svg-zzuqwboH9bYWrvVo .doneCritText0,#mermaid-svg-zzuqwboH9bYWrvVo .doneCritText1,#mermaid-svg-zzuqwboH9bYWrvVo .doneCritText2,#mermaid-svg-zzuqwboH9bYWrvVo .doneCritText3{fill:#000 !important}#mermaid-svg-zzuqwboH9bYWrvVo .activeCritText0,#mermaid-svg-zzuqwboH9bYWrvVo .activeCritText1,#mermaid-svg-zzuqwboH9bYWrvVo .activeCritText2,#mermaid-svg-zzuqwboH9bYWrvVo .activeCritText3{fill:#000 !important}#mermaid-svg-zzuqwboH9bYWrvVo .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-zzuqwboH9bYWrvVo g.classGroup text .title{font-weight:bolder}#mermaid-svg-zzuqwboH9bYWrvVo g.clickable{cursor:pointer}#mermaid-svg-zzuqwboH9bYWrvVo g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-zzuqwboH9bYWrvVo g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-zzuqwboH9bYWrvVo .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-zzuqwboH9bYWrvVo .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-zzuqwboH9bYWrvVo .dashed-line{stroke-dasharray:3}#mermaid-svg-zzuqwboH9bYWrvVo #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo .commit-id,#mermaid-svg-zzuqwboH9bYWrvVo .commit-msg,#mermaid-svg-zzuqwboH9bYWrvVo .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-zzuqwboH9bYWrvVo g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-zzuqwboH9bYWrvVo g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-zzuqwboH9bYWrvVo g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-zzuqwboH9bYWrvVo .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-zzuqwboH9bYWrvVo .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-zzuqwboH9bYWrvVo .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-zzuqwboH9bYWrvVo .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-zzuqwboH9bYWrvVo .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-zzuqwboH9bYWrvVo .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-zzuqwboH9bYWrvVo .edgeLabel text{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-zzuqwboH9bYWrvVo .node circle.state-start{fill:black;stroke:black}#mermaid-svg-zzuqwboH9bYWrvVo .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-zzuqwboH9bYWrvVo #statediagram-barbEnd{fill:#9370db}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-state .divider{stroke:#9370db}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-zzuqwboH9bYWrvVo .note-edge{stroke-dasharray:5}#mermaid-svg-zzuqwboH9bYWrvVo .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-zzuqwboH9bYWrvVo .error-icon{fill:#522}#mermaid-svg-zzuqwboH9bYWrvVo .error-text{fill:#522;stroke:#522}#mermaid-svg-zzuqwboH9bYWrvVo .edge-thickness-normal{stroke-width:2px}#mermaid-svg-zzuqwboH9bYWrvVo .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-zzuqwboH9bYWrvVo .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-zzuqwboH9bYWrvVo .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-zzuqwboH9bYWrvVo .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-zzuqwboH9bYWrvVo .marker{fill:#333}#mermaid-svg-zzuqwboH9bYWrvVo .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-zzuqwboH9bYWrvVo {color: rgba(0, 0, 0, 0.75);font: ;}需求开发测试需求开发测试

那么,由流程图可以看出,测试左移,最完美的进入方式是从初期介入,但是实际上只有很少的公司会做到测试角色参与,大多数情况下,测试角色都是从需求阶段参与

为什么测试人员要参与那么早?因为测试角色对程序/系统的了解是多维度去熟悉的,而不像开发那样是单一而深入去了解
至此

  • 项目初期,测试角色越早参与并且给出测试角色的意见,从而可以达到预防缺陷及风险的作用
  • 需求阶段,测试角色则需要从用户、业务流程、业务风险的角度给出建议,从而达到预防缺陷和风险的

需求阶段测试角色职责

业务价值-从测试角色给出业务价值的反馈
终端用户
从终端用户维度去考虑,程序/系统软件的真实使用场景
业务流程
从业务流程的维度去考虑,程序/系统软件是否真的是用户所需要的,如电商添加购物车,有很多种方式
业务风险
从业务价值的维度去考虑,我们做的特性是否需要做,业务的优先级计划又是什么
用户故事拆分-从测试角色给出业务需求拆分的用户故事是否遵循原则
独立的
用户故事是独立的
可协商的
用户故事可以响应变化,是可协商的
有价值的
用户故事是有价值的,为用户所需要的
可估算的
用户故事可以估算的
足够小的
用户故事是足够小的
可测试的
用户故事是可以测试的

持续测试

#mermaid-svg-BZznbH67GqCItEdu .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-BZznbH67GqCItEdu .label text{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .node rect,#mermaid-svg-BZznbH67GqCItEdu .node circle,#mermaid-svg-BZznbH67GqCItEdu .node ellipse,#mermaid-svg-BZznbH67GqCItEdu .node polygon,#mermaid-svg-BZznbH67GqCItEdu .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-BZznbH67GqCItEdu .node .label{text-align:center;fill:#333}#mermaid-svg-BZznbH67GqCItEdu .node.clickable{cursor:pointer}#mermaid-svg-BZznbH67GqCItEdu .arrowheadPath{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-BZznbH67GqCItEdu .flowchart-link{stroke:#333;fill:none}#mermaid-svg-BZznbH67GqCItEdu .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-BZznbH67GqCItEdu .edgeLabel rect{opacity:0.9}#mermaid-svg-BZznbH67GqCItEdu .edgeLabel span{color:#333}#mermaid-svg-BZznbH67GqCItEdu .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-BZznbH67GqCItEdu .cluster text{fill:#333}#mermaid-svg-BZznbH67GqCItEdu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-BZznbH67GqCItEdu .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-BZznbH67GqCItEdu text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-BZznbH67GqCItEdu .actor-line{stroke:grey}#mermaid-svg-BZznbH67GqCItEdu .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-BZznbH67GqCItEdu .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-BZznbH67GqCItEdu #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-BZznbH67GqCItEdu .sequenceNumber{fill:#fff}#mermaid-svg-BZznbH67GqCItEdu #sequencenumber{fill:#333}#mermaid-svg-BZznbH67GqCItEdu #crosshead path{fill:#333;stroke:#333}#mermaid-svg-BZznbH67GqCItEdu .messageText{fill:#333;stroke:#333}#mermaid-svg-BZznbH67GqCItEdu .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-BZznbH67GqCItEdu .labelText,#mermaid-svg-BZznbH67GqCItEdu .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-BZznbH67GqCItEdu .loopText,#mermaid-svg-BZznbH67GqCItEdu .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-BZznbH67GqCItEdu .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-BZznbH67GqCItEdu .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-BZznbH67GqCItEdu .noteText,#mermaid-svg-BZznbH67GqCItEdu .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-BZznbH67GqCItEdu .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-BZznbH67GqCItEdu .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-BZznbH67GqCItEdu .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-BZznbH67GqCItEdu .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .section{stroke:none;opacity:0.2}#mermaid-svg-BZznbH67GqCItEdu .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-BZznbH67GqCItEdu .section2{fill:#fff400}#mermaid-svg-BZznbH67GqCItEdu .section1,#mermaid-svg-BZznbH67GqCItEdu .section3{fill:#fff;opacity:0.2}#mermaid-svg-BZznbH67GqCItEdu .sectionTitle0{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .sectionTitle1{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .sectionTitle2{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .sectionTitle3{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-BZznbH67GqCItEdu .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .grid path{stroke-width:0}#mermaid-svg-BZznbH67GqCItEdu .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-BZznbH67GqCItEdu .task{stroke-width:2}#mermaid-svg-BZznbH67GqCItEdu .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .taskText:not([font-size]){font-size:11px}#mermaid-svg-BZznbH67GqCItEdu .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-BZznbH67GqCItEdu .task.clickable{cursor:pointer}#mermaid-svg-BZznbH67GqCItEdu .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-BZznbH67GqCItEdu .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-BZznbH67GqCItEdu .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-BZznbH67GqCItEdu .taskText0,#mermaid-svg-BZznbH67GqCItEdu .taskText1,#mermaid-svg-BZznbH67GqCItEdu .taskText2,#mermaid-svg-BZznbH67GqCItEdu .taskText3{fill:#fff}#mermaid-svg-BZznbH67GqCItEdu .task0,#mermaid-svg-BZznbH67GqCItEdu .task1,#mermaid-svg-BZznbH67GqCItEdu .task2,#mermaid-svg-BZznbH67GqCItEdu .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-BZznbH67GqCItEdu .taskTextOutside0,#mermaid-svg-BZznbH67GqCItEdu .taskTextOutside2{fill:#000}#mermaid-svg-BZznbH67GqCItEdu .taskTextOutside1,#mermaid-svg-BZznbH67GqCItEdu .taskTextOutside3{fill:#000}#mermaid-svg-BZznbH67GqCItEdu .active0,#mermaid-svg-BZznbH67GqCItEdu .active1,#mermaid-svg-BZznbH67GqCItEdu .active2,#mermaid-svg-BZznbH67GqCItEdu .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-BZznbH67GqCItEdu .activeText0,#mermaid-svg-BZznbH67GqCItEdu .activeText1,#mermaid-svg-BZznbH67GqCItEdu .activeText2,#mermaid-svg-BZznbH67GqCItEdu .activeText3{fill:#000 !important}#mermaid-svg-BZznbH67GqCItEdu .done0,#mermaid-svg-BZznbH67GqCItEdu .done1,#mermaid-svg-BZznbH67GqCItEdu .done2,#mermaid-svg-BZznbH67GqCItEdu .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-BZznbH67GqCItEdu .doneText0,#mermaid-svg-BZznbH67GqCItEdu .doneText1,#mermaid-svg-BZznbH67GqCItEdu .doneText2,#mermaid-svg-BZznbH67GqCItEdu .doneText3{fill:#000 !important}#mermaid-svg-BZznbH67GqCItEdu .crit0,#mermaid-svg-BZznbH67GqCItEdu .crit1,#mermaid-svg-BZznbH67GqCItEdu .crit2,#mermaid-svg-BZznbH67GqCItEdu .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-BZznbH67GqCItEdu .activeCrit0,#mermaid-svg-BZznbH67GqCItEdu .activeCrit1,#mermaid-svg-BZznbH67GqCItEdu .activeCrit2,#mermaid-svg-BZznbH67GqCItEdu .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-BZznbH67GqCItEdu .doneCrit0,#mermaid-svg-BZznbH67GqCItEdu .doneCrit1,#mermaid-svg-BZznbH67GqCItEdu .doneCrit2,#mermaid-svg-BZznbH67GqCItEdu .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-BZznbH67GqCItEdu .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-BZznbH67GqCItEdu .milestoneText{font-style:italic}#mermaid-svg-BZznbH67GqCItEdu .doneCritText0,#mermaid-svg-BZznbH67GqCItEdu .doneCritText1,#mermaid-svg-BZznbH67GqCItEdu .doneCritText2,#mermaid-svg-BZznbH67GqCItEdu .doneCritText3{fill:#000 !important}#mermaid-svg-BZznbH67GqCItEdu .activeCritText0,#mermaid-svg-BZznbH67GqCItEdu .activeCritText1,#mermaid-svg-BZznbH67GqCItEdu .activeCritText2,#mermaid-svg-BZznbH67GqCItEdu .activeCritText3{fill:#000 !important}#mermaid-svg-BZznbH67GqCItEdu .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-BZznbH67GqCItEdu g.classGroup text .title{font-weight:bolder}#mermaid-svg-BZznbH67GqCItEdu g.clickable{cursor:pointer}#mermaid-svg-BZznbH67GqCItEdu g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-BZznbH67GqCItEdu g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-BZznbH67GqCItEdu .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-BZznbH67GqCItEdu .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-BZznbH67GqCItEdu .dashed-line{stroke-dasharray:3}#mermaid-svg-BZznbH67GqCItEdu #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu .commit-id,#mermaid-svg-BZznbH67GqCItEdu .commit-msg,#mermaid-svg-BZznbH67GqCItEdu .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-BZznbH67GqCItEdu g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-BZznbH67GqCItEdu g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-BZznbH67GqCItEdu g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-BZznbH67GqCItEdu g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-BZznbH67GqCItEdu .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-BZznbH67GqCItEdu .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-BZznbH67GqCItEdu .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-BZznbH67GqCItEdu .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-BZznbH67GqCItEdu .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-BZznbH67GqCItEdu .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-BZznbH67GqCItEdu .edgeLabel text{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BZznbH67GqCItEdu .node circle.state-start{fill:black;stroke:black}#mermaid-svg-BZznbH67GqCItEdu .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-BZznbH67GqCItEdu #statediagram-barbEnd{fill:#9370db}#mermaid-svg-BZznbH67GqCItEdu .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-BZznbH67GqCItEdu .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-BZznbH67GqCItEdu .statediagram-state .divider{stroke:#9370db}#mermaid-svg-BZznbH67GqCItEdu .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-BZznbH67GqCItEdu .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-BZznbH67GqCItEdu .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-BZznbH67GqCItEdu .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-BZznbH67GqCItEdu .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-BZznbH67GqCItEdu .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-BZznbH67GqCItEdu .note-edge{stroke-dasharray:5}#mermaid-svg-BZznbH67GqCItEdu .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-BZznbH67GqCItEdu .error-icon{fill:#522}#mermaid-svg-BZznbH67GqCItEdu .error-text{fill:#522;stroke:#522}#mermaid-svg-BZznbH67GqCItEdu .edge-thickness-normal{stroke-width:2px}#mermaid-svg-BZznbH67GqCItEdu .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-BZznbH67GqCItEdu .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-BZznbH67GqCItEdu .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-BZznbH67GqCItEdu .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-BZznbH67GqCItEdu .marker{fill:#333}#mermaid-svg-BZznbH67GqCItEdu .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-BZznbH67GqCItEdu {color: rgba(0, 0, 0, 0.75);font: ;}

敏捷开发生命周期
#mermaid-svg-Xes9oiA8Jsffd1UP .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .label text{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .node rect,#mermaid-svg-Xes9oiA8Jsffd1UP .node circle,#mermaid-svg-Xes9oiA8Jsffd1UP .node ellipse,#mermaid-svg-Xes9oiA8Jsffd1UP .node polygon,#mermaid-svg-Xes9oiA8Jsffd1UP .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Xes9oiA8Jsffd1UP .node .label{text-align:center;fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .node.clickable{cursor:pointer}#mermaid-svg-Xes9oiA8Jsffd1UP .arrowheadPath{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Xes9oiA8Jsffd1UP .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Xes9oiA8Jsffd1UP .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Xes9oiA8Jsffd1UP .edgeLabel rect{opacity:0.9}#mermaid-svg-Xes9oiA8Jsffd1UP .edgeLabel span{color:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Xes9oiA8Jsffd1UP .cluster text{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Xes9oiA8Jsffd1UP .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Xes9oiA8Jsffd1UP text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Xes9oiA8Jsffd1UP .actor-line{stroke:grey}#mermaid-svg-Xes9oiA8Jsffd1UP .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Xes9oiA8Jsffd1UP #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .sequenceNumber{fill:#fff}#mermaid-svg-Xes9oiA8Jsffd1UP #sequencenumber{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .messageText{fill:#333;stroke:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Xes9oiA8Jsffd1UP .labelText,#mermaid-svg-Xes9oiA8Jsffd1UP .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Xes9oiA8Jsffd1UP .loopText,#mermaid-svg-Xes9oiA8Jsffd1UP .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Xes9oiA8Jsffd1UP .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Xes9oiA8Jsffd1UP .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Xes9oiA8Jsffd1UP .noteText,#mermaid-svg-Xes9oiA8Jsffd1UP .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Xes9oiA8Jsffd1UP .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Xes9oiA8Jsffd1UP .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Xes9oiA8Jsffd1UP .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Xes9oiA8Jsffd1UP .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .section{stroke:none;opacity:0.2}#mermaid-svg-Xes9oiA8Jsffd1UP .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Xes9oiA8Jsffd1UP .section2{fill:#fff400}#mermaid-svg-Xes9oiA8Jsffd1UP .section1,#mermaid-svg-Xes9oiA8Jsffd1UP .section3{fill:#fff;opacity:0.2}#mermaid-svg-Xes9oiA8Jsffd1UP .sectionTitle0{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .sectionTitle1{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .sectionTitle2{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .sectionTitle3{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Xes9oiA8Jsffd1UP .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .grid path{stroke-width:0}#mermaid-svg-Xes9oiA8Jsffd1UP .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Xes9oiA8Jsffd1UP .task{stroke-width:2}#mermaid-svg-Xes9oiA8Jsffd1UP .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .taskText:not([font-size]){font-size:11px}#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Xes9oiA8Jsffd1UP .task.clickable{cursor:pointer}#mermaid-svg-Xes9oiA8Jsffd1UP .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Xes9oiA8Jsffd1UP .taskText0,#mermaid-svg-Xes9oiA8Jsffd1UP .taskText1,#mermaid-svg-Xes9oiA8Jsffd1UP .taskText2,#mermaid-svg-Xes9oiA8Jsffd1UP .taskText3{fill:#fff}#mermaid-svg-Xes9oiA8Jsffd1UP .task0,#mermaid-svg-Xes9oiA8Jsffd1UP .task1,#mermaid-svg-Xes9oiA8Jsffd1UP .task2,#mermaid-svg-Xes9oiA8Jsffd1UP .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutside0,#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutside2{fill:#000}#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutside1,#mermaid-svg-Xes9oiA8Jsffd1UP .taskTextOutside3{fill:#000}#mermaid-svg-Xes9oiA8Jsffd1UP .active0,#mermaid-svg-Xes9oiA8Jsffd1UP .active1,#mermaid-svg-Xes9oiA8Jsffd1UP .active2,#mermaid-svg-Xes9oiA8Jsffd1UP .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Xes9oiA8Jsffd1UP .activeText0,#mermaid-svg-Xes9oiA8Jsffd1UP .activeText1,#mermaid-svg-Xes9oiA8Jsffd1UP .activeText2,#mermaid-svg-Xes9oiA8Jsffd1UP .activeText3{fill:#000 !important}#mermaid-svg-Xes9oiA8Jsffd1UP .done0,#mermaid-svg-Xes9oiA8Jsffd1UP .done1,#mermaid-svg-Xes9oiA8Jsffd1UP .done2,#mermaid-svg-Xes9oiA8Jsffd1UP .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Xes9oiA8Jsffd1UP .doneText0,#mermaid-svg-Xes9oiA8Jsffd1UP .doneText1,#mermaid-svg-Xes9oiA8Jsffd1UP .doneText2,#mermaid-svg-Xes9oiA8Jsffd1UP .doneText3{fill:#000 !important}#mermaid-svg-Xes9oiA8Jsffd1UP .crit0,#mermaid-svg-Xes9oiA8Jsffd1UP .crit1,#mermaid-svg-Xes9oiA8Jsffd1UP .crit2,#mermaid-svg-Xes9oiA8Jsffd1UP .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Xes9oiA8Jsffd1UP .activeCrit0,#mermaid-svg-Xes9oiA8Jsffd1UP .activeCrit1,#mermaid-svg-Xes9oiA8Jsffd1UP .activeCrit2,#mermaid-svg-Xes9oiA8Jsffd1UP .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Xes9oiA8Jsffd1UP .doneCrit0,#mermaid-svg-Xes9oiA8Jsffd1UP .doneCrit1,#mermaid-svg-Xes9oiA8Jsffd1UP .doneCrit2,#mermaid-svg-Xes9oiA8Jsffd1UP .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Xes9oiA8Jsffd1UP .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Xes9oiA8Jsffd1UP .milestoneText{font-style:italic}#mermaid-svg-Xes9oiA8Jsffd1UP .doneCritText0,#mermaid-svg-Xes9oiA8Jsffd1UP .doneCritText1,#mermaid-svg-Xes9oiA8Jsffd1UP .doneCritText2,#mermaid-svg-Xes9oiA8Jsffd1UP .doneCritText3{fill:#000 !important}#mermaid-svg-Xes9oiA8Jsffd1UP .activeCritText0,#mermaid-svg-Xes9oiA8Jsffd1UP .activeCritText1,#mermaid-svg-Xes9oiA8Jsffd1UP .activeCritText2,#mermaid-svg-Xes9oiA8Jsffd1UP .activeCritText3{fill:#000 !important}#mermaid-svg-Xes9oiA8Jsffd1UP .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Xes9oiA8Jsffd1UP g.classGroup text .title{font-weight:bolder}#mermaid-svg-Xes9oiA8Jsffd1UP g.clickable{cursor:pointer}#mermaid-svg-Xes9oiA8Jsffd1UP g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Xes9oiA8Jsffd1UP g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Xes9oiA8Jsffd1UP .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Xes9oiA8Jsffd1UP .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Xes9oiA8Jsffd1UP .dashed-line{stroke-dasharray:3}#mermaid-svg-Xes9oiA8Jsffd1UP #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP .commit-id,#mermaid-svg-Xes9oiA8Jsffd1UP .commit-msg,#mermaid-svg-Xes9oiA8Jsffd1UP .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Xes9oiA8Jsffd1UP g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Xes9oiA8Jsffd1UP g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Xes9oiA8Jsffd1UP g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Xes9oiA8Jsffd1UP .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Xes9oiA8Jsffd1UP .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Xes9oiA8Jsffd1UP .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Xes9oiA8Jsffd1UP .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Xes9oiA8Jsffd1UP .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Xes9oiA8Jsffd1UP .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Xes9oiA8Jsffd1UP .edgeLabel text{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Xes9oiA8Jsffd1UP .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Xes9oiA8Jsffd1UP .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Xes9oiA8Jsffd1UP #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Xes9oiA8Jsffd1UP .note-edge{stroke-dasharray:5}#mermaid-svg-Xes9oiA8Jsffd1UP .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Xes9oiA8Jsffd1UP .error-icon{fill:#522}#mermaid-svg-Xes9oiA8Jsffd1UP .error-text{fill:#522;stroke:#522}#mermaid-svg-Xes9oiA8Jsffd1UP .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Xes9oiA8Jsffd1UP .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Xes9oiA8Jsffd1UP .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Xes9oiA8Jsffd1UP .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Xes9oiA8Jsffd1UP .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Xes9oiA8Jsffd1UP .marker{fill:#333}#mermaid-svg-Xes9oiA8Jsffd1UP .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-Xes9oiA8Jsffd1UP {color: rgba(0, 0, 0, 0.75);font: ;}故事分析故事启动故事开发故事验收故事测试故事演示故事分析故事启动故事开发故事验收故事测试故事演示
  • 测试活动贯穿用户故事生命周期,如静态测试,和动态测试
  • 通过持续集成的方式构建线上的持续自动化测试
  • 持续测试本质是在用户故事生命周期里进行的一个持续收集、快速反馈的过程
通过自动化测试方式还可以进行以下持续测试:
持续安全测试
识别安全需求-安全工具集成在CI/CD中-安全测试用力-工具辅助安全测试等
持续性能测试
确定性能需求-制造性能数据-性能测试执行-持续测试,手机性能趋势数据-持续监控,掌握性能状态
持续生产环境测试
生产环境CI/CD自动化测试
生产环境问题反馈
## 测试驱动开发
单元测试驱动开发()UTDD)
设计及编码的完整性,一般由开发完成
验收测试驱动开发(ATDD)
需求实现的正确性,参与的角色有测试、开发一起完成
行为驱动开发(BDD)
促进团队协作一直理解和需求,一般由产品、开发、测试一起完成

敏捷测试宣言

#mermaid-svg-B8IATsk9xdiZlg7v .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-B8IATsk9xdiZlg7v .label text{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .node rect,#mermaid-svg-B8IATsk9xdiZlg7v .node circle,#mermaid-svg-B8IATsk9xdiZlg7v .node ellipse,#mermaid-svg-B8IATsk9xdiZlg7v .node polygon,#mermaid-svg-B8IATsk9xdiZlg7v .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-B8IATsk9xdiZlg7v .node .label{text-align:center;fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .node.clickable{cursor:pointer}#mermaid-svg-B8IATsk9xdiZlg7v .arrowheadPath{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-B8IATsk9xdiZlg7v .flowchart-link{stroke:#333;fill:none}#mermaid-svg-B8IATsk9xdiZlg7v .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-B8IATsk9xdiZlg7v .edgeLabel rect{opacity:0.9}#mermaid-svg-B8IATsk9xdiZlg7v .edgeLabel span{color:#333}#mermaid-svg-B8IATsk9xdiZlg7v .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-B8IATsk9xdiZlg7v .cluster text{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-B8IATsk9xdiZlg7v .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-B8IATsk9xdiZlg7v text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-B8IATsk9xdiZlg7v .actor-line{stroke:grey}#mermaid-svg-B8IATsk9xdiZlg7v .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-B8IATsk9xdiZlg7v .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-B8IATsk9xdiZlg7v #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-B8IATsk9xdiZlg7v .sequenceNumber{fill:#fff}#mermaid-svg-B8IATsk9xdiZlg7v #sequencenumber{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v #crosshead path{fill:#333;stroke:#333}#mermaid-svg-B8IATsk9xdiZlg7v .messageText{fill:#333;stroke:#333}#mermaid-svg-B8IATsk9xdiZlg7v .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-B8IATsk9xdiZlg7v .labelText,#mermaid-svg-B8IATsk9xdiZlg7v .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-B8IATsk9xdiZlg7v .loopText,#mermaid-svg-B8IATsk9xdiZlg7v .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-B8IATsk9xdiZlg7v .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-B8IATsk9xdiZlg7v .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-B8IATsk9xdiZlg7v .noteText,#mermaid-svg-B8IATsk9xdiZlg7v .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-B8IATsk9xdiZlg7v .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-B8IATsk9xdiZlg7v .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-B8IATsk9xdiZlg7v .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-B8IATsk9xdiZlg7v .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .section{stroke:none;opacity:0.2}#mermaid-svg-B8IATsk9xdiZlg7v .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-B8IATsk9xdiZlg7v .section2{fill:#fff400}#mermaid-svg-B8IATsk9xdiZlg7v .section1,#mermaid-svg-B8IATsk9xdiZlg7v .section3{fill:#fff;opacity:0.2}#mermaid-svg-B8IATsk9xdiZlg7v .sectionTitle0{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .sectionTitle1{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .sectionTitle2{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .sectionTitle3{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-B8IATsk9xdiZlg7v .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .grid path{stroke-width:0}#mermaid-svg-B8IATsk9xdiZlg7v .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-B8IATsk9xdiZlg7v .task{stroke-width:2}#mermaid-svg-B8IATsk9xdiZlg7v .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .taskText:not([font-size]){font-size:11px}#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-B8IATsk9xdiZlg7v .task.clickable{cursor:pointer}#mermaid-svg-B8IATsk9xdiZlg7v .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B8IATsk9xdiZlg7v .taskText0,#mermaid-svg-B8IATsk9xdiZlg7v .taskText1,#mermaid-svg-B8IATsk9xdiZlg7v .taskText2,#mermaid-svg-B8IATsk9xdiZlg7v .taskText3{fill:#fff}#mermaid-svg-B8IATsk9xdiZlg7v .task0,#mermaid-svg-B8IATsk9xdiZlg7v .task1,#mermaid-svg-B8IATsk9xdiZlg7v .task2,#mermaid-svg-B8IATsk9xdiZlg7v .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutside0,#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutside2{fill:#000}#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutside1,#mermaid-svg-B8IATsk9xdiZlg7v .taskTextOutside3{fill:#000}#mermaid-svg-B8IATsk9xdiZlg7v .active0,#mermaid-svg-B8IATsk9xdiZlg7v .active1,#mermaid-svg-B8IATsk9xdiZlg7v .active2,#mermaid-svg-B8IATsk9xdiZlg7v .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-B8IATsk9xdiZlg7v .activeText0,#mermaid-svg-B8IATsk9xdiZlg7v .activeText1,#mermaid-svg-B8IATsk9xdiZlg7v .activeText2,#mermaid-svg-B8IATsk9xdiZlg7v .activeText3{fill:#000 !important}#mermaid-svg-B8IATsk9xdiZlg7v .done0,#mermaid-svg-B8IATsk9xdiZlg7v .done1,#mermaid-svg-B8IATsk9xdiZlg7v .done2,#mermaid-svg-B8IATsk9xdiZlg7v .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-B8IATsk9xdiZlg7v .doneText0,#mermaid-svg-B8IATsk9xdiZlg7v .doneText1,#mermaid-svg-B8IATsk9xdiZlg7v .doneText2,#mermaid-svg-B8IATsk9xdiZlg7v .doneText3{fill:#000 !important}#mermaid-svg-B8IATsk9xdiZlg7v .crit0,#mermaid-svg-B8IATsk9xdiZlg7v .crit1,#mermaid-svg-B8IATsk9xdiZlg7v .crit2,#mermaid-svg-B8IATsk9xdiZlg7v .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-B8IATsk9xdiZlg7v .activeCrit0,#mermaid-svg-B8IATsk9xdiZlg7v .activeCrit1,#mermaid-svg-B8IATsk9xdiZlg7v .activeCrit2,#mermaid-svg-B8IATsk9xdiZlg7v .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-B8IATsk9xdiZlg7v .doneCrit0,#mermaid-svg-B8IATsk9xdiZlg7v .doneCrit1,#mermaid-svg-B8IATsk9xdiZlg7v .doneCrit2,#mermaid-svg-B8IATsk9xdiZlg7v .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-B8IATsk9xdiZlg7v .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-B8IATsk9xdiZlg7v .milestoneText{font-style:italic}#mermaid-svg-B8IATsk9xdiZlg7v .doneCritText0,#mermaid-svg-B8IATsk9xdiZlg7v .doneCritText1,#mermaid-svg-B8IATsk9xdiZlg7v .doneCritText2,#mermaid-svg-B8IATsk9xdiZlg7v .doneCritText3{fill:#000 !important}#mermaid-svg-B8IATsk9xdiZlg7v .activeCritText0,#mermaid-svg-B8IATsk9xdiZlg7v .activeCritText1,#mermaid-svg-B8IATsk9xdiZlg7v .activeCritText2,#mermaid-svg-B8IATsk9xdiZlg7v .activeCritText3{fill:#000 !important}#mermaid-svg-B8IATsk9xdiZlg7v .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-B8IATsk9xdiZlg7v g.classGroup text .title{font-weight:bolder}#mermaid-svg-B8IATsk9xdiZlg7v g.clickable{cursor:pointer}#mermaid-svg-B8IATsk9xdiZlg7v g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-B8IATsk9xdiZlg7v g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-B8IATsk9xdiZlg7v .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-B8IATsk9xdiZlg7v .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-B8IATsk9xdiZlg7v .dashed-line{stroke-dasharray:3}#mermaid-svg-B8IATsk9xdiZlg7v #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v .commit-id,#mermaid-svg-B8IATsk9xdiZlg7v .commit-msg,#mermaid-svg-B8IATsk9xdiZlg7v .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-B8IATsk9xdiZlg7v g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-B8IATsk9xdiZlg7v g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-B8IATsk9xdiZlg7v g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-B8IATsk9xdiZlg7v .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-B8IATsk9xdiZlg7v .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-B8IATsk9xdiZlg7v .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-B8IATsk9xdiZlg7v .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-B8IATsk9xdiZlg7v .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-B8IATsk9xdiZlg7v .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-B8IATsk9xdiZlg7v .edgeLabel text{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B8IATsk9xdiZlg7v .node circle.state-start{fill:black;stroke:black}#mermaid-svg-B8IATsk9xdiZlg7v .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-B8IATsk9xdiZlg7v #statediagram-barbEnd{fill:#9370db}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-state .divider{stroke:#9370db}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-B8IATsk9xdiZlg7v .note-edge{stroke-dasharray:5}#mermaid-svg-B8IATsk9xdiZlg7v .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-B8IATsk9xdiZlg7v .error-icon{fill:#522}#mermaid-svg-B8IATsk9xdiZlg7v .error-text{fill:#522;stroke:#522}#mermaid-svg-B8IATsk9xdiZlg7v .edge-thickness-normal{stroke-width:2px}#mermaid-svg-B8IATsk9xdiZlg7v .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-B8IATsk9xdiZlg7v .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-B8IATsk9xdiZlg7v .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-B8IATsk9xdiZlg7v .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-B8IATsk9xdiZlg7v .marker{fill:#333}#mermaid-svg-B8IATsk9xdiZlg7v .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-B8IATsk9xdiZlg7v {color: rgba(0, 0, 0, 0.75);font: ;}

敏捷测试宣言
#mermaid-svg-tw4Ah68NyecQnjh9 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .label text{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .node rect,#mermaid-svg-tw4Ah68NyecQnjh9 .node circle,#mermaid-svg-tw4Ah68NyecQnjh9 .node ellipse,#mermaid-svg-tw4Ah68NyecQnjh9 .node polygon,#mermaid-svg-tw4Ah68NyecQnjh9 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-tw4Ah68NyecQnjh9 .node .label{text-align:center;fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .node.clickable{cursor:pointer}#mermaid-svg-tw4Ah68NyecQnjh9 .arrowheadPath{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-tw4Ah68NyecQnjh9 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-tw4Ah68NyecQnjh9 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-tw4Ah68NyecQnjh9 .edgeLabel rect{opacity:0.9}#mermaid-svg-tw4Ah68NyecQnjh9 .edgeLabel span{color:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-tw4Ah68NyecQnjh9 .cluster text{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-tw4Ah68NyecQnjh9 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-tw4Ah68NyecQnjh9 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-tw4Ah68NyecQnjh9 .actor-line{stroke:grey}#mermaid-svg-tw4Ah68NyecQnjh9 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-tw4Ah68NyecQnjh9 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .sequenceNumber{fill:#fff}#mermaid-svg-tw4Ah68NyecQnjh9 #sequencenumber{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .messageText{fill:#333;stroke:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-tw4Ah68NyecQnjh9 .labelText,#mermaid-svg-tw4Ah68NyecQnjh9 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-tw4Ah68NyecQnjh9 .loopText,#mermaid-svg-tw4Ah68NyecQnjh9 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-tw4Ah68NyecQnjh9 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-tw4Ah68NyecQnjh9 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-tw4Ah68NyecQnjh9 .noteText,#mermaid-svg-tw4Ah68NyecQnjh9 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-tw4Ah68NyecQnjh9 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-tw4Ah68NyecQnjh9 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-tw4Ah68NyecQnjh9 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-tw4Ah68NyecQnjh9 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .section{stroke:none;opacity:0.2}#mermaid-svg-tw4Ah68NyecQnjh9 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-tw4Ah68NyecQnjh9 .section2{fill:#fff400}#mermaid-svg-tw4Ah68NyecQnjh9 .section1,#mermaid-svg-tw4Ah68NyecQnjh9 .section3{fill:#fff;opacity:0.2}#mermaid-svg-tw4Ah68NyecQnjh9 .sectionTitle0{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .sectionTitle1{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .sectionTitle2{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .sectionTitle3{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-tw4Ah68NyecQnjh9 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .grid path{stroke-width:0}#mermaid-svg-tw4Ah68NyecQnjh9 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-tw4Ah68NyecQnjh9 .task{stroke-width:2}#mermaid-svg-tw4Ah68NyecQnjh9 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .taskText:not([font-size]){font-size:11px}#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-tw4Ah68NyecQnjh9 .task.clickable{cursor:pointer}#mermaid-svg-tw4Ah68NyecQnjh9 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-tw4Ah68NyecQnjh9 .taskText0,#mermaid-svg-tw4Ah68NyecQnjh9 .taskText1,#mermaid-svg-tw4Ah68NyecQnjh9 .taskText2,#mermaid-svg-tw4Ah68NyecQnjh9 .taskText3{fill:#fff}#mermaid-svg-tw4Ah68NyecQnjh9 .task0,#mermaid-svg-tw4Ah68NyecQnjh9 .task1,#mermaid-svg-tw4Ah68NyecQnjh9 .task2,#mermaid-svg-tw4Ah68NyecQnjh9 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutside0,#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutside2{fill:#000}#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutside1,#mermaid-svg-tw4Ah68NyecQnjh9 .taskTextOutside3{fill:#000}#mermaid-svg-tw4Ah68NyecQnjh9 .active0,#mermaid-svg-tw4Ah68NyecQnjh9 .active1,#mermaid-svg-tw4Ah68NyecQnjh9 .active2,#mermaid-svg-tw4Ah68NyecQnjh9 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-tw4Ah68NyecQnjh9 .activeText0,#mermaid-svg-tw4Ah68NyecQnjh9 .activeText1,#mermaid-svg-tw4Ah68NyecQnjh9 .activeText2,#mermaid-svg-tw4Ah68NyecQnjh9 .activeText3{fill:#000 !important}#mermaid-svg-tw4Ah68NyecQnjh9 .done0,#mermaid-svg-tw4Ah68NyecQnjh9 .done1,#mermaid-svg-tw4Ah68NyecQnjh9 .done2,#mermaid-svg-tw4Ah68NyecQnjh9 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-tw4Ah68NyecQnjh9 .doneText0,#mermaid-svg-tw4Ah68NyecQnjh9 .doneText1,#mermaid-svg-tw4Ah68NyecQnjh9 .doneText2,#mermaid-svg-tw4Ah68NyecQnjh9 .doneText3{fill:#000 !important}#mermaid-svg-tw4Ah68NyecQnjh9 .crit0,#mermaid-svg-tw4Ah68NyecQnjh9 .crit1,#mermaid-svg-tw4Ah68NyecQnjh9 .crit2,#mermaid-svg-tw4Ah68NyecQnjh9 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-tw4Ah68NyecQnjh9 .activeCrit0,#mermaid-svg-tw4Ah68NyecQnjh9 .activeCrit1,#mermaid-svg-tw4Ah68NyecQnjh9 .activeCrit2,#mermaid-svg-tw4Ah68NyecQnjh9 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-tw4Ah68NyecQnjh9 .doneCrit0,#mermaid-svg-tw4Ah68NyecQnjh9 .doneCrit1,#mermaid-svg-tw4Ah68NyecQnjh9 .doneCrit2,#mermaid-svg-tw4Ah68NyecQnjh9 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-tw4Ah68NyecQnjh9 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-tw4Ah68NyecQnjh9 .milestoneText{font-style:italic}#mermaid-svg-tw4Ah68NyecQnjh9 .doneCritText0,#mermaid-svg-tw4Ah68NyecQnjh9 .doneCritText1,#mermaid-svg-tw4Ah68NyecQnjh9 .doneCritText2,#mermaid-svg-tw4Ah68NyecQnjh9 .doneCritText3{fill:#000 !important}#mermaid-svg-tw4Ah68NyecQnjh9 .activeCritText0,#mermaid-svg-tw4Ah68NyecQnjh9 .activeCritText1,#mermaid-svg-tw4Ah68NyecQnjh9 .activeCritText2,#mermaid-svg-tw4Ah68NyecQnjh9 .activeCritText3{fill:#000 !important}#mermaid-svg-tw4Ah68NyecQnjh9 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-tw4Ah68NyecQnjh9 g.classGroup text .title{font-weight:bolder}#mermaid-svg-tw4Ah68NyecQnjh9 g.clickable{cursor:pointer}#mermaid-svg-tw4Ah68NyecQnjh9 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-tw4Ah68NyecQnjh9 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-tw4Ah68NyecQnjh9 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-tw4Ah68NyecQnjh9 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-tw4Ah68NyecQnjh9 .dashed-line{stroke-dasharray:3}#mermaid-svg-tw4Ah68NyecQnjh9 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 .commit-id,#mermaid-svg-tw4Ah68NyecQnjh9 .commit-msg,#mermaid-svg-tw4Ah68NyecQnjh9 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-tw4Ah68NyecQnjh9 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-tw4Ah68NyecQnjh9 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-tw4Ah68NyecQnjh9 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-tw4Ah68NyecQnjh9 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-tw4Ah68NyecQnjh9 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-tw4Ah68NyecQnjh9 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-tw4Ah68NyecQnjh9 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-tw4Ah68NyecQnjh9 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-tw4Ah68NyecQnjh9 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-tw4Ah68NyecQnjh9 .edgeLabel text{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tw4Ah68NyecQnjh9 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-tw4Ah68NyecQnjh9 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-tw4Ah68NyecQnjh9 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-tw4Ah68NyecQnjh9 .note-edge{stroke-dasharray:5}#mermaid-svg-tw4Ah68NyecQnjh9 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-tw4Ah68NyecQnjh9 .error-icon{fill:#522}#mermaid-svg-tw4Ah68NyecQnjh9 .error-text{fill:#522;stroke:#522}#mermaid-svg-tw4Ah68NyecQnjh9 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-tw4Ah68NyecQnjh9 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-tw4Ah68NyecQnjh9 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-tw4Ah68NyecQnjh9 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-tw4Ah68NyecQnjh9 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-tw4Ah68NyecQnjh9 .marker{fill:#333}#mermaid-svg-tw4Ah68NyecQnjh9 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-tw4Ah68NyecQnjh9 {color: rgba(0, 0, 0, 0.75);font: ;}

全程的测试介入
胜于
孤立的测试阶段
团队整体对质量负责
胜于
测试人员独力把关质量
持续性的精准自动化测试
胜于
回归式的全量自动化测试
质量内建
胜于
质量把关

敏捷开发流程下的测试(一)敏捷测试核心相关推荐

  1. 敏捷开发模式下如何更好的进行测试

    最近CTO组建了一个敏捷开发团队,团队人员包括  PM.设计.开发.测试角色,主要由PM来主导团队走向,因为以前并没有参加过敏捷开发的经验,对敏捷开发做了简单理解后,参考了前人的一些意见,总结出在 敏 ...

  2. 敏捷开发流程的8个步骤

    一.敏捷开发流程的8个步骤包括: 1.目标制定,目标对齐:通过市场调研.业务思路.风险评估制定公司规划和目标,根据这一目标产生所有部门的目标并实现对齐: 2.产品规划:产品研发部门根据目标制定产品关键 ...

  3. 如何让Git适应敏捷开发流程?

    一旦涉及版本控制系统,Git实际上代表敏捷开发的水平.Git作为一款强大的开源系统,有较强的灵活性,可以按需匹配任何开发团队的工作流程.而这种分布式相比较集中式来说,自然赋予系统更好的性能特征,且允许 ...

  4. 敏捷开发系列学习总结(11)——Scrum敏捷开发流程的三个角色、四个会议和三个物件

    Scrum敏捷开发流程主要包扩三个角色.四个会议和个三物件. 三个角色 Scrum团队中包括三个角色,他们分别是产品负责人.开发团队和 项目的直接管理者(Scrum Master). Scrum 团队 ...

  5. 敏捷 | 【万字长文】 说透 如何学习敏捷开发流程和运用

    作为程序员如果说你不了解 敏捷开发流程,不能说你不是一个好程序员,肯定的是你一定很痛苦,你将面临项目周期和版本无序的困扰. 针对这种情况,建议你看看这边文章,看完你完全能够明白敏捷. 敏捷开发是目前很 ...

  6. 一篇小文章了解企业的敏捷开发流程

    1.什么是敏捷开发流程: 敏捷开发(Agile)是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征.简单地来 ...

  7. 那些互联网大厂敏捷开发流程是怎么样的?每个职位的角色和分工是什么?

    一.一个故事带你了解敏捷流程 在讲道理之前,我先讲个故事. 最近某公司负责人一直在思考这件事,"冬季如何让更多的人参加户外运动".然后在某个下雪天,他惊讶的发现路上竟然一个雪人都看 ...

  8. 项目管理之-敏捷开发流程

    引言:敏捷绝非某一种特定的开发方法,它只是一种应对快速变化的需求的一种软件开发能力.敏捷本身只包含了<敏捷软件开发宣言>和<敏捷软件的十二条原则>两份文档. 敏捷的起源: 敏捷 ...

  9. 什么是敏捷开发?敏捷开发流程的8个步骤

    文章目录 一.什么是敏捷开发? 二.敏捷开发模式的分类 三.SCRUM 的工作流程 四.敏捷开发流程的8个步骤包括: 五.敏捷开发模型 一.什么是敏捷开发? 敏捷开发(Agile)是一种以人为核心.迭 ...

最新文章

  1. Springboot-mongodb MongoRepository接口 save方法 详解
  2. Android Toolbar Padding
  3. VTK:选择像素用法实战
  4. php cookie加密 类,PHP cookie加密类
  5. Word2vec加TextRank算法生成文章摘要
  6. cordova报错“No installed build tools found. Install the Android build tools version - ”
  7. oracle rollup 排序,Oracle教程之rollup用法
  8. python matplotlib绘图显示中文
  9. Delphi中的dll操作
  10. HDU1013 POJ1519 Digital Roots(解法三)【废除!!!】
  11. 图卷积网络的半监督学习脉络
  12. 中级软件设计师真题与答案(2009到2018)
  13. 基于R软件的网状meta分析
  14. 14. AsciiArt礼节/15. cterm的拷贝TCP包功能
  15. 100件不可思议的事
  16. 信度效度难度区分度是什么意思_如何区分信度、效度、难度、区分度?
  17. LBM学习讨论群推荐
  18. 零时科技 || DPC攻击事件分析
  19. SpringBoot中: Incorrect result size: expected 1, actual 0以及column xxxx not found解决
  20. 用C语言打印棱形图案

热门文章

  1. 使用jsoncpp解析json文件
  2. 链接时出现LNK2001错误的解决方法
  3. Tomcat安装配置与基础使用
  4. 科学家对医疗预印本服务器的影响,美国化学学会将启动化学论文预印本服务
  5. linux mysql --help_深入理解mysql帮助命令(help)
  6. 吉林省职称2017计算机免试,[吉林省职称评定条件]吉林省调整职称评审政策:这些人员可免试外语.doc...
  7. linux怎么退出telnet端口,CentOS下怎么退出telnet
  8. mysql innodb禁用事务_MySQL InnoDB事务中锁问题(三)
  9. django xadmin 默认密码_Django的认证系统
  10. python函数的特性_Python学习(007)-函数的特性