软件工程导论(三)系统概要设计

一、系统设计概述

1.1系统设计概述

设计和抽象

  • 系统行为驱动完成设计
  • 面向对象设计
  • 系统数据驱动完成设计

面向操作的设计        面向数据的设计

设计主要分为三个步骤:
概要设计:接收需求的文档,完成模块的分解
详细设计:根据分解后的模块,设计其内部的细节(算法、数据结构、变量等)

模块

(模块是一个词汇上邻接的程序语句序列,由边界元素限制范围,有一个聚合标识符)

语义邻接的程序语句组成
存在开始和结束的标志即存在边界
具有聚合标识符

高内聚,低耦合

1.2模块内聚

偶然内聚

一个模块执行多个完全不相同的功能,没有任何逻辑关系

某些规定规定了每个模块必须具有一定的规模

可维护性下降
重用难度大

内聚度最低

解决:

完成功能分割

逻辑内聚

一个模块可以执行许多相关操作,由调用模块来进行选择的内聚情况

存在接口难以理解的问题
修改模块内容容易影响其他模块

难以重用

时间内聚

许多操作的执行与时间相关,没有逻辑性(动作有时间先后,没有逻辑先后)

模块内部相互关联比较弱,与外部关联比较强
软件模块可重用性差

解决:

完成功能分割

过程内聚 (内聚高于前三者)

许多操作有逻辑的先后关系(顺序颠倒则功能无法实现)

动作关联关系不是很强
重用性差

通信内聚

执行一系列操作,与产品要执行的顺序有关,并且是对同一数据进行操作

重用性差

功能内聚

只执行一个操作,或者只完成一个功能

重用可能性是最大的
比较容易进行改正性维护
容易实现产品的扩展

信息内聚(理想内聚最高)

许多操作,每一个操作都有自己的入口。每一个操作有自己的代码,每一个操作都基于相同的数据

在这里插入图片描述

 1.3模块耦合

内容耦合

两个模块中,一个模块的内容直接引用另一个模块的内容

一个模块的修改会引起两个模块的变化,增加维护成本

公共耦合

两个模块同时存取相同的全局数据

问题

  • 具有边界影响,存在并发影响和控制影响,维护困难
  • 维护一个模块的全局变量的时候,会影响其他模块
  • 难以在新的目标系统中重用
  • 使边界影响变得不清晰
  • 导致计算机犯罪

控制耦合

两个模块,一个模块给另一个模块传递控制要素(简单信息 or 控制信息-动作指令)

两个模块相互制约相互影响,独立性差
一个模块必然会存在逻辑内聚

标记耦合

两个模块之间传递一个数据结构,调用模块只对数据结构的一部分进行操作

不清晰,传递的数据结构名称不能判断使用了什么信息
维护困难
重用可能性低
传递了多余数据

数据耦合(理想)

两个模块的所有的参数都是同类数据项(传递简单参数 or 传递的数据结构中所有数据项都被使用)

1.4面向操作的设计

前期数据流程图必须能够详细的描述操作

  • 变换型(由数据流图判断两个最高抽象点,得到逻辑输入、逻辑输出和逻辑处理)
  • 事务型(分解成事务分析器和事务派发器)

1.5面向数据的设计

首先确定数据结构再确定产品结构

Jackson

  • 数据结构表示(用Jackson图的方式)
  • 找出输入数据结构和输出数据结构之间的关系(有直接因果关系,能同时处理的 || 对于重复的数据必须是重复的次序和次数都相同才有可能有对应关系)
  • 按输入和输出数据结构画出处理框(如果层次不同,要按照层次较低的那个设计)
  • 列出所有的操作和条件,
  • 并标注到程序结构图的位置
  • 采用伪代码描述

二、系统详细设计

确定每个模块内采用的算法和数据结构
外部接口和用户界面设计
用某种表达工具详细表达

NS图

PAD图(问题分析图)

在这里插入图片描述

 判定表

判定树在这里插入图片描述 H图,IPO图,HIPO图

在这里插入图片描述

在这里插入图片描述 面向对象的分析建模

  • 需求建模
  • 分析建模
  • 设计建模

面向操作的设计

 

软件工程导论课程设计的目的是让学生通过实践掌握软件工程的基本原理和方法,提高软件开发的能力和水平。课程设计要求学生团队协作完成一个小型软件项目,包括需求分析、设计、编码、测试等环节,并撰写相应的文档。下面是一个软件工程导论课程设计的示例: 假设我们要设计一个简单的学生信息管理系统,包括以下功能: 1. 添加学生信息 2. 删除学生信息 3. 修改学生信息 4. 查询学生信息 我们可以按照软件工程的基本流程进行设计: 1. 需求分析 - 确定系统的功能需求 - 确定系统的性能需求 - 确定系统的界面需求 - 确定系统的安全需求 2. 概要设计 - 确定系统的模块划分 - 确定系统的数据结构 - 确定系统的算法 3. 详细设计 - 设计系统的每个模块的接口和实现 - 设计系统的每个模块的测试用例 4. 编码 - 按照详细设计实现每个模块 - 编写测试用例并进行测试 5. 测试 - 对整个系统进行测试 - 发现并修复缺陷 6. 维护 - 对系统进行维护和升级 在实现学生信息管理系统的过程中,我们可以使用Python语言和MySQL数据库。下面是一个Python实现的示例: ```python import mysql.connector # 连接数据库 mydb = mysql.connector.connect( host="localhost", user="root", password="123456", database="test" ) # 创建表 mycursor = mydb.cursor() mycursor.execute("CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)") # 添加学生信息 def add_student(name, age): sql = "INSERT INTO students (name, age) VALUES (%s, %s)" val = (name, age) mycursor.execute(sql, val) mydb.commit() # 删除学生信息 def delete_student(id): sql = "DELETE FROM students WHERE id = %s" val = (id,) mycursor.execute(sql, val) mydb.commit() # 修改学生信息 def update_student(id, name, age): sql = "UPDATE students SET name = %s, age = %s WHERE id = %s" val = (name, age, id) mycursor.execute(sql, val) mydb.commit() # 查询学生信息 def query_student(id): sql = "SELECT * FROM students WHERE id = %s" val = (id,) mycursor.execute(sql, val) result = mycursor.fetchone() return result # 测试 add_student("Tom", 18) add_student("Jerry", 19) update_student(1, "Tim", 20) delete_student(2) result = query_student(1) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟雨平生9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值