热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

软件系统分析与体系结构设计

一、软件工程概论概念软件危机(软件开发和维护过程中遇到的一系列严重的问题)软件开发成本日益增长软件开发进度难以控制软件质量难以保证软件维护困难成本&

一、软件工程概论


概念


  • 软件危机(软件开发和维护过程中遇到的一系列严重的问题
    • 软件开发成本日益增长
    • 软件开发进度难以控制
    • 软件质量难以保证
    • 软件维护困难

成本,质量难以保证,维护难,开发过程难控制



  • *软件危机的原因
    • 软件的复杂性
      • 开发结构的逐渐复杂性
      • 软件技术的发展复杂性
    • 软件的特殊性
    • 人们认识的局限性

围绕软件越来越“复杂”



  • *软件工程定义:将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。

简单的背为将工程化应用在软件中



  • 软件生命周期

    • 需求分析
    • 系统设计
    • 系统实现
    • 测试
    • 维护
  • *软件系统分析与设计的重要性

    • 需求分析为整个软件打下良好基础
    • 设计阶段为软件的编写打下良好基础
    • 这两个阶段若做好可以从根本上减少软件开发过程的时间和成本
    • 反之,带来的损失是不可估量的

整本书的重要性,肯定要背下来,需求分析打下基础,设计打下基础,做的好有很多好处,做的不好损失太大了



软件工程学的三个核心元素


  • 软件开发过程模型

    • 线性模型(瀑布模型)
      • 优点:1.有利于开发人员管理2.有利于使用软件开发工具,提高了效率
      • 缺点:1.开发是线性的,开发结果得到慢,与用户交互少了2.前期的的错误扩散到后期3.无法解决复杂情况
    • 增量模型
      • 优点:1.灵活性高2.需要人员少
      • 缺点:1.需要开发式的体系结构2.退化成边做边改模型,失去整体性
    • 螺旋模型
      • 优点:1.支持用户需求动态变化2.方便用户参与,提高软件适应能力3.方便管理人员及时调整管理决策,降低开发风险
      • 缺点:1.需要丰富的风险评估经验和专业知识2.不适用于合同项目的开发3.过多的迭代造成成本增加,延迟提交时间
  • 软件开发方法

    • 结构化方法
    • 面向对象方法
    • 相同点:
      • 都是软件系统的开发方法
      • 在运用分解和抽象原则上的要求是完全一致的。
      • 局部化和重用性设计上的一致。
    • 不同点:
      • 结构化方法是一种面向数据流的开发方法,面向对象方法是一种面向对象的开发方法
      • 处理问题时的出发点不同。前者是一种面向过程的开发方法
      • 处理问题的基本单位和层次逻辑关系不同
      • 数据处理方式与控制程序方式不同
      • 分析设计与编码转换方式不同
  • 软件工程工具(泛指软件开发全过程中使用的各种程序系统)

    • 工具
    • 工具接口
    • 用户接口
  • *CASE(计算机辅助软件工程)原指支持管理信息系统开发的、由各种计算机辅助软件和工具组成的大型综合性软件开发环境;现已转化为支持整套独立

  • *CASE的分类

    1. 事务系统规划工具(Business System Planning Tools)
    2. 项目管理工具(Project Management Tools)
    3. 支撑工具(Support Tools)
    4. 分析与设计工具(Analysis and Design Tools)
    5. 程序设计工具(Programming Tools)
    6. 测试与分析工具(Test and Analysis Tools)
    7. 原型建造工具(Prototyping Tools)
    8. 维护工具(Maintenance Tools)
    9. 框架工具(Frame Tools)



二、结构化分析和设计方法

结构化方法的基本思想


  • 结构化方法的特点:自顶向下地分析与设计,逐步求精。

  • 结构化分析

    • 功能建模
    • 数据建模(数据流图、层次化数据流图)
  • 结构化设计

    • 概要设计(软件结构图)
    • 详细设计
  • 数据流图

     

 

中间的订书组去掉


  • 软件结构图

     

     




三、面向对象分析和设计方法概述


概念


  • 面向对象=对象+类+继承+通信

  • 面向对象的特点

    • 抽象性
    • 封装性
    • 共享性(共享【数据结构和行为特征】)
      • 同一类中所有实例共享数据结构和行为特征
      • 同一应用中所有实例通过继承共享数据结构和行为特征
      • 不同应用中所有实例通过复用共享数据结构和行为特征
  • RUP统一开发过程:核心在于用例驱动;以体系结构为核心;以质量控制和风险管理为目标;迭代的、增量的过程

  • RUP的特点


UML统一建模语言


  • *UML的意义

  1. UML统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效的消除了各种建模语言之间不必要的差异。
  2. UML建模能力比其它面向对象建模方法更强。它不仅适合于一般系统的开发,而且对并行、分布式系统的建模尤为适宜。
  3. 使用UML使硬件组件和软件组件之间将会有更大的透明度。便携性和综合效率将会增加。

  • UML视图
    • 用例视图
    • 逻辑视图
    • 构件视图
    • 进程视图
    • 部署视图

  • 四种关系
    • 依赖:一个元素的变化将影响到某个元素或向其提供信息
      ------ ➤
    • 关联
      ——➤
    • 泛化(继承)
      ——➣
    • 实现
      ------➣

虚线为依赖,实线为关联(没屁意义),空心箭头的很容易另记。





四、需求分析与用例建模


概念


  • 需求分析的任务是发现、求精、建模和规格说明的过程。包括
    • 细化在项目开发计划中规定的软件范围
    • 创建所需要的数据模型、功能模型和控制模型
    • 分析可选择的解决方案,并将它们分配到各个软件成分中去
  • 需求分析的步骤
    • 问题识别(需求获取)
    • 分析与综合(需求建模)
    • 编制需求分析阶段的文档(需求描述)
    • 验证(需求评审)

就背括号里的步骤了



  • 场景和用例:用例:系统执行的完整动作,场景:用例的实例

  • 场景的作用

    • 帮助我们验证用例是否能满足客户提出来的需求
    • 驱动测试用例的编写
  • 规格说明

    • 用例名称
    • 用例简述
    • 行为者
    • 前置条件
    • 后置条件
    • 基本事件流
    • 备选事件流
    • 异常事件流

用例图后要写,必背



用例建模


  • 用例之间的关系(包含、扩展、泛化)

 


  a. 关联(Association)
  表示参与者与用例之间的通信,任何一方都可发送或接受消息。
  【箭头指向】:指向消息接收方


  b. 泛化(Inheritance)
  就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。
  【箭头指向】:指向父用例


  c. 包含(Include)
  包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤。
  【箭头指向】:指向分解出来的功能用例


  d. 扩展(Extend)
  扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。
  【箭头指向】:指向基础用例


  e. 依赖(Dependency)
  以上4种关系,是UML定义的标准关系。但VS2010的用例模型图中,添加了依赖关系,用带箭头的虚线表示,表示源用例依赖于目标用例。
  【箭头指向】:指向被依赖项

 


  • 一个用例图示例:




  • 关系的使用(这段文字太绕了不看了)
    • 一个用例偶尔使用另一个用例的功能描述时,采用继承关系
    • 两个以上用例重复处理同样的动作,可采用使用关系或包含关系
    • 用例要采用多种控制方式对异常或任选动作进行处理时,采用扩展关系

一个例子


包括可以简单理解成这个用例有什么,比如订购的内容是提供用户信息、付款安排等
扩展就是定购额外做的事情,我理解呢就是这个这个事物本身不一定要,但是在这次建模里有特殊性才附加



案例(一定要看书上两个案例)


  • 本人写的只具有参考作用

  1. 请根据以下要求画出一个保险业务相关的用例图。
    参保顾客与保险公司业务员签署保险凭单;保险公司业务员统计自己业务范围内的保险金额和参保顾客人数;保险公司业务经理查询统计公司所有保险总金额和参保顾客总人数。

1.先画出顶层用例图

 

下面针对保险业务处理、统计个人业务、查询统计全公司业务分别进行细化


  • 保险业务处理
    • 查看并选择保险业务
    • 签署保险凭证
  • 统计个人业务
    • 统计自己参保顾客人数
    • 统计自己业务金额
  • 查询统计全公司业务
    • 查看公司总保险人数
    • 查看公司保险总金额

我觉得这样写的太马虎了考试一定多想点方面




 


推荐阅读
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
author-avatar
mzyzzyk
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有