目录

软件工程之总体设计

软件工程之总体设计

总体设计是软件工程中的一个重要阶段,它关注整个系统的结构和组织,旨在将系统需求转化为可执行的软件解决方案。总体设计决定了系统的架构、模块划分、功能组织以及数据流和控制流等关键方面。

具体方面:经济可行性、技术可行性、操作可行性、法律可行性、时间可行性

是用管理员,技术人员和用户都能理解的术语来描述的具体内容,包括

1、软件的范围(软件功能规模、软件能力对硬件的要求)

2、环境资源(人力资源、硬件、软件、制定进度表、软件成本)

软件价格估计:参数化算法:C=f(v) c是原件价格 v所选取的应i想软件价格的独立参数

代码行估算 源代码行,不包括注释行

1、在开始建立分析模型前,先理解问题

2、开发原型,使得用户将如何发生人机交互

3、记录每个需求的起源和原因

4、使用多个需求视图

5、给需求赋予优先级

6、努力删除含糊性

探索型、实验型、进化型

软件开发模型

https://i-blog.csdnimg.cn/blog_migrate/7e1618c53882d5f9ef141219818cc5a5.png

软件开发过程

https://i-blog.csdnimg.cn/blog_migrate/779b10845691b459d5c2b7b192080fec.png

1、将系统 划分成物理元素,即程序、文件、数据库和文档等。

2、设计软件结构,即将需求规格转换为体系结构,划分出程序的模块组成、模块间

的相互关系。确定系统的数据结构、文件结构、数据库模式,确定测试方法与策略。

3、

编写总体设计说明书、用户手册、测试计划,用结构图来描述软件结构,选择分

解功能与划分模块的设计原则。

总体设计步骤

设计供选择的方案

推荐最佳实现方案

设计软件结构

数据库设计

制定测试计划

编写总体设计文档

审查与复审总体设计文档

结构设计准则

1、提高模块独立性   2、选择合适的模块规则    3、适当选择模块的深度、宽度、扇入和扇出  4、模块的作用范围应该在控制范围内  5、降低模块接口的复杂程度  6、设计单入口单出口且功能可预测的模块。

https://i-blog.csdnimg.cn/blog_migrate/5fdd7e06236ef5af33483934cc980474.png

软件工程的三要素:

方法:为软件开发提供了”如何做“的技术

工具:为软件工程方法提供了自动的或半自动的软件支撑环境

软件工程项目的基本目标:

付出较低的开发成本、达到要求的软件工程、取得较好的软件性能、开发的软件易于移植、需要较低的维护费用、能按时完成开发工作,及时交付使用

软降工程的原理:

1、用分阶段的生存周期计划严格管理

2、坚持进行阶段评审

3、实行严格的产品控制

4、采用现代程序设计技术

5、结果应能清楚的审查

6、合理安排软件开发小组的人

7、承认不断改进软件工程实践的必要性

结构化设计过程:

https://i-blog.csdnimg.cn/blog_migrate/a19b775cc7e7072e66d8aefc90a04a2c.png

总体设计是软件工程开发过程中的关键阶段,它涉及到整个系统的结构、模块划分、接口定义等内容。下面是一个示例代码片段,展示了一个图书管理系统的总体设计模型。

class Book:
    def __init__(self, title, author, isbn):
        self.title = title
        self.author = author
        self.isbn = isbn

class Library:
    def __init__(self):
        self.books = []

    def add_book(self, book):
        self.books.append(book)

    def remove_book(self, book):
        self.books.remove(book)

    def search_book_by_title(self, title):
        result = []
        for book in self.books:
            if book.title == title:
                result.append(book)
        return result

    def search_book_by_author(self, author):
        result = []
        for book in self.books:
            if book.author == author:
                result.append(book)
        return result

# 示例用法
library = Library()
book1 = Book("Python Crash Course", "Eric Matthes", "978-1593276034")
book2 = Book("Clean Code", "Robert C. Martin", "978-0132350884")
library.add_book(book1)
library.add_book(book2)

result = library.search_book_by_author("Eric Matthes")
for book in result:
    print(book.title)

上述代码中,我们定义了两个类: Book 表示一本图书,具有标题、作者和ISBN号等属性; Library 表示图书馆,具有添加、删除和搜索图书的功能。在 Library 类中,我们使用列表来存储所有的图书对象,并提供了根据标题和作者进行搜索的方法。

示例用法展示了如何创建图书对象、将图书添加到图书馆中,并通过作者搜索图书并打印出结果。

这个示例只是一个简单的总体设计示例,实际的总体设计需要更全面地考虑系统的结构、模块划分、接口定义等。总体设计的目标是确保系统具有良好的扩展性、可维护性和可测试性,以便在后续的开发过程中更好地实现需求和功能。

  1. 理解需求 在总体设计之前,需要全面理解系统的需求和用户的期望。这包括功能需求、性能需求、安全性要求和可靠性需求等方面。只有充分理解需求,才能确保设计出满足用户需求的系统。
  2. 系统架构设计 系统架构是总体设计的核心部分,它定义了系统的整体结构和组织方式。在架构设计阶段,需要确定系统的层次划分、模块划分和模块间的关系。常见的架构模式包括分层架构、客户端-服务器架构和面向服务架构等。
  3. 模块划分和组织 根据系统需求和架构设计,将系统功能划分为若干个模块,每个模块负责实现特定的功能。模块划分应遵循高内聚、低耦合的原则,使得各个模块之间的依赖关系尽可能简化。同时,需要确定模块间的接口和数据交换方式。
  4. 接口定义和规范 在总体设计中,需要明确定义模块之间的接口和数据交换格式。接口规范应该清晰、简洁,并符合标准化的设计原则。良好定义的接口有助于模块的独立开发和集成,并提升系统的可维护性和可扩展性。
  5. 数据流和控制流设计 总体设计需要考虑系统中的数据流和控制流。数据流描述了信息在系统内部和外部的传递路径,控制流描述了系统中各个模块或组件的执行顺序和条件流转。理解和规划数据流和控制流有助于保证系统的正确性和高效性。
  6. 技术选型和工具选择 总体设计阶段需要选择合适的技术和工具来支持系统的实现和开发过程。这包括选择编程语言、开发框架、数据库系统等。技术选型应该考虑系统需求、开发团队的技术能力以及尽可能利用已有的资源和经验。
  7. 风险评估和管理 在总体设计过程中,需要进行风险评估和管理。识别潜在的风险和问题,并采取相应的措施进行规避或降低风险。这有助于确保系统的稳定性和可靠性。
  8. 文档化 总体设计阶段需要产出详细的设计文档,包括系统架构图、模块划分、接口定义、数据流程图等。这些文档有助于开发团队和其他相关人员理解和实施系统的设计方案。同时,文档也是后续维护和升级的重要依据。