BLOG

Record, summarize, and improve.

软件开发

常用概念

http://www.vue5.com/software_architecture_design/software_architecture_design.html

软件开发是在创建和维护应用程序、框架或其他软件组件时涉及的构思、指定、设计、编程、记录、测试和错误修复的过程。软件开发涉及编写和维护源代码,但从更广泛的意义上讲,它包括从所需软件的概念到软件的最终表现形式的所有过程,通常是有计划和结构化的过程。[1]软件开发还包括研究、新开发、原型制作、修改、重用、重新设计、维护或产生软件产品的任何其他活动。

  1. 架构:

    软件架构,也成称为软件体系结构,简单地说就是一种设计方案,将用户的不同需求抽象成组件,且能够描述组件之间的通信和调用。软件架构会分析工程中的问题,针对问题设计解决方案,针对解决方案分析应具有的功能,针对功能设计软件系统的层次和模块及层次模块之间的逻辑交互关系,确定各个功能如何由这些逻辑实现。开发人员可以根据软件架构分析出来的层次和架构进行软件编写。

  2. 框架:

    软件框架,是软件开发过程中提取软件的共性部分形成的体系结构。框架不是现成可用的应用系统,而是一个半成品,是一个提供了诸多服务,供开发人员进行二次开发,实现具体功能的程序实体。

    框架与架构的关系:框架不是架构,框架比架构更具体,更偏重于技术,而架构更偏重于设计;架构可以通过多种框架来实现。

  3. 模式:

    设计模式强调的是一个设计问题的解决方法,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

    框架与设计模式的关系:设计模式研究的是对单一问题的设计思路和解决方法,一个模式可应用于不同的框架和被不同的程序语言所实现;而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体。设计模式的思想可以在框架设计中进行应用。

    架构与设计模式的关系:设计模式研究的是对单一问题的设计思路和解决方法,范畴比较小;而架构是高层次的针对体系结构的一种设计思路,范畴比较大。一个架构中可能会出现多个设计模式的思想。

  4. 模块:

    根据不同的标准,通常会说程序模块或功能模块,程序模块指的是一段能够实现某个目标的成员代码段,功能模块则用来说明一个功能所包含的系统行为。定义模块的原则是:高内聚和低耦合。

  5. 组件:

    组件是封装了一个或多个程序模块的实体。组件强调的是封装,利用接口进行交互。组件也称为构建。插件是组件的一个子类,就是将组件中具有某些特点的组件归为插件。

  6. 插件:

    插件属于组件,插件是组件的一个子类,就是将组件中具有某些特点的组件归为插件。插件是一种电脑程序,通过和应用程序的互动,来为应用程序增加一些特定的功能,仅靠插件是无法正常运行的,需要依赖于应用程序才能发挥自身功能。插件和应用程序之间通过接口进行交互。

  7. 控件:

    可视化的组件。

  8. 中间件:

    通过系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。

  • 利用虚拟现实技术开发软件
  • 利用机器学习技术开发软件
  • 利用数据挖掘技术开发软件
  • 利用人工智能技术开发软件
  • 利用语音识别技术开发软件
  • 利用自然语言处理技术开发软件
  • 利用云计算技术开发软件
  • 利用增强现实技术开发软件
  • 利用物联网技术开发软件
  • 利用大数据技术开发软件
  • 利用软件工程技术开发软件
  • 利用网络安全技术开发软件
  • 利用密码学技术开发软件
  • 利用自动化技术开发软件
  • 利用机器视觉技术开发软件
  • 利用加密技术开发软件

方法论和框架

一种系统开发方法不一定适用于所有项目。

基于各种技术、组织、项目和团队考虑因素,每种可用的方法都最适合特定类型的项目

• ASD 自适应软件开发
• DevOps DevOps
• DAD 纪律性敏捷交付
• DSDM 动态系统开发方法
• FDD 驱动开发
• IID 迭代和增量开发
• Kanban 看板
• Lean SD 精益软件开发
• LeSS 大规模Scrum
• MDD 模型驱动开发
• MSF 微软解决方案框架
• PSP 个人软件过程
• RAD 快速应用开发
• RUP 统一过程
• SAFe 可伸缩敏捷框架
• Scrum 敏捷开发
• SEMAT SEMAT
• TDD 测试驱动开发
• TSP 团队软件过程
• OpenUP OpenUP
• UP 统一过程
• XP 极限编程

Microsoft Windows 组件列表

https://www.wikiwand.com/en/List_of_Microsoft_Windows_components

Microsoft Windows 应用程序编程接口和框架列表

https://www.wikiwand.com/en/List_of_Microsoft_Windows_application_programming_interfaces_and_frameworks

范例和模型

• Software engineering 软件工程
• Agile 敏捷开发
• Cleanroom 洁净室软件工程
• Incremental 增量式
• Prototyping 原型设计
• Spiral 螺旋模型
• V model V型模型
• Waterfall 瀑布模型

软件开发活动

需求识别

软件产品的创意来源非常丰富。这些想法可以来自市场调查,包括潜在新客户、现有客户、拒绝产品的销售前景、其他内部软件开发人员或有创意的第三方的人口统计数据。软件产品的想法通常首先由营销人员评估经济可行性、适合现有渠道分布、对现有产品线的可能影响、所需功能, 并符合公司的营销目标。在营销评估阶段,对成本和时间假设进行评估。根据营销和开发人员提供的更详细的信息,在第一阶段的早期就决定是否应该进一步推进该项目。

在“Great Software Debates”一书中,Alan M. Davis在“需求”一章的“软件开发缺失的部分”中指出

