Практическое задание 1. Задание Для участка кода, выбранного в соответствии со своим вариантом (либо можно взять свой собственный код), получить граф потока управления (блоксхему укрупненную!
Скачать 55 Kb.
|
Задание 1. Для участка кода, выбранного в соответствии со своим вариантом (либо можно взять свой собственный код), получить граф потока управления (блок-схему укрупненную!). Можно использовать инструменты вроде https://app.code2flow.com/. Подобрать наборы комбинаций значений переменных, используемых в данном коде, так, чтобы они покрывали логику данного участка кода в соответствии с критериями, приведенными в вашем варианте.
Листинг 1 public int symmetricTraversal(Node _node, int alpha, int beta) { if (_node.Children != null) { foreach (Node link in _node.Children) { if (alpha <=beta) symmetricTraversal(link, alpha, beta); if (link.order == 0) { Console.WriteLine(_node.getPosition()); if (link.Value > beta) { _node.Value = beta; break; } if (link.Value > _node.Value) _node.Value = link.Value; } if (link.order == 1) { Console.WriteLine(_node.getPosition()); if (link.Value < alpha) { _node.Value = alpha; break; } if (link.Value < _node.Value) _node.Value = link.Value; } } } } else { Console.WriteLine(_node.getPosition());// _ } findMin(_node); return 0; } Листинг 2 if((i { x=B[k*l+i]; i++; if((j { y=C[k*l+j]; j++; if(x { D[m]=x; D[m+1]=y; m=m+2; } else { D[m]=y; D[m+1]=x; m=m+2; } } else {///++ if((i { y=B[i]; i++; if(x { D[m]=x; D[m+1]=y; m=m+2; } else { D[m]=y; D[m+1]=x; m=m+2; } } else { D[m]=x; m=m+1; } } Листинг 3 while ( ++rootDepth < MAX_PLY && !Threads.stop && !(Limits.depth && mainThread && rootDepth > Limits.depth)) { if (mainThread) totBestMoveChanges /= 2; for (pvIdx = 0; pvIdx < multiPV && !Threads.stop; ++pvIdx) { if (pvIdx == pvLast) { pvFirst = pvLast; for (pvLast++; pvLast < rootMoves.size(); pvLast++) if (rootMoves[pvLast].tbRank != rootMoves[pvFirst].tbRank) break; } selDepth = 0; if (rootDepth >= 4) { Value prev = rootMoves[pvIdx].previousScore; delta = Value(17); alpha = std::max(prev - delta,-VALUE_INFINITE); beta = std::min(prev + delta, VALUE_INFINITE); int dct = ct + (105 - ct / 2) * prev / (abs(prev) + 149); contempt = (us == WHITE ? make_score(dct, dct / 2) : -make_score(dct, dct / 2)); } } } Листинг 4 ================== while (x) { from = PopLSB(x); pin = GetPinMask(pos, from, K, occupied, opp) & mask1; int row = Row(from); to = from + fwd; if (!pos[to]) { if (row == second) { if (BB_SINGLE[to] & pin) Add(from, to, piece); to += fwd; if (!pos[to] && (BB_SINGLE[to] & pin)) Add(from, to, piece); } else if (row == seventh) { if (BB_SINGLE[to] & pin) { Add(from, to, piece, NOPIECE, QW | side); } } else if (BB_SINGLE[to] & pin) Add(from, to, piece); } y = BB_PAWN_ATTACKS[from][side] & pos.BitsAll(opp) & pin; while (y) { to = PopLSB(y); captured = pos[to]; if (row == seventh) { Add(from, to, piece, captured, QW | side); Add(from, to, piece, captured, RW | side); Add(from, to, piece, captured, BW | side); Add(from, to, piece, captured, NW | side); } else Add(from, to, piece, captured); } } ============================================================= Задание 2. 1. Для условного выражения, представляющего собой 4-х местный предикат, подобрать наборы значений условных переменных такие что, проверка их будет удовлетворять покрытию данных решений по критерию "модифицированное покрытие условий/решений" (MC/DC). Показать, что этот критерий сильнее критерия "покрытия условий/решений".
2. Добавляется условие: булевы переменные A и C связаны согласно следующей таблице сопряженности:
Для такого случая необходимо подобрать наборы значений условных переменных такие что, проверка их будет удовлетворять покрытию данных решений по критерию "маскирующий MC/DC". |