Необязательные требования

Требования к безопасности и качеству

Любые студенческие работы — ДОРОГО!

100 р бонус за первый заказ

Как уже говорилось, в рыночной экономике государству вовсе не обязательно контролировать все требования к продукции, ее производству и потреблению. Закон разделяет требования на:

Обязательные (для государства) — подтверждать выполнение которых должен государственный орган;

Необязательные — выполнять которые исполнитель должен только, если они указаны в договоре.

Обязательные требования включают требования к безопасности производства и потребления продукции, а также требования к совместимости. Необязательные требования, в основном, требования к качеству продукции. Правила проведения сертификации обязательных и необязательных требований определяются в законе РФ «О

Документальное удостоверение соответствия продукции или иных объектов требованиям технических регламентов, положениям стандартов или условиям договора, получило название подтверждение соответствия. Обязательное подтверждение соответствия осуществляется в формах:

принятия декларации о соответствии (далее — декларирование соответствия);

4 Федеральный закон N 184-ФЗ принят 27 декабря 2002 года. Вступил в силу 27 июня 2003 г. (через 6 месяцев после опубликования).

2. Дополнительные требования к кандидатуре арбитражного управляющего

Законодательством о банкротстве помимо основных установлены и так называемые «дополнительные» требования к кандидатуре арбитражного управляющего, которые предъявляются в некоторых случаях наряду с «основными» требованиями.

«Дополнительные» требования к кандидатуре арбитражного управляющего можно разделить на «обязательные дополнительные» требования и «необязательные дополнительные» требования.

«Обязательные дополнительные» требования — это требования, которые предъявляются к кандидатурам арбитражных управляющих, подлежащим утверждению для проведения процедур банкротства в отношении отдельных категорий должников, законодательством.

Согласно п. 2 ст. 187 Закона о банкротстве арбитражный управляющий, участвующий в деле о банкротстве профессионального участника рынка ценных бумаг, должен иметь соответствующий аттестат, выданный федеральным органом исполнительной власти по регулированию рынка ценных бумаг (таким органом является Федеральная комиссия РФ по рынку ценных бумаг).

Согласно ст. 193 Закона о банкротстве Правительство РФ, кроме требований к кандидатуре арбитражного управляющего, установленных ст. 20 и 23 Закона о банкротстве, вправе установить перечень дополнительных требований, являющихся обязательными при утверждении арбитражным судом кандидатуры арбитражного управляющего в деле о банкротстве стратегического предприятия или организации. Постановлением Правительства РФ от 19 сентября 2003 г. N 586 «О требованиях к кандидатуре арбитражного управляющего в деле о банкротстве стратегического предприятия или организации» утвержден Перечень требований к кандидатуре арбитражного управляющего в деле о банкротстве стратегического предприятия или организации. В данный Перечень входят следующие требования:

— наличие стажа работы на предприятиях или в организациях оборонно-промышленного комплекса либо на иных стратегических предприятиях или в организациях не менее пяти лет, из них не менее одного года стажа руководящей работы;

— участие в качестве арбитражного управляющего не менее чем в двух делах о банкротстве, за исключением дел о банкротстве отсутствующего должника, при условии, что в течение последних трех лет кандидат не отстранялся от осуществления обязанностей арбитражного управляющего в связи с неисполнением или ненадлежащим исполнением возложенных на него обязанностей;

— наличие высшего юридического или экономического образования, или высшего образования по специальности, соответствующей сфере деятельности должника.

Федеральный закон от 24 июня 1999 г. N 122-ФЗ «О несостоятельности (банкротстве) субъектов естественных монополий топливно-энергетического комплекса» также устанавливает дополнительные требования к кандидатуре арбитражного управляющего. В частности, согласно ст. 4 данного Закона арбитражным управляющим для проведения процедур банкротства в отношении должников — субъектов естественных монополий топливно-энергетического комплекса может быть назначено лицо, имеющее опыт работы в соответствующих организациях топливно-энергетического комплекса, а также имеющее аттестат, выданный уполномоченным Правительством РФ органом в области топливно-энергетического комплекса.

Согласно ст. 6 Федерального закона от 25 февраля 1999 г. N 40-ФЗ «О несостоятельности (банкротстве) кредитных организаций» арбитражный управляющий при банкротстве кредитных организаций должен соответствовать квалификационным требованиям Банка России и иметь аттестат, выданный Банком России.

