软件工程导论-期末复习(完结)

一.单选

 

1.可维护性的特性

可理解性 (Understandability),可测试性 (Testability),可修改性 (Modifiability),可扩展性 (Extensibility),可移植性 (Portability),可重用性 (Reusability),易诊断性 (Diagnosability),低耦合性 (Low Coupling),高内聚性 (High Cohesion),自动化工具支持。

相互促进的特性:

- **可理解性**和**可修改性**:代码易懂更方便修改。
- **可测试性**和**可扩展性**:模块化设计便于测试,也支持扩展。
- **低耦合性**和**高内聚性**:低耦合提高了内聚性,使模块独立、清晰。
- **可重用性**和**可理解性**:可复用的代码通常结构清晰,也更易理解。
  
存在矛盾的特性:

- **可扩展性**和**高内聚性**:扩展需求可能导致模块职责增多,影响内聚性。
- **可理解性**和**可移植性**:跨平台代码可能增加复杂度,降低可理解性。
- **低耦合性**和**可测试性**:减少耦合性可能需要额外接口或抽象层,增加测试难度。

2.程序的三种基本控制结构

  • 顺序结构:代码从上到下逐行执行。
  • 选择结构(条件结构):根据条件判断执行不同的代码路径,例如 ifswitch 语句。
  • 循环结构:重复执行某段代码,直到满足特定条件,例如 forwhile 循环。

共同特点

  • 控制程序的执行流程:三种结构都是用来控制程序的执行顺序,以满足特定的逻辑需求。
  • 可组合性:这三种结构可以相互组合、嵌套,构建出复杂的程序逻辑。
  • 逻辑完整性:可以通过这三种结构表达所有算法逻辑,被称为构成程序的基本控制单元。

3.软件生命周期(❤❤❤)

  • 需求分析:这个阶段通常在项目开始时占用一定时间,主要用于与用户沟通,理解和明确需求。虽然重要,但时间通常相对较短。

  • 系统设计:设计阶段可能需要较长时间,特别是对于复杂系统。设计的质量直接影响后续阶段的效率。

  • 编码:编码的时间取决于系统的复杂性和开发团队的熟练程度。一般来说,这个阶段的时间也是相对较短的。

  • 测试:测试阶段非常重要,特别是为了确保软件的质量和稳定性。虽然时间投入可能相对较长,但通常仍不及维护阶段。

  • 部署:部署通常是一次性的活动,虽然需要一定时间,但总体上不会过于耗时。

  • 维护维护阶段通常是软件生命周期中耗时最长的部分。软件投入使用后,会不断出现新的需求、bug、性能问题等。维护需要持续的资源投入,修复和更新软件以适应用户的变化需求。

  • 退役:这个阶段的时间通常较短,因为它涉及的是关闭和迁移。

  • b0bf72a1b8a944d299ed01de3f74da3f.jpg

     

4.原形化方法

原型化方法(Prototyping)是一种软件开发技术,主要用于快速创建软件的初步模型(原型),以便在开发过程中进行测试和验证。

当用户需求不明确或容易变化时,原型化方法允许开发团队通过快速迭代获得反馈,帮助用户更好地理解他们的需求。如果需求非常明确且不太可能发生变化,传统的瀑布模型可能更合适。原型化过程可能会导致额外的时间和资源投入,这对于时间紧迫或预算有限的项目可能不太理想。

5.经济可行性

经济可行性研究的范围通常包括以下几个方面:

1. **成本分析**:
   - 初始投资成本、运营成本和隐性成本。

2. **收益分析**:
   - 直接收益、间接收益和收益的持续性。

3. **投资回报率(ROI)**:
   - 计算投资回报率和回报周期。

4. **风险分析**:
   - 市场风险、技术风险和财务风险。

5. **敏感性分析**:
   - 测试关键变量变化对项目经济性的影响。

6. **可比性分析**:
   - 比较类似项目的经济表现。

7. **法律和政策影响**:
   - 评估相关法律法规对项目的影响。

8. **市场需求评估**:
   - 研究市场需求和客户群体。

6.软件危机(❤❤)

