Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Методы быстрого печатания  (Прочитано 41992 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alf
Гость
« Ответ #30 : 07-01-2006 22:18 » 

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

Вообще в монографии изначально речь идет обо всем цикле разработки системы, от постановки задачи до подписания акта приемки. Шеф IBM вызвал Брукса в кабинет и глубокомысленно произнес: "Хочу операционную систему для System/360" - и все, время пошло. Остановят счетчик в тот момент, когда система будет принята. Эти-то цифры и приводятся в итоге.

Брукс, естественно, говорит о разработке принципиально нового софта. Хуже того, в его случае этот софт делался для принципиально нового на тот момент оборудования - IBM/360. Поэтому скорость в его команде минимальна - 5 операторов в день. Разумеется, в знакомой среде на более простых задачах скорость будет выше.

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

Возможно, требования к оформлению кода также могут привести к кажущемуся замедлению работы программистов. Не знаю, как с этим обстояло у Брукса, а лично я предъявляю следующие требования к передаваемому мне коду (и сам неукоснительно следую им, разумеется):

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

- перед каждым методом класса должен идти комментарий, в котором подробно описываются выполняемые этим методом действия, формальные параметры и возвращаемое значение (если есть);

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

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

- если модуль интерпретирует языковую конструкцию, то в комментариях должен быть приведен пример корректных входных данных, а также БНФ (если она уместна в данном случае).

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

При соблюдении этих условий, я думаю, нелегко будет настрочить полтыщи операторов в день.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 07-01-2006 23:45 » 

На основании собственного многолетнего опыта считаю, что гнаться за скоростью печатания большого смысла не имеет. Ты все равно не успеешь думать над серьезной программой с такой скоростью, что пальцы не будут угоняться за мыслями.
Это всё понятно, но всё-таки хорошая скорость печатания и особенно печатание не глядя на клавиатуру наверное более приятно. Последнее время я печатаю всё быстрее, и это доставляет мне удовольствие. Особенно, когда  надо много эксперементировать, проделать кучу опытов. Когда варианты и так уже понятны, а кода много. Вот тогда бы хорошо вслепую и быстро печатать. Т.е. не то чтобы мне это мешает, но просто так приятней.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 11-01-2006 00:02 » 

(Я не привожу здесь эталонный набор, поскольку кому-то может показаться интересным проверить себя. Если интересно, впоследствии добавлю то, что предлагает автор).
Мне интересно.
Записан
Alf
Гость
« Ответ #33 : 11-01-2006 00:04 » 

А сам-то какой набор составил?
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #34 : 11-01-2006 00:16 » 

Честно говоря я с проверками почти никогда не работал.
Только давно в институте на паскале.

Например:
Надо проверить может ли получится треугольник со сторонами равными этим числам
Если перфолента порвалась, то должны наверное выйти какие-то дикие числа
Или может получится что количество чисел не равно трём

Больше мне ничего в голову не пришло.
Записан
Alf
Гость
« Ответ #35 : 11-01-2006 00:28 » new

Отсканил пару страничек из книги Майерса:

Цитата
ГЛАВА 1
ТЕСТ ДЛЯ САМООЦЕНКИ
Прежде чем приступить к работе над книгой, рекомендуем читателю выполнить следующий простой тест. Задача состоит в том, чтобы проверить некоторую программу.
Эта программа производит чтение с перфокарты трех целых чисел, которые интерпретируются как длины сторон треугольника. Далее программа печатает сообщение о том, является ли треугольник неравносторонним, равнобедренным или равносторонним.
Напишите на листе бумаги набор тестов (т. е. специальные последовательности данных), которые, как вам кажется, будут адекватно проверять эту программу. Построив свои тесты, проанализируйте их.
Следующий шаг состоит в оценке эффективности вашей проверки. Оказывается, что программу труднее написать, чем это могло показаться вначале. Были изучены различные версии данной программы и составлен список общих ошибок. Оцените ваш набор тестов, попытавшись с его помощью ответить на приведенные ниже вопросы. За каждый ответ «да» присуждается одно очко.
1.  Составили ли вы тест, который представляет правильный неравносторонний треугольник? (Заметим, что ответ «да» на тесты,   со значениями 1, 2, 3 и 2, 5, 10 не обоснован, так как не существует треугольников, имеющих такие стороны.)
2.  Составили ли вы тест, который представляет правильный равносторонний треугольник?
3.  Составили ли вы тест, который представляет правильный равнобедренный треугольник? (Тесты со значениями 2, 2, 4 принимать в расчет не следует.)
4.  Составили ли вы по крайней мере три теста, которые представляют правильные равнобедренные   треугольники, полученные как перестановки   двух   равных   сторон треугольника (например, 3, 3, 4; 3, 4, 3 и 4, 3, 3)?
5.  Составили ли вы тест, в котором длина одной из сторон треугольника принимает нулевое значение?
6.  Составили ли вы тест, в котором длина одной из сторон треугольника принимает отрицательное значение?
7.  Составили ли вы тест, включающий три положительных целых числа, сумма двух из которых   равна третьему? (Другими словами, если программа   выдала сообщение о том, что числа 1, 2, 3 представляют собой стороны неравностороннего треугольника, то такая программа содержит ошибку.)
8.  Составили ли вы по крайней мере три теста с заданными значениями   всех   трех   перестановок, в которых длина одной стороны равна сумме длин двух других сторон (например, 1, 2, 3; 1, 3, 2 и 3, 1, 2)?
9.  Составили ли вы тест из трех целых положительных чисел, таких, что сумма двух из них   меньше   третьего числа (т. е. 1, 2, 4 или 12, 15, 30)?
10.  Составили ли вы по крайней мере три теста из категории 9, в которых вами испытаны все три перестановки (например, 1, 2, 4; 1, 4, 2 и 4, 1, 2)?
11.  Составили ли вы тест,   в котором   все   стороны треугольника имеют длину, равную нулю (т. е. 0, 0, 0) ?
12.  Составили ли вы по крайней   мере один тест, содержащий нецелые значения?
13.  Составили ли вы хотя бы один тест, содержащий неправильное число значений (например, два, а не три целых числа)?
14.  Специфицировали ли вы в каждом   тесте не только входные значения, но и выходные данные программы?
Конечно, нет гарантий, что с помощью набора тестов, который удовлетворяет вышеперечисленным условиям, будут найдены все возможные ошибки. Но поскольку вопросы 1—13 представляют ошибки, имевшие место в различных версиях данной программы, адекватный тест для нее должен их обнаруживать. Если вы не программист, то вы не очень хорошо справитесь с составлением теста. Для сравнения отметим, что опытные профессиональные программисты набирают в среднем только 7—8 очков из 14 возможных. Выполненное упражнение показывает нам, что тестирование даже тривиальных программ, подобных приведенной, — непростая задача. И коль скоро это так, рассмотрим трудности тестирования программ размером в 100000 операторов для системы управления воздушным движением, компилятора или программы расчета зарплаты.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 11-01-2006 00:38 » 

Как я понял в этом тесте показан только принцип тестирования. Т.е. если реально потребуется провести тест именно этой задачи, то некоторые тесты не понадобятся, потому что очевидно они ничего не скажут. А вот если надо будет протестировать программу, где всё не очевидно, то именно так и надо дотошно тестировать. Или я ошибаюсь и даже в этой программе именно так и надо тестировать?
« Последнее редактирование: 11-01-2006 00:41 от Olegator » Записан
Alf
Гость
« Ответ #37 : 11-01-2006 00:42 » 

Все понадобятся, до единого. Ибо при тестировании нужно выяснить две вещи:

1. Что программа выдает правильные результаты при корректных входных данных.
2. Что она не может быть сбита с толку некорректными данными.

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

ru
Offline Offline
Пол: Мужской

« Ответ #38 : 11-01-2006 00:43 » 

А это зачем?
Цитата
4.  Составили ли вы по крайней мере три теста, которые представляют правильные равнобедренные   треугольники, полученные как перестановки   двух   равных   сторон треугольника (например, 3, 3, 4; 3, 4, 3 и 4, 3, 3)?
Записан
Alf
Гость
« Ответ #39 : 11-01-2006 00:45 » 

Затем, что ты не видишь исходный текст программы. Не исключено, что программист написал что-то вроде "if a == b then равнобедренный" и на этом успокоился.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 11-01-2006 00:49 » 

Затем, что ты не видишь исходный текст программы.
Исходя из этого всегда придётся учитывать все варианты. И ни одной поблажки. Всё ясно.
Записан
Alf
Гость
« Ответ #41 : 11-01-2006 00:50 » 

А вообще много лет назад со мной произошла одна весьма поучительная история. Она учит, как тщательно нужно тестировать программы для ответственных приложений и какой урон наносят программисты-недоучки с большими амбициями и слабоватой эрудицией. Но это оффтоп в теме про быстрое печатанье, да и время позднее, а история длинная. Может, как-нибудь при случае расскажу, если к слову придется.
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines