当前位置:   article > 正文

软件工程概论知识点(复习)

软件工程概论知识点

Ch1 软件概念特性

1、软件的定义与特性:

1.1软件的定义:

软件实际上就是程序、数据及其文档的完整集合。这里是展开来讲的,指令的集合,数据结构和软件描述信息,有可能在名词解释题中出现。

1.2软件的特性:

软件是逻辑的而非物理的系统元素,不会“磨损”,但软件退化的确存在。

具有开发过程复杂、成本昂贵、需要长期维护以及可以复制等特性。

2、软件过程框架、活动、动作和任务的集合,相关概念和示例:

软件的过程框架活动:沟通、策划、建模、构建、部署。

Ch2 过程模型

惯用软件过程模型种类及优缺点:

什么是软件过程?

任务集合中明确:将要完成的工作任务、将要产生的工作产品、所需要的质量保证点、表明过程状态的里程碑。

这里是四种常见的过程模型的优缺点对比,可能会在简答题考察。

Ch3 敏捷过程

3.1敏捷的概念和理念:

敏捷的概念

敏捷的理念

我来聊一下这个,

个人和互动胜过了流程和工具,开发时候能频繁互动挺好,行吧

工作软件胜过宽泛文档,有工作软件谁还去写一些需求规格说明书

客户协作胜过合同谈判,变化响应胜过计划遵循,好好好你说了算。

3.2 典型的敏捷过程Scrum:

这个Scrum感觉是挺有意思的,就是不停的周期性的冲刺完成任务,每天还要开15分钟的短会,每个人聊一下上次例会后做了什么,遇到的困难,下次例会前做了什么。

Q:如何评价敏捷开发模型Scrum?

A:Scrum 是一种敏捷开发模型,它在软件开发中非常流行,并被广泛应用。以下是对 Scrum 的评价:

  1. 敏捷性:Scrum 非常适应变化,能够快速响应需求变更和市场变化。通过迭代周期制定计划和交付可用的软件,团队能够更好地适应变化,并快速反馈。

  2. 透明度:Scrum 鼓励团队的透明度和沟通,每个人都可以了解项目的进展和存在的问题。通过日常站会、冲刺回顾和冲刺计划会议等活动,团队成员能够对项目有更全面的了解。

  3. 团队合作:Scrum 鼓励团队的自我组织和跨职能合作。团队成员共同承担责任,并通过日常合作共同努力完成 Sprint 目标。

  4. 增量交付:通过每个迭代周期的增量交付,Scrum 可以更早地将可用软件提供给用户。这有助于及早发现问题、获取用户反馈和最大程度地减少产品市场化的风险。

  5. 灵活性:Scrum 打破了传统的计划驱动开发模式,而是强调实用性和灵活性。团队可以根据实际情况进行调整和改进,从而更好地满足客户需求。

虽然 Scrum 在许多项目中非常成功,但它也有一些挑战和限制。例如,团队成员需要具备足够的自我组织和跨职能能力,同时需要有效地控制进度。此外,Scrum 对项目管理的要求较高,需要一定的时间和资源投入。但总体而言,Scrum 在迭代开发和团队协作方面具有许多优势,并适用于许多软件开发项目。

Q:他和哪一种过程模型有点像?

A:Scrum 和增量式开发过程模型有一些相似之处。增量式开发是一种软件开发方法,其中系统在一系列迭代中被逐步构建和交付。同样,Scrum 也是通过迭代周期(称为冲刺)来构建和交付软件的。因此,Scrum 和增量式开发在以下方面类似:

  1. 迭代交付:Scrum 和增量式开发都采用迭代的方式进行交付,将开发活动分成多个小步骤。这种方式可以使团队更早地交付可用的软件,并允许及时反馈和调整。

  2. 需求变更:Scrum 和增量式开发对于需求的变更都能灵活适应。在每个迭代中,团队可以优先处理最重要或最紧急的需求,并在后续迭代中对新的需求进行调整和处理。

  3. 透明度和沟通:增量式开发和Scrum 都鼓励团队的透明度和沟通。每个迭代都需要团队成员进行日常的站会,这有助于提高团队间的沟通和信息共享。

然而,需要注意的是,Scrum 和增量式开发并不完全相同。Scrum 强调团队的自我组织和跨职能合作,而增量式开发更注重在每个迭代中逐步构建和交付软件。虽然它们有一些相似之处,但是 Scrum 是一种更具体的敏捷开发方法,而增量式开发是一种更一般的开发方式。