软件危机(Software Crisis)是指随着计算机技术的迅猛发展,尤其是软件规模和复杂度的不断增加,传统的软件开发方法和工具已无法有效应对这些挑战,导致软件开发质量下降、成本上升、项目延期,甚至失败的现象。

9065cbab885648528c00aa135293f221.png

 

7.软件工程学的目的是什么

软件工程学的目的在于通过系统化、规范化的开发方法来提高软件的质量、效率和可维护性,以确保软件项目能够按时、按预算、按需求交付,并能够在整个生命周期内高效运作。

819445fcac7e4c8fbb8c64b52889e61b.png

 

8.瀑布模型(❤❤)

瀑布模型(Waterfall Model)是传统的软件开发模型之一,强调线性顺序的开发过程。它的核心理念是将软件开发划分为一系列严格定义的阶段,每个阶段完成后才能进入下一个阶段。这种模型的特点是每个阶段都有明确的输出,且在上一个阶段完成后不可返回修改。

瀑布模型的开发过程通常按以下顺序进行:

  1. 需求分析(Requirements Analysis)
  2. 系统设计(System Design)
  3. 实现(编码)(Implementation)
  4. 测试(Testing)
  5. 部署和维护(Deployment and Maintenance)

不过,瀑布模型的关键问题在于它过于依赖于阶段之间的严格顺序,导致对需求变化的响应比较缓慢。因此,瀑布模型在早期的简单系统开发中有一定优势,但对于需求不断变化、复杂性较高的现代软件项目并不适用。

瀑布模型将软件生命周期划分为以下三个主要阶段:

  1. 需求阶段:在这一阶段,开发团队与客户或利益相关者一起详细讨论并记录软件的需求,确保团队完全理解客户需要的软件功能和目标。需求定义通常会形成一个详细的文档。

  2. 设计阶段:根据需求文档,设计人员会进行系统架构设计和详细设计,规划系统的结构、技术选型、数据库设计等内容。在此阶段,通常会产生系统设计文档。

  3. 实现阶段:在设计完成后,开发人员开始根据设计文档编写代码,实现系统的各项功能。这个阶段的输出通常是可执行的软件代码。0c7b313b23ac4672b9d647a42063c06a.png

     快速原型模型(❤)

  4. d033c42c1f864e1393ee4074f34f7c90.png

     增量模型(❤)

  5. 05bf07a0f60b4617ac32dba3da2698aa.png

     

9.需求分析

需求分析的核心任务是明确系统需要完成的功能和质量要求,定义系统的基本功能需求非功能需求接口需求约束条件。这些需求将为后续的系统设计和开发提供基础。然而,具体的实现细节内部架构测试用例优化方案等内容通常在需求分析阶段并不涉及,属于后续设计和开发的工作内容。

回答系统必须做什么的问题

10.类构件的重用方式

类构件的重用方式包括:继承组合接口和抽象类模板方法模式设计模式共享库模块化等,它们都是通过明确的结构和规范来实现系统功能的复用。而不包括代码复制与粘贴硬编码滥用全局变量/单例等不推荐的方式,这些方式往往导致代码难以维护和扩展。

不包括动态重用

11.软件维护(❤❤❤)

软件维护通常包括以下四种类型:

  1. 纠错性维护:修复软件缺陷和错误。
  2. 适应性维护:使软件适应新的环境或平台。
  3. 完美性维护:增强功能、提高性能或优化用户体验。
  4. 预防性维护:通过分析潜在问题,提前进行优化以减少故障。

12.黑盒测试(❤❤❤)

定义:黑盒测试是一种基于功能的测试方法,测试人员不关心软件的内部实现细节,而是关注软件的功能是否符合需求和规格说明。测试者只通过输入数据和观察输出结果来验证系统是否按预期工作。

  • 重点:黑盒测试关注的是系统的外部行为,即系统是否完成了应有的功能。
  • 测试依据:黑盒测试基于需求和设计文档,而不是代码实现。
  • 测试过程:测试人员不需要知道系统的内部结构,主要通过以下几个方面进行测试:
    • 输入的有效性(有效输入和无效输入)
    • 系统对输入的反应(是否正确处理了输入)
    • 输出的正确性
    • 系统功能的完整性和一致性
    • 边界条件、性能、错误处理等
  • 适用场景
    • 功能测试:验证功能是否按预期工作。
    • 用户验收测试:用户根据需求文档和规格说明进行测试。
    • 回归测试:在修改或更新软件后,验证修改不会破坏原有功能。

