- Корректный — это 📕 что такое корректный
- Второй закон (закон для пользователя)
- Жизненный цикл программной системы
- Инварианты и варианты цикла
- Корректность и устойчивость
- Корректность корректный
- Корректность методов
- Морфологические и синтаксические свойства[править]
- Надежный код
- Первый закон (закон для разработчика)
- Родственные слова[править]
- Семантические свойства[править]
- Создание надежного кода
- Третий закон (закон чечако)
Корректный — это 📕 что такое корректный
КОРРЕКТНЫЙ ая, ое. correct,-e adj., нем. korrekt <лат. correctus исправленный. 1. Тактичный в обращении с людьми; вежливый. БАС-1. Всегда корректный, безупречно одетый, вежливый, он был далек от мочаловских или горевских падений и взлетов. Щепкина-Куп. Театр. Он человек вполне корректный. Не совсем корректный поступок. Уш. 1934.
2.Безупречный, правильный. Гардинин, почувствовавший к нему симпатическое влечение с первой минуты знакомства, и губернаторский чиновник, которому внутри что-то говорило, что он, Соловцев, был не совсем «correct» в разговоре..пошли в свою очередь проводить его до экипажа. 1884. Маркевич Бездна 3 252. Корректное произношение. Датировка поэтических публикаций < Набоков>, включая шахматные сонеты, представляется нам не вполне корректной. НЛО 1997 23 440. || В шахматах — правильный, правильно рассчитанный. Корректный ход. Корректная комбинация. Уш. 1934. Корректный ход <в шахматной игре>. БАС-1.
3.Сухо вежливый. Люди официальные показались мне corrects, люди не официальные или слишком красными или слишком мало Европейцами. РВ 1871 3 555. В этот день спустил тяжкое для меня дело: просил министра юстиции об аренде. Манассеин обещал содействовать, был correct, учтив, но kurz и bündig. 24. 1. 1887. В. П. Безобразов Дн. // БИШ. Корректно, нареч. Корректно поступать. Уш. 1934. Корректность и, ж. Офицер — это ообразец корректности. Куприн Поединок. — Лекс. Даль-3: коре/ктный, корре/ктный, держать себя корре/ктно; САН 1914: корре/ктный, корре/ктно; САН 1914: корре/ктность.
Синонимы
:
Антонимы:
Второй закон (закон для пользователя)
Не бывает некорректных систем. Каждая появляющаяся ошибка при эксплуатации системы — это следствие незнания спецификации системы.
Есть два объяснения справедливости второго закона. Несерьезное объяснение состоит в том, что любая система, что бы она ни делала, при любом постусловии корректна по отношению к предусловию False, поскольку невозможно подобрать ни один набор входных данных, удовлетворяющих этому предусловию.
Так что все системы корректны, если задать False в качестве их предусловия. Если вам пришлось столкнуться с системой, предусловие которой близко к False, то лучшее, что можно сделать, это отложить ее в сторону и найти другую.
Более поучительна реальная ситуация, подтверждающая второй закон и рассказанная мне в былые годы Виталием Кауфманом — специалистом по тестированию трансляторов. В одной серьезной организации была разработана серьезная прикладная система, имеющая для них большое значение.
К сожалению, при ее эксплуатации сплошь и рядом возникали ошибки, из-за которых организация вынуждена была отказаться от использования системы. Разработчики обратились к нему за помощью. Он, исследуя систему, не внес в нее ни строчки кода. Единственное, что он сделал, это вместе с разработчиками описал точную спецификацию системы, благодаря чему стала возможной нормальная эксплуатация.
Обратите внимание на философию, характерную для этих законов: при возникновении ошибки разработчик и пользователь должны винить себя, а не кивать друг на друга. Так что часто встречающиеся фразы: «Ох, уж эта фирма Чейтософт, вечно у них ошибки!» характеризует, мягко говоря, непрофессионализм пользователя.
Жизненный цикл программной системы
Под » жизненным циклом » понимается период от замысла программного продукта до его «кончины». Обычно рассматриваются следующие фазы этого процесса:
Проектирование 

