Введение
Процесс планирования программных решений
Проектирование программного обеспечения — это процесс концептуализации работы программной системы до её реализации или модификации. Проектирование программного обеспечения также относится к непосредственному результату этого процесса — представлению о том, как программное обеспечение будет работать, которое включает в себя как проектную документацию, так и неофициальные концепции. Проектирование программного обеспечения обычно определяется целями для создаваемой системы и включает решение задач и планирование, охватывающее как высокоуровневую архитектуру программного обеспечения, так и проектирование низкоуровневых компонентов и алгоритмов. В контексте каскадной модели разработки, проектирование программного обеспечения следует за спецификацией требований и предшествует кодированию.
high level software architecture and low level component and algorithm design. In terms of the waterfall development process, software design is the activity of following requirements specification and before coding.
Общий процесс
Процесс проектирования позволяет разработчику моделировать различные аспекты программной системы до её создания. Креативность, предыдущий опыт, понимание того, что составляет "качественное" программное обеспечение, и стремление к качеству – факторы, определяющие успех компетентного проектирования. Однако процесс проектирования не всегда является однозначным. Модель проектирования программного обеспечения можно сравнить с архитектурным планом дома. Планы высокого уровня отражают общую картину дома (например, трехмерная визуализация дома). Планы нижнего уровня предоставляют инструкции для реализации каждой детали (например, схема прокладки сантехники). Аналогично, модель проектирования программного обеспечения предоставляет различные представления о предлагаемом программном решении.
Стоимость
Документация по проектированию программного обеспечения может быть рассмотрена или представлена для корректировки ограничений, спецификаций и даже требований до начала кодирования. Перепроектирование может потребоваться после анализа запрограммированной симуляции или прототипа. Возможно проектирование программного обеспечения непосредственно в процессе кодирования, без предварительного плана или анализа требований, однако для более сложных проектов это менее целесообразно. Разработка отдельного проекта до кодирования позволяет дизайнерам различных специальностей и экспертам в предметной области сотрудничать с программистами для создания полезного и технически надежного программного обеспечения.
Анализ требований
Одним из компонентов проектирования программного обеспечения является анализ требований к программному обеспечению (SRA). SRA – это часть процесса разработки программного обеспечения, определяющая спецификации, используемые в разработке программного обеспечения. Результатом анализа являются более мелкие, конкретные задачи для решения. В отличие от этого, проектирование фокусируется на функциональных возможностях, поэтому для одной и той же проблемы может существовать несколько вариантов проектирования. В зависимости от среды, проектирование может варьироваться, будь то создание на основе надежных фреймворков или реализация с использованием подходящих шаблонов проектирования.
Принципы проектирования
Основные принципы проектирования позволяют инженеру программного обеспечения ориентироваться в процессе проектирования. Дэвис предлагает набор принципов для проектирования программного обеспечения, которые были адаптированы и расширены в следующем списке:
Процесс проектирования не должен страдать от "туннельного мышления". Хороший разработчик должен рассматривать альтернативные подходы, оценивая каждый из них на основе требований задачи и доступных ресурсов. Проектирование должно быть прослеживаемым до модели анализа. Поскольку один элемент модели проектирования часто может быть связан с несколькими требованиями, необходимо предусмотреть механизмы отслеживания того, как требования реализованы в модели проектирования. Проектирование не должно изобретать велосипед. Системы создаются с использованием набора шаблонов проектирования, многие из которых, вероятно, уже известны. Эти шаблоны всегда следует выбирать вместо повторного изобретения. Время ограничено, ресурсы ограничены; время проектирования следует инвестировать в представление (действительно новых) идей путем интеграции уже существующих шаблонов (когда это применимо). Проектирование должно "минимизировать интеллектуальную дистанцию" между программным обеспечением и проблемой, как она существует в реальном мире. То есть, структура программного обеспечения должна, по возможности, отражать структуру предметной области. Проектирование должно быть единообразным и интегрированным. Проект является единообразным, если он выглядит целостным и последовательным. Для достижения этого результата правила стиля и форматирования должны быть определены для команды проектирования до начала работы. Проект является интегрированным, если уделяется внимание определению интерфейсов между компонентами проекта. Проектирование должно быть структурировано с учетом возможности изменений. Концепции проектирования, обсуждаемые в следующем разделе, позволяют достичь этого принципа. Проектирование должно быть структурировано таким образом, чтобы оно корректно обрабатывало ошибки, даже при возникновении аномальных данных, событий или условий эксплуатации. Хорошо спроектированное программное обеспечение никогда не должно аварийно завершать работу; оно должно быть разработано с учетом необычных обстоятельств, и в случае необходимости прекращения обработки, оно должно делать это изящно. Проектирование – это не кодирование, а кодирование – это не проектирование. Даже при создании детализированных процедурных проектов для компонентов программы, уровень абстракции модели проектирования выше, чем у исходного кода. Единственные решения по проектированию, принимаемые на уровне кодирования, должны касаться небольших деталей реализации, необходимых для кодирования процедурного проекта. Качество проектирования должно оцениваться в процессе его создания, а не постфактум. Существует множество концепций и метрик проектирования, которые могут помочь разработчику в оценке качества на протяжении всего процесса разработки. Проект следует проверять для минимизации концептуальных (семантических) ошибок. Иногда при проверке проекта возникает тенденция сосредотачиваться на мелочах, упуская общую картину. Команда проектирования должна убедиться, что основные концептуальные элементы проекта (пропуски, неоднозначность, несогласованность) были рассмотрены, прежде чем беспокоиться о синтаксисе модели проектирования.
The design process should not suffer from "tunnel vision". A good designer should consider alternative approaches, judging each based on the requirements of the problem, the resources available to do the job. The design should be traceable to the analysis model. Because a single element of the design model can often be traced back to multiple requirements, it is necessary to have a means for tracking how requirements have been satisfied by the design model. The design should not reinvent the wheel. Systems are constructed using a set of design patterns, many of which have likely been encountered before. These patterns should always be chosen as an alternative to reinvention. Time is short and resources are limited; design time should be invested in representing (truly new) ideas by integrating patterns that already exist (when applicable). The design should "minimize the intellectual distance" between the software and the problem as it exists in the real world. That is, the structure of the software design should, whenever possible, mimic the structure of the problem domain. The design should exhibit uniformity and integration. A design is uniform if it appears fully coherent. In order to achieve this outcome, rules of style and format should be defined for a design team before design work begins. A design is integrated if care is taken in defining interfaces between design components. The design should be structured to accommodate change. The design concepts discussed in the next section enable a design to achieve this principle. The design should be structured to degrade gently, even when aberrant data, events, or operating conditions are encountered. Well designed software should never "bomb"; it should be designed to accommodate unusual circumstances, and if it must terminate processing, it should do so in a graceful manner. Design is not coding, coding is not design. Even when detailed procedural designs are created for program components, the level of abstraction of the design model is higher than the source code. The only design decisions made at the coding level should address the small implementation details that enable the procedural design to be coded. The design should be assessed for quality as it is being created, not after the fact. A variety of design concepts and design measures are available to assist the designer in assessing quality throughout the development process. The design should be reviewed to minimize conceptual (semantic) errors. There is sometimes a tendency to focus on minutiae when the design is reviewed, missing the forest for the trees. A design team should ensure that major conceptual elements of the design (omissions, ambiguity, inconsistency) have been addressed before worrying about the syntax of the design model.
Концепции проектирования
Концепции проектирования предоставляют дизайнеру основу, на которой могут быть применены более сложные методы. Сформировался набор концепций проектирования, включающий:
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Абстракция – это процесс или результат обобщения путем уменьшения информационного содержания концепции или наблюдаемого явления, как правило, для сохранения только информации, релевантной для конкретной цели. Это представление существенных характеристик без включения фоновых деталей или объяснений.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Уточнение – это процесс детализации. Иерархия разрабатывается путем последовательного разложения макроскопического описания функции, пока не будут достигнуты операторы языка программирования. На каждом шаге одна или несколько инструкций программы декомпозируются на более детальные инструкции. Абстракция и уточнение – взаимодополняющие концепции.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Модульность – архитектура программного обеспечения разделяется на компоненты, называемые модулями.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Архитектура программного обеспечения – это общая структура программного обеспечения и способы, которыми эта структура обеспечивает концептуальную целостность системы. Хорошая архитектура программного обеспечения обеспечивает высокую отдачу от инвестиций в отношении желаемого результата проекта, например, с точки зрения производительности, качества, сроков и стоимости.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Иерархия управления – структура программы, представляющая организацию компонента программы и подразумевающая иерархию управления.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Структурное разделение – структура программы может быть разделена по горизонтали и по вертикали. Горизонтальное разделение определяет отдельные ветви модульной иерархии для каждой основной функции программы. Вертикальное разделение предполагает, что управление и выполнение должны быть распределены сверху вниз по структуре программы.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Структура данных – это представление логических связей между отдельными элементами данных.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Программная процедура – фокусируется на обработке каждого модуля по отдельности.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Сокрытие информации – модули должны быть специфицированы и разработаны таким образом, чтобы информация, содержащаяся в модуле, была недоступна другим модулям, которые в ней не нуждаются.
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
В своей объектной модели Грейди Буч упоминает абстракцию, инкапсуляцию, модулизацию и иерархию как фундаментальные принципы проектирования программного обеспечения. Иногда для обозначения этих четырех основных принципов используется аббревиатура PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation).
Abstraction Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically to retain only information that is relevant for a particular purpose. It is an act of Representing essential features without including the background details or explanations. Refinement It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a step wise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts. Modularity Software architecture is divided into components called modules. Software Architecture It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Good software architecture will yield a good return on investment with respect to the desired outcome of the project, e. g. in terms of performance, quality, schedule and cost. Control Hierarchy A program structure that represents the organization of a program component and implies a hierarchy of control. Structural Partitioning The program structure can be divided horizontally and vertically. Horizontal partitions define separate branches of modular hierarchy for each major program function. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Data Structure It is a representation of the logical relationship among individual elements of data. Software Procedure It focuses on the processing of each module individually. Information Hiding Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. In his object model, Grady Booch mentions Abstraction, Encapsulation, Modularisation, and Hierarchy as fundamental software design principles. The acronym PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) is sometimes used to refer to these four fundamental principles.
Относительно конструкции
При разработке программного обеспечения необходимо учитывать множество аспектов. Важность каждого из этих аспектов должна отражать цели и ожидания, которым должно соответствовать программное обеспечение. Некоторые из этих аспектов:
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Совместимость – способность программного обеспечения работать с другими продуктами, предназначенными для взаимодействия. Например, программное обеспечение может быть обратно совместимо со своей более ранней версией.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Расширяемость – возможность добавления новых функций в программное обеспечение без внесения существенных изменений в базовую архитектуру.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Модульность – результирующее программное обеспечение состоит из чётко определённых, независимых компонентов, что повышает удобство его поддержки. Эти компоненты могут быть реализованы и протестированы изолированно перед интеграцией в целевую программную систему, что позволяет разделить работу в проекте разработки.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Отказоустойчивость – способность программного обеспечения противостоять сбоям компонентов и восстанавливаться после них.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Поддерживаемость – мера легкости внесения исправлений ошибок или функциональных изменений. Высокая поддерживаемость может быть следствием модульности и расширяемости.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Надёжность (долговечность программного обеспечения) – способность программного обеспечения выполнять требуемую функцию в заданных условиях в течение определённого периода времени.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Повторное использование – возможность использования части или всех аспектов существующего программного обеспечения в других проектах с минимальными или отсутствующими изменениями.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Устойчивость – способность программного обеспечения работать в условиях повышенной нагрузки или обрабатывать непредсказуемые или недопустимые входные данные. Например, оно может быть разработано с учётом устойчивости к нехватке памяти.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Безопасность – способность программного обеспечения противостоять и отражать враждебные действия и воздействия.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Удобство использования – пользовательский интерфейс программного обеспечения должен быть удобен для целевой аудитории. Значения параметров по умолчанию должны быть выбраны таким образом, чтобы они подходили большинству пользователей.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Производительность – программное обеспечение должно выполнять свои задачи за время, приемлемое для пользователя, и не требовать чрезмерного расхода памяти.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Переносимость – программное обеспечение должно быть применимо в различных условиях и средах.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Масштабируемость – способность программного обеспечения эффективно адаптироваться к увеличению объёма данных, добавлению новых функций или росту числа пользователей.
Compatibility The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself. Extensibility New capabilities can be added to the software without major changes to the underlying architecture. Modularity the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. Fault tolerance The software is resistant to and able to recover from component failure. Maintainability A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. Reliability (Software durability) The software is able to perform a required function under stated conditions for a specified period of time. Reusability The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. Robustness The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. Security The software is able to withstand and resist hostile acts and influences. Usability The software user interface must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Performance The software performs its tasks within a time frame that is acceptable for the user, and does not require too much memory. Portability The software should be usable across a number of different conditions and environments. Scalability The software adapts well to increasing data or added features or number of users.
Конструктивные шаблоны
Разработчик программного обеспечения может обнаружить аспект проектирования, который уже рассматривался и, возможно, даже был решён другими ранее. Шаблон или образец, описывающий решение распространённой проблемы, известен как шаблон проектирования. Повторное использование таких шаблонов может повысить скорость разработки программного обеспечения.
Код как проект
Трудность использования термина "дизайн" по отношению к программному обеспечению заключается в том, что в определенном смысле исходный код программы и есть проект той программы, которую он создает. В той мере, в которой это справедливо, "проектирование программного обеспечения" относится к проектированию проекта. Эдсгер В. Дейкстра назвал это наслоение семантических уровней "радикальной новизной" компьютерного программирования, а Дональд Кнут, опираясь на свой опыт написания TeX, описал бесплодность попыток спроектировать программу до её реализации.