优点

  • 测试人员不需要了解软件的内部代码,适合非技术人员。
  • 可以从用户的角度出发,验证系统是否符合用户需求。

缺点

  • 不能保证覆盖所有的代码路径。
  • 可能会遗漏一些潜在的代码错误或性能问题。

13.白盒测试(❤❤)

定义:白盒测试是一种基于代码的测试方法,测试人员需要了解系统的内部实现细节,如程序逻辑、数据流、控制流等。测试的目标是通过检查代码内部的执行路径、函数调用和数据流等,来验证系统的实现是否正确。

  • 重点:白盒测试关注的是程序的内部结构和逻辑,通过代码的审查和执行来测试系统的各个部分。
  • 测试依据:白盒测试基于源代码,而不仅仅是需求和设计文档。
  • 测试过程
    • 检查每个代码路径是否被执行,确保程序中的每条逻辑分支和代码都经过测试。
    • 进行代码覆盖率分析,确保代码的不同路径(如条件分支、循环)都有被充分测试。
    • 检查系统中的数据流和控制流,分析潜在的逻辑错误、资源泄漏、内存溢出等。
    • 测试异常处理逻辑,确保代码能够处理所有可能的异常情况。
  • 适用场景
    • 单元测试:测试单个函数或方法的正确性。
    • 集成测试:测试多个模块或组件的交互。
    • 性能测试:分析代码的性能瓶颈,进行优化。
    • 安全性测试:验证程序中是否存在潜在的安全漏洞。

优点

  • 可以详细地检查代码的每个路径和分支,确保系统的每一部分都被充分测试。
  • 有助于发现程序内部的逻辑错误和潜在的性能问题。
  • 可以实现高的测试覆盖率(如语句覆盖、分支覆盖、路径覆盖等)。

缺点