Что касается «необязательных дополнительных» требований, то под ними следует понимать дополнительные требования, которые предъявляются к кандидатуре арбитражного управляющего по инициативе конкурсного кредитора или уполномоченного органа (собрания кредиторов). Перечень возможных «необязательных дополнительных» требований к арбитражному управляющему является исчерпывающим и предусмотрен в п. 1 ст. 23 Закона о банкротстве:

— наличие у кандидата высшего юридического, экономического образования или образования по специальности, соответствующей сфере деятельности должника;

— наличие у кандидата определенного стажа работы на должностях руководителей организаций в соответствующей отрасли экономики;

— установление количества процедур банкротства, проведенных кандидатом в качестве арбитражного управляющего.

Конкурсный кредитор или уполномоченный орган (собрание кредиторов) не вправе выдвигать не предусмотренные выше дополнительные требования к кандидатуре арбитражного управляющего.

Требования к участникам госзакупок

Чтобы принять участие в конкурсе на выполнение работ по госконтракту, компания-подрядчик должна соответствовать определенным требованиям, прописанным в Законе 44-ФЗ . Существуют обязательные и необязательные требования. Информацию о них Заказчик по закону должен указать в извещении и документации о закупке.

Указанные в документации требования являются едиными и обязательными для всех компаний, принимающих участие в конкурсе. При этом Заказчик не может добавлять в описание аукциона какие-либо условия, не установленные в 44-ФЗ.

Подрядчику, участвующему в конкурсе, достаточно заявить собственное соответствие условиям, а проверка ложится на плечи Заказчика. Если предоставленная организацией информация будет признана недостоверной, то Подрядчик будет отстранен от закупки в любой момент до заключения контракта, и его занесут в Реестр недобросовестных поставщиков.

Обязательные общие требования

1. Поставщик должен иметь достаточную квалификацию и право выполнять работы, оказывать услуги или поставлять товары, которые являются предметом аукциона. Для этого он должен обладать соответствующей лицензией, допуском СРО или сертификатом соответствия.

2. Подрядчик не должен находиться под действием мер по ликвидации предприятия.

3. На время подачи заявки деятельность Поставщика не должна быть приостановлена в соответствии с КоАП РФ.

4. У подрядчика не должно быть долгов по обязательным платежам более 25 процентов от стоимости собственных активов.

5. У учредителей организации, генерального директора, главного бухгалтера и ИП не должно быть судимости за преступления в сфере экономики.

6. Подрядчик должен обладать полными правами на интеллектуальную деятельность.

7. Между Заказчиком и Подрядчиком не должно быть аффилированности, конфликта интересов или родственных связей.

Возможные дополнительные требования

Одно из дополнительных требований, которые имеет право устанавливать Заказчик, используется так часто, что можно в неофициальном порядке рассматривать его, как обязательное. Заказчики предпочитают работать с компаниями, не входящими в Реестр недобросовестных поставщиков, и это стоит иметь в виду.

Возможные дополнительные условия могут быть такими:

1. Подрядчик должен обладать достаточными финансовыми средствами для исполнения всех работ по контракту.

2. У Исполнителя должно быть право собственности или документы, подтверждающие аренду оборудования и других ресурсов, которые необходимы для исполнения контракта.

3. Заказчик вправе потребовать наличие определенного документально подтвержденного опыта работы в сфере, связанной с предметом договора.

4. Компания-подрядчик должна иметь в своем штате достаточное количество квалифицированных специалистов для проведения работ по контракту.

Специалисты компании «РосТендер» помогут Вашей организации решить любые вопросы, связанные с госзакупками. Обращайтесь!

Необязательные методы протокола в swift без использования @objc

Используя @objc в swift, мы можем создать необязательные методы внутри протокола, например

Но как создать необязательные методы протокола без использования @objc?

Позвольте создать дополнительные методы протокола, используя расширение этого протокола и используя его:

Вы можете определить реализацию по умолчанию по умолчанию:

При этом вам не нужно реализовывать optionalFunc() в классах, соответствующих Opt, потому что у них уже есть реализация по умолчанию.

Протоколы Swift не поддерживают дополнительные методы.

Дополнительные требования к протоколу

Вы можете определить необязательные требования к протоколам, эти требования не должны выполняться типами, соответствующими протоколу. Необязательные требования предваряются дополнительным модификатором в качестве части определения протоколов. Доступны дополнительные требования, чтобы вы могли писать код, который взаимодействует с Objective-C. Как протокол, так и необязательное требование должны быть отмечены атрибутом @objc. Обратите внимание, что протоколы @objc могут быть приняты только классами, которые наследуются от классов Objective-C или других классов @objc. Они не могут быть приняты структурами или перечислениями.

