Отчет по курсу «Технологии программирования» Проектная документация к задаче «Утилита форматирования исходных кодов» Состав команды: Чучмина Е.В. Шильникова В.Г. Субботина Е.А. Михин П.М. Воронеж 2010 Содержание Содержание ....................................................................................................................................2 Анализ предметной области .........................................................................................................3 Анализ требований к системе.......................................................................................................7 Схема интерфейса..........................................................................................................................8 Требования к аппаратному и программному обеспечению ......................................................9 Календарный план .......................................................................................................................10 План тестирования ......................................................................................................................11 Анализ предметной области Задача проекта - создание утилиты форматирования исходных кодов языка программирования в HTML-файлы. Программа будет состоять из 4-х различных dll-файлов, каждый из которых будет работать со своим языком программирования(Pascal, php, C#, java) Термины: 1. Утилита (англ. utility или tool) — компьютерная программа, расширяющая стандартные возможности оборудования и операционных систем, выполняющая узкий круг специфических задач. Утилиты предоставляют доступ к возможностям (параметрам, настройкам, установкам), недоступным без их применения, либо делают процесс изменения некоторых параметров проще (автоматизируют его). 2. Исходный код (также исходный текст) — написанный человеком текст компьютерной программы на каком-либо языке программирования. В обобщённом смысле — любые входные данные для транслятора. Исходный код транслируется в исполняемый код целиком до запуска программы при помощи компилятора, или может исполняться сразу при помощи интерпретатора. 3. HTML (от англ. HyperText Markup Language — «язык разметки гипертекста») — стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц создаются при помощи языка HTML (или XHTML). Язык HTML интерпретируется браузером и отображается в виде документа, в удобной для человека форме. Текстовые документы, содержащие код на языке HTML (такие документы традиционно имеют расширение .html или .htm), обрабатываются специальными приложениями, которые отображают документ в его форматированном виде. Такие приложения, называемые «браузерами» или «интернет-обозревателями», обычно предоставляют пользователю удобный интерфейс для запроса веб-страниц, их просмотра (и вывода на иные внешние устройства) и, при необходимости, отправки введённых пользователем данных на сервер. Наиболее популярными на сегодняшний день браузерами являются Internet Explorer, Mozilla Firefox, Safari, Google Chrome и Opera 4. PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста», англ. Personal Home Page Tools[5] (устар.) — «Инструменты для создания персональных веб-страниц») — скриптовый язык[6] программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических вебсайтов. 5. C# (произносится си-шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio. 6. Паскаль (англ. Pascal) — высокоуровневый язык программирования общего назначения. Один из наиболее известных языков программирования, широко применяется в промышленном программировании[4], обучении программированию в высшей школе, является базой для большого числа других языков. 7. Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems. Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года. Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор, но с тем отличием, что байтовый код, в отличие от текста, обрабатывается значительно быстрее. 8. Идентификатор – сочетание букв, цифр а так же некоторых других символов, используемых в качестве «имени» переменной, объекта и других элементов приложения. 9. Ключевые слова – зарезервированные слова языка программирования, имеющие особое значение. Обычно обозначают типы данных, циклы, ветвление и другие значимые элементы. Использовать ключевые слова в качестве идентификаторов запрещено. 10.Комментарии – текстовые пояснения, которыми разработчик сопровождает программный код для повышения читаемости кода и облегчения процесса понимания сути другим разработчиком. 11.Файл с исходным кодом (исходник) – файл (обычно текстовый), в котором записаны инструкции определенного языка программирования. 12.Форматирование кода в HTML – создание HTML страницы, содержащей исходный код, с выделенными ключевыми словами, комментариями и другими значимыми элементами. Результат в виде HTML странице пригоден для размещения на web-сайте, в виде отдельной страницы или части страницы. Постановка задачи Разработать приложение, которое позволяет: 1. Открывать и форматировать файлы исходных кодов языков программирования C#, Pascal, PHP, Java; 2. Задавать цвет для ключевых слов конечного файла; 3. Задавать цвет для комментариев конечного файла; 4. Автоматически определять язык программирования; 5. Для файлов с неизвестным расширением принудительно задавать язык программирования; 6. Обрабатывать как один файл, так и директорий с файлами. Пример работы: Исходный код: using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; System.IO; namespace Dot { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //button open click private void button1_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); } private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { StreamReader text = File.OpenText(openFileDialog1.FileName); string s = openFileDialog1.FileName; s = s.Replace("txt","mtxx"); TextWriter write = File.AppendText(s); while(!text.EndOfStream) { string str = text.ReadLine(); } write.Close(); text.Close(); } } } Форматированный результат (внешний вид): using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; System.IO; namespace Dot { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //button open click private void button1_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); } private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { StreamReader text = File.OpenText(openFileDialog1.FileName); string s = openFileDialog1.FileName; s = s.Replace("txt","mtxx"); TextWriter write = File.AppendText(s); while(!text.EndOfStream) { string str = text.ReadLine(); } write.Close(); text.Close(); } } } Анализ требований к системе Приложение должно представлять собой набор независимых модулей, предназначенных каждый для обработки исходников конкретного языка программирования, а так же внешний интерфейс для обеспечения взаимодействия с пользователем, в виде консоли MS Windows. Расширяемость приложения достигается путем добавления новых модулей для форматирования исходных кодов других языков программирования. Функционал реализуется посредством передачи различных параметров при вызове приложения. Program +Main(в args : string) : int +SelectLang(в name : string) : int «interface» ILang +Remake(в str : StreamReader) : void +SetColorKeyword(в set, в get) : string +SetColorComment(в set, в get) : string +SetResultStyle(в set, в get) : int MainClass -keyword : string -_SetColorKeyword : string -_SetColorComment : string -_SetResultStyle : string -sw : StreamWriter Program – класс, реализующий консольное приложение. Interface ILang – интерфейс взаимодействия модуля и приложения. MainClass – реализует функционал модуля по форматированию исходно файла, получаемого им в виде StreamReader, и выдачи результата форматирования в виде StreamWriter. Схема интерфейса Интерфейс приложения представляет собой командную строку, обеспечивающую взаимодействие с пользователем. Параметры, задаваемые при вызове приложения из командной строки: Обязательные: 1. Имя файла с исходным кодом; Дополнительные: 1. Ключ –kw “color” - устанавливает цвет ключевых слов; 2. Ключ –cm “color” – устанавливает цвет комментариев; 3. Ключ –rs (0,1) – устанавливает стиль выходного файла: 0 - полноценная html-страница; 1 – только форматирование исходного кода; 4. Ключ –dl (php, cs, pas, java) – принудительно устанавливает язык для обработки исходного кода. Требования к аппаратному и программному обеспечению Операционная система: MS Windows XP (SP2, SP3)/Vista (SP1,SP2) /7 Поддержка MS .NET Framework 3.5 или выше. Календарный план Ид. Назв ание задачи Длительность 1 Постанов ка задачи Начало Окончание 7 дней Пн 04.10.10 Вт 12.10.10 Михин П.М. Чучмина Е.В. Субботина Е.А. Шильников а В.Г. Михин П.М. Чучмина Е.В. Субботина Е.А. Шильников а В.Г. Субботина Е.А. 4 Кодиров ание модуля PHP 20 дней Вт 12.10.10 Пн 08.11.10 Михин П.М. 5 Кодиров ание модуля С# 20 дней Вт 12.10.10 Пн 08.11.10 Субботина Е.А. 6 Кодиров ание модуля Java 20 дней Вт 12.10.10 Пн 08.11.10 Шильников а В.Г. 7 Кодиров ание модуля Delphi 20 дней Вт 12.10.10 Пн 08.11.10 Чучмина Е.В. 8 Кодиров ание в нешнего интерфейса 20 дней Вт 12.10.10 Пн 08.11.10 Михин П.М. 9 создание скрипта сборки 10 дней Пн 08.11.10 Пт 19.11.10 10 Тестиров ание приложения 10 дней Пт 19.11.10 Чт 02.12.10 Шильников а В.Г. Чучмина Е.А. Михин П.М. Чучмина Е.В. Субботина Е.А. Шильников а В.Г. 2 Подготов ка технического задания 3 Подготов ка тестов Ид. 23 Ав г '10 06 Сен '10 В Ч П П В 1 2 3 4 5 6 7 8 9 10 7 дней Вт 07.09.10 Ср 15.09.10 14 дней Ср 15.09.10 Пн 04.10.10 Исполнитель 20 Сен '10 04 Окт '10 С С В Ч П П В 18 Окт '10 01 Ноя '10 С С В Ч П П В 15 Ноя '10 29 Ноя '10 С С В Ч П П План тестирования Описание нескольких тестов, подтверждающих работоспособность приложения. Тест 1 тип теста: модульный описание: проверка функционирования модуля C#(проверка ключевых слов); Входные данные: using System.IO; ожидаемый результат:<font color = "blue">using</font> System.IO; Тест 2 тип теста: модульный описание: проверка функционирования модуля C#(проверка комментариев); Входные данные: str.Close();//закрываем поток ожидаемый результат: str.Close();<font color="green">//закрываем поток</font> Тест 3 тип теста: модульный описание: проверка функционирования модуля C#(проверка выделения строк); Входные данные: ins = s.IndexOf("//"); ожидаемый результат : ins = s.IndexOf(<font color="red">"//"</font>); Тест 4 тип теста: модульный описание: проверка функционирования модуля C#(проверяем смешанные варианты,ключевые слова +строки+комментарии); Входные данные: string _SetColorKeyword="blue";//цвет ключевых слов,по умолчанию синий ожидаемый результат: <font color = "blue">string</font> _SetColorKeyword=<font color = "red">"blue"</font>;<font color = "green">//цвет ключевых слов,по умолчанию синий</font> Тест 5 тип теста: модульный описание: проверка функционирования модуля C#; Входные данные get { return "\""+_SetColorKeyword+"\""; } ожидаемый результат: get { <font color = "blue">return</font> <font color = "blue">"\""</font>+_SetColorKeyword+<font color = "blue">"\""</font>; } Тест 6 тип теста: модульный описание: проверка функционирования модуля C#(проверка многострочных комментариев); Входные данные :/*string s = "2354"; string StrRg; Match foundWord; */ ожидаемый результат: :<font color = "green">/*string s = "2354"; string StrRg; Match foundWord; */</font> Тест 7 тип теста: модульный описание: проверка функционирования модуля C#(строки+ключевые слова); Входные данные:string newText="",n2="",n3="",n4="sdfsdf"; ожидаемый результат: <font color="blue">string</font> newText=<font color="red">""</font>,n2=<font color="red">""</font>,n3=<font color="red">""</font>,n4=<font color="red">"sdfsdf"</font>; Тест 8 тип теста: модульный описание: проверка функционирования модуля Java(проверка выделения ключевых слов); Входные данные: import java.util.Scanner; ожидаемый результат : <font color = "blue">import</font> java.util.Scanner; Тест 9 тип теста: модульный описание: проверка функционирования модуля Java(проверка выделения ключевых слов,(несколько подряд)); Входные данные: public static void main(String[] args) { ожидаемый результат : <font color = "blue"> public</font> <font color = "blue">static<.font> <font color = "blue">void</font> main(String[] args) { Тест 10 тип теста: модульный описание: проверка функционирования модуля Java(проверка выделения комментариев); Входные данные: //выводим результат на экран ожидаемый результат : <font color="green">//выводим результат на экран</font> Тест 11 тип теста: модульный описание: проверка функционирования модуля Java(проверка выделения комментариев); Входные данные: /*выводим результат на экран*/ ожидаемый результат : <font color="green">/*выводим результат на экран*/</font> Тест 12 тип теста: модульный описание: проверка функционирования модуля Java(проверка выделения комментариев); Входные данные: /** * @param args the command line arguments */ ожидаемый результат : <font color="green">/** * @param args the command line arguments */</font> Тест 13 тип теста: модульный описание: проверка функционирования модуля Java(проверка выделения строк); Входные данные: System.out.println(" Input N - "); ожидаемый результат : System.out.println(<font color="red">" Input N - "</font>); Тест 14 тип теста: модульный описание: проверка функционирования модуля Pascal(проверка выделения ключевых слов); Входные данные: procedure ExitClick(Sender: TObject); ожидаемый результат : <font color = "blue">procedure</font> ExitClick(Sender: TObject); Тест 15 тип теста: модульный описание: проверка функционирования модуля Pascal(проверка выделения комментариев); Входные данные: { Private declarations } ожидаемый результат : <font color="green">{ Private declarations }</font> Тест 16 тип теста: модульный описание: проверка функционирования модуля Pascal(проверка выделения комментариев); Входные данные: Reset(openfile); //открывает файл; ожидаемый результат : Reset(openfile); <font color="green"> //открывает файл;</font> Тест 17 тип теста: модульный описание: проверка функционирования модуля Pascal(проверка выделения комментариев); Входные данные: AssignFile(tmpfile,'tmp.txt');//связывает файл с tmpfile ожидаемый результат : AssignFile(tmpfile, <font color="red"> 'tmp.txt'</font>); <font color="green"> //связывает файл с tmpfile</font> Тест 18 тип теста: модульный описание: проверка функционирования модуля Pascal(проверка выделения строк); Входные данные: ss:='Hi'; ожидаемый результат : ss:=<font color="red">'Hi'</font>; Тест 19 тип теста: модульный описание: проверка функционирования модуля PHP(проверка выделения ключевых слов); Входные данные: echo $a; ожидаемый результат : <font color = "blue"> echo</font> <font color='grey'>$а</font>; Тест 20 тип теста: модульный описание: проверка функционирования модуля PHP(проверка выделения комментариев); Входные данные: /* ............... */ ожидаемый результат : <font color="green">/* ............... */</font> Тест 21 тип теста: модульный описание: проверка функционирования модуля PHP(проверка выделения строк); Входные данные: $s = 'Hello, world!'; ожидаемый результат : <font color='grey'>$s</font>=<font color="red">'Hello, world!'</font>;