软件分析

用户和开发者都会关心软件的需求,都希望通过需求分析弄清楚 “需要软件做什么”,但他们理解问题的角度却各不相同。一般来说,用户只注重软件的外在表现,即软件需求。开发者更加关注软件的内部逻辑,称为软件分析。前者从软件使用者角度出发,而后者则是从软件开发者的角度出发

这里首先介绍以下软件分析这一过程,具体采用什么方式实现这一过程,在之后的文章会给出答案


软件设计

软件设计的任务是将分析阶段建立的分析模型转变为软件设计模型。这一过程需要细化解决方案的可视化设计模型,确保设计模型最终能平滑过渡到程序代码。分析模型强调软件应该做什么,设计模型回答该怎么做的问题

特点

  1. 模块与构件

    模块是一个拥有明确输入、输出和特性的程序实体。如果模块的所有输入都是实现功能必不可少的,所有输出都有动作产生,即成为定义明确的模块。对象也是一种模块,由于对象自我封闭的特点,因而更容易在软件设计中被重复使用,这种可重复使用的软件组件称为软件构件

  2. 抽象与细化

    抽象是控制复杂性的基本策略之一。抽象是分层次的,在软件的抽象层次中,最高层抽象程度最高,若需要系统某部分细节,可移向较低层次的抽象
    软件设计其实就是在不同抽象级别考虑和处理问题的过程。首先在最高级抽象级别上,概括问题解的形式;然后不断具体化,降低抽象级别;最后在最低的抽象级别上给出实现问题的解,即源代码。在由高级抽象到低级抽象转换的过程中,要进行一系列过程抽象和数据抽象,这就是细化
    过程抽象是把完成一个特定功能的动作序列抽象为一个过程名和参数表,然后通过指定过程名和实际参数调用此过程;数据抽象把一个数据对象的定义抽象为一个数据类型名,用此类型名可定义多个具有相同性质的数据对象
    细化的实质就是分解。在逐步细化中,特别强调这种分解的 “逐步” 性质,即每一步分解仅较其前一步增加少量的细节

  3. 信息隐藏

    模块内部的数据和过程,对不需了解的数据和操作进行隐藏。只允许为了完成软件总体功能而必须在模块间交换的信息进行传递

  4. 软件复用

阶段

传统的设计任务通常分两个阶段完成。第一个阶段是概要设计,包括结构设计和接口设计,并编写概要设计文档;第二个阶段是详细设计,确定各个软件部件的数据结构和操作,产生描述各软件部件的详细设计文档。每个阶段完成的文档都必须经过复审

  1. 数据设计

    将分析阶段创建的信息模型转变为软件所需数据结构

  2. 体系结构设计

    定义软件主要组成部件之间的关系

  3. 接口设计

    描述软件内部、软件和接口系统之间以及软件与人之间如何通信

  4. 过程设计

    将软件体系结构的组成部件转变为对软件组件的过程性描述

模块化设计

模块化设计的目的是按照规定原则把大型软件划分为一个个较小的,相对独立但相互关联的模块。分解和模块独立性是实现模块设计的重要指导思想

  1. 分解

    将系统分解成它的组成部分,成为模块、对象或构件

  2. 模块独立性

    独立性可以从两个方面来度量,即模块本身的内聚和模块之间的耦合。前者指模块内部各个成分之间的联系,所以也称块内联系或模块强度;后者指一个模块与其他模块间的联系,所以又称块间联系。模块独立性越好,内聚越强,耦合越弱

    1. 内聚

      内聚是从功能角度对模块内部聚合能力的量度。按照从弱到强可分为七类

      低内聚包括左侧三类模块:偶然性模块、逻辑性模块和时间性模块。偶然性模块,块内各组成成分在功能上互不相关。逻辑性模块,由若干个逻辑功能相似的成分组成。时间性模块,这类模块所包含的成分,是由相同的执行时间而联结在一起的

      中内聚包括第四、第五类模块:过程性模块和通信性模块。当一个模块中包含的一组任务必须按照某一特定的次序执行时,就称为过程性模块。通信性模块,这类模块的标志是,模块内部的各个成分都使用同一种输入数据,或者产生同一个输出数据,它们靠公用数据而联系在一起

      高内聚模块包括最右端的两类:顺序性模块和功能性模块。顺序性模块,这类模块中的各个组成部分是顺序执行的,在通常情况下,上一个处理框的输出就是下一个处理框的输入;功能性模块,在这类模块中,所有的成分结合在一起,用于完成一个单一的功能

    2. 耦合

      耦合是对软件内部块间联系的度量。同样按照从弱到强可分为七类

      弱耦合包括左侧三种情况。如图所示,模块1与2为同级模块,相互之间没有信息传递,属于非直接耦合。模块3、4都是模块1的下属模块。模块1调用它们时,可通过参数表与它们交换数据。如果交换的都是简单变量,便构成数据耦合;如果交换的是数据结构,便构成特征耦合

      控制耦合是中等强度的耦合。此时在模块间传递的信息不是一般的数据,而是用过控制信号的开关值或标志量。因此,控制模块必须知道被控模块的内部逻辑,从而增强模块间的相互依赖

较强耦合外部耦合、公共耦合两类,若允许一组模块访问同一个全局变量,可称它们为外部耦合;若允许一组模块访问同一个全局性的数据结构,则称之为公共耦合

最强的一类耦合是内容耦合。如果一个模块可以直接调用另一模块中的数据,或者允许一个模块直接转移到另一个模块中去,就称它们间的耦合为内容耦合

