Турбо С: руководство пользователя. Часть 1

Турбо С: руководство пользователя. Часть 1 - Стр. 26

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 1
Стр. 2
Стр. 3
Стр. 4
Стр. 5
Стр. 6
Стр. 7
Стр. 8
Стр. 9
Стр. 10
Стр. 11
Стр. 12
Стр. 13
Стр. 14
Стр. 15
Стр. 16
Стр. 17
Стр. 18
Стр. 19
Стр. 20
Стр. 21
Стр. 22
Стр. 23
Стр. 24
Стр. 25
Стр. 26
Стр. 27
Стр. 28
Стр. 29
Стр. 30
Стр. 31
Стр. 32
Стр. 33
Стр. 34
Стр. 35
Стр. 36
Стр. 37
Стр. 38
Стр. 39
Стр. 40
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 56
Стр. 57
Стр. 58
Стр. 59
Стр. 60
Стр. 61
Стр. 62
Стр. 63
Стр. 64
Стр. 65
Стр. 66
Стр. 67
Стр. 68
Стр. 69
Все страницы
          # Подавайте на вход различные наборы данных, чтобы проверить          
            те части программы,  которые вы не смогли оттестировать на          
            предыдущем шаге.                                                    
                                                                                
          # Проверьте каждый оператор программы. Вы можете найти ошиб-          
            ки там,  где меньше всего ожидаете.  В WORDCNT,  например,          
            проверяя каждый оператор,  обнаружили случайную  ошибку  с          
            запятой после else,  которая создает нежелательный эффект,          
            когда  программа  встречает  слово   длиной   больше   чем          
            MAXWORDLEN.  (Точка  с  запятой обычно находится за правым          
            краем окна Edit и маловероятно,  что вы ее заметите в дру-          
            гих случаях).                                                       
                                                                                
          # Будьте осторожны с операторами или выражениями, которые не          
                                                                                
            могут быть проверены за один раз, подобных этому:                   
                                                                                
              if (strcmp( a, b ) )...                                           
                                                                                
            strcmp может вернуть три значения - 0 (a равно b),  -1  (a          
            иеньше b) или 1 (a больше b). Это предположение делает не-          
            обходимым проверить оператор с тремя наборами входных  ве-          
            личин  и в каждом случае оператор должен работать правиль-          
            но.                                                                 
                                                                                
              x = (x>0) ? fun(x) : 0;                                           
                                                                                
            Этот оператор содержит условное выражение,  которое  может          
            порождать два результата.                                           
                                                                                
          # Обратите особое внимание на граничные условия: условия при          
            которых программа выходит из  цикла,  заполняет  массив  и          
            т.д.  Ошибки,  в  особенности подобные failures to handle,          
            часто вызваны нарушением граничных условий.                         
                                                                                
            WORDCNT содержит два примера ошибок, связанных с граничны-          
            ми  условиями.  Во-первых,  цикл  for  не  выведет элемент          

                         - 211,212 -
                                                                                
            wordlencnt,  который   соответствует   словам   длиной   в          
            MAXWORDLEN символов. Во-вторых, wordlencnt размещенный для          
            одного элемента будет слишком мал, и элемент будет не дос-          
            тупен.                                                              
                                                                                
          # Полностью проверьте программу без отладчика. Если програм-          
            му будут использовать другие люди, они будут предполагать,          
            что  она работает правильно,  поэтому проверьте ее реакцию          
            на каждый тип ошибки,  возможных при обработке. О програм-          
            ме,  обрабатывающей большинство типов оишбок,  говорят как          
            об ошибкоустойчивой.                                                
                                                                                
          # Если вашей программой будут пользоваться другие  люди,  то          
            они должны иметь по крайней мере один индивидуальный тест.          
            Выберите кого-нибудь, кто является типичным представителем          
            пользователей вашей программы, который с упорством и энту-          
            зиазмом будет искать ошибки и сможет правильно  сообщить о          
            них. Не выбирайте программиста, если только ваша программа          
            не предназначена для программистов.                                 
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                Тщательно проверяйте изменения                                  
     -----------------------------------------------------------------          
                                                                                
          Когда вы изменили программу, тщательно оттестируйте все зат-          
     ронутые  части  программы.  Необходимо также проверить работу тех          
     частей программы,  которые не изменились, но связаны с этим изме-          
     нением. Если программа сложная, то сохраните запись тестов. Когда          
     вы будете модифицировать программу,  эта запись поможет повторить          
     вам все тесты связанные с изменением.  Если тест включает входные          
     файлы - сохраните эти файлы.                                               
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 213,214 -
                                                                                
             Как избежать некоторых трудностей                                  
     -----------------------------------------------------------------          
                                                                                
          Пишите ясные программы с последовательным  отступом  вправо,          
     отражающим  вложенность операторов,  с подробными комментариями и          
     описаниями имен переменных.                                                
                                                                                
          Сохраните текст вашей программы простым. Старайтесь выражать          
     запутанные операции с помощью нескольких простых операторов, а не          

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

                         - 215,216 -
                                                                                
                                                                                
               Отладка снизу вверх                                              
     -----------------------------------------------------------------          
                                                                                
          На сколько  возможно  сосредоточьтесь  на  отладке   функций          
     нижнего уровня (это функции, которые не вызывают другие функции).          
     Затем принимайтесь за отладку функций  более  верхнего  уровня  и          
     т.д.  по  направлению  к  main.  В  этом случае,  вы будете иметь          
     фундамент из нужных функций, и эти функции вы можете выполнить за          
     один шаг, когда они вызываются в других частях программы.                  
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Исправление подобных ошибок                                      
     -----------------------------------------------------------------          
                                                                                
          Когда вы нашли  ошибку,  проконтролируйте  наличие  подобной          
     ошибки в остальных частях программы. Например, если вы нашли, что          
     вызов функции выглядит следующим образом:                                  
                                                                                
                fp = fopen("rb",filename);                                      
                                                                                
     который должен выглядеть                                                   
                                                                                
                fp = fopen(filename,"rb");                                      
                                                                                
     то исправьте ошибку  и проверьте вызовы  fopen  и  других простых          
     функций с целью обнаружения подобных ошибок.                               
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 217,218 -
                                                                                
               Отладка встроенного кода ассемблера                              
     -----------------------------------------------------------------          
                                                                                
          Если вы используете ассемблер ТАСМ фирмы  Borland, совместно          
     с интегрированным  окружением,  то  можете шаг за шагом проверить          
     код на уровне ассемблера,  без использования внешнего  отладчика.          
     (Для полной поддержки отладки на уровне ассемблера вы можете, ко-          
     нечно, использовать и автономный отладчик фирмы Borland.)                  
                                                                                
          Когда модуль,  написанный на ассемблере,  проассемблирован с          
     опцией TASM  -zi,  Турбо  Си может распознавать исходные строки и          
     идентификаторы ассемблера.  Если же вы вышли на  уровень  функций          
     ассемблера, то  Турбо  Си будет показывать вам на экране исходный          
     текст ассемблера для этой функции. Для вашего исходного текста на          
     языке ассемблера вы можете использовать обычные команды отладчика          
     TC,  такие как Debug/Go to cursor (F4),  Debug/Trace Into (F7)  и