Q:举一个Scrum团队的例子

A:当假设一个软件开发团队采用 Scrum 方法时,可以举一个在线旅游预订平台的例子来说明:

  1. 产品负责人(Product Owner): 他/她是团队的代表,负责定义和优先排序用户需求、管理产品需求清单并确保团队可以理解和履行业务目标。如在此例中,产品负责人可能会是旅行社的市场营销经理,负责协调产品从市场角度的需求和优先级。

  2. 开发团队(Development Team): 这是一群具有多种技能的软件开发专业人员,他们负责开展实际的软件开发工作,包括分析需求、编写代码、进行测试和交付可用的软件。例如,开发团队可能由软件工程师、前端开发人员和测试人员组成。

  3. Scrum 主管(Scrum Master): 这是团队的敏捷教练和项目管理者,负责确保 Scrum 过程的有效实施。Scrum 主管会引导团队进行日常站会、冲刺回顾和冲刺计划会议,并确保团队能够充分理解和遵循 Scrum 中的原则和规则。

在该例子中,Scrum 团队将采用以下步骤进行开发:

  1. 产品负责人与利益相关者沟通,了解产品需求并整理为用户故事。

  2. 在每个冲刺(Sprint)开始前,团队和产品负责人共同制定冲刺目标,并为冲刺周期内的用户故事进行优先级排序。

  3. 在冲刺周期内,开发团队每天进行短暂站会,分享进展、讨论问题和制定下一步行动计划。

  4. 开发团队根据优先级选择用户故事进行开发,每周或两周将可用的软件增量交付给产品负责人和利益相关者。

  5. 冲刺结束时,团队进行冲刺回顾会议,总结过去冲刺的经验教训,并针对下一个冲刺制定改进计划。

通过这种方式,Scrum 团队能够快速响应需求变化,输出高质量的软件,并与利益相关者保持紧密的沟通,以确保项目的成功交付。

Ch4 推荐的过程模型

简单了解

Ch5 人员方面

简单了解(这些偏向于软件项目管理的方面)

Ch6 理解需求(重点)

6.1 概念需要了解

接手一个软件项目,最重要的是自己要明白这个软件是要做什么的!

需求工程包括七项明确的任务: 起始、获取、细化、协商、规格说明、确认和管理。

6.2 建立根基

我认为PPT没有把用户故事和用例的区别体现出来。用户故事是一个非常重要的概念,基本格式是作为一个。。我想要。。以便能够。。很清楚的向用户或是开发人员解释了该模块功能的作用。而用例则更详细的告诉开发人员用户与系统的具体交互方式。

Q:用户故事和用例是什么关系?

A:用户故事(User Story)和用例(Use Case)是两种常用的需求表达方式,它们在软件开发中具有相似的作用,但在形式上有所不同。

用户故事是一种简洁的、以用户视角描述需求的形式,通常用作用户需求的编写和沟通工具。用户故事通常由以下几个要素组成:一个简短的描述,例如 “作为一个用户,我想要能够…”;所需的功能或期望的结果;以及用户故事的优先级。用户故事通常关注于用户的期望和目标,而不过多关注系统的内部实现细节。

用例是一种详细描述系统如何与用户或其他系统进行交互的技术性文档。用例描述了系统的行为、特定的功能流程和涉及到的不同角色。用例以一个主要的成功场景(主要流程)为核心,以及可能的替代和异常场景(替代流程和异常流程)。用例通常包含了步骤、前置条件、触发事件、期望结果以及其他相关因素。

虽然用户故事和用例在形式上存在一些不同,但它们都用于记录和传达需求,并为开发团队提供清晰的指导。用户故事侧重于用户的期望和目标,强调问题领域和功能,而用例则更侧重于系统行为和技术细节。在实际的软件开发过程中,这两种需求表达方式可以相互补充和结合使用,以满足项目的需求管理和开发过程的需要。

Q:假如某用户要登录教务系统选课,请你写一个用户故事

A:当假设的用户要登录教务系统选课时,可以编写以下用户故事:

用户故事:作为一名学生,我想要登录教务系统,以便能够选择我所需的课程。

用户故事详述:
作为一名学生,
我希望能够轻松地登录教务系统,
以便能够方便地选择我所需的课程。