Все это называется циклом, поскольку после каждой фазы возможен возврат к предыдущим этапам. В объектной технологии этот процесс является бесшовным, все этапы которого тесно переплетены. Не следует рассматривать его как однонаправленный — от проектирования к сопровождению.
Вот некоторые типовые правила, характерные для процесса разработки ПО.
- Уделяйте этапу проектирования самое пристальное внимание. Успех дела во многом определяется первым этапом. Нет смысла торопиться с переходом на последующие этапы, пока не составлены ясные и четкие спецификации. Ошибки этого этапа- самые дорогие и трудно исправляемые.
- Помните о тех, для кого разрабатывается программный продукт. Идите «в люди», чтобы понять, что нужно делать. Вместе с тем не следует полностью полагаться на пользователей — их опыт консервативен, новые идеи могут часто приходить от разработчиков, а не от пользователей.
- Разработка не начинается «с нуля». Только используя уже готовые компоненты, можно своевременно создать новую систему. Работая над проектом, думайте о будущем создавайте компоненты, допускающие их повторное использование в других проектах.
- Создавайте как можно раньше прототип своей системы и передавайте его пользователям в опытную эксплуатацию. Это поможет устранить множество недостатков и ошибок в заключительной версии программного продукта.
- Какие бы хорошие спецификации не были написаны, какими бы хорошими технологиями и инструментами не пользовались разработчики, какими бы профессионалами они ни были — этого еще не достаточно для успеха дела. Необходимым условием является управление проектом, наличие специальных средств управления. Но и этого не достаточно. Третьим важным фактором является существование команды. Коллектив разработчиков должен представлять собой единый коллектив. Умение работать в команде так же важно, как и профессиональные навыки разработчика.
Инварианты и варианты цикла
Циклы, как правило, являются наиболее сложной частью метода, большинство ошибок связано именно с ними. При написании корректно работающих циклов крайне важно понимать и использовать понятия инварианта и варианта цикла. Без этих понятий не обходится формальное доказательство корректности циклов. Но и неформальное понимание правильности работы программы основано на этих понятиях.
Рассмотрим цикл в форме, к которой можно привести все виды циклов:
Здесь B — условие цикла while, S — его тело, а Init — группа предшествующих операторов, задающая инициализацию цикла. Реально ни один цикл не обходится без инициализирующей части.
Определение 3 ( инварианта цикла ). Предикат Inv(x, z) называется инвариантом циклаwhile, если истинна следующая триада Хоара:
Содержательно это означает, что из истинности инварианта цикла до начала выполнения тела цикла и из истинности условия цикла, гарантирующего выполнение тела, следует истинность инварианта после выполнения тела цикла. Сколько бы раз ни выполнялось тело цикла, его инвариант остается истинным.
Для любого цикла можно написать сколь угодно много инвариантов. Любое тождественное условие (2*2 =4) является инвариантом любого цикла. Поэтому среди инвариантов выделяются так называемые подходящие инварианты цикла. Они называются подходящими, поскольку позволяют доказать корректность цикла по отношению к его пред- и постусловиям. Как доказать корректность цикла? Рассмотрим соответствующую триаду:
Доказательство разбивается на три этапа. Вначале доказываем истинность триады:
Содержательно это означает, что предикат RealInv становится истинным после выполнения инициализирующей части. Далее доказывается, что RealInv является инвариантом цикла:
На последнем шаге доказывается, что наш инвариант обеспечивает решение задачи после завершения цикла:
Это означает, что из истинности инварианта и условия завершения цикла следует требуемое постусловие.
Определение 4 ( подходящего инварианта ). Предикат RealInv, удовлетворяющий условиям (*), (**), (***) называется подходящим инвариантом цикла.
С циклом связано еще одно важное понятие — варианта цикла, используемое для доказательства завершаемости цикла.
Определение 5 ( варианта цикла ). Целочисленное неотрицательное выражение Var(x, z) называется вариантом цикла, если выполняется следующая триада:
Содержательно это означает, что каждое выполнение тела цикла приводит к уменьшению значения его варианта. После конечного числа шагов вариант достигает своей нижней границы, и цикл завершается. Простейшим примером варианта цикла является выражение n — i для цикла
Пользоваться инвариантами и вариантами цикла нужно не только и не столько для того, чтобы проводить формальное доказательство корректности циклов. Они способствуют написанию корректных циклов.
Правило корректного программирования гласит: «При написании каждого цикла программист должен определить его походящий инвариант и вариант». Задание предусловий, постусловий, вариантов и инвариантов циклов является такой же частью процесса разработки корректного метода, как и написание самого кода.
Трудно ли строить инварианты и варианты цикла? Необходима некоторая практика, но обычно понимание алгоритма означает и понимание инвариантов, обеспечивающих корректность работы алгоритма. Рассмотрим простой пример класса, методы которого вычисляют различные суммы элементов массива.
Ограничимся рассмотрением метода Sum1. В качестве предусловия выберем следующий предикат Pre(x):
В качестве подходящего инварианта цикла выберем предикат Inv(x, S, i):
Содержательно инвариант говорит, что на каждом шаге цикла S представляет сумму элементов начального отрезка массива. В качестве постусловия метода Post(x, S) выберем предикат:
Постусловие отражает требование к методу — по его завершению S должно представлять сумму элементов массива. Нетрудно строго доказать, что метод Sum1 корректен по отношению к заданным спецификациям — предусловию и постусловию. Другими словами, справедлива истинность триады Хоара:
Формального доказательства приводить не буду. Понятно, что инициализация обеспечивает истинность инварианта, поскольку по определению для пустого множества функция ? равна нулю. Выполнение тела цикла сохраняет истинность инварианта, а из условия завершаемости цикла и истинности инварианта следует предусловие.
Очевидно, что имеет место завершаемость цикла, вариантом которого является выражение x.Length — i.
Что должен понимать начинающий программист, осваивающий азы программирования, в задачу которого входит написание программы вычисления суммы элементов масива? Он должен понимать, что на каждом шаге выполнения цикла переменная S представляет сумму начального отрезка массива.
Метод Sum4 также корректен по отношению к тем же предикатам. Небольшое отличие существует в предусловии, требующем, чтобы массив был не пуст. Методы Sum2 и Sum3 вычисляют сумму части массива и не гарантируют корректности по отношению к заданным спецификациям.
Корректность и устойчивость
Корректность и устойчивость — два основных качества программной системы, без которых все остальные ее достоинства не имеют особого смысла.
Корректность — это способность программной системы работать в строгом соответствии со своей спецификацией. Отладка — процесс, направленный на достижение корректности.
Понятие корректности программной системы имеет смысл только тогда, когда задана ее спецификация. В зависимости от того, как формализуется спецификация, уточняется понятие корректности.
Во время работы системы могут возникать ситуации, которые выходят за пределы, предусмотренные спецификацией. Такие ситуации называются исключительными.
Устойчивость — это способность программной системы должным образом реагировать на исключительные ситуации. Обработка исключительных ситуаций — процесс, направленный на достижение устойчивости.
Почему так трудно создавать корректные и устойчивые программные системы? Все дело в сложности разрабатываемых систем. Когда в 60-х годах прошлого века фирмой IBM создавалась операционная системаOS-360, то на ее создание потребовалось 5000 человеко-лет, и проект по сложности сравнивался с проектом высадки первого человека на Луну.
Сложность нынешних сетевых операционных систем, систем управления хранилищами данных, прикладных систем программирования на порядок превосходит сложность OS-360, так что, несмотря на прогресс, достигнутый в области технологии программирования, проблемы, стоящие перед разработчиками, не стали проще.
Корректность корректный
Корректность как качество личности – способность просчитать реакцию на свои слова и поступки, вызванные фактом не соблюдения или не строгого и точного следования окружающими установленным правилам, и принять решение в какой форме выразить свою точку зрения, чтобы не обидеть или не унизить их.
В большинстве словарей корректность определяют как тактичность в обращении с людьми; вежливость, учтивость. Практика давать определение какому-либо качеству личности путем перечисления других схожих на него, но совершенно самостоятельных качеств, также правомерна, как сажать за решетку всех людей, которые чем-то похожи на фоторобот. Хороша наука, если у нее деликатность – это мягкость, вежливость, предупредительность, осторожность в обращении, а обходительность – вежливость, приветливость, учтивость. Масло масляное. У каждого качества личности существуют ему одному присущие качественные характеристики, едва уловимые нюансы, которые и выделяет человеческое подсознание в процессе общения. Когда надо в считанные секунды дать оценку поведения другого человека в контексте бестактно оно или некорректно, подсознание, подобно эксперту, улавливающему «запах, группу крови и дактилоскопию» качества личности, точно классифицирует природу слов и действий окружающих.
Допустим, вы сидите на стадионе, наблюдая за футбольными баталиями, и вдруг видите и слышите, как нападающий соперников говорит, после захлебнувшейся атаки, защитнику вашей команды оскорбительные слова и сопровождает их аморальными жестами. Вы сразу скажете: «Некорректное поведение, надо удалять его с поля». Почему вы не сказали, что он ведет себя нетактично? Потому что степень вины содеянного при некорректном поведении несоизмерима с простой бестактностью. Бестактность, когда они оба прыгнули за мячом, слегка столкнулись, один упал, а второй не протянул ему руку, чтобы тот поднялся с газона. Когда же игрок производит физическое нападение на соперника или проявляет к нему намеренную агрессию, запугивает, действует вопреки принципам морали и нравственности, выражает в грубой форме презрение к сопернику, любой непредвзятый человек классифицирует данные действия как некорректное поведение. В то же время, некорректный вопрос обычно воспринимается как неправильно поставленный, неточный, тогда как, бестактный вопрос – вопрос относительно человека, затрагивающий или унижающий его честь и достоинство.
Корректность не тождественна тактичности, не является ее синонимом. Тактичность как качество личности – способность в общении с людьми знать меру, не допуская неприятных для окружающих слов и действий, всегда и везде быть к месту, легко и непринужденно принимать обычную для данной группы людей манеру общения; способность соизмерять собственные слова, чувства, интонации и поступки с их аналогами у других людей.
Важная функция тактичности – сказать или не сказать, действовать или бездействовать, придти или не приходить, уйти или не уходить, словом, сделать всё возможное, чтобы и волки были сыты, и овцы целы. Если тактичность видит здравый смысл в молчании или бездействии, она будет молчать, и все будут довольны. Корректность, подобно хазановскому попугаю, попавшему в зоопарк, молчать не намерена ни при каких обстоятельствах. Раз нарушены правила, которые она свято чтит и которым строго следует, значит, она обязательно выскажет свое мнение нарушителям, но в приемлемой, не обидной для них форме.
Корректность правильна и объективна. Обнаружив ошибку человека, она спокойно скажет, как ее исправить, а не будет орать во всю Ивановскую. Представим корректного человека на должности редактора. К нему поступает рукопись от спонсора. Тактичный редактор, скорее всего, раздаст похвалы, выскажет спонсору одобрение, и не будет править текст. Корректный человек, будь то рукопись «Малой Земли» самого Л.И. Брежнева в годы его нахождения на вершине власти, обязательно выправит текст, а свои замечания выскажет в такой форме, что генеральный секретарь остался бы довольным.
В контексте корректности любопытно вспомнить о деятельности А. П. Чехова как редактора. Профессор Н. М. Сикорский пишет: «Редактор бережно относится к тексту автора, не делает никаких исправлений лексического, стилистического или иного характера, но снимает все, что ему кажется лишним в конструкции сочинения или отдельных фраз». Так, при правке рассказа Е. М. Шавровой «Софка», Чехов обращается с авторским текстом очень бережно, корректно, меняя в основном лишь форму слова (время глагола, падеж существительного…) или заменяя слова синонимами с более точным и подходящим для данного текста значением. Например, слово «сделалась» в контексте «сделалась взрослой барышней», Чехов заменил более привычным для этого выражения словом «превратилась». Когда же А.П.Чехов все же вынужден вмешаться в язык и стиль того или иного начинающего литератора, то в письмах к нему он обязательно замечает, что «это не критика, а очень субъективное рассуждение, которым Вы имеете полное право пренебречь…».
Корректность всегда осторожна в выводах и замечаниях. Невежественные люди, не понимая ее природы, принимают корректность за слабость. В действительности корректный человек, имея твердую жизненную позицию, осознанные принципы и проверенные практикой убеждения, излучает силу, убежденность, уверенность в себе и непреклонную решимость следовать установленным правилам того сообщества, в котором он сегодня живет. Обладая чувством меры, уравновешенностью и самообладанием, корректный человек умело контролирует проявление своих чувств и эмоций.
Корректность – сложное качество личности, представляющее искусную композицию из чести, ответственности, обязательности и принципиальности, с одной стороны, и из тактичности, вежливости и учтивости, с другой. Первая сторона отвечает за строгое, точное и четкое следование установленным правилам, которые корректный человек понял и принял душой и разумом, вторая – этикетная сторона, отвечает за форму доведения до окружающих всех замечаний, поправок, исправлений и изменений, которые он обнаружил. Казалось бы, стороны взаимно исключают друг друга и ставят под сомнение выживаемость корректности как качества личности. Однако практика доказывает обратное — жесткие требования первой стороны относительно строгости композиции резко уменьшают возможности каких-то существенных отклонений от строго соблюдаемых правил. Поэтому, когда приходит очередь вершить суд второй стороне, нарушения оказываются мизерными, и замечания по их устранению никого не способны обидеть.
Петр Ковалев 2021
Другие статьи автора: https://www.tiledi.ru/karta-statej/
Корректность методов
Спецификации метода можно задавать по-разному. Определим их здесь через понятия предусловий и постусловий метода, используя символику триад Xoара, введенных Чарльзом Энтони Хоаром — выдающимся программистом и ученым.
Пусть P(x,z) — метод P с входными аргументамиx и выходными z. Пусть Q(y) — некоторое логическое условие (предикат) над переменными y.
Предусловием метода P(x,z) будем называть предикатPre(x), заданный на входах метода. Постусловием метода P(x,z) будем называть предикатPost(x,z), связывающий входы и выходы метода.
Определение 1 ( частичной корректности ). Метод P(x,z) корректен (частично, или условно) по отношению к предусловию Pre(x) и постусловию Post(x,z), если из истинности предиката Pre(x) следует, что для метода P(x,z), запущенного на входе x, гарантируется выполнение предиката Post(x,z) при условии завершения метода на этом входе.
Условие частичной корректности записывается в виде триады Хоара, связывающей метод с его предусловием и постусловием:
Определение 2 ( полной корректности ). Метод P(x,z) корректен (полностью, или тотально) по отношению к предусловию Pre(x) и постусловию Post(x,z), если из истинности предиката Pre(x) следует, что для метода P(x,z), запущенного на входе x, гарантируется его завершение и выполнение предиката Post(x,z) в точке завершения метода.
Условие полной корректности записывается в виде триады Хоара, связывающей программу с ее предусловием и постусловием:
Доказательствополной корректности обычно состоит из двух независимых этапов — доказательства частичной корректности и доказательства завершаемости программы. Заметьте, полностью корректная программа, которая запущена на входе, не удовлетворяющем ее предусловию, вправе зацикливаться, вправе возвращать любой результат.
Любая программа корректна по отношению к предусловию, заданному тождественно ложным предикатом False. Любая завершающаяся программа корректна по отношению к постусловию, заданному тождественно истинным предикатом True.
Корректная программа говорит своим клиентам: если вы хотите вызвать меня и ждете гарантии выполнения постусловия после моего завершения, то будьте добры гарантировать выполнение предусловия на входе. Задание предусловий и постусловий методов — это такая же важная часть работы программиста, как и написание самого метода.
На языке C# пред- и постусловия обычно задаются в теге summary, предшествующем методу, и являются частью XML-отчета. К сожалению, технология работы в Visual Studio не предусматривает возможности автоматической проверки предусловия перед вызовом метода и проверки постусловия после его завершения с выбрасыванием исключений в случае их невыполнения.
Программисты, для которых требование корректности является важнейшим условием качества их работы, сами встраивают такую проверку в свои программы. Как правило, подобная проверка обязательна на этапе отладки и может быть отключена в готовой системе, в корректности которой программист уже уверен.
Формальное доказательство корректности метода — задача ничуть не проще, чем написание корректной программы. Но вот парадокс. Чем сложнее метод, его алгоритм, а следовательно, и само доказательство, тем важнее использовать понятия предусловий и постусловий, понятия инвариантов циклов в процессе разработки метода. Рассмотрение этих понятий параллельно с разработкой метода может существенно облегчить построение корректного метода.
Морфологические и синтаксические свойства[править]
кор-ре́кт-ность
Существительное, неодушевлённое, женский род, 3-е склонение (тип склонения 8a по классификации А. А. Зализняка).
Корень: -корректн-; суффикс: -ость[Тихонов, 1996].
Надежный код
Что должно делать для создания корректного и устойчивого программного продукта? Как минимум, необходимо:
Первый закон (закон для разработчика)
Корректность системы — недостижима. Каждая последняя найденная ошибка является предпоследней.
Этот закон отражает сложность нетривиальных систем. Разработчик всегда должен быть готов к тому, что в работающей системе имеются ситуации, в которых система работает не в точном соответствии со своей спецификацией, так что от него может требоваться очередное изменение либо системы, либо ее спецификации. Как следствие, отсюда вытекает важность обеспечения устойчивости системы.
Родственные слова[править]
Происходит от прилагательного корректный , далее от ??
Семантические свойства[править]
- свойство по значению прилагательного корректный◆ Отсутствует пример употребления (см. рекомендации).
- тактичность в общении с людьми; учтивость, предупредительность, вежливость◆ Отсутствует пример употребления (см. рекомендации).
- соответствие требованиям, предъявляемым к кому-либо или к чему-либо; правильность, точность◆ Отсутствует пример употребления (см. рекомендации).
- некорректность
- правильность
- тактичность
- политкорректность
Создание надежного кода
Большинство вопросов, затрагиваемых в этой лекции, в том числе и проблемы создания надежного кода, заслуживают отдельного и глубокого рассмотрения. К сожалению, придется ограничиться лишь высказыванием ряда тезисов.
Для повышения надежности нужно уменьшить сложность системы, и главное в этом процессе — это повторное использование. В идеале большая часть системы должна быть собрана из уже готовых компонентов. Объектная технология проектирования вносит свой вклад в повышение надежности кода.
Наследование и универсализация позволяют, не изменяя уже существующие классы, создать новые классы, новые типы данных, придающие проектируемой системе новые свойства при минимальных добавлениях нового кода. Статический контрольтипов дает возможность выявить многие ошибки еще на этапе компиляции.
Динамическое связывание и полиморфизм позволяют автоматически включать объекты классов-потомков в уже существующие схемы работы — методы родителя могут вызывать методы потомков, не зная о появлении этих новых потомков. Автоматическая сборка мусора дает возможность снять с разработчика обязанности управления освобождением памяти и предотвратить появление крайне
неприятных и опасных ошибок, связанных с некорректным удалением объектов.
Крайне важную роль в создании надежного кода играют спецификации методов класса, класса в целом, системы классов. Спецификации являются частью документации, встроенной в проект, и вообще важной его частью. Их существование облегчает не только создание корректного кода, соответствующего спецификации, но и создание системы тестов, проверяющих корректность кода.
Существуют специальные инструментальные средства, поддерживающие автоматическое создание тестов на основе спецификаций. Незаменима роль спецификаций на этапе сопровождения и повторного использованиякомпонентов. Невозможно повторно использовать компонент, если у него нет ясной и полной спецификации.
Написать программную систему нетрудно. Это может сделать каждый. Значительно сложнее написать ее так, чтобы она корректно решала задачи пользователя. Корректность системы — это не внутреннее понятие, подлежащее определению в терминах самой системы.
Третий закон (закон чечако)
Если спецификацию можно нарушить, она будет нарушена. Новичок (чечако) способен «подвесить» любую систему.
Неквалифицированный пользователь в любом контексте всегда способен выбрать наименее подходящее действие, явно не удовлетворяющее спецификации, которая ориентирована на «разумное» поведение пользователей. Полезным практическим следствием этого закона является привлечение к этапу тестирования системы неквалифицированного пользователя — «человека с улицы».