Читайте так же:  Киев адвокат колесников

Одним из распространенных способов использования дополнительных методов в протоколах является определение необязательных обратных вызовов, которые может прослушать делегат. Этот сценарий лучше всего достигается с использованием подхода с использованием protocol + extension (для обеспечения стандартных реализаций по умолчанию для высоких необязательных методов).

Для некоторых других случаев может быть более целесообразным использовать несколько протоколов:

Стандартная библиотека использует этот подход для Sequence , Collection и друзей.

Желательные свойства D-требований 1 страница

Мы хотели бы подчеркнуть значительное влияние, которое может оказать на про­ект пропуск тех или иных деталей. Чтобы помочь убедиться, что все детали были охвачены, мы определим свойства, которыми должны обладать D-требования.

В частности, D-требования должны быть полными и согласованными. Нужно, чтобы можно было отследить каждое требование в проекте, протестировать его работу и разработать его согласно его приоритету. Мы будем исследовать требова­ния на наличие этих характеристик, когда будем оценивать качество (раздел 4.6). В конце данного раздела представлена последовательность шагов, которая может быть использована для выражения подробных требований.

Прослеживание функциональных требований

Представьте себе программу с 1000 детальных требований. Без возможности чет­кого контроля каждого требования от проекта программы до самого кода, реали­зующего это требование, было бы сложно убедиться в том, что программа разра­ботана в соответствии с требованиями. Когда требования меняются (чего следует ожидать), это становится еще сложнее. Возможность отображать каждое требова­ние па соответствующие части проекта и программы называется прослеживанием. Один из способов, помогающих достичь этого, заключается в отображении каж­дого функционального D-требования на конкретную функцию целевого языка. Эта техника использована в примере (рис. 4.4): показаны части проекта, которые должны быть объединены для возможности контроля. Достижение и поддержка этого уровня контроля во время разработки представляет собой сложную задачу.

В качестве примера представьте себе такое требование к игре Встреча.

Когда внешний игровой персонаж появляется в зоне, содержащей главный пер­сонаж игрока, или наоборот, эти персонажи вступают в контакт друг с другом.

Значение этого утверждения очевидно, однако нужно понимать, какая часть проекта и кода будет отвечать за выполнение этого требования. При использова­нии объектно-ориентированного подхода мы можем связать это требование с кон­кретной функцией конкретного класса. Вопрос о том, какой класс отвечает за эту функцию, нетривиален, и он возникает постоянно при использовании объектно- ориентированного подхода. Что касается приведенного выше примера, объекты Зона должны иметь возможность распознавать контакт, поскольку именно эти объекты предположительно должны владеть информацией о находящихся «в них» персонажах. В частности, требование можно будет отследить с помощью опреде­ленного кода, обрабатывающего события для класса Зона.

По мере продвижения проекта документ с требованиями должен поддержи­ваться согласованным с архитектурой и реализацией. Когда требования сложно отследить в архитектуре и коде, разработчики часто стараются избежать обнов­ления документа требований при внесении изменений в исходный код, посколь­ку для этого потребуется много усилий. В конце концов, такая порча документа приводит к увеличению работ и затрат на проект. Это явление проиллюстриро­вано в нижеследующем примере.

1. Разработчику Биллу поручили сделать изменения в программе. Биллу ка­жется, что привести документ с требованиями в соответствие с кодом сложно, и он решает не делать этого.

2. Разработчику Джону поручают сделать новые изменения. Он делает из­менения в коде, тестирует их и начинает обновлять документ с требова­ниями. Но все говорят ему не беспокоиться об этом, поскольку документ устарел в некоторых местах и никто ему уже не доверяет. Джону гово­рят, что пет смысла делать это, поскольку документ все равно никто чи­тать не будет. Так что Джон бросает это занятие и продолжает свое про­граммирование. Таким образом, расхождения между документом и кодом увеличиваются.

Рис. 4.4. Контроль D-требования (стрелки показывают основные линии прослеживания)

Даже самые добросовестные разработчики игнорируют необходимость об­новления документа требований, если документ в целом считается ненадежным. С другой стороны, если документы четко и просто ссылаются друг на друга и ру­ководство делает документирование обязательным, разработчики поддерживают документы в очень хорошей профессиональной форме. Другими словами, систе­ма, используемая для поддержания соответствия D-требований с проектом и со­ответствующим кодом, должна быть очень четкой и конкретной.

Когда код, осуществляющий требование, находится в нескольких местах, про­слеживание достигается посредством использования матрицы прослеживания требований, пример которой приведен в табл. 4.1.