81263eeb75254a67af3d89054bfed35d.png

 

 

       用例图帮助确定系统的功能需求,进而影响系统的类图设计。

 

 

  • 测试人员需要具备编程技能,并深入了解代码实现。
  • 对于大规模系统,测试的覆盖面和复杂性可能会很高。
    • 2c44d05169544abdb843d544d7d946a8.png

    14.UML(❤❤❤)

  • UML(统一建模语言)是一种图形化的建模语言,广泛用于面向对象软件系统的建模和设计。它提供了一套标准化的符号和图形,帮助开发人员和设计人员理解、描述、构建和文档化系统的结构和行为。UML包含了多种类型的图,每种图有不同的用途和侧重点。

  • 15.用例图(Use Case Diagram)

  • 定义:用例图用于描述系统的功能需求,展示系统与外部参与者(如用户、其他系统)之间的交互。用例图关注的是**“用户与系统之间的行为”**,强调用户需求和功能。

  • 组成

    • 参与者(Actor):代表与系统交互的角色,可能是用户或其他系统。
    • 用例(Use Case):系统提供的功能或服务,用例代表了用户与系统之间的一个交互场景。
    • 关联关系:描述参与者与用例之间的交互关系。
    • 扩展与包含关系:用来表示用例之间的依赖或扩展。
  • 作用:用于需求分析阶段,帮助明确系统的功能需求以及用户需求。

  • 示例:一个在线购物系统的用例图可能包括参与者"顾客"和用例"浏览商品"、"添加到购物车"、"结账"等。

  • 16.类图(Class Diagram)

  • 定义:类图是UML中最常用的图之一,主要用于描述系统的静态结构,展示系统中的类、接口及其之间的关系。类图关注的是系统的对象结构,描述类之间的继承、实现、关联、依赖等关系。

  • 组成

    • 类(Class):系统中的对象类型,包含属性(属性)和方法(操作)。
    • 关系:如继承、实现、关联、依赖、聚合等。
    • 类之间的关系:继承(表示“是一个”的关系)、关联(表示“有一个”或“使用一个”的关系)、依赖(表示类之间的松散关系)等。
  • 作用:类图用于描述系统的静态结构和类之间的关系,是对象导向设计的核心部分。

  • 示例:一个银行管理系统的类图可能包括类"客户"、"账户"、"交易",它们之间有关联、继承等关系。

  • 17.时序图(Sequence Diagram)

  • 定义:时序图是用于描述对象之间交互的动态行为,特别关注的是时间顺序上的消息传递。它通过时间轴显示对象之间的交互过程和消息的传递顺序。

  • 组成

    • 对象:参与交互的对象通常排列在顶部。
    • 生命线(Lifeline):表示对象的存在周期。
    • 消息:表示对象之间的调用或数据传递。
    • 激活(Activation):表示对象在执行某个操作时处于活跃状态。
  • 作用:时序图主要用于描述系统内部对象的交互和消息交换,是行为建模中常用的工具。

  • 示例:一个订单支付过程的时序图可能显示用户、支付系统和银行之间的消息传递,展示支付过程中的步骤和顺序。

  • 18.协作图(Collaboration Diagram)

  • 定义:协作图与时序图类似,也是用来描述对象之间的交互,但是它更加注重的是对象之间的关系,而不是消息的顺序。协作图通过展示对象之间的连接关系来表示消息的交互。

  • 组成

    • 对象:图中的参与者和交互者。
    • 消息:表示对象间的通讯和方法调用。
    • 连接关系:表示对象之间的关联关系。
  • 作用:协作图比时序图更关注对象的结构和连接关系,适用于描述不同对象之间的协作过程。

  • 示例:一个客户在购物网站上下单的过程,展示了客户对象、购物车对象和支付对象之间的交互和关系。

  • 19.活动图(Activity Diagram)

  • 定义:活动图用于描述系统的工作流或业务流程,它强调的是活动的流动,展示了系统中各个操作的执行顺序、条件判断和并行执行的情况。

  • 组成

    • 活动(Activity):表示业务或操作的单元。
    • 决策节点(Decision Node):表示流程中的条件判断。
    • 起始/结束节点(Start/End Node):表示活动的开始和结束。
    • 控制流(Control Flow):表示活动之间的流向关系。
    • 分支与合并:表示不同路径的选择与合并。
  • 作用:活动图适用于描述复杂的业务流程、工作流和数据流,尤其是在动态行为的建模中非常有用。

  • 示例:一个用户注册流程的活动图,可能展示从填写注册信息、验证信息、提交表单等步骤的流程和条件判断。

  • 20.UML图的关系

  • 用例图描述的是系统的外部功能需求,聚焦用户和系统之间的交互。
  • 类图是系统的静态结构图,展示了系统的类和类之间的关系,是系统设计的基础。
  • 类图是实现系统功能的基础,类之间的交互可通过时序图协作图来进一步描述。
  • 时序图协作图可以帮助分析和设计系统中对象的交互细节,而活动图则有助于理解和优化系统中任务或业务流程的执行顺序。
  • 时序图协作图都是描述系统动态行为的交互图。时序图侧重展示对象之间消息传递的时间顺序,而协作图则关注对象之间的结构和关系
  • 活动图描述的是系统中的流程和工作流,主要用于表示不同活动之间的顺序和条件流转。
  • 二.简答

    1.可行性研究报告的主要内容有哪些?

    可行性研究报告的主要内容通常包括以下几个部分:

    1. **引言**:
       - 项目背景和目的
       - 可行性研究的范围和方法

    2. **项目描述**:
       - 项目的基本概述
       - 项目目标和预期成果

    3. **市场分析**:
       - 市场需求评估
       - 目标客户和竞争分析
       - 市场趋势和机会

    4. **技术可行性**:
       - 所需技术的评估
       - 技术实现的可行性分析
       - 系统架构和设计概述

    5. **经济可行性**:
       - 成本分析(初始投资和运营成本)
       - 收益预测(直接和间接收益)
       - 投资回报率(ROI)计算

    6. **法律和环境影响**:
       - 相关法律法规的分析
       - 项目对环境的潜在影响评估

    7. **风险分析**:
       - 识别和评估项目风险
       - 风险管理策略

    8. **实施计划**:
       - 项目时间表和里程碑
       - 资源需求(人力、财力等)

    9. **结论和建议**:
       - 对项目可行性的总体评估
       - 进一步的建议和行动计划

    10. **附录**(如有需要):
        - 相关数据和支持材料
        - 调查问卷、访谈记录等

    2.系统设计的内容主要有哪些?

    系统设计的内容主要包括以下几个方面:

    1. 系统架构设计

      • 确定系统的总体结构,包括硬件和软件组件之间的关系。
      • 定义系统的层次结构,如客户端-服务器架构、微服务架构等。
    2. 模块设计

      • 细化系统各个模块的功能和接口。
      • 设计模块之间的交互和数据流。
    3. 数据设计

      • 数据库设计,包括表结构、字段定义、索引、约束等。
      • 数据模型设计,如实体关系图(ER图)和类图。
    4. 接口设计

      • 确定系统内部模块及外部系统之间的接口和协议。
      • 定义API(应用程序接口),确保模块之间的互操作性。
    5. 用户界面设计

      • 设计用户界面的布局、风格和交互方式。
      • 确保用户体验良好,符合用户需求和习惯。
    6. 安全设计

      • 识别潜在的安全风险,设计相应的安全措施。
      • 包括用户认证、授权、数据加密等。
    7. 性能设计

      • 评估系统的性能需求,如响应时间、吞吐量和可扩展性。
      • 设计负载均衡和缓存策略等以优化性能。
    8. 可维护性设计

      • 考虑系统的可维护性和可扩展性。
      • 设计代码的可读性和可重用性,便于后续维护和更新。
    9. 测试设计

      • 制定测试计划,包括单元测试、集成测试和系统测试的策略。
      • 确定测试用例和测试环境的设置。
    10. 文档设计

      • 编写系统设计文档,详细描述设计决策和实现细节。
      • 提供使用手册和技术文档,帮助后续开发和维护。

    3.软件质量保证应做好哪几个方面的工作?

    软件质量保证(Quality Assurance, QA)是确保软件产品满足预定标准和用户需求的重要过程。以下是软件质量保证应做好的一些关键工作方面:

    1. 需求分析

      • 确保需求的完整性、准确性和可追溯性。
      • 与利益相关者沟通,确认需求的明确性。
    2. 制定质量标准

      • 定义软件质量标准和指标,包括功能性、性能、安全性和可维护性等。
      • 建立质量评估标准,作为后续评估的依据。
    3. 测试计划和策略

      • 制定详细的测试计划,包括测试目标、范围、资源和时间安排。
      • 确定测试策略,包括手动测试和自动化测试的选择。
    4. 设计测试用例

      • 根据需求和设计文档,编写测试用例和测试脚本。
      • 确保测试用例覆盖所有功能和边界情况。
    5. 执行测试

      • 进行各类测试,如单元测试、集成测试、系统测试和用户验收测试。
      • 记录测试结果,追踪缺陷并进行管理。
    6. 缺陷管理

      • 建立缺陷报告和跟踪系统,及时记录和分类缺陷。
      • 确保缺陷得到修复,并验证修复结果。
    7. 代码审查

      • 进行代码审查,确保代码符合编码标准和最佳实践。
      • 提高代码质量,降低后续维护成本。
    8. 持续集成和持续交付(CI/CD)

      • 实施持续集成和交付流程,确保代码在每次提交后都经过测试。
      • 提高交付频率和软件稳定性。
    9. 用户反馈和验收

      • 收集用户反馈,评估软件在实际使用中的表现。
      • 在项目结束时进行用户验收测试,确认软件满足用户需求。
    10. 培训和文档

      • 提供质量保证相关的培训,提高团队的质量意识。
      • 编写和维护质量保证文档,记录质量控制过程和结果。

    4.软件测试过程包括哪些部分?

    软件测试过程通常包括以下几个主要部分:

    1. 测试计划

      • 制定测试策略和计划,明确测试目标、范围、资源和时间安排。
      • 确定测试的类型和方法,如功能测试、性能测试、安全测试等。
    2. 需求分析

      • 分析需求文档,确保需求的完整性和可测试性。
      • 确定测试用例的基本依据,识别关键功能和边界条件。
    3. 测试用例设计

      • 编写详细的测试用例,包括输入、预期结果和执行步骤。
      • 确保测试用例覆盖所有功能和场景,包括正向和负向测试。
    4. 测试环境准备

      • 配置和准备测试环境,包括硬件、软件和网络设置。
      • 确保测试环境与生产环境尽可能一致,以提高测试的有效性。
    5. 测试执行

      • 按照测试用例执行测试,记录实际结果和任何发现的缺陷。
      • 进行不同类型的测试,如单元测试、集成测试、系统测试和用户验收测试。
    6. 缺陷管理

      • 记录和跟踪缺陷,包括缺陷的严重性、状态和解决方案。
      • 与开发团队协作,确保缺陷得到修复,并重新验证修复的效果。
    7. 测试结果评估

      • 分析测试结果,评估软件的质量和符合性。
      • 确定软件是否满足预定的质量标准和用户需求。
    8. 测试报告

      • 编写测试报告,概述测试过程、结果、缺陷和总体评估。
      • 提供给项目干系人,帮助他们理解软件的质量状况。
    9. 回归测试

      • 在软件修改或缺陷修复后,进行回归测试以确认修复是否有效且未引入新缺陷。
      • 确保软件的稳定性和持续的功能完整性。
    10. 持续改进

      • 根据测试过程中的经验教训和反馈,不断优化测试策略和方法。
      • 提高团队的测试能力和效率,推动软件质量的持续提升。

    三.应用题

    1.工资的数据流程图:

    题目:工资计算系统中的一个子系统有如下功能:1.计算扣除部分(由基本工资计算出应扣除的部分,比如水电费,缺勤)2.计算奖金部分(根据出勤情况计算)3.计算工资总额部分(根据输入的扣除额和奖金计算出总额)4.计算税金部分(由工资总额中计算出应扣除各种税金)5.生成工资表(根据总额和税金生成工资表)

    试根据要求画出该问题的数据流程图,并将其转换为软件结构图。

    1a046aa9c082446fa53033f5c8a83ceb.png

    数据流程图

    (Data Flow Diagram,简称 DFD):

    数据流程图的基本要素:

    1. 外部实体(External Entity):代表系统外部与系统交互的实体,通常是用户、其他系统或外部设备。用方框表示。

      • 例如:用户、银行系统、外部数据库等。
    2. 数据流(Data Flow):数据在系统内部或与外部实体之间的流动,通常用带箭头的线表示。

      • 例如:用户提交的信息、系统发送的响应等。
    3. 处理过程(Process):指系统内的操作或功能,它处理输入数据并产生输出数据。用圆形或椭圆形表示。

      • 例如:登录验证、订单处理等。
    4. 数据存储(Data Store):用来存储数据的地方,通常表示为两个平行的线。数据存储可以是数据库、文件、缓存等。

      • 例如:用户信息数据库、订单信息存储等。

    2.银行ATM系统

    题目:如果要开发一个银行ATM的存取款系统,1.如何确保这个产品的代码在未来尽可能多的被重用?2.需求分析工作流程,完成产品需求文档3.用面向对象的设计方法设计该ATM系统4.针对这个产品你选择什么语言来实现?列出它们的优势和代价。

    作答:

    1. 如何确保这个产品的代码在未来尽可能多的被重用?

    为了使代码具备良好的重用性,可以采取以下措施:

    #### 1.1 **模块化设计**
    将系统划分为多个独立模块,每个模块负责单一功能。例如:
    - 账户管理模块
    - 交易处理模块
    - 用户认证模块
    - 日志记录模块

    #### 1.2 **面向对象设计原则**
    - **封装性**:将每个功能设计为独立的类(如账户类、交易类),类内部实现对外隐藏。
    - **继承性**:例如,银行卡可以作为一个父类,信用卡和储蓄卡可以继承父类以扩展功能。
    - **多态性**:通过接口或抽象类实现不同类型操作的通用化设计。

    #### 1.3 **设计模式**
    - **工厂模式**:生成不同类型的用户界面(ATM屏幕显示、语言切换)。
    - **策略模式**:处理不同交易类型(取款、存款、查询)。
    - **单例模式**:确保核心资源(如日志系统)只有一个实例。

    #### 1.4 **API接口设计**
    设计清晰的、文档完善的API,使得其他开发团队能够直接调用,例如提供账户查询接口、交易记录接口。

    #### 1.5 **遵循标准**
    采用行业标准(如ISO/IEC 8583规范用于ATM与银行后台之间的通信)来确保系统兼容性,提高可重用性。

    2. 需求分析工作流程,完成产品需求文档

    #### 2.1 **需求分析工作流程**
    1. **需求获取**
       - 与客户(银行管理层)访谈。
       - 用户问卷调查了解ATM的常用功能需求。
       - 分析现有ATM系统的不足。

    2. **需求分类**
       - 功能需求:用户存款、取款、查询余额、打印交易记录。
       - 非功能需求:高安全性、快速响应时间、良好的用户体验。
       - 约束条件:系统需兼容现有银行系统。

    3. **需求建模**
       - 使用**UML用例图**描述用户和系统交互。
       - 制作**流程图**表示存取款的具体流程。

    4. **需求确认**
       - 与客户和开发团队确认需求,生成最终的需求文档。

    #### 2.2 **产品需求文档的核心内容**
    1. **系统概述**
       - 系统名称:银行ATM存取款系统
       - 系统目标:提高用户存取款效率,确保交易安全性。
       
    2. **功能描述**
       - 用户认证:用户通过银行卡和密码登录。
       - 存取款:支持取款、存款,显示交易结果。
       - 查询:提供余额查询、交易历史。
       - 多语言支持:提供中英双语界面。
       
    3. **非功能需求**
       - 安全性:采用加密通信防止数据泄露。
       - 响应时间:每次操作的响应时间低于5秒。
       
    4. **系统约束**
       - 需支持现有银行卡系统。
       - 后台需与银行核心业务系统对接。

    5. **用例图**
       - 清晰展示用户和系统功能的交互关系。

    3. 用面向对象的设计方法设计该ATM系统

    #### 3.1 **核心类的设计**878659303e6f48849fc9bf5553ba5aef.png

    #### 3.2 **UML用例图**
    - **用户**:与ATM交互。
    - **ATM**:提供存取款功能,查询余额,生成交易记录。

    #### 3.3 **UML类图**
    基于上述类的设计,画出类图,标明类与类之间的关系:
    - `User`与`Account`关联(一个用户可有多个账户)。
    - `ATM`与`Transaction`组合(ATM负责处理交易)。
    - `ATM`与`BankSystem`关联(通过后台验证和记录交易)。

    #### 3.4 **顺序图**
    设计顺序图展示存款或取款的交互流程:
    1. 用户插入银行卡。
    2. 系统请求密码并验证。
    3. 用户输入存取款金额。
    4. 系统处理交易并打印凭证。

    4. 针对这个产品你选择什么语言来实现?列出它们的优势和代价

    #### 4.1 **选择的语言**
    - **Java**
    - **C++**
    - **Python**

    #### 4.2 **比较分析**76506b957a7f4a9da4054b96c9c92e53.png

    ### **建议语言:Java**
    选择**Java**是因为:
    1. Java的**安全性**强(如支持加密库和沙箱机制),适合金融系统。
    2. Java的**跨平台性**使得系统可以运行在多种硬件环境下。
    3. Java支持**面向对象编程**,便于实现模块化设计和重用。

    当然,如果系统要求极高的实时性和硬件效率,可以选择C++。

     

     

  •  

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值