具体要求:

  • 我希望在登录页面看到用户名和密码的输入字段。
  • 我希望能够使用我已注册的用户名和密码登录。
  • 如果我的用户名或密码输入错误,我希望收到相应的错误提示信息。
  • 登录成功后,我希望能够进入选课界面,并查看可供选择的课程列表。
  • 我希望能够按照课程名称、时间或其他筛选条件进行课程搜索。
  • 一旦找到我感兴趣的课程,我希望能够选择该课程并将其添加到我的课程表中。
  • 如果选择的课程已满员或与我的课程时间冲突,我希望收到相应的提示信息。

这样的用户故事能够帮助团队了解用户的需求和期望,使开发人员更好地理解和实现登录教务系统选课的功能。

Q:用户故事的基本格式是什么?

A:用户故事通常由三个基本要素组成:角色、行为和期望结果。以下是用户故事的基本格式:

作为 [角色],
我想要 [行为],
以便能够 [期望结果]。

其中:

  • 角色:指的是使用或与系统交互的用户或角色,可以是一个具体的人、团队或系统。
  • 行为:描述用户想要执行的操作或行为,通常使用动词+宾语的形式。
  • 期望结果:概述用户希望从系统中获得的价值、利益或期望的结果。

举个例子,假设一个用户要注册一个新的社交媒体账号。对应的用户故事可以如下所示:

作为用户,
我想要注册一个新的社交媒体账号,
以便能够与朋友、家人和其他用户进行互动。

通过这种简洁的格式,用户故事能够快速且清晰地表达用户的需求和期望,提供给团队一个共同的理解,使其更好地开发出满足用户需求的功能。需要注意的是,用户故事并不是详尽无遗的规范文档,而是简明扼要地描述用户需求,并鼓励与利益相关者进行进一步的讨论和细化。

Q:你能就上述选课案例开发一个用例吗?

A:当然可以。以下是一个关于选课的用例示例:

用例名称:选课

参与者:学生

目标:学生成功选择所需的课程

前置条件:学生已登录教务系统并进入选课界面

触发事件:学生开始选课

主要流程:
1. 系统显示可供选择的课程列表。
2. 学生可以按照课程名称、时间或其他筛选条件进行课程搜索。
3. 学生查找感兴趣的课程。
4. 学生选择一门课程并将其添加到所选课程列表中。
5. 如果选择的课程已满员或与学生的其他课程时间冲突,系统会显示相应的错误提示信息。
6. 学生可以继续选择其他课程,并重复步骤4和5,直到满足其选课需求为止。
7. 学生确认选课完成,并提交选课申请。

替代流程:
- 如果学生搜索不到感兴趣的课程,返回步骤2重新搜索或终止选课流程。
- 如果选课过程中出现错误,例如网络中断或系统故障,学生可以尝试重新登录并重复选课流程。

后置条件:学生完成选课,系统将保存所选课程并更新学生的课程表。

该用例描述了学生进行选课的主要流程和相关交互。每个步骤都有具体的行为和相应的结果,以确保学生能够成功选择所需的课程,并提供了替代流程以应对可能的异常情况。用例的描述能够帮助开发团队理解和实现选课功能的具体要求,并为测试人员提供方便的参考。需要注意的是,用例可根据实际需求进行调整和扩展。

6.5 分析模型(场景模型、类模型、行为模型)

这里涉及到比较重要的,UML

Q:什么是UML?

A:UML (Unified Modeling Language),统一建模语言,是一种用来描述和设计软件系统的标准化图形化建模语言。UML 首次于 1996 年引入,并由 Object Management Group (OMG) 进行标准化和维护。

UML 通常被用于软件开发过程中的需求分析、系统设计和系统建模阶段。它提供了一套丰富的图形符号和规范,用于表示不同类型的模型元素、关系和行为,以及它们之间的交互和结构。

以下是 UML 中常用的图形符号和图表类型:

  1. 结构图:

    • 类图:用于描述系统中类的静态结构、属性和方法之间的关系。
    • 对象图:展示系统中对象实例之间的关系和属性状态。
  2. 行为图:

    • 用例图:展示系统的功能需求和参与者之间的交互关系。
    • 时序图:描述系统中对象之间的交互消息和顺序。
    • 活动图:展示系统中的业务流程、操作和控制流程。
    • 状态图:描述对象在不同状态之间的转换和事件触发条件。
    • 通信图:展示系统中协作对象之间的交互关系。
  3. 构建图:

    • 组件图:描述系统中的模块、组件和其依赖关系。
    • 部署图:展示系统的物理组件和部署环境之间的关系。

UML 的优点在于它提供了一种标准化的语言和视图,使得开发人员、设计师和利益相关者能够更好地理解和协同工作。它可以帮助团队在软件开发过程中进行可视化建模、需求分析、系统设计和文档编写,并促进更好的交流和沟通。