工程专业的学生学习工程,很少接触金融或市场营销。市场营销的学生学习市场营销,很少接触金融或工程。我们中的大多数人只会成为一个领域的专家。使事情复杂化的是,我们中很少有人在工作中遇到跨学科的人,因此几乎没有什么角色可以模仿。然而,软件产品规划对于开发成功至关重要,绝对需要多学科知识。[5]

规划过程

创建软件的一项重要任务是需求分析。客户通常对他们想要的最终结果有一个抽象的概念,但不知道软件应该做什么。技术娴熟且经验丰富的软件工程师会在此时识别不完整、模棱两可甚至矛盾的需求。经常演示实时代码可能有助于降低需求不正确的风险。

“虽然在需求阶段付出了很多努力来确保需求的完整性和一致性,但很少出现这种情况;在最小化新需求或不断变化的需求的影响时,软件设计阶段是最有影响力的阶段。需求波动具有挑战性,因为它们会影响未来或已经进行的开发工作。”

软件开发人员

软件开发人员是从事软件开发过程的个人或公司,包括研究、设计、编程、测试和创建计算机软件的其他方面。具有类似含义的个人的其他职位包括程序员、软件分析师或软件工程师。专门从事软件的公司可以称为软件公司。在一家大公司中,可能有些员工的唯一职责仅包括其中一个学科。在较小的开发环境中,几个人甚至一个人可能会处理整个过程。协作环境,例如开源软件,可以汇聚众多开发者。

Subtopics

View model

视图模型是一个框架,它提供了关于系统及其环境的观点,在软件开发过程中使用。它是一个视图的基本语义的图形表示。
观点和视图的目的是使人类工程师能够理解非常复杂的系统,并围绕专业领域组织问题的要素。在物理密集型系统的工程中,观点通常与工程组织中的能力和责任相对应。

Image in a image block

Business process and data modelling

信息现状的图形化表示为向用户和系统开发者展示信息提供了一个非常有效的手段。

业务模型说明了与被建模的业务流程相关的功能以及执行这些功能的组织。通过描述活动和信息流,为可视化、定义、理解和验证一个流程的性质打下了基础。
数据模型提供了要存储的信息的细节,当最终产品是为一个应用程序生成计算机软件代码或准备一个功能规范以帮助计算机软件的购买决策时,数据模型是主要用途。业务流程和数据模型之间互动的例子见右图。
通常情况下,模型是在进行访谈后创建的,被称为业务分析。访谈包括一个主持人提出一系列的问题,旨在提取描述一个流程的所需信息。访谈者被称为促进者,以强调是参与者提供信息。主持人应该对感兴趣的过程有一定的了解,但这并不像有一个结构化的方法那样重要,因为通过这个方法向过程专家提出问题。方法论很重要,因为通常有一个促进者团队在整个设施中收集信息,所有访谈者的信息结果在完成后必须配合在一起 。
这些模型被开发为定义流程的当前状态,在这种情况下,最终产品被称为 "现状 "快照模型,或者是流程应该包含的想法的集合,结果是一个 "可能的 "模型。流程和数据模型的生成可以用来确定现有的流程和信息系统是否健全,是否只需要轻微的修改或增强,或者是否需要重新设计作为一种纠正措施。业务模型的创建不仅仅是一种查看或自动化你的信息流程的方式。分析可以用来从根本上重塑你的企业或组织开展业务的方式。

Image in a image block
Computer-aided software engineering

计算机辅助软件工程(CASE),在软件工程领域,是将一套软件工具和方法科学地应用于软件的开发,从而获得高质量、无缺陷和可维护的软件产品。[9]它也指与可用于软件开发过程的自动化工具一起开发信息系统的方法。"计算机辅助软件工程"(CASE)一词可指用于自动化开发系统软件的软件,即计算机代码。CASE的功能包括分析、设计和编程。CASE工具将设计、记录和生产所需编程语言的结构化计算机代码的方法自动化 。
计算机辅助软件系统工程(CASE)的两个关键思想是:。

Image in a image block

在软件开发和软件维护过程中培养计算机辅助,以及

一种软件开发和维护的工程方法。

典型的CASE工具存在于配置管理、数据建模、模型转换、重构、源代码生成。

Modeling language

建模语言是任何可用于表达信息或知识或系统的人工语言,其结构由一套一致的规则定义。这些规则用于解释结构中各组成部分的含义。建模语言可以是图形的或文本的。

Programming paradigm

编程范式是计算机编程的一种基本风格,一般不受项目管理方法(如瀑布或敏捷)的支配。范式在用来表示程序元素(如对象、函数、变量、约束)和构成计算的步骤(如分配、评估、延续、数据流)的概念和抽象方面有所不同。有时,范式所主张的概念在高层系统架构设计中被合作利用;在其他情况下,编程范式的范围被限制在特定程序或模块的内部结构。例如。Grady Booch的面向对象设计(OOD),也称为面向对象分析和设计(OOAD)。Booch模型包括六个图:类、对象、状态转换、交互、模块和过程[14] 。

Outline of software development

摘自维基百科,自由百科全书

下面的大纲是对软件开发的概述和专题指南

软件开发是对软件产品的开发,它需要计算机编程(编写和维护源代码的过程),并包含一个有计划、有组织的过程,从对所需软件的构思到其最终表现。因此,软件开发可能包括研究、新开发、原型设计、修改、重用、重新设计、维护,或任何其他导致软件产品的活动。

What type of thing is software development?

Software development can be described as all of the following:

Branches of software development

History of software development

Software development participants

Software development problems

Software project management

Software development strategies

  • Offshore software R&D – provision of software development services by an external supplier positioned in a country that is geographically remote from the client enterprise; a type of offshore outsourcing.

Software development process

Activities and steps
Software development methodologies

Main article: Software development process

Agile software development

Main article: Agile software development

Supporting disciplines
Software development tools