Таблица 4.1. Матрица прослеживания тренований

Как показано в табл. 4.1, требование 1783 реализовано посредством функций showNameO в модуле 1, computeBal О в модуле 2 и getlnterestO в модуле 3. Измене­ние в этом требовании повлечет изменение в одной или нескольких из этих функ­ций. Это следует четко контролировать, поскольку эти функции мотуг участвовать также и в выполнении других требований (например, showNameO используется еще и для реализации требования 1784). В результате изменения, сделанные для удовлетворения одного требования, могут нарушить другое. Поскольку с отно­шениями «многие-ко-многим» трудно работать, мы стараемся сделать отображе­ние между требованием и функцией «один-к-одному».

Мы хотим, чтобы каждое D-требование можно было проследить прямо и об­ратно. Предыдущие обсуждения касались прямого отслеживания от D-требова­ний до исполнения. Обратное отслеживание D-требований означает, что тре­бование представляет собой четкую последовательность одного или нескольких С-требований. Например, D-требование:

внешний персонаж должен двигаться от зоны к зоне со средним интервалом в пять секунд

может быть прослежено назад к следующему С-требованию, которое было ча­стью раздела 2.0 в SRS:

остальные /персонажи], называемые внешними, должны контролироваться программой.

Такой обратный контроль является основой проверки D-требований. Возможность полного прослеживания означает, что каждое D-требование связано с конкретным элементом проекта, а также с тестом элемента (рис. 4.5). Рисунок показывает преимущество жесткого соответствия между каждым отдель­ным функциональным требованием, описывающей требование частью проекта и реализующей его частью кода. Они связаны с тестом требования (тесты явля­ются темой главы 8).

Контроль нефункциональных требований

Предыдущее обсуждение относилось к функциональным требованиям, однако как же мы прослеживаем нефункциональные требования? Это может оказаться сложной задачей, поскольку одному нефункциональному требованию может со­ответствовать более одной части проектирования и реализации. Например, тре­бование того, чтобы каждый контакт происходил менее чем за одну секунду, мо­жет затронуть код класса Контакт и (или) класса ПерсонажИгры и (или) класса Зона. Наша задача на данном этапе заключается в определении нефункциональ­ных требований возможно более четким языком. Чтобы прояснить нефункцио­нальные требования, мы также затронем вопросы проектирования и реализации.

Одна из целей стадии проектирования — изолировать каждое нефункциональ­ное требование в отдельный элемент проекта. В случае требований к производи­тельности делается попытка изолировать самые медленные вычислительные компоненты. Каждую функцию, связанную с требованиями к производительно­сти, сопровождают соответствующие проверяемые нефункциональные коммен­тарии. Желательно, чтобы эти требования были количественными, как, например, «нужно завершить работу менее чем за одну миллисекунду в худшем случае». Аналогично, в случаях, когда определены ограничения по памяти, мы выделяем функции, больше других расходующие память.

Исследования показали, что основную часть работы в программе выполняет относительно небольшая часть функций, поэтому поиск нескольких основных расходующих время функций может принести хорошие результаты. Вернемся к требованию выполнения контакта в игре Встреча за одну секунду, которое уже упоминалось. Во время проектирования и реализации мы ищем типичные компо­ненты, расходующие время при обработке контакта. К таким компонентам относят­ся циклы, отображение графики, а также сетевая передача данных. Циклы и передачи данных не связаны с обработкой контакта, поэтому проводится тест. Тест должен убедить нас в том, что графика и графический пользовательский интерфейс, требуе­мые при контакте, работают достаточно быстро. Функция, расходующая боль­шую часть времени, — это, вероятно, либо функция «Вступить в контакт с внеш­ним персонажем» класса Контакт, либо функция вывода результатов контакта.

Чтобы утвердить нефункциональные требования, нам пришлось связать каж­дое из них с планом тестирования — желательно делать это во время написания требования. Типичная связь функциональных и нефункциональных требований с реализацией и тестированием, обсуждавшимися выше, представлена на рис. 4.6. На рисунке проиллюстрирован случай, когда нефункциональным требованиям может соответствовать несколько компонентов, а также когда для утверждения нефункциональных требований необходимо системное или интегральное тести­рование, поскольку их верификация (то есть проверка до запуска программы) может оказаться весьма сложной.

Читайте так же:  Приказ мвд рф 777 от 10082012 г

Фаза определения требований Фаза тестирования

Пригодность к тестированию и однозначность

