(c) Larry Ewing, Simon Budig, Garrett LeSage
с 1994 г.

Кафедра Информатики и Математического Обеспечения

ПетрГУ | ИМиИТ | О кафедре | Проекты | Лаборатория ИТС | Семинары НФИ/AMICT
Сотрудники | Учебный процесс | Табель-календарь | Курсовые и выпускные работы
Вычислительные ресурсы | Публикации | Архив новостей | Контактная информация (English)

Лабораторная работа 2: Текстовый редактор

Цель работы: реализация тестов для модуля приложения.

Задачи:

  1. Подготовьте каталог программы и распакуйте в него содержимое приложенного архива.
  2. Создайте тестовый текстовый файл input.txt с произвольным содержимым.
  3. Соберите программу с помощью make и выполните несколько раз, исследуйте код функции main (editor.c) и изучите команды редактора load файл и show.
  4. Реализуйте функцию сохранения содержимого файла save() и обработку команды save файл.
  5. Реализуйте функцию библиотеки и соответствующую команду перемещения в заданную позицию m номер строки позиция. Измените функцию вывода содержимого текста на экран так, чтобы позиция курсора отображалась символом "|".
  6. Обратите внимание, что при вводе текста символы перевода строк сохраняются, теперь это бросается в глаза. Измените код так, чтобы переводы строк не хранились, но при выводе текста на экран, после каждой строки выводился бы символ перевода строки.
  7. Модифицировать сборку программы в соответствии с шаблоном (заменить созданный вручную Makefile на сборку через qmake).
  8. Проверить компиляцию проекта, при необходимости добавить требуемые зависимости в проект.
  9. Реализовать индивидуальные задания:
    СтудентФункция 1Функция 2Функция 3
    Ананьин Егор Михайлович, Тикки Юлия Александровна для вывода содержимого текста с нумерацией строк shownum для перемещения курсора на один символ вправо, если это возможно mcf; для удаления первой строки rh;
    Афанасьев Артём Игоревич, Укпере Вильямс Эвере для вывода текста в обратном порядке следования строк showrev; для перемещения курсора на один символ влево, если это возможно mcb; для удаления последней строки rt;
    Базаров Максим Вячеславович, Чекарев Лев Олегович для вывода первого слова из каждой строки showfirstwords в прямом порядке следования строк; для перемещения курсора в конец текущего слова, если это возможно mwef; для удаления строки, заданной номером rn номер;
    Богатырев Павел Валерьевич, Щеглова Анастасия Андреевна для вывода текста в прямом порядке следования строк, кроме пустых строк shownonempty; для перемещения курсора в начало текущего слова, если это возможно mwbb; для удаления текущей строки rc;
    Гагарин Валерий Владимирович для вывода столбца длин строк текста showlengths в прямом порядке следования строк; для перемещения курсора в начало следующего слова, если это возможно mnwbf; для удаления строки перед текущей rp;
    Гордеев Никита Владиславович для вывода текста в прямом порядке следования строк с заменой пробелов символом подчеркивания showunderscores; для перемещения курсора в конец предыдущего слова, если это возможно mpweb; для удаления строки после текущей rn;
    Гудкова Дарья Олеговна для вывода текста в прямом порядке следования строк с капитализацией всех символов showupper; для перемещения курсора в начало строки mlb; для удаления первой пустой строки r1e;
    Данило Петр Анатольевич для вывода текста в прямом порядке следования строк с капитализацией символов, которым предшествует пробел showupfirst; для перемещения курсора в конец строки mle; для удаления первой непустой строки r1ne;
    Зорин Семен Михайлович для вывода текста в прямом порядке следования строк, опуская строки с четными номерами showodd; для перемещения курсора в заданную позицию текущей строки, если это возможно mp позиция; для объединения строки с курсором со следующей (не забудьте удалить символ перевода строки) j;
    Иванов Илья Игоревич для вывода текста в обратном порядке следования строк, опуская строки с нечетными номерами showreveven; для перемещения курсора в начало следующей строки, если это возможно mnlb; для вставки новой строки после строки с заданным номером p номер текст;
    Кириллов Иван Сергеевич для вывода текста в следующем порядке следования строк: 2, 1, 4, 3, ... showevenbeforodd; для перемещения курсора в начало предыдущей строки, если это возможно mplb; для вставки новой строки перед текущей pp текст;
    Кириллов Максим Денисович для вывода текста в прямом порядке следования строк, опуская нецифровые символы showdigitsonly; для перемещения курсора в начало заданной строки, если это возможно mklb номер; для вставки новой строки после текущей pn текст;
    Коппалова Мария Федоровна для вывода текста в прямом порядке следования строк, опуская небуквенные символы showalphaonly; для вывода на экран части строки от курсора до конца строки ple; для вставки новой строки перед первой p1 текст;
    Кришталь Кирилл Сергеевич для вывода текста в прямом порядке следования строк, с заменой всех буквенные символов звездочками showclassified; для вывода на экран части строки от начала до курсора plb; для разделения текущей строки на две по позиции курсора s;
    Николаев Эльдар Сергеевич для вывода числа пробелов в каждой строке в прямом порядке следования строк shownumspaces; для удаления одного символа справа от курсора rch; для перемещения текущей строки после следующей cn;
    Павлов Максим Павлович для вывода текста в прямом порядке следования строк без ведущих пробелов showtrimmedfromstart; для удаления всех символов от курсора до конца строки rle; для перемещения текущей строки перед предыдущей cp;
    Рейкенен Ярослав Осипович для вывода каждого последнего непробельного символа строки в прямом порядке следования строк showlastnonspace; для вставки строки от курсора i строка с контролем переполнения; для перемещения текущей строки в начало текста cb;
    Сергин Даниил Артемович для вывода буквенных символов каждой строки, которым предшествует пробельный символ или начало строки showwordbeginnings; для замены строки от курсора и до конца заданной строкой y строка с контролем переполнения; для перемещения текущей строки в конец текста ce;
    Смирнов Евгений Русланович для вывода буквенных символов каждой строки, за которыми следует пробельный символ или конец строки showwordendings; для разворота содержимого текущей строки z; для создания дубликата текущей строки dd;
    Соболев Евгений Владимирович для вывода текста строк, в которых встречаются цифры showlineswithdigits. для обмена содержимого текущей строки до и после курсора ch. для перемещения первой строки в конец текста c1n.
  10. Составить перечень тестов (шаблон документа) проверяющую правильность работы функций (позитивные тесты) и его реакцию на возможные отклонения от стандартного поведения (негативные тесты).
  11. Реализовать запланированные тесты. Выполнить тестирование. В случае обнаружения ошибки сформировать протокол ошибки (шаблон протокола), выполнить отладку и повторное тестирование.
  12. Зарегистрироваться в GitHub, создать проект, загрузить полученный проект (код приложения и тестов). Пример готового проекта на GitHub.
  13. Подключить автоматический запуск тестов (Github Actions), оценку покрытия кода тестами (https://coveralls.io/) и статический анализ кода (https://sonarcloud.io). Добавить ссылки на отчеты о тестировании и оценке покрытия в файл README.md.

Оформление результата

  • Исходный код должен быть в репозитории GitHub
  • Файл README.md должен содержать ссылки-бейджи на Github actions, Coveralls и SonarCloud.
  • Код тестируемого модуля должен быть покрыт на 100% в Coveralls
  • Отчет в SonarCloud не должен содержать ошибок
  • Описание тестов должно присутствовать в репозитории в формате Markdown (рекомендуется завести каталог docs/)
  • Ссылка на репозиторий в GitHub должна быть размещена в качестве ответа на соответствующее задание в Moodle

Дополнительные материалы и литература