Software design (original) (raw)
Softwaredesign (auch Softwarekonstruktion) ist der Konstruktionsprozess zur Implementierung einer Software-Lösung. Üblicherweise vollzieht sich die Erarbeitung und Erstellung von Software in einem Softwareentwicklungsprozess, in den ständig immer wieder graduelle Verbesserungen einfließen. Doch gegenüber dem Softwareentwicklungsprozess erfordert die Konstruktion von Software ein abstrakteres Denken auf einer Metaebene zur Programmierarbeit. Softwaredesign ist in aller Regel erforderlich, um die Komplexität, welche die meisten Computerprogramme aufweisen, für die Programmierer handhabbarer zu machen und um zielverfehlendes Programmieren zu vermeiden.
Property | Value |
---|---|
dbo:abstract | Softwaredesign (auch Softwarekonstruktion) ist der Konstruktionsprozess zur Implementierung einer Software-Lösung. Üblicherweise vollzieht sich die Erarbeitung und Erstellung von Software in einem Softwareentwicklungsprozess, in den ständig immer wieder graduelle Verbesserungen einfließen. Doch gegenüber dem Softwareentwicklungsprozess erfordert die Konstruktion von Software ein abstrakteres Denken auf einer Metaebene zur Programmierarbeit. Softwaredesign ist in aller Regel erforderlich, um die Komplexität, welche die meisten Computerprogramme aufweisen, für die Programmierer handhabbarer zu machen und um zielverfehlendes Programmieren zu vermeiden. (de) تصميم البرمجيات هي عملية حل مشكلات و تخطيط لبرنامج حاسوبي. بعد أن تكون الغاية من توصيف البرمجية قد حددت، يقوم المبرمجون أو المصممون بتطوير خطة للبرمجية. تحتوي هذه الخطة على أمور تتعلق بمكونات و خوارزميات متدنية المستوى إضافة إلى نظرة لمعمارية البرمجية. (ar) El diseño de software es el proceso por el que un agente crea una especificación de un artefacto de software, pensado para cumplir unos objetivos, utilizando un conjunto de componentes primitivos y sujeto a restricciones. El diseño de software se puede referir a "toda la actividad en conceptualizar, enmarcar, implementar, poner en funcionamiento y, finalmente, modificar sistemas complejos" o "la actividad que sigue a la especificación de requisitos y precede a la programación, como en un proceso de ingeniería de software estilizado. Diseño de software normalmente implica problema solucionando y planeando una solución de software. Esto incluye ambos un componente de nivel bajo y diseño de algoritmo y un alto-nivel, diseño de arquitectura. (es) La conception de logiciel met en œuvre un ensemble d'activités qui à partir d'une demande d'informatisation d'un processus (demande qui peut aller de la simple question orale jusqu'au cahier des charges complet) permettent la conception, l'écriture et la mise au point d'un logiciel (et donc de programmes informatiques) jusqu'à sa livraison au demandeur. En règle générale, la fabrication d'un logiciel va suivre trois grandes phases : * Phase d'analyse (fonctionnelle) ou de conceptionDurant cette phase, on effectue simultanément l'étude des données et l'étude des traitements à effectuer. C'est en général dans cette phase que s'appliquent les techniques de modélisation. Il en découle la description des bases de données éventuelles à créer et les programmes à écrire et la manière dont tout cela va être intégré. * Spécification * Conception * Définition de l'architecture * Phase de réalisation ou de programmation (écriture et tests des programmes) * Algorithmique * Programmation * Gestion des versions * Factorisation * Tests unitaires * Optimisation du code * Phase de livraison * Intégration * Validation * Documentation du logiciel * Packaging (fr) Software design is the process by which an agent creates a specification of a software artifact intended to accomplish goals, using a set of primitive components and subject to constraints. Software design may refer to either "all the activity involved in conceptualizing, framing, implementing, commissioning, and ultimately modifying complex systems" or "the activity following requirements specification and before programming, as ... [in] a stylized software engineering process." Software design usually involves problem-solving and planning a software solution. This includes both a low-level component and algorithm design and a high-level, architecture design. (en) 소프트웨어 설계 또는 소프트웨어 디자인(Software design)은 소프트웨어 해결책을 위한 문제해결과 계획 과정이다. 소프트웨어의 목적과 명세가 결정되면 개발자가 설계 하거나 설계자를 고용하여 해결책을 위한 계획을 개발하도록 한다. 저수준 요소와 알고리즘 구현 문제, 그리고 구조에 대한 조망이 포함된다. (ko) In ingegneria del software, la progettazione (talvolta detta anche progetto o disegno, dall'inglese design) è una fase del ciclo di vita del software. Sulla base della specifica dei requisiti prodotta dall'analisi, il progetto definisce come tali requisiti saranno soddisfatti, entrando nel merito della struttura che dovrà essere data al sistema software che deve essere realizzato. (it) ソフトウェア設計(英: Software design)は、ソフトウェアのための問題解決と計画の工程である。ソフトウェアの目的と仕様が決定した後で、ソフトウェア開発者が設計をしたり、専門の設計者が開発計画を立てる。細かいコンポーネントやアルゴリズムの実装だけではなく、アーキテクチャ的観点での検討も行われる。 ソフトウェア開発工程での要求分析によって、ソフトウェア工学における仕様が確定する。そのソフトウェアがユーザーとの対話を必要とするものか、あるいはユーザー中心設計であれば、ソフトウェア設計にはユーザーエクスペリエンス設計も関わり、絵コンテなども仕様に含まれることになる。完全に自動的に動作するソフトウェア(ユーザインタフェースのないソフトウェア)であれば、ソフトウェア設計は単なるフローチャート作成程度の作業となるかもしれない。また、統一モデリング言語 (UML) などの半形式的手法もある。いずれにしても、ソフトウェア設計工程の成果物としては、何らかのが生成される。 (ja) Design de Software (do inglês Software design) é a parte da engenharia de software que se encarrega de fazer todo o planejamento anterior ao desenvolvimento, incluindo a definição da arquitetura do software, e transformar tudo em um documento ou conjunto de documentos capazes de serem interpretados diretamente pelo programador. Para atingir este objetivo, o projetista deve mapear as estruturas e funcionalidades identificadas na análise de requerimentos dentro do contexto e das restrições da arquitetura, de forma a tornar possível a construção do software. Ao longo do tempo e nos diversos processos de software existentes, várias ferramentas foram idealizadas para facilitar e atingir este objetivo: * Design por contrato * Model Driven Architecture (MDA) e Model Driven Design (MDD) * Design Patterns * Refatoração entre outras. (pt) 软件设计是程式設計師按照特定顺序撰寫计算机数据和指令的集合。“软件设计”可以是撰寫最基礎的二进制0和1位元;也可以是建立在位元之上的各类软件语言、算法、架构、程序、图像化程式碼来进行。 (zh) Проектирование программного обеспечения — процесс создания проекта программного обеспечения (ПО), а также дисциплина, изучающая методы проектирования.Проектирование ПО является частным случаем проектирования продуктов и процессов. Проектирование ПО включает следующие основные виды деятельности: * выбор метода и стратегии решения; * выбор представления внутренних данных; * разработка основного алгоритма; * документирование ПО; * тестирование и подбор тестов; * выбор представления входных данных. Первоначально программа рассматривается как чёрный ящик. Ход процесса проектирования и его результаты зависят не только от состава требований, но и выбранной модели процесса, опыта проектировщика. Модель предметной области накладывает ограничения на бизнес-логику и структуры данных. В зависимости от класса создаваемого ПО, процесс проектирования может обеспечиваться как «ручным» проектированием, так и различными средствами его автоматизации. В процессе проектирования ПО для выражения его характеристик используются различные нотации — блок-схемы, ER-диаграммы, UML-диаграммы, DFD-диаграммы, а также макеты. Проектированию обычно подлежат: * Архитектура ПО; * Устройство компонентов ПО; * Пользовательские интерфейсы. В российской практике проектирование ведется поэтапно в соответствии со стадиями, регламентированными ГОСТ 2.103-68 : 1. * Техническое задание(по ГОСТ 2.103-68 к стадиям разработки не относится), 2. * Техническое предложение, 3. * Эскизный проект, 4. * Технический проект, 5. * Рабочий проект. На каждом из этапов формируется свой комплект документов, называемый проектом (проектной документацией). В зарубежной практике регламентирующими документами, например, являются Software Architecture Document, Software Design Document. (ru) Проєктування програмного забезпечення (англ. Software design) - це процес визначення архітектури, компонентів, інтерфейсів та інших атрибутів (структур даних, алгоритмів і т.д.) системи або компонента програмного забезпечення. Результатом цього процесу є проект програмного забезпечення (англ. Software design) Проєктуванню зазвичай підлягають: * Архітектура програмного забезпечення * Компоненти ПЗ * Користувацькі інтерфейси В процесі проєктування ПЗ застосовують різні моделі — блок-схеми, ER-діаграми, DFD тощо. (uk) |
dbo:wikiPageID | 223325 (xsd:integer) |
dbo:wikiPageLength | 19864 (xsd:nonNegativeInteger) |
dbo:wikiPageRevisionID | 1115465474 (xsd:integer) |
dbo:wikiPageWikiLink | dbr:Business_Process_Modeling_Notation dbr:Design_patterns dbr:Alloy_(specification_language) dbc:Computer_occupations dbr:Architecture_description_language dbr:Design dbr:Design_rationale dbr:EXPRESS_(data_modeling_language) dbr:Interaction_design dbr:User_interface dbr:User_interface_design dbr:Jackson_Structured_Programming dbr:User_experience_design dbr:Usability dbr:Computer_security dbr:General-purpose_modeling dbr:Grady_Booch dbr:Constraint_(mathematics) dbr:Process_Modeling dbr:Storyboard dbr:Computer_performance dbr:Computer_programming dbr:Fundamental_modeling_concepts dbr:Data_Structure dbr:Icon_design dbr:Software_architecture dbr:Fundamental_Modeling_Concepts dbr:Platform-independent_model dbr:Platform-specific_model dbr:Software_engineering dbr:Automation dbr:C++ dbr:C_Sharp_(programming_language) dbc:Software_design dbr:Agency_(philosophy) dbc:Software_engineering dbr:Data_modeling dbr:Documentation dbr:Fault-tolerant_system dbr:Web_design dbr:Edsger_W._Dijkstra dbr:Extensibility dbr:Flowchart dbr:Formal_specification dbr:Goal dbr:Graphic_design dbr:Unified_Modeling_Language dbr:User_experience dbr:Profile_(UML) dbr:Prototype dbr:Reusability dbr:Java_(programming_language) dbr:Bachelor_of_Science_in_Information_Technology dbr:TeX dbr:Software_development_process dbr:Software_durability dbr:Software_requirements_analysis dbr:Abstraction_(computer_science) dbr:Modeling_language dbr:Modularity dbr:Software_design dbr:Zero_One_Infinity dbr:Donald_Knuth dbr:Artifact_(software_development) dbr:Software_Architecture dbr:Software_development dbr:Software_framework dbr:Software_portability dbr:Specifications dbr:Information_Hiding dbr:Algorithm_design dbr:Aspect-oriented_software_development dbr:Object-oriented dbr:Ontology_(information_science) dbr:Service-oriented_modeling dbr:Maintainability dbr:Search-based_software_engineering dbr:Software_Design_Description dbr:Subject-matter_expert dbr:Simulation dbr:Software dbr:User_(computing) dbr:Software_system dbr:Extended_Enterprise_Modeling_Language dbr:IDEF dbr:IDEF0 dbr:IDEF1X dbr:IDEF5 dbr:Scalability dbr:Outline_of_software dbr:Outline_of_software_development dbr:Outline_of_software_engineering dbr:Software_requirements dbr:Systems_Modeling_Language dbr:Multidisciplinary dbr:Fault-tolerance dbr:Flow_chart dbr:Design_pattern_(computer_science) dbr:Program_refinement dbr:Software_design_document dbr:User_centered_design dbr:Lepus3 dbr:Control_Hierarchy dbr:Software_Procedure dbr:Structural_Partitioning |
dbp:wikiPageUsesTemplate | dbt:Cite_book dbt:Commons_category dbt:Design dbt:More_citations_needed dbt:Quotation dbt:Reflist dbt:Short_description dbt:Software_engineering dbt:Computer_science dbt:Software_development_process |
dct:subject | dbc:Computer_occupations dbc:Software_design dbc:Software_engineering |
gold:hypernym | dbr:Process |
rdf:type | yago:WikicatComputerOccupations yago:WikicatSoftwareRequirements yago:Abstraction100002137 yago:Act100030358 yago:Activity100407535 yago:Duty101129920 yago:Event100029378 yago:GroupAction101080366 yago:Occupation100582388 yago:PsychologicalFeature100023100 yago:Requirement105892651 yago:YagoPermanentlyLocatedEntity dbo:Election dbo:PersonFunction yago:SocialControl101123598 |
rdfs:comment | Softwaredesign (auch Softwarekonstruktion) ist der Konstruktionsprozess zur Implementierung einer Software-Lösung. Üblicherweise vollzieht sich die Erarbeitung und Erstellung von Software in einem Softwareentwicklungsprozess, in den ständig immer wieder graduelle Verbesserungen einfließen. Doch gegenüber dem Softwareentwicklungsprozess erfordert die Konstruktion von Software ein abstrakteres Denken auf einer Metaebene zur Programmierarbeit. Softwaredesign ist in aller Regel erforderlich, um die Komplexität, welche die meisten Computerprogramme aufweisen, für die Programmierer handhabbarer zu machen und um zielverfehlendes Programmieren zu vermeiden. (de) تصميم البرمجيات هي عملية حل مشكلات و تخطيط لبرنامج حاسوبي. بعد أن تكون الغاية من توصيف البرمجية قد حددت، يقوم المبرمجون أو المصممون بتطوير خطة للبرمجية. تحتوي هذه الخطة على أمور تتعلق بمكونات و خوارزميات متدنية المستوى إضافة إلى نظرة لمعمارية البرمجية. (ar) 소프트웨어 설계 또는 소프트웨어 디자인(Software design)은 소프트웨어 해결책을 위한 문제해결과 계획 과정이다. 소프트웨어의 목적과 명세가 결정되면 개발자가 설계 하거나 설계자를 고용하여 해결책을 위한 계획을 개발하도록 한다. 저수준 요소와 알고리즘 구현 문제, 그리고 구조에 대한 조망이 포함된다. (ko) In ingegneria del software, la progettazione (talvolta detta anche progetto o disegno, dall'inglese design) è una fase del ciclo di vita del software. Sulla base della specifica dei requisiti prodotta dall'analisi, il progetto definisce come tali requisiti saranno soddisfatti, entrando nel merito della struttura che dovrà essere data al sistema software che deve essere realizzato. (it) ソフトウェア設計(英: Software design)は、ソフトウェアのための問題解決と計画の工程である。ソフトウェアの目的と仕様が決定した後で、ソフトウェア開発者が設計をしたり、専門の設計者が開発計画を立てる。細かいコンポーネントやアルゴリズムの実装だけではなく、アーキテクチャ的観点での検討も行われる。 ソフトウェア開発工程での要求分析によって、ソフトウェア工学における仕様が確定する。そのソフトウェアがユーザーとの対話を必要とするものか、あるいはユーザー中心設計であれば、ソフトウェア設計にはユーザーエクスペリエンス設計も関わり、絵コンテなども仕様に含まれることになる。完全に自動的に動作するソフトウェア(ユーザインタフェースのないソフトウェア)であれば、ソフトウェア設計は単なるフローチャート作成程度の作業となるかもしれない。また、統一モデリング言語 (UML) などの半形式的手法もある。いずれにしても、ソフトウェア設計工程の成果物としては、何らかのが生成される。 (ja) 软件设计是程式設計師按照特定顺序撰寫计算机数据和指令的集合。“软件设计”可以是撰寫最基礎的二进制0和1位元;也可以是建立在位元之上的各类软件语言、算法、架构、程序、图像化程式碼来进行。 (zh) Проєктування програмного забезпечення (англ. Software design) - це процес визначення архітектури, компонентів, інтерфейсів та інших атрибутів (структур даних, алгоритмів і т.д.) системи або компонента програмного забезпечення. Результатом цього процесу є проект програмного забезпечення (англ. Software design) Проєктуванню зазвичай підлягають: * Архітектура програмного забезпечення * Компоненти ПЗ * Користувацькі інтерфейси В процесі проєктування ПЗ застосовують різні моделі — блок-схеми, ER-діаграми, DFD тощо. (uk) El diseño de software es el proceso por el que un agente crea una especificación de un artefacto de software, pensado para cumplir unos objetivos, utilizando un conjunto de componentes primitivos y sujeto a restricciones. El diseño de software se puede referir a "toda la actividad en conceptualizar, enmarcar, implementar, poner en funcionamiento y, finalmente, modificar sistemas complejos" o "la actividad que sigue a la especificación de requisitos y precede a la programación, como en un proceso de ingeniería de software estilizado. (es) La conception de logiciel met en œuvre un ensemble d'activités qui à partir d'une demande d'informatisation d'un processus (demande qui peut aller de la simple question orale jusqu'au cahier des charges complet) permettent la conception, l'écriture et la mise au point d'un logiciel (et donc de programmes informatiques) jusqu'à sa livraison au demandeur. En règle générale, la fabrication d'un logiciel va suivre trois grandes phases : (fr) Software design is the process by which an agent creates a specification of a software artifact intended to accomplish goals, using a set of primitive components and subject to constraints. Software design may refer to either "all the activity involved in conceptualizing, framing, implementing, commissioning, and ultimately modifying complex systems" or "the activity following requirements specification and before programming, as ... [in] a stylized software engineering process." (en) Design de Software (do inglês Software design) é a parte da engenharia de software que se encarrega de fazer todo o planejamento anterior ao desenvolvimento, incluindo a definição da arquitetura do software, e transformar tudo em um documento ou conjunto de documentos capazes de serem interpretados diretamente pelo programador. * Design por contrato * Model Driven Architecture (MDA) e Model Driven Design (MDD) * Design Patterns * Refatoração entre outras. (pt) Проектирование программного обеспечения — процесс создания проекта программного обеспечения (ПО), а также дисциплина, изучающая методы проектирования.Проектирование ПО является частным случаем проектирования продуктов и процессов. Проектирование ПО включает следующие основные виды деятельности: * выбор метода и стратегии решения; * выбор представления внутренних данных; * разработка основного алгоритма; * документирование ПО; * тестирование и подбор тестов; * выбор представления входных данных. Модель предметной области накладывает ограничения на бизнес-логику и структуры данных. (ru) |
rdfs:label | Software design (en) تصميم البرمجيات (ar) Softwaredesign (de) Diseño de software (es) Conception de logiciel (fr) Progettazione (ingegneria del software) (it) 소프트웨어 설계 (ko) ソフトウェア設計 (ja) Projeto de software (pt) Проектирование программного обеспечения (ru) 软件设计 (zh) Проєктування програмного забезпечення (uk) |
owl:sameAs | freebase:Software design wikidata:Software design dbpedia-ar:Software design http://bn.dbpedia.org/resource/সফটওয়্যার_ডিজাইন dbpedia-da:Software design dbpedia-de:Software design dbpedia-es:Software design dbpedia-et:Software design dbpedia-fa:Software design dbpedia-fr:Software design dbpedia-he:Software design dbpedia-hu:Software design dbpedia-is:Software design dbpedia-it:Software design dbpedia-ja:Software design http://jv.dbpedia.org/resource/Desain_piranti_alus_komputer dbpedia-ko:Software design dbpedia-mk:Software design dbpedia-ms:Software design dbpedia-no:Software design dbpedia-pt:Software design dbpedia-ro:Software design dbpedia-ru:Software design dbpedia-sq:Software design dbpedia-sr:Software design dbpedia-tr:Software design dbpedia-uk:Software design dbpedia-vi:Software design dbpedia-zh:Software design https://global.dbpedia.org/id/51PP4 yago-res:Software design |
prov:wasDerivedFrom | wikipedia-en:Software_design?oldid=1115465474&ns=0 |
foaf:isPrimaryTopicOf | wikipedia-en:Software_design |
is dbo:industry of | dbr:Itmagination dbr:Netguru |
is dbo:knownFor of | dbr:Jaime_Levy |
is dbo:occupation of | dbr:Tim_Paterson dbr:Frederick_Lenz dbr:Paula_Bonta |
is dbo:wikiPageRedirects of | dbr:Software_Design dbr:Software_designer |
is dbo:wikiPageWikiLink of | dbr:Prolog dbr:List_of_computer_occupations dbr:Model-driven dbr:Model-driven_integration dbr:MetaCASE_tool dbr:OmniFaces dbr:Programming_ethics dbr:Design_by_contract dbr:AntiPatterns dbr:Architectural_decision dbr:Architecturally_significant_requirements dbr:University_of_Lisbon_(1911–2013) dbr:Defensive_design dbr:Dejan_Cvetković dbr:Derek_Smart dbr:Design dbr:Design_smell dbr:Designer dbr:Desire_path dbr:ETAS dbr:Incremental_build_model dbr:User_interface_design dbr:Software_feature dbr:Computers_and_writing dbr:Crowdsourcing_software_development dbr:Analysis_paralysis dbr:SK_Inc. dbr:Object-oriented_design dbr:Observer_pattern dbr:Ommo_Clark dbr:Node_graph_architecture dbr:Christgau's_Consumer_Guide:_Albums_of_the_'90s dbr:Circular_dependency dbr:Engineering dbr:Glossary_of_computer_science dbr:GreenPal dbr:Concept_map dbr:Robert_L._Glass dbr:Open_service_interface_definitions dbr:Single_White_Female dbr:Component-oriented_database dbr:Computer_Engineer_Barbie dbr:Computer_engineering dbr:Computing dbr:Software_architecture dbr:Petri_net dbr:Principle_of_least_astonishment dbr:Separation_of_mechanism_and_policy dbr:Synthetic_monitoring dbr:Media_richness_theory dbr:Software_engineering dbr:76th_Maintenance_Wing dbr:COLA_(software_architecture) dbr:Tim_Paterson dbr:Tom_Hull_(critic) dbr:Data_collection_system dbr:Data_structure_diagram dbr:Web_server dbr:Wicked_problem dbr:GES_International dbr:Language_binding dbr:NingBo_Vocational_Education_Central_School dbr:Agile_software_development dbr:Alan_Cooper dbr:Dansk_Datamatik_Center dbr:Esterel_Technologies dbr:Exim dbr:Formal_methods dbr:Fractal_component_model dbr:Graphic_design dbr:Judy_Butland dbr:List_of_MeSH_codes_(L01) dbr:Technical_director dbr:Reusability dbr:Reverse_semantic_traceability dbr:HICIT_in_Shorouk_Academy dbr:Itmagination dbr:Jaime_Levy dbr:Jason_Zimbler dbr:Java_Native_Interface dbr:Terry_Winograd dbr:Software_development_process dbr:Software_diagnosis dbr:Software_Design dbr:ACD/ChemSketch dbr:Jim_Gray_(computer_scientist) dbr:Blinking_twelve_problem dbr:Block_diagram dbr:Table_cell dbr:Takahito_Eguchi dbr:Code_Complete dbr:Code_refactoring dbr:Hexagonal_architecture_(software) dbr:Zero_one_infinity_rule dbr:Model-driven_application dbr:Modular_programming dbr:Modularity dbr:Software_design dbr:Digital_Happiness dbr:Domain-driven_design dbr:B-Method dbr:Social_web dbr:Software_as_a_service dbr:Software_construction dbr:Software_design_pattern dbr:Software_development dbr:Software_release_life_cycle dbr:Speranza_(festival) dbr:Frederick_Lenz dbr:Incrementalism dbr:Infinity_(K-Space_album) dbr:Information_technology_management dbr:Inter-process_communication dbr:Interface_bloat dbr:Michael_B._T._Bell dbr:Microsoft_Access dbr:Bud_Tribble dbr:Netguru dbr:Catalysis_software_design_method dbr:Razor-qt dbr:Certified_Software_Development_Professional dbr:Paula_Bonta dbr:Look_and_feel dbr:Search-based_software_engineering dbr:Secure_by_design dbr:Service-oriented_architecture dbr:Software_quality_assurance dbr:Scenario_(computing) dbr:Service_contract dbr:Unit_testing dbr:Virtuality_(software_design) dbr:Waterfall_model dbr:Nick_Mathewson dbr:Extended_Enterprise_Modeling_Language dbr:Participatory_design dbr:Writing dbr:Event_(computing) dbr:Pontiac_Aztek dbr:Software_reliability_testing dbr:System_appreciation dbr:Self-driving_car_liability dbr:Software_Engineering_Body_of_Knowledge dbr:Outline_of_computer_engineering dbr:Outline_of_design dbr:Outline_of_software_development dbr:P-Modeling_Framework dbr:Software_blueprint dbr:Vistula_University dbr:Robert_H._Dodds_Jr. dbr:Software_designer |
is foaf:primaryTopic of | wikipedia-en:Software_design |