Должна существовать возможность валидировать требование, убедившись, что требование было корректно реализовано. (Вспомните, что в главе 1 валидация относится к проверке того, что артефакт функционирует так, как должен.) Требо­вания, которые можно протестировать, называются тестируемыми. Нетестируе­мые «требования» не имеют большой практической ценности. Приведем пример нетестируемого требования и перечислим действия, которые нужно выполнить для того, чтобы требование стало тестируемым.

Система должна показывать разницу в зарплате между зарплатой клиента и средней зарплатой в мире для той же специальности.

Это требование не протестировать, поскольку упоминаемую среднюю зарпла­ту невозможно определить (несмотря на то, что она существует).

Улучшенная версия требования:

Система будет показывать разницу в зарплате между зарплатой клиента и предполагаемой средней зарплатой для той же специальности согласно цифрам, опубликованными на веб-сайте ООН на время запроса.

Если D-требование записано нечетко или двусмысленно, мы не сможем опре­делить, правильно оно было реализовано или нет. Пример неоднозначного тре­бования и его исправленная версия приведены ниже.

Игрок может определять значения характеристик персонажей игры.

В любое время? Вероятно, нет. Придется протестировать разные случаи, с со­ответствующими ненужными затратами, и мы получим неправильный результат. Улучшенная версия этого требования.

Каждый раз, когда внешние персонажи отсутствуют в зоне нахождения глав­ного персонажа игрока, игрок может изменить значения характеристик персона­жа, сохранив сумму значений неизменной. Для этого используется окно характе­ристик игрока (см. раздел 3.2.ПИ в конце главы).

Часто бывает трудно реализовать всю запланированную функциональность про­граммы в срок и не выходя за рамки бюджета. Как упоминалось в разделе 2.3.1, могут измениться возможности, сроки, уровень качества и стоимость. Поэтому, если сроки, бюджет или уровень качества менять нельзя, единственной альтерна­тивой остается изменение возможностей, то есть уменьшение количества реали­зованных требований. Этот процесс отсеивания выполняется запланированным способом. Одна из техник — расставить приоритеты между детальными требования­ми. Упорядочивание всех требований обычно является пустой тратой времени — вместо этого многие организации классифицируют требования по трем (иногда четырем) категориям. Мы назовем их важные, желательные и необязательные. Убедимся, что проект реализует все существенные требования. Использование трех категорий представляет собой применение отбраковки, упомянутой в гла­ве 2. Назначение приоритетов требованиям сказывается на проектировании, по­скольку желаемые и необязательные требования часто указывают направление, в котором должно двигаться приложение. Широко известная мудрость гласит, что предприятия получают порядка 80 % дохода от использования всего лишь 20 % требований. Поэтому, если приоритеты расставлены правильно (например, только около 20 % требований отнесены к существенным), можно получить мак­симальную прибыль от приложения с учетом требуемой работы. Этот полезный фактор следует учитывать, если проект начинает выпадать из временных рамок. Пример отбраковки требований:

[важно] Все игровые персонажи имеют одинаковые наборы характеристик, [желательно] Каждая зона имеет набор предпочтительных характеристик, [не обязательно] Персонаж игрока должен взрослеть с каждой встречей. Скорость взросления может быть установлена во время начальных настроек. По умолчанию она равна одному году за каждую встречу.

Приведенный далее пример содержит некоторые приоритетные D-требования для первой версии игры Встреча. Они перечислены здесь для того, чтобы чита­тель смог себе представить, с вопросами какого типа ему придется иметь дело. Некоторые желательные требования в будущих версиях перейдут в категорию важных. Требования приведены в черновом варианте и, очевидно, нуждаются в повторном упорядочивании. Они будут исправлены дальше в тексте главы и в примере.

Предварительный черновик D-требований игры Встреча

(Требования еще не организованы: см. исправленную форму в примере в конце главы.)

♦ (не проверено:)[важно] Каждый игровой персонаж в видеоигре Встреча должен иметь имя.

♦ (не проверспо:)[важно] Каждый игровой персонаж имеет некоторый на­бор характеристик, значение каждой из которых представлено веществен­ным числом с дробной частью.

♦ (не проверено:)[важно] Игра происходит в зонах, каждая из которых со­единена с другими зонами посредством выходов.

♦ (не проверено:)[важно] Каждый раз, когда персонаж игры входит в зону, в которой находится другой персонаж, и один из этих персонажей контро­лируется игроком, персонажи могут либо по выбору, либо принудительно вступать в контакт друг с другом.

