文章目录

  • 1.1 软件开发的本质
    • 1.1.1 软件工程的本质问题
    • 1.1.2 利益相关者
    • 1.1.3 过程
    • 1.1.4 建模
    • 1.1.5 开发和集成
  • 1.2 系统规划
    • 1.2.1 SWOT
    • 1.2.2 VCM
    • 1.2.3 BPR方法
    • 1.2.4 ISA方法
  • 1.3 三级管理系统
    • 1.3.1 事务处理系统
    • 1.3.2 分析处理系统
    • 1.3.3 知识处理系统
  • 1.4 软件开发周期
    • 1.4.1 开发方法
      • 1、结构化方法
      • 2、面向对象方法
    • 1.4.2 生命周期的阶段
      • 1、业务分析(==需求分析==)
      • 2、系统设计(==体系结构设计和详细设计==)
      • 3、实现
      • 4、集成和部署
      • 5、运行和维护
      • 6、跨越生命周期的活动
  • 1.5 开发模型和方法
    • 1.5.1 螺旋模型
    • 1.5.2 IBM Rational统一过程
    • 1.5.3 模型驱动的体系结构
    • 1.5.4 敏捷软件开发
    • 1.5.4 面向方面的软件开发
  • 1.6 关键术语

1.1 软件开发的本质

1.1.1 软件工程的本质问题

体现在软件本身固有的困难中,困难包括:

固有的困难:complexity(复杂性)、conformity(一致性)、changeability(可变性)、invisibility(不可见性)

可变的困难:stakeholders(利益相关者)、process(过程)、modeling(建模)

可支持性(适应性)由3个系统特征组成的集合来定义:可理解性、可维护性(maintainability)、可伸缩性(可扩展性)

1.1.2 利益相关者

1、利益相关者是在软件项目中存在利害关系的人,主要包括两组:customers(客户)、developers(开发者)

2、信息系统是社会系统,它由人为人开发

1.1.3 过程

1、定义软件生产中使用的活动和组织程序和维护

2、一个过程模型:

  • 声明了所执行活动的次序

  • 详细说明要交付哪些开发的人工制品,以及什么时候交付

  • 将活动和人工制品分配给开发者

  • 提供用来监控项目进展、评估结果和规划未来项目的标准

3、软件过程不易于被标准化(Is not susceptible to standardization)

4、Iterative and incremental process(迭代和增量过程)

  • 现代软件开发过程总是迭代和增量的。

  • 在连续的迭代中增加细节,必要时还引入了变更和改进(迭代完发布新版本)。

  • 增量版本保持了用户的满意度,提供重要反馈(一次迭代的功能增加或减少)

    (注:增量版本并不是向软件产品增加新的功能,增量改进非功能性的软件质量,如软件的正确性、可靠性、耐用性、性能等)

  • 具有特殊意义的变体:

    • 螺旋模型(the spiral model):包含了RUP,MDA,敏捷开发模型

    • RUP(the Rational Unified Process (RUP)):提供文本,概念,开发思路

    • MDA(Model Driven Architecture (MDA)):由模型和构件生成软件

    • 敏捷开发过程(the agile development process):提出了一个框架,人与团队协作被认为比规划、文档更重要

    • 面向方面的软件开发(aspect-oriented software development):引入有关横切关注点的正交思想

5、能力成熟度模型(Capability Maturity Model,CMM)过程标准

  • 用于进行过程评估和改进的交流方法

  • 本质上是一个由IT组织填写的问卷调查表

  • 第一级:走到哪算到哪,没有特定的规则,大部分都在第一级

    第二级:可重复级,靠经验每一次用相同的方法,东软

    第三级:定义级,已经定义好了规则,不到整个软件企业总量的10%

    第四级:管理级,对整个每一步的过程增加了监控,亚马逊

    第五级:优化级,对整个过程或标准优化的策略,基本是军方企业

6、ISO9000系列质量标准 过程标准

  • 如果过程是正确的,那么结果一定是正确的,即关注产品质量问题
  • 强调必须完成什么,没强调必须怎么执行

7、ITIL框架 过程标准

  • 高效的利用4P:people、processes、products、partners
  • 致力于方案交付和管理的操作方便
  • 持续的服务改进方案(continuous service improvement programme,CSIP),用来实现解决方案管理的ITIL方法。该方案以实现高水平业务目标的决心为起点,接着检查是否达到里程碑,并通过巩固已达到的改进和持续任务循环而保持发展的势头。

8、COBIT框架 产品标准 服从框架

  • 侧重于一个组织需要做什么,而非如何去做

  • 将相关的IT工作组织到4个领域:P8

    1. 规划与组织(Plan and Organize)
    2. 获取与实现(Acquire and Implement)
    3. 交付与支持(Deliver and Support)
    4. 监控(Monitor)
  • 将控制目标分配到这些领域,有34个高级别的控制目标,它依据COBIT推荐的318个详细控制目标来评估IT过程

1.1.4 建模

1、建模几软件开发活动,是来自现实的抽象,是现实的抽象表示

2、需要开发人员在不同阶段进行沟通(language)和文档化(tools)

3、统一建模语言(UML)

  • 是一种通用的、可视化的建模语言
  • 独立于任何软件开发过程,也独立于实现技术
  • 要求:只要面向对象开发方法就行
  • 分类:
    • 状态模型(state models),类图:描述静态数据结构
    • 行为模型(behavior models),用例图,时序图,活动图:描述对象协作
    • 状态变化模型(state change models),状态图:描述随着时间的推移系统所允许的状态

4、CASE和过程改进:提高生产效率

1.1.5 开发和集成

1、developmet:开发 integration:集成

2、集成方法分为三大类型:

  • 面向信息和/或门户的集成

    • 面向信息的集成:依赖于源应用系统之间的信息交换,是在数据库或应用程序接口层次上的集成,这种集成使得信息具体化
    • 面向门户集成:是一种特殊的面向信息的集成,将来自多个软件系统的信息具体化到一个共同的用户界面
    • 区别:面向信息的集成关注信息的实时交换,面向门户则需要对来自后台系统的具体化的信息进行人为干预
  • 面向接口的集成:将应用接口(通过接口抽象定义的服务)连接在一起。接口显示了一个应用系统向其他应用系统所提供的有益服务。

  • 面向过程的集成:将应用系统连接在一起,方法是在现有应用系统的已有过程集和数据集的顶部定义一个新的过程层。

1.2 系统规划

可以通过各种策略规划、业务建模、业务过程重组、策略调整、信息资源管理或诸如此类的过程决定业务策略,目的是为业务确定长远洞察力,然后优先考虑能够通过使用信息技术而得以解决的业务问题。

包括SWOT、VCM、BPR、ISA,它们关心效果 effectiveness(做正确的事)而不是效率 efficiency(做事正确)

1.2.1 SWOT

优势、劣势、机会、威胁

1、strength、weakness、opportunity、threat

2、通过调整组织优势、劣势、机会和威胁的方式来进行IS开发项目的识别、分类、排序和选择。这是一个从确定组织使命开始的、自顶向下的方法。

3、使命陈述捕获一个组织的独特性质,并详细说明它未来的愿景,良好的使命陈述重点在于客户的需要

4、使命陈述和根据它开发的业务策略考虑了公司的内部优势和劣势,对内部的企业优势和劣势的识别是成功业务规划的必要条件,而不是充分条件。

5、实质是看清自己,内因:优势劣势, 外因:机遇挑战

6、得到SWOT矩阵,基于每一个问题细化目标,得到策略

7、具体目标来自于长远目标

1.2.2 VCM

—价值链模型

1、服务 是VCM方法的基本活动

2、通过分析组织中完整的活动链(从原材料到销售及运送给客户的最终产品)来评估竞争优势

3、目的是理解哪种价值链配置将产生最大竞争优势

4、在最初的VCM方法中,组织的职能分为基础活动和支持活动

5、主要(基本)活动:对最终产品追加价值 they create or add value to a final product,如教学培养计划

分为五个阶段:

  • 内部物流——接受对产品或服务的投入
  • 操作——使用投入来创造产品或服务
  • 外部物流——将产品和服务卖给买家
  • 销售和市场(∈基本活动)——引导买家购买产品或服务
  • 服务——维护或提高产品或服务的价值

6、支撑(支持)活动:不对最终产品直接产生价值,至少不直接增加价值,它们仍然基础却不丰富产品,they are essential but they do not enrich the product,如学生食堂

1.2.3 BPR方法

—业务过程重组

1、前提:当今的组织必须彻底的改造自己,并丢弃那些正在使用的功能分解、层次结构、操作原则

2、主要目的:从根本上重新设计业务过程。必须对业务过程进行识别、流程化和改进。在工作流图中对过程文档化,并经历工作流分析。

3、业务过程被定义为“采取一种或多种输入、并创造对客户有价值的输出的活动集合”,组织必须关注业务过程,

“过程企业和传统组织最明显的区别是过程所有者的存在”

1.2.4 ISA方法

—信息系统体系结构

1、是一种自底向上的方法,它为能够适应各种业务策略的IS解决方案提供一种中立的系统结构框架。

2、ISA框架被描述成一个具有30个单元的表格,5行6列

  • 行表示用于复杂工程产品够坚定不同视角,主要是5个参与者:

    • 规划者
    • 所有者
    • 设计者
    • 建造者
    • 承包者
  • 列表示每个参与者从事的6种不同的描述或体系结构模型,提供了很关键的六个问题的答案:
    • 这件事由什么构成?
    • 这件事如何起作用?
    • 这件事位于何处?
    • 谁与这件事一起工作?
    • 这件事何时发生?
    • 这件事为何发生?

1.3 三级管理系统

一个组织具有三级管理:策略级(Strategic)、战术级(Tactical)、操作级(Operational)

决策级别 决策焦点 典型IS应用 典型IT解决方案 关键概念
策略级 支持组织长期目标的策略 市场和销售分析、产品规划、性能评估 数据挖掘、知识管理 知识
战术级 支持短期目标和资源分配 预算分析、薪酬预测、客户服务 数据仓库、分析处理 信息
操作级 员工的日常活动和生产支持 发薪、发货、采购、财务 数据库、事务处理 数据

注:提供最大回报的IS应用和IT解决方案——策略级

常规系统——支持操作管理级、使用常规数据库

  • 关键概念:知识、信息、数据
关键概念 定义 实例
知识 设计业务活动的价值、质量、概念、事件的原始事实 如何使用分组信息引导客户买东西
信息 增值事实 根据地区为电话号码分组
数据 对信息的理解,由经验或研究获得 电话号码

1.3.1 事务处理系统

在决策操作级上的系统主类是**OLTP系统**(OnLine Transaction Processing)

数据库

事务管理的两个主要功能:并发控制和从故障中恢复

1.3.2 分析处理系统

1、处于决策的战术级的主要系统是**OLAP系统**(OnLine Analytical Processing)

2、分析处理系统与**数据仓库技术**联系在一起。

  • 数据仓库(data warehouse)的创建方式通常是在一个或多个事务数据库中提取的数据增量拷贝。
  • 数据仓库总是增加新数据,不移除历史数据。
  • 数据仓库的独特特征——对数据的汇总和封装,目的是给源系统提供的数据增加价值

3、数据集市(data mart)——主要保存被汇总的历史数据

4、新兴趋势——Data webhouse

1.3.3 知识处理系统

1、处于策略战略级的主要系统是知识处理系统。更强调预测性,从已知得到未知

2、**数据挖掘(datamining)**属于知识管理领域,其主要目的:

  • 关联(路径分析)——在数据中发现一个事件导致另一个相关事件发生的模式

  • 分类classification——发现某事实是否落入预定、感兴趣的类别中

  • 聚类clustering——与分类相似,但种类未知,它们由聚类方法发现

3、用于数据挖掘的数据主要来源于数据仓库,而不是操作型数据库

1.4 软件开发周期

软件开发存在生命周期,生命周期是活动的有序集合,过程和方法就是生命周期的实现工具,包括:

  • 应用建模方法
  • 在软件产品被转化的序列中的精确阶段
  • 方法和相关开发过程

1.4.1 开发方法

1、结构化方法

也称为功能性、过程性和强制性方法

  • 基于系统建模两种技术:(没有UML!!!!)

    • 为过程建模而使用的数据流图——DFD
    • 为数据建模而使用的实体关系图——ERD
  • 以过程为中心,使用DFD作为开发的驱动力
  • 在该方法中,系统在**功能分解活动**中被分解为可管理的单元
  • 不适于现代软件开发原因:
    1. 结构化方法是顺序,转换的方法,而不是迭代增量的方式,现代软件要求迭代增量
    2. 写好的软件不可变无弹性,即很难对业务功能集进行扩展和沿伸,重用性差
    3. 基本上所有的软件从零开始写,不支持已存在构件的复用

2、面向对象方法

  • 1970s存在,1990s开始流行
  • 将系统分解为不同粒度的构件
  • UML
  • 以数据为中心,在分析阶段不需要定义类的操作,只需要定义类的属性,遵循迭代增量的过程
  • 问题:
    • 理解较困难,结构较复杂,分析阶段在一个相当高的抽象层面进行
    • 数据库大多数是关系型数据库,怎么把对象存在数据库里
    • 项目管理更加困难

1.4.2 生命周期的阶段

—测试贯穿整个周期

分为五个阶段:

  • 业务分析(Business Analysis):专注于系统需求

  • 系统设计(System Design):分为体系结构设计和详细设计

  • 实现(Implementation):由对客户端应用程序和服务器数据库的编码活动组成,强调了迭代增量

  • 集成和部署(Integration and Deployment)

  • 运行和维护(Operation and Maintenance)

1、业务分析(需求分析)

——整个生命周期最重要的阶段,没有模块的概念

  • 主要目的:获取需求
  • 两个阶段:
    • 获取和确定业务需求,需要业务分析人员(可以没有软件开发背景,需要与人良好沟通)
    • 将业务需求逻辑转换为系统逻辑,对需求进行详细说明或建模,需要系统分析员
  • 需求确定determination
    • 服务陈述

      • Business rule,系统的业务规则,如两周发一次工资
      • Computation,系统计算过程,如怎么发这个工资,根据前两周销售业绩发工资
    • 约束陈述
      • 使用约束——使用时给的限定,如选课时每个人只能查看自己的账号信息
      • 开发约束——与系统开发过程所需要软硬件平台的约束
  • 需求获取specification规格说明
    • 建模方法和工具:

      • case工具
      • 需求文档
    • 最重要的两个规格说明技术
      • 类图(描述系统的对象及对象间的关系,静态数据结构),需求分析阶段得不到完整类图
      • 用例图

在理想状态下,需求分析阶段可以与软硬件平台无关,且非功能性需求在用例图和类图中无法描述

2、系统设计(体系结构设计和详细设计)

  • 架构设计Architectural design——根据模块(构件)进行的系统描述

    • 选择一个解决方案的策略,比如用哪个版本的数据库
    • 系统模块的划分
    • 客户机服务器模型经常被扩展为三层体系结构,中间层是逻辑层,实现为动态链接库。
    • 一个良好的体系结构设计会产生可适应(支持)的系统——即可理解、可维护、可升级的系统
  • 详细设计Detailed design——软件构件内部运行的描述
    • 考虑模块内部的工作过程,如确定需要哪些数据结构(类图描述),算法(伪代码描述)

3、实现

  • 涉及所购买软件的安装和客户定制软件的编码
  • 典型情况下分为两组程序员:一组负责客户端编程,一组负责服务器数据库编程
  • 成果:可运行的程序代码

4、集成和部署

桩的概念与集成和部署阶段联系在一起

5、运行和维护

  • 操作:把系统交给用户进行实际使用

  • 维护三个阶段

    • 内务处理(日常维护)——以保持系统的可访问性和可操作性
    • 适应性维护——对系统运行的监控和审核,对系统的功能进行调整,以满足变化的环境
    • 完善性维护——让系统越变越好2.0

6、跨越生命周期的活动

  • 项目规划、度量、测试跨越了开发生命周期,非独立生命周期阶段

  • 项目计划project Planing

    • 最终软件产品交付什么,花费,时间,风险,里程碑,资源分配,也包括开发方法、过程、工具、标准和团队组织的选择。
    • 典型的约束是时间和费用——每个项目都有清晰的期限和紧张的预算
  • 度量评估Metrics——测量开发时间,工作量等

    • 常常在软件质量和复杂性的范围内讨论度量
    • 用于测量正确性、有效性,完整性,可用性,可维护性,灵活性,可测试性等测量因素
    • 度量还可以在生命周期的不同阶段测量开发模型,评估过程的效果并改善工作质量。
  • 测试Testing——跨越整个软件生命周期的一项活动,系统涉及一点变化就需要测试

    • 基于执行的测试

      • 规格说明测试
      • 代码测试

1.5 开发模型和方法

现代开发过程是迭代和增量的,一个项目由许多迭代组成,每一次迭代交付一个软件的增量版本。

增量改进了系统的功能性、可用性、性能及其他特性,但是并不改变系统的范围。

各种具有代表性的模型及方法为了迭代和增量开发而存在,重要且流行的模型及方法包括:

  • 螺旋模型
  • IBM Rational统一过程(RUP)
  • 模型驱动的体系结构(MDA)
  • 敏捷软件开发
  • 面向方面的开发

1.5.1 螺旋模型

1、是所有迭代和增量开发过程的事实上的参考模型

2、该模型将软件工程活动置于系统规划、风险分析、客户评估、工程,创建了笛卡尔图中的螺旋式循环

  • 系统开发开始于规划活动,包括可行性研究、最初的需求收集、定义预算
  • 接下来进入风险分析,负责决定是否进入下一个象限,这个决定是风险驱动的
  • 工程象限处理实际的开发成果
  • 在项目进入下一个迭代之前要进行用户评估。

1.5.2 IBM Rational统一过程

1、IBM Rational统一过程(RUP)被定义为一个软件开发过程平台

2、RUP在二维关系中组织项目:

  • 横向——代表每个项目迭代的4个连续阶段

    • 初始
    • 细化
    • 构造
    • 转换
  • 纵向——代表软件开发领域
    • 业务建模
    • 需求
    • 分析和设计
    • 实现
    • 测试
    • 配置及变更管理的部署和支持活动
    • 项目管理和环境

3、RUP像螺旋模型一样强调迭代开发和早期的、持续的风险分析的重要性

4、RUP具有普遍适用性,但是也使用了IBM retional软件开发工具为团队提供特别指导

1.5.3 模型驱动的体系结构

1、MDA是一个可执行建模和从规格说明生成程序的框架

2、MDA旨在得到与平台无关的模型,包括系统状态和行为的完全规格说明

3、在下一步骤中,MDA提供了工具和技术来创建特定平台的模型

4、基于UML,利用模板

1.5.4 敏捷软件开发

1、提出了“轻量级”方法,短周期完成,越快越好;适合小团队

2、是迭代增量过程,典型的生命周期阶段被替换为——用户故事、验收测试、重构、测试驱动开发、持续集成

  • 用户故事:与需求分析相对应,故事列出了用户对于开发中的系统应支持的特征所持的观点
  • 验收测试:程序的规格说明,必须通过该测试来满足用户需求
  • 测试驱动开发:编写程序来通过验收测试,导致了策划编程(intentional programming)——在开始为程序编码前具体指定验收测试中程序想要获得的能力。
  • 重构:是改进代码的活动
  • 持续集成:由于周期短,意味着代码与已存在代码持续集成,在两周结束之后所集成的代码是次要交付,三个短周期之后为主要交付

1.5.4 面向方面的软件开发

1、Aspect-oriented Programming(AOP)

2、适用于功能上有区别但是大部分相同的软件

3、主要目标:通过识别所谓的横切关注点,以及为这些关注点生产独立的软件模块来生产出更加模块化的系统,这些模块称为方面,利用方面编排的过程将方面集成起来。

4、面向方面的开发正是应用迭代和增量过程来生产适应性软件的另一种方式

1.6 关键术语

英文 中文 英文 中文
adaptiveness 适应性 OLAP 联机分析处理
architecture 体系结构 OLTP 联机事务处理
BPR 业务过程重组 OMG 对象管理组织
case 计算机辅助软件工程 RUP Rational统一过程
CMM 能力成熟模型 SOA 面向服务的体系结构
COBIT 信息控制目标和相关技术 stakeholder 利益相关者
data mart 数据集市 SWOT
datamining 数据挖掘 UML 统一建模语言
data webhouse VCM 价值链模型
DFD 数据流图
ERD 实体关系图
ERP 企业资源规划系统
increment 增量
ISA 信息系统体系结构
ISO 国际化标准组织
iteration 迭代
ITIL
lifecycle 生命周期
MDA 模型驱动的体系结构

(一)软件过程(持续更新)相关推荐

  1. s-systemtap工具使用图谱(持续更新)

    整体的学习思维导图如下,后续持续更新完善 文章目录 安装 简介 执行流程 执行方式 stap脚本语法 探针语法 API函数 探针举例 变量使用 基本应用 1. 定位函数位置 2. 查看文件能够添加探针 ...

  2. swift 错误集合 ------持续更新中

    从今天开始凡是在用swift中遇到的错误都会在本博客持续更新 便于自己学习和快速开发 2017.7.20 如果你的程序写的有进入后台的方法,例如我的博客中点击home进入后台持续定位的那篇文章,发信进 ...

  3. 快应用开发常见问题以及解决方案【持续更新】

    接触快应用也有一段时间了,踩过了大大小小的坑,让我活到了今天.准备在此立贴持续更新,记录遇到的问题以及解决方案,造福大众. css 方面 1.文字竖排不支持 目前官方还不支持writing-mode, ...

  4. Java 最常见的 10000+ 面试题及答案整理:持续更新

    Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...

  5. UDP 构建p2p打洞过程的实现原理(持续更新)

    UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55)   阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创 ...

  6. 大四狗找工作,持续更新

    持续更新中.... 转载于:https://www.cnblogs.com/Wiki-ki/p/3979176.html

  7. 中date转为string_股票数据获取篇(持续更新中...)

    这是第一篇量化交易学习文,心里还是有点忐忑,毕竟自己不是金融人士,金融业务能力匮乏,所以从最简单的数据获取入手,各种概念各种策略还在学习中.回测框架选择backtrader,因为网上对此框架的评价甚高 ...

  8. QT 实用代码片段 (持续更新)

    由于项目需要开始转型学习C++,GUI使用QT进行开发,开发过程中踩了不少坑,但是也积累了些宝贵经验,在这儿记录一下,希望能帮到需要的朋友. 1.设置无边框对话框 //设置对话框属性 setWindo ...

  9. linux环境变量管理器,运维 - linux(ubuntu) 环境变量管理 (持续更新)

    运维 - linux(ubuntu) 环境变量管理 (持续更新) 注: 本教程以 Ubuntu16.04 操作, 请细看. 如果看完还不明白, 联系我, 我给你发红包. 一, 查看环境变量: 方法 1 ...

  10. linux运维常用命令一句话(持续更新中)

    整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

最新文章

  1. 转:FMS 3.5之Hello World!
  2. 怎样让elementui表格里面的文字不换行,溢出隐藏,tooltip显示内容
  3. php如何逐条读取数据库,php从数据库中读取特定的行(实例)
  4. iOS---------- MBProgressHUD (1.0.0)的变动
  5. 自动驾驶_感知_目标检测(基于图像)
  6. 2017/2/25 学习笔记
  7. HTML 动画(一)
  8. 物联网平台建设调研报告
  9. 三剑客python自学笔记--02
  10. 2020中国汽车后市场白皮书
  11. 迁移数据到历史表SQL
  12. k8s之炉火纯青之pinpoint链路追踪
  13. 用JSP/Servlet应用开发一个简单的考试报名系统
  14. 最近似乎都没怎么自学,觉得很愧疚,慎独真的很重要
  15. Oracle Solaris 10图文安装
  16. 【暴力枚举】【JAVA】P1149火柴棒数
  17. 伸缩自如的时光轴实现
  18. 超级电容器可以消除传感器节点的功率需求
  19. pandas与excel生成户籍编号
  20. numpy矩阵与通用函数

热门文章

  1. 1、综合布线工程常用设备材料介绍及施工注意事项
  2. 如何破Akamai1.75 akami v2 akamai;
  3. 计算机 电脑 整机 加密,教您如何为计算机文件夹设置密码
  4. 物联网平台 源码 智慧农业物联网平台 ,支持mqtt,h ttp,coap协议 java+postgresql,支持集群
  5. 图片怎么加水印?这些软件你知道吗?
  6. jquery图片水平不完全伸缩特效
  7. D. Boboniu Chats with Du(Codeforces Round #664 (Div. 2) )
  8. STM32G431+P-NUCLEO-IHM03开发套件调试2(p-nucleo-ihm03套件)
  9. 【总结】SQL Server Severity (错误严重性级别)
  10. linux系统包括虚拟终端图形界面终端有,Linux默认具有多个虚拟终端