Q:分为动态的静态的

A:在UML(统一建模语言)中,可以将图形符号和图表类型分为动态图和静态图。

静态图主要用于描述系统的静态结构和静态关系,以及系统中各个元素之间的组织和结构。常见的静态图包括:

  1. 类图:展示系统中类、接口、属性和方法之间的静态结构和关系。
  2. 对象图:描述系统中对象实例之间的关系和属性状态。
  3. 包图:用于组织和表示系统中的包和子系统之间的关系。

动态图则主要用于描述系统的行为和交互,展示系统中对象之间的消息传递和对象状态的变化。常见的动态图包括:

  1. 用例图:展示系统的功能需求和参与者之间的交互关系。
  2. 时序图:描述系统中对象之间的交互消息和时间顺序。
  3. 活动图:展示系统中的业务流程、操作和控制流程。
  4. 状态图:描述对象在不同状态之间的转换和事件触发条件。
  5. 通信图:展示系统中协作对象之间的交互关系。

静态图和动态图在UML中互相补充,通过静态图可以建立系统的基本框架和结构,而动态图则描述了系统的行为和交互方式。这两种图形图表协同工作,从不同的角度和层次帮助开发人员和设计师更好地理解和描述软件系统。

Ch7 需求建模-推荐方法

CRC:

Ch8 设计概念:

8.1需求模型到设计模型的转换:

Q:什么是体系结构设计?

A:体系结构设计是软件工程中的一个重要阶段,它涉及定义和描述系统的整体结构和组织方式,以及系统各个组件之间的相互关系和交互方式。

在体系结构设计中,主要目标是通过将系统划分为功能和责任清晰的模块,来实现系统的可靠性、可扩展性、可维护性和可重用性。

体系结构设计的关键任务主要包括以下几个方面:

  1. 划分系统模块:体系结构设计阶段要将系统划分为相对独立的模块,每个模块负责特定的功能和责任。模块的划分应该考虑到功能的高内聚和低耦合。

  2. 定义模块之间的接口:模块之间的接口定义了模块之间的通信和数据交换方式。通过明确定义接口,可以确保不同模块之间的互操作性和集成性。

  3. 选择适当的架构风格:架构风格是一种通用的模式或范例,用于指导系统的整体结构和组织方式。常见的架构风格包括分层、客户-服务器、发布-订阅、微服务等。

  4. 选择可靠的技术和工具:体系结构设计需要考虑使用哪些技术和工具来支持系统的实现和交付。这可能涉及到选择适当的开发语言、框架和开发环境。

  5. 确定系统的非功能需求:除了功能需求外,体系结构设计还需要考虑系统的非功能需求,如性能、安全性、可用性、可扩展性等。通过在设计中考虑这些需求,可以确保系统在运行时满足这些要求。

综上所述,体系结构设计是软件开发过程中的一个重要环节,它通过定义系统的整体结构和组织方式,为系统的实现和演化提供了基础。

Q:什么是接口设计?

A:接口设计是软件工程中的一个关键活动,涉及定义和规划组件、模块或系统之间的交互界面和通信方式。

接口是两个或多个模块之间进行交互和通信的约定或规范,它定义了模块之间相互作用的方式、数据格式、方法、参数等。接口设计的目标是确保不同模块的相互兼容性和互操作性,以便于模块的集成和系统的扩展。

在接口设计中,一般包括以下几个方面:

  1. 输入和输出:接口定义了模块之间传递的数据、消息或信号的格式、类型和语义。它规定了模块对外部环境的响应和对其他模块的请求。

  2. 方法和操作:接口描述了模块可供外部访问的方法和操作。它规定了模块的功能和行为,并指定了如何调用这些方法和操作。

  3. 参数和返回值:接口定义了方法和操作的参数和返回值,明确了输入和输出的数据类型、范围和约束。这样可以确保调用者和被调用者之间的数据交换是可靠和一致的。

  4. 协议和协商:接口设计涉及到模块之间的协议和协商机制。例如,通信接口可以规定使用什么协议进行通信、如何建立连接、如何处理错误等。

  5. 文档和文档规范:接口设计还应该包括文档和文档规范,用于描述接口的详细信息,如接口的定义、用法、示例、限制和注意事项等。这有助于使用者理解和正确使用接口。

接口设计的好处包括提高模块的可复用性、降低模块之间的耦合度、促进模块的并行开发、支持系统的可扩展性和维护性。因此,合理和清晰地设计接口是软件工程中关键的一环。