软件工程(五)软件分析和软件设计相关推荐

  1. 【软件分析】软件分析、设计与建模迭代式详解

    软件分析.设计与建模迭代式详解 1.introduction 1.1 OOA/D 1.2 Iterative, Evolutionary, and Agile 2.Case Study and Req ...

  2. <软件工程>个人作业:软件案例分析

    作业:软件案例分析 项目 内容 这个作业属于哪个课程 2023年北航敏捷软件工程 这个作业的要求在哪里 个人作业-软件案例分析 我在这个课程的目标是 了解软件工程的涵义和内容,提高个人.团队的动手和实 ...

  3. 现代软件工程 团队作业 - 软件分析和用户需求调查 (2013 - 2014)

    [现代软件工程 的讲义] 医学院的学生, 要练习解剖人体;  MBA 的学生, 要剖析某公司的成败: 法律系的学生,要阅读和分析大量案例...... 软件行业的从业人员, 不管是项目经理, 开发或测试 ...

  4. 软件分析与设计:分析什么?如何设计?

    简介:分析与设计这两个词我们平时经常听到,也经常讲,那么分析与设计的本质究竟是什么呢?到底要分析什么?又到底要怎样去设计?这3个问题如果平时没有一些积累,突然被问到这些,一时也会显得不知所措.接下面在 ...

  5. 现代软件工程 团队作业 - 软件分析和用户需求调查 (2013)

    [现代软件工程 的讲义] 医学院的学生, 要解剖人体; 软件行业的从业人员, 不管是项目经理, 开发或测试人员, 都要学会解剖分析软件, 我们就来试试看. 要求: 通过定性, 定量地分析, 总结和评定 ...

  6. 软件的接口设计图_面向服务架构(SOA)的汽车软件分析和设计

    --后台回复"资料",领取特斯拉专利技术解析报告-- 文章转自:联合电子 本文将先重温下SOA架构的核心要素与优势,并重点讨论话题"面向服务架构(SOA)的汽车软件分析和 ...

  7. 五款数字孪生软件大比拼:优缺点分析测评报告

    数字孪生(Digital Twin)作为当前最为火热的技术之一,已经被广泛应用于各种领域,包括航空.交通.能源.医疗.智能制造等行业.在数字孪生的实现中,数字孪生软件起到了重要的作用,因此市面上出现了 ...

  8. 小学生数学测试软件编写分析,小学生数学测试软件C语言课程设计

    <小学生数学测试软件C语言课程设计>由会员分享,可在线阅读,更多相关<小学生数学测试软件C语言课程设计(26页珍藏版)>请在人人文库网上搜索. 1.C语言课程设计设计期限 20 ...

  9. 五款高效的交互设计软件,每个都是提升效率的好帮手

    作为交互设计软件UI设计的重要工具不仅是高效工作的体现,也是客户体验友好的保证.拥有多功能.灵活的交互设计软件是每个交互设计师的工作需求.在本文中,我们精心挑选了五款实用高效的交互设计软件.无论是追求 ...

  10. 火车售票系统(基于UML的软件分析与设计模型建模实验)

    火车售票系统(基于UML的软件分析与设计模型建模试验) 文章目录 火车售票系统(基于UML的软件分析与设计模型建模试验) 一.需求 二.UML用例图 三.UML类图 四.UML时序图 一.需求 实现一 ...

最新文章

  1. 在Ubuntu14.04安装F.lux
  2. iMeta期刊推特官方帐号@iMetaJournal上线
  3. 覆盖(override)和重载(overload)
  4. VS2015智能提示由英文改为中文
  5. java线程 demo_Java多线程demo
  6. 概要设计 重要性_儿童户外游乐场应如何设计-户外游乐设备厂家【经验分享】...
  7. 总说数据分析,你知道产品设计中各环节怎么运用数据么
  8. 表空间迁移(transport tablespace)测试案例
  9. Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json
  10. arduino esp8266_Arduino-httpupdate-OTA-esp8266升级探险记
  11. poj3254(状压dp入门第一道题,很详细)
  12. java怎么实现有消息时显示红点_Android中的红点提示怎么统一实现?
  13. JavaWeb POI 将数据从数据库导出到Excel表 实例(亲测有效!)
  14. matlab怎么进行积分,如何利用MATLAB求解积分与微分?
  15. iOS如何通过安装描述文件获取设备UDID
  16. origin画图_Origin作图过程中如何让图看起来更生动
  17. 解决Charles手机抓包出现unknown和乱码的问题
  18. Windows系统文件类型大全
  19. 视频会议十大开源项目
  20. matlab相位增量法图,基于相位增量的相位优化快速算法分析

热门文章

  1. LINUX矩阵键盘简单介绍,矩阵键盘程序流程图的详细介绍
  2. VC编程助手_VC Assist(内附VC显示行号) VC插件
  3. 【C语言程序设计(2020版)】C语言基础入门教程,零基础教学视频教程
  4. 程序员可以培养的第二技能有哪些?
  5. 工程系列 计算机中级职称,工程类中级职称有哪些
  6. Python 解析风云四A卫星L1级别数据以及绘制卫星云图
  7. 网站页面底端“本站已经安全运行XX年XX天XX秒“代码
  8. 飞龙推荐三个swf互转gif格式工具及flash直接保存gif动画方法
  9. 谷歌地球看不了街景_PPT放入3D模型之后,居然能模拟谷歌地图!
  10. linux加载显卡驱动模块,linux怎样加载显卡驱动,急,在线等