(не проверено:)[важно] Каждый раз, когда персонаж, контролируемый иг­роком, находится один в зоне, игрок может изменять значения его харак­теристик.

♦ (не проверено:)[желательно| Имя каждого персонажа в игре может состо­ять не более чем из 15 символов.

♦ (не проверено:)[желательно] В любой момент персонаж будет иметь неко­торое число очков-жизней, под которым понимается сумма значений его характеристик.

♦ (не проверено:)[желательно] Каждая зона имеет набор предпочтительных характеристик.

♦ (не проверено:)[желательно] Зоны сражений требуют силы и выносливо­сти; зоны жилых комнат требуют внимательности и ума.

♦ (не проверено:)[желательно] Сумма значений характеристик игрового пер­сонажа, соответствующих требованиям зоны, будет называться значением персонажа в зоне. Во время контакта система будет сравнивать значения персонажей в зоне и передавать сильнейшему половину очков-жизней сла­бейшего. Например, представьте себе, что игрок вступает в контакт с внеш­ним персонажем в зоне, требующей выносливости и внимательности, и ps — значение выносливости игрока. Предположив, что ps + р.л > /5 + получим:

♦ где штрихом отмечены значения после контакта.

♦ (не проверено:)[не обязательно] При контакте расчет результатов будет происходить менее чем за секунду.

♦ (не проверено:)[не обязательно] Персонаж игрока будет стареть с каждым контактом. Скорость взросления можно установить в начальных настрой­ках. По умолчанию за каждый контакт добавляется год.

♦ (не проверено:)[не обязательно] Персонажи, управляемые игроком, теря­ют или набирают значения своих характеристик в конце каждого контакта со скоростью +2 % при значении возраста до 30 и -2 % при значении воз­раста больше 30.

Расстановка приоритетов требований связана с итерацией, реализующей их. Например, если мы не сможем реализовать необязательное требование

При контакте расчет результатов будет происходить менее чем за секунду на второй итерации, оно может появиться на следующей итерации, но уже с более высоким приоритетом. Требования для каждой итерации хранятся в отдельном документе. Это помогает лучше понять более поздние требования.

Мы стараемся сделать каждое подробное требование самодостаточным, но на практике это редко удается, когда требования часто ссылаются на другие требо­вания. Полнота набора требований гарантирует, что не было сделано никаких пропусков, подрывающих сформулированные требования. Ниже представлен не­полный набор требований. Без указания того, как должно отображаться видео, этот набор требований является неполным. Начало требований.

1. Приложение должно показывать фильм, название которого введено в стро­ке приглашения.

2. Приложение должно показывать все фильмы, фамилия режиссера которых введена в строке приглашения.

♦ Порядок показа определяется с помощью клавиши перемещения курсора Т.

3. Приложение должно показывать все фильмы с участием актера, фамилия которого введена в строке приглашения.

4. Порядок показа определяется с помощью клавиши перемещения курсора t. Конец требований.

Опущено: Специфицировать, как «показать» видео!

Изучая пример видеоигры Встреча, попробуем критически оценить, имеем ли мы полный набор требований. Вероятно, хорошим способом оценить теку­щий статус требований будет просмотр их с помощью вариантов использования.

a. Мы устанавливаем характеристики персонажа игрока в гардеробной. Мы можем проверить наличие всей необходимой функциональности и данных для этого.

b. Мы переходим в соседнюю зону. Проверяем наличие всей необходимой функциональности для этого.

c. Мы обнаруживаем внешний персонаж. Удостоверяемся, что все детали для этого предоставлены.

Для каждого требования нужно поставить вопрос: «Что будет, если произойдет ошибка?». Рассмотрим пример, предложенный Майерсом [82], — требование, ко­торому не хватает обязательных условий ошибки.

Функция, определяющая, образуют ли три числа равносторонний, равнобед­ренный или разносторонний треугольник.

Спецификация этого требования неполная, поскольку она не рассматривает состояний ошибки. Следующая версия является более полной. Отсутствие рас­смотрений ошибок в спецификациях требований становится особенно заметным при тестировании функций, поскольку тестер предвидит ошибки и должен знать, что должно выводиться в этом случае.

Функция, определяющая, образуют ли три числа:

1 — равносторонний треугольник (со сторонами больше нуля и равными), в этом случае выводится слово «равносторонний»,

2 — равнобедренный треугольник (со сторонами больше нуля, ровно две из ко­торых равны, и которые образуют треугольник), в этом случае система возвра­щает слово «равнобедренный»,

Читайте так же:  Гражданский кодекс рф кредит

3 — разносторонний треугольник (стороны которого все больше нуля и образу­ют треугольник, не являющийся ни равносторонним, ни равнобедренным), в этом случае система возвращает слово «разносторонний»,

4 — треугольник не образуется, в этом случае система возвращает слово «нет».

Тщательный анализ требований имеет дело с неразрешенным вводом. Существу­ет большой соблазн предположить, что пользовательский интерфейс для некоторого требования не разрешает ввод отрицательных значений, так что функции не при­дется работать с ошибочными данными. Вообще говоря, такое предположение неразумно, поскольку оно перекладывает требования корректности данных на поль­зователей. Это увеличивает зависимость между частями программы. Хотя хорошей практикой считается отслеживать некорректный ввод данных на уровне графиче­ского пользовательского интерфейса и не обязывать пользователя вводить только разрешенные значения, это не заменяет жестких требований в других местах. Автор рекомендует требовать отслеживания некорректных данных во многих, если не во всех, местах программы. Это один из эквивалентов давно сложившейся практики программирования, когда избыточность используется для повышения надежности.

Набор D-требований согласован, если между требованиями нет противоречий. По мере увеличения числа D-требований согласованность может стать труднодости­жимой, что иллюстрирует следующий пример:

Требование 14. Игровые персонажи могут нести только основные продукты питания.

Требование 223. Любой персонаж несет воду.

Требование 497. Только хлеб, масло, молоко и соль являются основными продук­тами питания.

Объектно-ориентированная организация требований помогает избежать несо­гласованности благодаря классификации D-требований по классам и с помощью разложения их на простейшие. Однако и это не гарантирует согласованности, поэтому следует проверять согласованность вместе с другими рассмотренными характеристиками.

39. Диаграммы последовательности.

Диаграммы последовательности являются графическим представлением переда­чи управления и особенно полезны для визуализации реализации вариантов ис­пользования. Помимо использования их для анализа требований, как мы делаем в этой главе, мы также используем их более подробные версии для проектирова­ния, как показано в главе б.

Диаграммы последовательности заставляют нас рассуждать в терминах объ­ектов. В такой диаграмме жизненный цикл каждого участвующего объекта пока­зан вертикальной линией с именем объекта и указанием его класса вверху. Каж­дое взаимодействие между объектами отображается горизонтальной стрелкой от объекта, инициирующего взаимодействие, к объекту, выполняющему дальнейшие функции. Начало диаграммы последовательности для варианта использования Встречи показано на рис. 4.7. Далее приведены замечания к рис. 4.7.

1. Прежде всего, мы обозначаем объект, инициирующий вариант использова­ния, согласно UML с помощью прямоугольника. Это объект класса Игра- Встреча. Тот факт, что упоминается не конкретный объект, а весь класс, указывает на то, что либо объект не требуется вообще (например, исполь­зуются статические методы), либо объекта без какого-либо конкретного имени («анонимного» объекта) будет вполне достаточно.

2. Узкий продолговатый прямоугольник обозначает выполнение функции объекта.

3. Затем мы показываем выполнение операции объекта Зона, инициирован­ного из ИграВстреча: в этом случае используется операция создания, ко­торая обычно является конструктором. Созданный объект — объект гарде- робнаяЗона. Неожиданно мы принимаем решение сделать Зону классом. (Имя, которое мы выбрали для этого класса, не совсем корректно — слиш­ком обобщенно.) Нам следовало назвать его ЗонаВстреч; в дальнейшем мы проследим последствия этого дефекта.

Обратите внимание, что жирная линия для объекта гардероб начинается лишь тогда, когда объект начинает существовать.

В законченной диаграмме последовательности (рис. 4.8) представлены опера­ции. Эти операции показывают работу, инициируемую объектом с исходящей стрелкой и выполняемую объектом, на который указывает стрелка. Каждая опе­рация обычно реализуется функцией на стадии проектирования. Цифрами на рис. 4.8 обозначены ссылки на варианты использования.

Полная диаграмма последовательности для варианта использования приведе­на на рис. 4.8. Идея состоит в том, что по мере того как вы проигрываете вариант использования, становится очевидной необходимость некоторых объектов. Эти объекты заставляют вас вводить новые классы. В варианте использования «Ини­циализировать» первое действие, предпринимаемое программой — показать гарде­роб и главный персонаж игрока. Нам нужен объект, который выполнял бы этот процесс создания. Разумным решением этой задачи будет один объект класса ИграВстреча. ИграВстреча создает объект гардероб класса Зона, затем «говорит» объекту гардероб показать себя. Каждый вытянутый вертикально прямоугольник показывает выполнение вызванной функции. Некоторые из пронумерованных шагов варианта использования реализуются вызовом более чем одной функции. Мы представили класс ПерсопажИгрока, которому принадлежит только один объект — главный! 1ерсонаж,Игрока.

На этот момент диаграмма последовательности служит для определения основных классов. Обычно диаграмму последовательности приходится менять и уточнять во время проектирования. Примером является определение класса, отвечающего за создание объекта гардероб. Архитектура (глава 5) может вызвать создание объекта гардероб не из объекта класса ИграВстреча, а из самого класса Зона либо еще из какого-нибудь другого класса.

Диаграммы последовательности могут использоваться для определения па­раллельных потоков управления. Например, мы можем захотеть, чтобы персона­жи игры двигались независимо от зоны к зоне. В нотации UML для этого случая предусмотрена стрелка от одной колонки к другой, причем изображается только нижняя половина стрелки (рис. 4.9). Это означает инициализацию потока управ­ления в конце стрелки.

Рис. 4.9. Диаграмма последовательности, показывающая параллелизм

Параллельные вертикальные полосы уместно использовать для визуализации параллелизма. Однако диаграммы последовательности неудобно использовать для описания синхронизации. Это можно сделать с помощью диаграмм деятель­ности IJML [64]. За исключением случаев обязательного выражения требований заказчика, такие вопросы, как синхронизация, могут быть отложены до стадии проектирования.

Подведем итог шагов, необходимых для создания диаграммы последователь­ности. В случае, когда первым объектом является пользователь, вместо прямо­угольника будет достаточно простой метки сверху. Отметьте, что объект, отвечаю­щий за выполнение отмеченной на стрелке работы, стоит в конце (а не в начале) стрелки. Наиболее значимой частью процесса является выбор классов. Мы долж­ны решить, какие общие виды элементов (объекты какого класса) будут выпол­нять работу, требуемую от приложения.

40. Организация D-требований. Способы организации детальных требований.

Чтобы понять значение аккуратно организованных D-требований, представьте себе следующую довольно беспорядочную попытку написания D-требований для игры Встреча. Обратите внимание, что эти требования все еще «сырые» и не­проверенные.

♦ Каждый персонаж в видеоигре Встреча должен иметь имя.

♦ Каждый игровой персонаж имеет одинаковый набор характеристик, значе­ние каждой представлено вещественным числом.

♦ В игре Встреча на вычисление результатов контакта должно уходить не более одной секунды,

♦ Каждая зона должна иметь конкретный набор «необходимых характери­стик». Например, зоны сражений

требуют силы и выносливости; зоны жи­лых комнат требуют внимательности и ума.

Когда два персонажа игры оказываются в одной зоне одновременно, они могут по выбору или принудительно вступить в контакт друг с другом.У каждого игрового персонажа должно быть некоторое число очков-жизней.

§ Сумма значений характеристик игрового персонажа, соответствующих тре­бованиям зоны, называется значением персонажа в зоне. Во время контак­та система должна сравнивать значения персонажей в зоне и вычислять результат контакта.

§ Имя каждого персонажа может содержать не более 15 символов.

Неорганизованный список, подобный приведенному выше, быстро превраща­ется в неуправляемый по мере разрастания.

§ Такой список трудно понять в целом, даже пока он не вырос до сотен, если не тысяч элементов.

§ Требования имеют разные типы: например, требования к производитель­ности должны обрабатываться иначе, чем требования поведения.

§ Некоторые требования можно естественным образом объединить с другими.

§ Трудно найти какое-либо конкретное требование.

Способы организации детальных требований

D-требования можно организовать с помощью нескольких схем:

§ по основным свойствам (предоставляемый вовне сервис, обычно опреде­ляется с помощью пар стимул—реакция). Этот способ организации часто воспринимают как «требования», имея в виду, что требования сгруппиро­ваны по различным свойствам программы. Заметьте, что само по себе это не предоставляет никакой систематической организации, поскольку позво­ляет переходить от свойства одной части программы к свойству абсолют­но другой части программы;

§ по режиму (например, системы управления радарами могут иметь трени­ровочный, нормальный и аварийный режимы);

§ по вариантам использования (иногда еще называется по сценариям). Эта организация будет подробно рассмотрена позднее. Идея заключается в том. что большинство детальных требований являются частью варианта исполь­зования;

studopedia.org — Студопедия.Орг — 2014-2018 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с) .