【系统分析师】软件需求工程——第11章学习笔记(上)

软件需求工程是包括创建和维护软件需求文档所必需的一切活动的过程。

可分为两大工作:

  • 需求开发
    • 需求获取
    • 需求分析
    • 需求定义(编写需求规格说明书)
    • 需求验证
  • 需求管理
    • 定义需求基线
    • 处理需求变更
    • 需求跟踪

在需求开发阶段需要确定软件所期望的用户类型,获取每种用户类型的需求,了解实际的用户任务和目标,以及这些任务所支持的业务需求。同时还包括分析源于用户的信息,对需求进行优先级分类,将所收集的需求编写成需求规格说明书和需求分析模型,以及对需求进行评审等工作。

11.1 软件需求概述

11.1.1 需求的层次

简单地说,软件需求就是系统必须完成的事以及必须具备的品质。

需求是多层次的,包括业务需求、用户需求和系统需求,这三个不同层次从目标到具体,从整体到局部,从概念到细节。

  • 业务需求
    • 反映企业或客户对系统高层次的目标要求,通常来自项目投资人,购买产品的客户,客户的管理人员,市场营销部门或产品策划部门等
  • 用户需求
    • 描述用户的具体目标,或用户要求系统必须能完成的任务
  • 系统需求
    • 从系统的交付说明软件的需求,包括功能需求(行为需求),非功能需求,设计约束等

11.1.2 质量功能部署

质量功能部署(Quality Function Deployment,QFD)是一种将用户要求转化成软件需求的技术,其目的是最大限度地提升软件工程过程中用户的满意度。

为了达到这个目标,QFD将软件需求分为三类:常规需求、期望需求和意外需求。

  • 常规需求。
    • 用户认为系统应该做到的功能或性能,实现越多用户会越满意
  • 期望需求。
    • 用户想当然认为系统应具备的功能或性能,但并不能正确描述自己想要得到的这些功能或性能需求。如果期望需求没有得到实现,会让用户感到不满意。
  • 意外需求。
    • 意外需求也称为兴奋需求,是用户要求范围外的功能或性能(但通常是软件开发人员很乐意赋予系统的技术特性),实现这些需求用户会更高兴,但不实现也不影响其购买的决策。

11.1.3 软件需求

软件包含以下方面的内容:

  • 用户解决问题或达到目标所需条件或权能。
  • 系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或权能。
  • 一种反映上面(1)或(2)所述条件或权能的文档说明,即需求规格说明。它包括功能性需求及非功能性需求,非功能性需求对设计和实现提出了限制,比如性能要求、质量标准或者设计限制。

在统一过程(UP)中,需求按照“FURPS+”模型进行分类。“FURPS+”中的“FURPS具体指以下需求:

  • 功能性(Functional):特性、功能、安全性
  • 可用性(Usability):人性化因素、帮助、文档。
  • 可靠性(Reliability):故障频率、可恢复性、可预测性。
  • 性能(Performance):响应时间吞吐量、准确性、有效性、资源利用率。
  • 可支持(Sptability):适应性、可维护性、国际化、可配置性。

“FURPS+”中的“+”是指一些辅助性的和次要的因素,用来强调各种不同的属性。比如:

  • 实现(Implementation):资源限制、语言和工具、硬件等。
  • 接口(Interface):强加于外部系统接口之上的约束。
  • 操作(Operation):对其操作设置的系统管理。
  • 包装(Packaging):例如物理的包装盒。
  • 授权(Legal):许可证或其他方式。

11.1.4 需求工程

人们逐渐意识到需求分析活动不仅限于软件开发的最初阶段, 它贯穿于系统开发的整个生命周期。

需求工程是指:应用已证实有效的原理,方法,通过合适的工具和几号,系统地描述开发系统及其行为特征和相关约束。

主要被划分为以下几个阶段:

  • 需求获取
  • 需求分析
  • 形成需求规格(需求文档化)
  • 需求确认与验证
  • 需求管理

11.2 需求获取

11.2.1 用户访谈

最基本的一种需求获取手段。其形式包括结构化和非结构化两种。

  • 结构化是指事先准备好一系列问题,有针对地进行
  • 非结构化是列出一个粗略的想法, 根据访谈的具体情况发挥。

系统分析师需要再三个方面进行组织:准备访谈,主持访谈,访谈的后续工作

  • 准备访谈
    • 确定访谈的目的
    • 确定包括哪些用户
    • 准备一些详细的问题
      • 开放式
      • 封闭式
    • 作出最终的访谈安排,并通知所有参与者
  • 主持访谈
    • 限制访谈时间
    • 寻找异常和错误情况
    • 深入调查细节
    • 认真记录
  • 访谈的后续工作
    • 吸收,理解,记录访谈所获得的信息

11.2.2 问卷调查

可以收集到大量的信息,以低廉的代价短时间内收集到大量的回答,但缺乏灵活性

最好的做法事先问卷调查,进行仔细整理和分析,针对结果进行小范围用户访谈。

11.2.3 采样

从种群中系统地选出有代表性的样本集的过程,通过认真研究所选出的样本集,可以从整体上揭示种群的有用信息。这里,系统的文档就是采样种群。

选择样本的方式有随机采样,分层采样,聚类采样,系统采样等

采样不仅可以用于收集数据,还可以采集访谈用户或者采集观察用户。

11.2.4 情节串联板

很多用户对信息系统没有直观认识,这样也很容易产生盲区,这时候,需要系统分析师用情节串联版技术来帮助用户消除盲区

情节串联版通常是一些列图片,系统分析师通过图片来讲故事。比如流程图,交互图,报表等

类型包括被动式,主动式,交互式,其复杂程度依次递增

  • 被动式
    • 草图,图片,PPT,系统分析师简述场景
  • 主动式
    • 看到类似“电影”内容,自动播放,自动简述
  • 交互式
    • 用户亲自体验,比如仿真器,实物模型,抛弃式原型。

优点:直观,生动,用户友好,交互性强

缺点:花费的时间很多,需求获取速度大大降低

11.2.5 联合需求计划

联合需求计划(Joint Requirement Planning,JRP)是一个通过高度组织的群体会议来分析企业内的问题并获取需求的过程,它是联合应用开发(JointApplicationDevelopment,JAD)的一部分。

联合应用开发

JAD是以小组形式定义和建立系统的,它是由企业主管部门经理、会议主持人、用户、协调人员、IT 人员、秘书等共同组成的专题讨论组。由这个专题讨论组来定义并详细说明系统的需求和可选的技术方案。JAD的过程大致如下:

  • 确定JAD项目,主要指确定系统的范围和规范。
  • 在JAD 专题预备会上,会议主持人向参与者介绍项目和JAD专题讨论内容
  • 准备JAD专题讨论材料。
  • 进行JAD专题讨论会,其目的是要达成对需求的一致意见,并对各种可选的技术方案加以过论从由研究出几有可供选择的方案

JRP会议

联合需求计划(Joint Requirement Planning,JRP)是一种相对来说成本较高的需求获取方法,但也是一种十分有效的方法。

它通过联合各个关键用户代表、系统分析师、开发团队代表,通过有组织的会议来讨论需求。通常该会议的参与人数为6~18人,召开时间为1~5h。

在会议之前,应该将与讨论主题相关的材料提前分发给所有将要参加会议的人。在会议开始之后,按照以下步骤进行:

  • 应该花一些时间让所有的与会者互相认识,以使交流在更加轻松的气氛下进行。会议开始时,针对所列举的问题进行逐项专题讨论。
  • 对现有系统和类似系统的不足进行开放性交流。鼓励与会者在短时间内说出尽量多的想法,在这一过程中不对这些想法发表任何评论。
  • 大家在此基础上对新的解决方案进行一番设想,在这个过程中,需要把这些想法、问题、不足记录下来,形成一个要点清单。
  • 针对这个要点清单进行整理,明确优先级,并进行评审

主要原则

JRP的主要意图是收集需求,而不是对需求进行分析和验证。

实施IP时应把握以下主要原则:

  1. 在JRP实施之前,应制定详细的议程,并严格遵照议程进行。
  2. 按照既定的时间安排进行。
  3. 尽量完整地记录会议期间的内容。
  4. 在讨论期间尽量避免使用专业术语。
  5. 充分运用解决冲突的技能。
  6. 会议期间应设置充分的间歇时间。
  7. 鼓励团队取得一致意见。
  8. 保证参加 JRP的所有人员能够遵守事先约定的规则。

JRP将会起到群策群力的效果,对于一些最有歧义的问题、需求最不清晰的领域都是十分有用的一种方法。

这种方法最大的难度是会议的组织和相关人员的能力,要做到言之有物,氛开放,否则,将难以达到预想的效果。

11.2.6 需求记录技术

在开发过程中,有时候进行需求获取的人员和进行需求分析的人员不是同一个人(部门),因此,需要统一需求记录工具,以便所有人的获取结果是统一口径的。

任务卡片

各个项目的内容及解释如图11-1:

任务卡片还有一个增强版,如图11-2,增加问题点描述和解决方案提示

场景说明

有时候,很难总结出子任务和任务变体,因为需要对任务执行过程进行抽象,这时候可以用场景说明来对用户的描述进行整理。

场景说明就是用户对其工作场景和过程的详细描述。

用户故事

描述对用户有价值的功能,包含书面描述(用于计划和备忘),交谈(细化故事)和测试用例(验证故事实现)。在任何项目中,需要用户团队根据故事的重要性来安排开发工作,回答所有开发问题,编写所有的故事。在编写故事之前应该建立用户角色模型,必须包含对项目成功至关重要的角色,尽量保证所有用户对系统完全满意。
用户故事具有6个基本属性:独立性、可协商性、对用户有价值、可预测性、短小精悍和可测试性。

  • 独立性。
    • 尽可能避免故事之间存在依赖关系,因为依赖关系会产生优先级和规划问题
  • 可协商性。
    • 故事是可协商的,不是必须实现的书面合同或者需求。
  • 对用户有价值。
    • 确保每个故事对用户有价值的最好方式是让用户编写故事。
  • 可预测性。
    • 系统分析师应该能够预测(至少大致猜测)故事的规模,以及实现所需要的工作量。
  • 短小精悍。
    • 故事规模对实现有影响,哪种故事规模最合适,取决于开发团队的规模和能力,以及技术实现等方面。
  • 可测试性。
    • 所编写的故事必须是可测试的。

Volere白卡

一种类似于任务卡片的需求记录工具

用户故事和白卡定位的是最小的需求项,因此在实际应用中会导致量比较大,一般在敏捷方法中使用。

11.3 需求分析

将杂乱的用户需求整理成好的需求(具有二义性,完整性,一致性,可测试性,确定性, 可跟踪性,正确性,必要性等特性)

11.3.1 需求分析的任务

把用户对开发软件提出的要求进行分析整理,确认后形成描述完整,清晰与规范的文档。

11.3.2 需求分析的方法

分析的方法有很多比如

  • 结构化分析(Structured Analysis,SA)方法
  • 面向对象的分析(Object-Oriented Analysis,OOA)方法
  • 面向问题域的分析(Problem Domain Oriented Analysis,PDOA)方法。

PDOA

与 SA 方法和 OOA方法相比,PDOA方法更多地强调描述,而较少强调建模。它的描述大致分为以下两个部分:

  • 关注问题域。用一个文档对含有的问题域进行相关的描述,并列出需要在该域中求解的问题列表,也就是需求列表。只有这个文档是在分析时产生的。
  • 关注解系统(即系统实现)的待求行为。用一个文档对解系统的待求行为进行描述该文档将在需求定义阶段完成。

在 PDOA方法中,对整个过程有着清晰的定义:

  • 收集基本的信息并开发问题框架,以建立问题域的类型。
  • 在问题框架类型的指导下,进一步收集详细信息,并给出一个问题域相关特性的描述。
  • 基于以上两点,收集并用文档说明新系统的需求。

从上面的描述中可以看出,问题框架是PDOA的核心元素,是将问题域分为一系列相互关联的子域,而一个子域可以是那些可能算是精选出来的问题域的一部分。

也可以把问题框架看作是开发上下文范围关系图,但不同的是,上下文范围关系图的建模对象是针对解系统,而问题框架则是针对问题域。

也就是说,问题框架的目标就是大量地获取更多有关问题域的信息。

方法的对比

SA 方法关注于功能的分层和分解,这非常符合人们自上而下、逐步分解问题直到可解决的思考方式。

SA方法本身隐含着几个基本假设,即问题域是可定义的、问题域是有限的、通过有限的步骤总可以将复杂问题分解到可解决的程度。SA方法应用的是科学方法中的因果律、归纳法和逻辑法,通过对现实世界中的问题域进行不断的“测量”和“分解”,直到得到问题域的逻辑模型。


OOA 方法则遵循完全不同的思维方式,它基于抽象、信息隐藏、功能独立和模块化这些基本理念对系统进行分析。OOA方法首先对问题域的事物的“外在表象”进行观测,然后在逻辑世界中模拟出一个对应的逻辑对象,“断定”该对象和现实事物是一致的。随后,观测到的对象被记录入对象集合,观测到的行为和表象被记录入对象关系模型和对象行为模型。OOA方法建立的对象彼此之间通过接口来相互沟通,每传递一个消息即触发一个事件,并引起内部方法的执行。只有观测对象内部的时候,才能看到具体的属性和方法。否则,只能看到对象对外部开放的接口。


SA方法假定系统分析师理解问题域的全部,并且有能力正确地识别和分解问题。

而OOA方法既不假定系统分析师理解问题域的全部,也不假定其能够建立正确的抽象对象,它只承诺一种可以持续“观测并理解”的方法,以及“观测后建立”的对象和现实世界的外在表象是一致的。

11.4 结构化分析方法

基本思想:自顶向下,逐层分解,把大问题分解成一个个小问题

SA方法分析模型的核心是数据字典,围绕这个核心,有三个层次的模型,分别是数据模型、功能模型和行为模型(也称为状态模型)。

在实际工作中,一般使用E-R图表示数据模型,用DFD表示功能模型,用状态转换图(State Transform Diagram,STD)表示行为模型。

这三个模型有着密切的关系,它们的建立不具有严格的时序性,而是一个迭代的过程。

11.4.1 数据流图

DFD是SA方法中的重要工具。可以被认为是一个系统模型。

DFD的主要作用

  • DFD是理解和表达用户需求的工具,是需求分析的手段。由于DFD简明易懂,不需要任何计算机专业知识就可以理解它,因此,系统分析师可以通过DFD与用户进行交流。
  • DFD概括地描述了系统的内部逻辑过程,是需求分析结果的表达工具,也是系统设计的重要参考资料,是系统设计的起点。
  • DFD作为一个存档的文字材料,是进一步修改和充实开发计划的依据。

DFD的基本符号

  • 数据流
    • 有名字的箭头
  • 加工
    • 对数据流的变换,一般用圆圈
  • 数据存储
    • 一般用直线段表示
  • 外部实体(数据源以及数据终点)
    • 系统之外的生产者或消费者,不能由计算机处理的部分

DFD的层次

SA方法的思路是依赖于DFD进行自顶向下的分析。

顶层图:

系统最高层结构的DFD。将整个待开发的系统表示为一个加工,将所有的外部实体和进出系统的数据流放在一张图中。

逐层分解

加工的编号,将以1,2,3为序列展开。对0层图上的加工进行再分解,称之为1层图,其编号规则是:1. 1, 1.2, 1.3.......

如何画DFD

DFD的绘制是一个自顶向下、由外到里的过程,通常按照以下几个步骤进行:

  1. 画系统的输入和输出:
    1. 在图的边缘标出系统的输入数据流和输出数据流。这一步其实是决定研究的内容和系统的范围。
  2. 画 DFD的内部:
    1. 将系统的输入、输出用一系列的处理连接起来,可以从输入数据流画向输出数据流,也可以从中间画出去。
  3. 为每一个数据流命名:
    1. 命名的好坏与DFD的可理解性密切相关,应避免使用空洞的名字。
  4. 为加工命名:
    1. 使用动宾短语为每个加工命名。

每画好一张 DFD,就需要进行检查和修改,检查和修改的原则如下:

  • DFD中的所有图形符号只限于前述4种基本图形元素,图上每个元素都必须有名字。
  • 每个加工至少有一个输入数据流和一个输出数据流,而且要保持数据守恒。也就是,一个加工的所有输出数据流中的数据必须能从该加工的输入流中直接获得,或者通过该加工能产生的数据。一个加工的输出数据流不应与输入数据流同名,即使它们的组成完全相同。
  • 在 DFD中,须按层给加工编号。编号表明了该加工处在哪一层,以及上下层的父图与子图的对应关系。
  • 规定任何一个 DFD 子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。
    • 这就是父图与子图的平衡。也就是说,父图中的某加工的输入/输出数据流必须与它的所有子图的输入/输出数据流在数量上和名字上相同。值得注意的是,如果父图中的一个输入/输出数据流对应于子图中的几个输入/输出数据流,而子图中组成这些数据流的数据项的全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
  • 在整套DFD中,每个数据存储必须既有读的数据流,又有写的数据流。但是在某张子图中,可能只有读没有写,或者只有写没有读。
  • 可以在 DFD 中加入物质流,帮助用户理解DFD,但不可夹带控制流。

11.4.2 状态转换图

大多数业务系统是数据驱动的,所以适合使用DFD。但是,实时控制系统却主要是事件驱动的,因此,行为模型是最有效的描述方式。

STD通过描述系统的状态和引起系统状态转换的事件,来表示系统的行为。此外,STD还指出了作为特定事件的结果将执行哪些动作(例如,处理数据等)。状态是任何可以被观察到的系统行为模式,每个状态代表系统的一种行为模式。

在STD中,用圆形框或椭圆框表示状态,通常在框内标上状态名。状态规定了系统对事件的响应方式。系统对事件的响应可以是做一个(或一系列)动作,也可以是仅仅改变系统本身的状态。

STD描述了系统如何在各种状态之间移动。事件是在某个特定时刻发生的事情,它是对引起系统从一个状态转换到另一个状态的外界事件的抽象。例如,内部时钟指明某个规定的时间段已经过去,鼠标移动或单击等都是事件。简而言之,事件就是引起系统状态转换的控制信息。

在 STD 中,从一个状态到另一个状态的转换用箭头线表示,箭头表明转换方向,箭头线上标上事件名。必要时可在事件名后面加上方括号,括号内写上状态转换的条件。也就是说,仅当方括号内所列出的条件为真时,该事件的发生才引起箭头所示的状态转换。图11-7给出了一个在线课程学习的 STD 示例。

STD 既可以表示循环运行过程,也可以表示单程生命期。当描述循环运行过程时,通常不关心循环是怎样启动的。当描述单程生命期时,需要标明初始状态(简称为“初态”,系统启动时进入初始状态)和最终状态(简称为“终态”,系统运行结束时到达最终状态)。

在STD中,初始状态用实心圆表示,最终状态用一对同心圆(内圆为实心圆)表示。

11.4.3 数据字典

数据字典的条目

  • 数据元素
    • 数据的最小组成单位
  • 数据结构
    • 描述某些数据元素之间的关系
  • 数据流
    • 由一个或一组数据元素组成
  • 数据存储
    • 描写该数据存储的结构,以及有关的数据流和查询要求
  • 加工逻辑
    • 描述加工的编号,名称,功能的简要说明,有关的输入数据流和输出数据流
  • 外部实体
    • 数据的来源和去向,应包括外部实体的名称,编号,简要说明,外部实体产生的数据流和系统传给该外部实体的数据流等。

数据字典的作用

  1. 按各种要求列表
  2. 相互参照,便于系统修改
  3. 由描述内容检索内容
  4. 一致性检验和完整性检验

数据字典的管理

由专门的数据管理员管理,任何人修改都需要通知数据管理员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918310.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习第七课之支持向量机SVM

目录 简介: 一、什么是支持向量机 二、如何选取最佳的超平面 1.超平面方程 (优化目标) 2.如何寻找最优的超平面 3.举例分析 4.软间隔​编辑 三、核函数 1举例 2常用核函数 3.多项式核函数 4.高斯核函数: 四、svm的优缺点 五、支持向量机的API 六、案例…

P3232 [HNOI2013] 游走,solution

原题: link,点击这里喵。 题意: 给定一个 nnn 个点 mmm 条边的无向连通图,图无重边和自环,顶点从 111 编号到 nnn,边从 111 编号到 mmm。 小 Z 在该图上进行随机游走,初始时小 Z 在 111 号顶…

Docker容器部署discuz论坛与线上商城

准备 关闭防火墙,上下文[rootdocker ~]# systemctl disable --now firewalld[rootdocker ~]# setenforce 0下载应用yum remove runc -y ### rocky8才需要yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cento…

Linux入门指南:26个基础命令全解析

目录 一.基础概念与入门 1.Linux操作系统简介 2.终端与shell的基本概念 3.命令行界面的优势 二.基础指令 1.whoami ​2.useradd/userdel/passwd ​3.pwd ​4.ls ​5.cd 6.touch 7.mkdir 8.tree 9.rmdir/rm 10.man 11.cp 12.mv 13.cat 14.le…

【后端】Java 8 特性 `User::getId` 语法(方法引用)介绍

文章目录核心概念解析:方法引用的四种类型:关键特性:使用场景推荐:何时避免使用:性能说明:在 Java 中, User::getId 是一种称为 方法引用(Method Reference) 的语法糖&a…

基于BP与CNN的图像分类模型构建、超参数优化及性能对比研究​

一、实验目的实验目标构建基于神经网络模型的数据分析与模式识别框架,探明神经网络在大数据分析中的意义。实验任务构建基于深度 BP 神经网络与卷积神经网络的数据分析与模式识别框架,将数据集 MNIST 与 CIFAR-10 分别在两种模型中训练,并比较…

HarmonyOS应用开发-低代码开发登录页面(超详细)

本篇文章我来手把手教大家做一个HarmonyOS 应用的登录页面,逐步讲解,非常细致,百分百能学会,并提供全部源码。页面使用 DevEco Studio 的低代码开发。 通过本文的实践经验,我想告诉大家, HarmonyOS 应用开发…

AJAX与axios框架

文章目录前言案例跨域访问总结❗前言 提示:这里可以添加本文要记录的大概内容: 通过 ajax 进行前后端交互 案例 此项目用到了javaweb知识 首先创建JavaWeb项目编写代码: package ajax;import java.io.IOException; import java.util.Arr…

智能创造的幕后推手:AIGC浪潮下看AI训练师如何塑造智能未来

文章目录一、AIGC时代的算法与模型训练概览二、算法与模型训练的关键环节三、AI训练师的角色与职责四、AI训练师的专业技能与素养五、AIGC算法与模型训练的未来展望《AI训练师手册:算法与模型训练从入门到精通》亮点内容简介作者简介谷建阳目录《医学统计学从入门到…

Python设计模式 - 装饰模式

定义 装饰模式(Decorator Pattern)是一种结构型设计模式,用于在不修改原有类的情况下动态地扩展对象的功能。 结构抽象组件(Component):定义对象的公共接口,使得客户端能以一致的方式处理未被装…

MySQL(188)如何使用MySQL的慢查询工具?

使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询。以下是详细深入的步骤和代码示例,帮助你使用MySQL的慢查询工具来进行查询分析和优化。 一、启用慢查询日志 首先,你需要确保MySQL的慢查询日志功能是启用的。慢查询日志记录了所有执行…

如何培养自己工程化的能力(python项目)

培养 Python 项目的工程化能力需要系统性训练,以下从基础到高阶的实践路径,结合具体案例和工具链,帮助你逐步进阶:一、夯实工程化基础能力​1. 规范代码与项目结构•​项目模板化​使用 cookiecutter生成标准项目结构,…

AI编程插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功能特性、性能表现、集成性、用户…

uniapp/uniappx实现图片或视频文件选择时同步告知权限申请目的解决华为等应用市场上架审核问题

在UNIAPP支持vue和nvue,在UNIAPPX支持uvue,安卓支持在选择图片或视频文件权限申请的时候自动同步告知权限申请目的。轻松解决在华为应用市场审核,要求告知权限申请目的或说明的问题。 UNIAPP相册图片视频选择器(安卓可以自定义界面样式)功能介绍&#x…

jupyter notebook如何打开其他盘目录

问题描述Jupyter Notebook 相信是我们学习 Python 避不开的一个工具。当我们使用 pip install notebook 安装 Notebook 之后,使用命令 jupyter notebook 启动服务,启动之后默认会在浏览器打开界面。我们会发现,这个界面默认在 C 盘下&#xf…

C语言深度剖析

一、关键字 1.1 最快的关键字-register register 这个关键字请求编译器尽可能将变量存在CPU内部寄存器中,而不是通过内存寻址以提高效率。 注意是:尽可能、而不是绝对 1.1.1 皇帝身边的小太监-寄存器 不知道什么是寄存器,那见过太监没有其实寄存器就是相当于。一个cpu的…

电脑使用“碎片整理”程序的作用

1.解决文件碎片化问题碎片整理的作用:将这些分散的文件片段重新整理、拼接,使其连续存储在硬盘的某个区域,减少文件的 “碎片化” 程度。2. 提升硬盘读写速度机械硬盘的特殊性:机械硬盘依赖磁头的物理移动来读取数据,若…

AI 软件工程开发 AI 算法 架构与业务

AI 软件工程开发 & AI 算法 & 架构与业务前言1.AI 软件工程开发1.1. AI Developer Studio (playground级)1.2. Agent & RAG1.3. LangChain & LangGraph1.4. MCP, Model Context Protocol1.5. Ollama1.6. Coze & Dify2.AI 算法2.1. G…

uniapp实现的圆形滚盘组件模板

采用 uniapp 实现的一款圆形滚盘示例组件模板, 支持 vue2、vue3,适配H5、微信小程序(其他小程序未试过,可自行尝试) 代码实现简约易懂,用户可根据自身需求下载模板,并进行扩展开发可到插件市场下载尝试&…

无须炮解,打开即是Pro版

聊一聊 文档或文件转图片,这个我有段时间没有推荐了。 今天发现了一款非常好用的图像格式转换编辑软件。 有需要的小伙伴请及时收藏,防止下次找不到。 软件介绍 全能图像格式转换工具 这是一款全能的图像转换软件,支持几乎所有的图像格式…