И. Соммервилл - Инженерия программного обеспечения (1133538), страница 115
Текст из файла (страница 115)
22.1. Пределы мышления Человеческие возможности достаточно разнообразны. и это преасце всего зависит от уровня интеллекта, образования и личного опыта, однако у всех нас есть нечто общее: в своей умственной деятельности мы подчиняемся определенным ограничениям. Эти ограничения не что нное, как следствие того, каким образом наш мозг сохраняет и обрабатывает полученную информацию. Нам вовсв не обязательно подробно изучать процесс обработки информации об окружающем мире человеческим мозгом. Однако я считаю, что знание границ нашего мышления имеет исключительную важность. Именно этн знания помог)т выяснить, почему некоторые технологии разработки программного обеспечения постигают высокой эффективности, а также проникнуть вглубь взаимоотношений между членами команды разработчиков ПО. 22.1.1.Организация человеческой памяти Программные системы представляют собой абстрактные объекты, при работе с которымн разработчикам необходимо учитывать все их особенности.
К примеру, программист должен понимать н всегда помнить о юаимосвязи между листингом исходного кода и динамическим поведением программы. Эти знания будут полезны ему и при разработке про. грамм в дальнейшем. Организацию человеческой памяти можно представить в виде иерархической структуры с тремя отчетливыми, связанными между собой типами памяти (рнс. 22.1). 1. К(и~лкээречеюкш памяэгь с бысжрыч доалуаом, ко огрпниченнььчи возможностями. Ввод. пый сигнал, порождаеиый органами чувств, поступает именно сюда для дальнейшей обработки. Такую память мы можем сравнить с регистрами в вычислительной манюне, так как оиа является местом обработки информации, а не ее хранения.
2. )урояглгу1аочяпл плляжь с вмажичи возможкоппями Досг)п к такой памяти более тру. дсн, пежслн к кратковременной. Она тоже служит для обработки информации, гяь пако может удерживать информацию на более долгий срок, чем кратковременная 22. Управление персоналом 449 память. Она не используется для сохранения информации, предназначенной для более длительного хранения. По аналогии с компьютером такая память напоминает оперативную, в которой информация сохраняется только на период вычислительных операций. 3.
гуоггов)уеигииал илмяшь Это память с самыми широкими возможностями, относительно трудным доступом и крайне ненадежными механизмами хранения (мы забываем иногда некоторые вещи). Такая память используется для "постоянного" хранения информации. Продолжая наше сравнение с компьютерной памятью, мо. жом соотнести долговременную память с дисковыми накопителями. От оргзнав чувств 1! Рис. 22. Е Схема орги казакия человеческой ллмявш Кратковременная память получает информацию о поставленной перед человеком за. даче через чтение (человеком) различных документов и контакты с другими людьми.
Да. лес полученная информация, составив единое целое с уже существующими даннымн в долговременной памяти, поступает в промежуточную память. Именно результат формирования этого целого и составляет основу решения поставленной задачи. Все это заносится в долговременную налгать с тем, чтобы использоваться в будущем. Никто нс говорит, что решение обязательно должно быть верным. Со временем, после поступления новой информации, долговременная память изменяется. Несмотря на это, неверная информация никоим образом не удаляется, а наоборот, сохраняется в видоизмененной форме. Ведь учимсл же мы па собственных ошибках. Напг познавательный процесс в некоторой степени сдерживается ограниченным раз. миром кратковременной памяти. В классическом эксперименте Миллер (М)йсг, (237]) определил.
что в кратковременной памлти может храниться около семи квантов информа. ции. Квант информации не составляет твердо фиксированной величины, это, скорее. определенная информационная единица, которой может быль телефонный номер, сформулированная цель нли название улицы. Миллер также дает описание процесса "образования блоков", во время которого кванты информации собираются в целгие блоки. Если постановка задачи содержит больше информации, чем тот объем, с которым мо.
жег справиться кратковремепнал память, тогда зта информация будет обрабатываться и преобразовываться параллельно поступлению. Такой процесс может привести к потере информации. Также велика возможность возникновения ошибок, так как обработка информации не успевает за се поступлением в память. 450 'Часть 71. Управление Шнейдерман (ЯЬпеИеппап, [Я14]) предполагает, что процесс формирования блоков информации используется и при чтении программы программистом.
Читающий разбивает содержащуюсл в программе информацию на блоки, построенные по принципу внутренней семантической (смысловой) структуры. Восприятие программы не происходит последовательно от оператора к оператору, если только оператор не представляет собой логический блок. На рис. 22.2 показано, как простая программа сортировки может быть разбита на блоки читающим се субъектом. Циш (единый массив) Рис. 22.2. Пвзявввтввьяыв бввви в я(гвврвммв свгэткрввки После определения внутренней семантической структуры, представляющей программу, эти знания передаются в долговременную память.
Если эта информация потребляется регулярно, то обычно ее трудно забыть. Без особого труда такую информацию можно вос. произвести в различных формах представления. Поэтому нам легче запомнить абстрактные конструкции высокого уровня, чем подробности низкого уровня. Знания, которые приобретаются в процессе разработки ПО и сохраняются в долговременной памяти, разделяются надва класса. 1. Сскакв1кчггккв зялник Это знания об основных понятиях, таких, например, как функционирование оператора присвоения, представление о классе объектов, о технике хешированного поиска или о структуре организации программ.
Эти знания приобретаются через опыт и обучение и сохраняются в форме аатономнык пред. сгавлений. 2. Святвксическив змвяял. Это детализированные знания (подробности) об отдельных объектах и явлениях, например о том, как дать описание объекта в ()М) какие стэпдартиыс функции доступны в языке программирования, создается ли оператор присвоения с помощью знака "-" илн знака ": " и т.д. Эти знания хранятся в неструктурированном виде. Такая организация знаний показана на рнс.
22.3, который был заимствован (и переделан) из книги по проектированию интерфейсов пользователя [315]. Здесь предполагается, что семантические знания и знания о решаемой задаче имеют свою органиэацию и структуру, которые показаны на схеме в вндс логической структуры взаимосвязей между различнымн фрагментами знаний.
В противовес семантическим знаниям, синтаксические являются произвольными (в определенной мере) и нс имеют четкой организации. Поэтому именно для данного типа знаний более вероятны ошибки и потеря информации. 22. Унрапленне персоналом 451 >Ъс. 22.3. Синтпкгкчепсие и пшпитичепше знппиз Семантические знания приобретаются с помощью опыта и путем активного обучения. Новая информация сознательно интегрируется с уже существующими семантическими структурами. Напротив, синтаксические знания приобретаются путем простого запоминания. Хотя новые синтаксические знания не объединяются с существующими в тот же момент, однако могут с ними взаимодействовать.
Следовательно, эти знания забываются чаще, чем более углубленные семантические. Различные модели приобретения синтаксических и семантических знаний помогают понять, как опытные программисты изучают новый язык программирования. У них не возникает особых трудностей в освоении основных понятий языка, таких, как присвоение, цикл, условные операторы и т.п. Синтаксис нового лзыка, тем не менее, имеет тенденцию смешиваться с синтаксисом уже знакомых языков. Поэтому программист, влз.
деющий языком Аг>а, при изучении языка )ага напишет оператор присвоения скорее с использованием знака ": ", чем " ". По мере более глубокого освоения основные понятия закрепляются в памяти как семантические знания. Семантические знания сохраняются в памлти в абстрактной смысло. вой форме, но детали основных понятий мокнут быть воспроизведены в различных конкретных представлениях [67, 319). Для примера рассмотрим алгоритм двоичного поиска, в котором осуществляется по. иск конкретного элемента в упорядоченной совокупности.
Этот алгоритм включает проверку средней точки совокупности и применение знаний о взаимоотношении порядка для проверки местонахождения элемента-ключа — в верхней нлн нижней части совокупности. Программист, знакомый с этим алгоритмом, без труда напишет его версию на языках)ага, Аба или на любом другом языке программирования. Эта модель хорошо объясняет и тот факт, что для многих людей умение программировать приходит как бы одним махом, после долгого периода обучения и трудностей. Умение программировать требует от человека понимания семантических концепций и способности разделять семантические н синтаксические понятия. Иногда преподавателям не удастся понять проблемы студентов. Сами они успешно разобрались в семантической информации и осмыслилп ее, поэтому для них главная задача состоит в обработке синтаксической информации.
Поэтому часто преподавателю бывает сложно объяснить семантические понятия на таком уровне, чтобы это было доступно и новичкам в программировании. 452 Часть УТ. Управление 22Д.2. Решение задач Разработка и написание программы представляет собой процесс решения задач. Длл того чтобы создать систелгу ПО, в первую очередь необходимо понять поставленную задачу (проблему), разработать стратегию поиска решения и преобразовать решение в программ). Первый этап включает переход постановки задачи нэ кратковременной памяти в промежугочиую, Далее проблема сопоставляется и интегрируется с уже имеющимися знаниями в долговрелленной памяти, а зателг обрабатываетсл в целях составления определенного решения. В заключение найденное решение персиоситгл в исполняемую программу (рис.
22.4). Рис. 22.4. Решение эидичи Процесс решения задач требует интеграции постановки задачи и компьютерных знаний. Большое значение также ил~сют организационные моменты, такис, как завершение работы над решением в рамках возлюжностей бюджета. Таким образом, пользователь должен разбираться в содержательной постановке задачи, разработчик программного обеспечения должен быть компетентным в вычислительных системах, а менеджер должен быть хорошим специалистом в организационных вопросах.
В процессе разработки ПО все эти знания объединяются и используются совместно. Разработка решенил (программы) включает в себя построение внутренней семантической модели задачи н соответствующей ей модели решения. После формирования модели ее следует представить в подходлщсй синтаксической системе нотаций.