Q:什么是构件级设计?

A:构件级设计是软件工程中的一个重要阶段,它涉及将系统架构中的模块或组件进一步细化为更具体的构件,以及定义这些构件之间的详细设计和相互关系。

在构件级设计阶段,主要目标是将系统的高层结构转化为可执行的、可测试的、可维护的构件,以便于实现和集成。构件级设计需考虑以下几个方面:

  1. 构件界面设计:设计构件的接口和API,包括定义构件对外部的暴露方法、输入输出参数、异常处理等。接口的设计应该简单清晰,符合模块化原则,以便于与其他构件的集成和交互。

  2. 构件内部结构设计:确定构件内部的组织结构,包括选择合适的数据结构、算法、代码组织方式等。重点是确保构件内部的职责划分明确、高内聚低耦合,以提高构件的可维护性和可重用性。

  3. 数据流设计:规划构件内部的数据流动,明确数据的输入、处理和输出的过程。这涉及数据的传递、存储、转换等,以确保数据的正确性和一致性。

  4. 错误处理与容错设计:考虑构件可能出现的异常情况,并定义相应的错误处理机制和容错策略。这包括异常的处理、错误消息的处理、日志记录等,以提高系统的健壮性和可靠性。

  5. 性能和资源管理:在构件级设计中,需要考虑构件的性能需求和资源管理,包括内存管理、CPU利用率、网络带宽等。这有助于确保构件能够在可接受的时间和资源限制下运行。

  6. 安全和隐私设计:在构件级设计中需考虑系统的安全和隐私问题,并采取相应的安全措施和隐私保护措施,例如数据加密、访问控制、身份认证等,以保护用户的数据和系统的安全。

综上所述,构件级设计是将系统架构细化为可执行的构件的过程,涉及构件接口设计、内部结构设计、数据流设计、错误处理与容错设计、性能和资源管理、安全和隐私设计等方面。通过良好的构件级设计,可以提高系统的可维护性、可扩展性和可重用性。

UML对于软件项目经理来说是非常重要的一门语言。

包含类图、活动图、状态图、用例图等等等等。非常重要。这里不做详谈。

Q:J2EE的中间件是什么含义?

A:在J2EE(Java 2 Enterprise Edition)中,中间件是指一类软件组件和服务,用于构建和管理复杂的分布式企业级应用程序。

中间件位于操作系统和应用程序之间,提供了一系列的功能和服务,以简化应用程序的开发、部署、集成和管理。它充当了应用程序和底层硬件、操作系统、网络等之间的中间层,提供了一种抽象和标准化的接口,使得开发者可以专注于业务逻辑的实现,而不必过多关注底层细节。

在J2EE中,中间件提供了以下几个主要的功能:

  1. 通信和协议支持:中间件提供了各种通信协议和通信机制,使得分布式应用程序中的不同组件能够互相通信和协作。例如,中间件可以支持基于消息队列的通信、远程过程调用(RPC)等。

  2. 分布式对象管理:中间件支持分布式对象技术,如RMI(Remote Method Invocation)和CORBA(Common Object Request Broker Architecture),可以在分布式环境中对对象进行远程访问和调用,实现对象之间的透明通信。

  3. 事务管理:中间件提供了事务管理机制,支持将多个操作组合成一个原子操作,保证数据的一致性和完整性。它提供了事务的隔离、并发和持久性管理等功能,以满足分布式应用程序的事务处理需求。

  4. 安全性管理:中间件提供了安全性管理机制,包括身份验证、访问控制、数据加密等,以保护应用程序中的数据和资源免受恶意访问和攻击。

  5. 负载均衡和故障转移:中间件可以管理和控制应用程序的负载均衡,将请求分发到不同的服务器上,以提高系统的性能和可扩展性。同时,它还可以监控系统的健康状况,实现故障检测和自动故障转移,确保应用程序的高可用性。

总之,J2EE中的中间件是一种提供了丰富功能和服务的软件层,用于简化分布式企业级应用程序的开发和管理。它提供了通信支持、分布式对象管理、事务管理、安全性管理、负载均衡和故障转移等功能,为开发者提供了统一和标准化的平台。

Ch10 构件级设计

什么是构件???

如何实现构件级设计:

步骤如下:

Ch 11 用户体验设计

Ch 15 构件级设计:

黑盒测试和白盒测试是要学习的。

Ch 16 集成测试

具体题目可以联系我获取。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/977372
推荐阅读
相关标签
  

闽ICP备14008679号