软件设计
- 格式:doc
- 大小:969.00 KB
- 文档页数:53
软件设计的设计方案一、引言随着科技的不断发展,软件设计在现代社会中扮演着至关重要的角色。
软件设计的设计方案是指在开发软件之前,为了满足用户需求和系统要求而制定的详细计划。
本文将探讨软件设计的设计方案,并提供一种适用于大型软件项目的设计方案。
二、需求分析在开始设计软件之前,首先需要进行需求分析。
需求分析是确定软件系统的功能和性能要求的过程。
通过与用户和利益相关者的交流,收集和整理需求,以便为软件设计提供准确的指导。
三、系统架构设计系统架构设计是软件设计中的关键步骤。
它定义了软件系统的整体结构和组成部分之间的关系。
在设计系统架构时,应该考虑到系统的可扩展性、可维护性和可靠性。
同时,还应该根据需求分析的结果,选择合适的软件架构模式,如MVC(模型-视图-控制器)或微服务架构。
四、模块设计模块设计是将软件系统划分为相互独立的模块,并定义它们之间的接口和交互方式。
每个模块应该具有清晰的功能和责任,并且能够在不影响其他模块的情况下进行修改和扩展。
在模块设计中,可以使用面向对象的设计原则,如单一职责原则和开闭原则,来提高模块的可复用性和可维护性。
五、数据库设计对于大多数软件系统而言,数据库是存储和管理数据的核心。
在数据库设计中,需要定义数据库的结构和关系,以及实体之间的约束和关联。
此外,还应该考虑到数据的安全性和性能要求,选择适当的数据库管理系统和优化策略。
六、用户界面设计用户界面设计是软件设计中的重要组成部分,它直接影响到用户对软件的使用体验。
在用户界面设计中,应该考虑到用户的习惯和心理需求,以及系统的功能和性能要求。
同时,还应该遵循界面设计的一些基本原则,如一致性、可用性和可访问性。
七、算法设计在某些软件系统中,算法设计是解决特定问题的关键步骤。
在算法设计中,应该选择合适的算法和数据结构,以提高系统的效率和性能。
此外,还应该进行算法的正确性和可靠性验证,以确保系统的正确运行。
八、测试策略测试策略是为了验证软件系统的正确性和可靠性而制定的计划。
软件整体设计方案(一)引言概述:软件整体设计方案是在软件开发过程中非常重要的一部分,它定义了软件系统的整体结构、组件之间的关系以及功能模块的划分。
本文将详细介绍软件整体设计方案的各个方面,包括系统的总体架构、关键模块的设计思路、数据流程的管理等。
正文内容:一、系统总体架构1. 系统架构的选择:根据项目需求和技术特点,选择合适的系统架构,如客户端/服务器架构、分布式架构等。
2. 系统模块的划分:将系统按功能划分为不同的模块,每个模块负责一个明确的功能,模块之间相互独立。
3. 模块间的通信方式:确定各模块之间的通信方式,如使用消息队列、远程调用等技术实现模块间的数据传递和交互。
4. 大规模数据的处理:对于需要处理大规模数据的模块,设计合适的数据处理策略,如利用分布式计算来加速数据处理速度。
二、关键模块的设计思路1. 模块功能的定义:对于系统中的关键模块,明确其功能和需求,确保设计与实现的一致性。
2. 模块的接口设计:设计模块间的接口,包括输入输出格式、参数传递方式等,以确保不同模块的兼容性和通用性。
3. 组件的选择与设计:选择合适的组件来实现功能,如选择合适的数据库、消息队列等。
4. 模块的性能优化:对于性能要求较高的模块,进行优化设计,如并发处理、缓存机制等,以提高系统的性能和吞吐量。
5. 模块的可扩展性考虑:考虑未来需求的变化,设计模块的可扩展性,使系统能够容易地进行功能扩展和升级。
三、数据流程的管理1. 数据的流向和存储:设计数据的流向和存储方式,如合理划分数据库表结构、使用合适的缓存策略等。
2. 数据的处理流程:设计数据的处理流程,包括数据的采集、清洗、计算和存储等环节,确保数据的完整性和准确性。
3. 异常处理机制:设计异常处理机制,对于异常情况及时捕获和处理,确保系统的稳定性和可靠性。
4. 数据库事务管理:对于需要保证数据一致性的操作,设计合适的事务管理策略,确保数据的正确性和可靠性。
5. 数据备份与恢复:设计合适的数据备份和恢复策略,以应对系统异常和故障,保证数据的可靠性和安全性。
软件设计的理解和流程一、软件设计的概念软件设计是指在软件开发的过程中,结合用户需求以及技术和资源的限制,设计出软件系统的结构和功能,以及解决方案和实现方法的过程。
其中,包括需求分析、功能设计、模块设计、接口设计、数据结构设计等方面的工作。
二、软件设计的流程1.需求分析根据用户需求以及业务流程,明确软件系统的功能、性能、可靠性等要求,并对需求进行分析和细化,形成需求规格说明书。
2.概要设计根据需求规格说明书,确定软件系统的总体架构,包括系统组成部分、各个模块之间的关系和接口,以及数据流程等。
3.详细设计根据概要设计,对每个模块进行详细设计。
包括界面设计、业务逻辑设计、数据结构设计、算法设计等方面。
4.编码实现根据详细设计,进行编码实现。
编写代码、进行单元测试、进行代码审核,确保代码质量。
5.测试验证根据需求规格说明书,制定测试计划和测试用例,并进行测试,以验证软件系统是否达到用户需求以及规格说明书的要求。
6.维护管理在软件系统交付后,进行维护管理工作。
包括维护文档、修改和发布版本、提供技术支持等方面的工作。
三、软件设计的重要性1.减少开发成本软件设计能够在开发的前期进行需求分析和方案设计,能够在开始动手写代码之前,尽可能多的预测到问题并解决掉。
从而可以在开发后期减少不必要的修改和调试工作,降低开发成本。
2.提高开发效率软件设计可以形成完整的软件设计方案,同时也可以分阶段分模块地进行设计、编码和测试,使得开发流程合理顺畅,提高开发效率。
3.降低风险软件设计可以提前发现和解决一些问题,从而避免软件在正式使用前出现错误和漏洞,降低使用过程中的风险。
4.增强软件质量软件设计是创建软件的基础,能够在设计方案中提前规划好软件各方面的要求和特性,保证软件能够达到预期的质量要求。
总之,软件设计是软件开发过程中必不可少的一环,其重要性不言而喻。
只有通过良好的软件设计,才能使软件开发过程更加科学、规范、高效,从而创造出更优质、更安全、更符合用户需求的软件系统。
软件设计活动软件设计包括4个既独立又相互联系的活动,即数据设计、体系结构设计、接口设计(界面设计)和过程设计。
这4个活动完成以后就得到了全面的软件设计模型。
设计方法也是以后实现设计模型的蓝图和软件工程活动的基础。
数据设计是实施软件工程中的4个设计活动中的第一个。
由于数据结构对程序结构和过程复杂性都有影响,因此数据结构对软件质量的影响是很深远的。
好的数据设计将改善程序结构和模块划分,降低过程复杂性。
数据设计将分析时创建的信息域模型变换成实现软件所需的数据结构。
在E-R图中定义的数据对象和关系,以及数据字典中描述的详细数据内容为数据设计活动奠定了基础。
体系结构设计的主要目标是开发一个模块化的程序结构,并表示出模块间的控制关系。
此外,体系结构设计将程序结构和数据结构相结合,为数据在程序中的流动定义了接口。
接口设计描述了软件内部、软件和协作系统之间,以及软件与人(用户)之间如何通信。
一个接口意味着信息流(如数据和/或控制流),因此,数据和控制流图提供了接口设计所需的信息。
接口设计要实现的内容包括一般交互、信息显示和数据输入。
接口设计主要包括以下3个方面。
(1)设计软件模块间的接口。
(2)设计模块和其他非人的信息生产者和消费者(比如外部实体)之间的接口。
(3)设计人(用户)和计算机间的接口(通常简称为“人机接口”或“人机界面”)。
过程设计应该在数据设计、体系结构设计和接口设计完成之后进行。
所有的程序都可以建立在一组已有的逻辑构成元素上,这一组逻辑构成元素强调了“对功能域的维护”,其中每个逻辑构成元素都有可预测的逻辑结构,即从顶端进入,从底端退出,读者可以很容易地理解过程流。
软件的设计方法有哪些
软件的设计方法有以下几种:
1. 结构化设计方法:通过分解问题和程序的结构,将程序逐步分解为模块,每个模块负责一个特定的任务,然后再将模块逐步组合为完成整个程序的结构。
2. 面向对象设计方法:将问题和程序转化为对象、类、关系和消息的组合,通过继承、封装和多态等机制进行设计和实现。
3. 数据驱动设计方法:通过分析和确定程序所要处理的数据,然后根据数据之间的关系和处理需求,设计相应的数据结构和算法。
4. 基于模型的设计方法:通过建立问题和程序的模型,对问题的结构和要求进行分析和建模,然后基于模型进行设计和实现。
5. 基于约束的设计方法:通过分析和确定问题的约束条件,例如时间、空间、资源等方面的约束,然后在这些约束条件下进行设计和实现。
6. 总体-细节设计方法:先从整体上对程序进行设计和规划,然后再逐步细化为具体的细节设计。
7. 适应性设计方法:根据问题的变化和需求的变化,进行灵活的设计和调整,
能够适应不断变化的情况。
8. 模式化设计方法:通过使用已经提出的设计模式,遵循模式的规则和原则进行设计和实现,以提高软件的可重用性和可维护性。
以上是软件设计常用的几种方法,每种方法都有其适用的场景和特点,根据具体的问题和需求,选择合适的设计方法进行软件的设计。
软件总体设计的内容全文共四篇示例,供读者参考第一篇示例:软件总体设计是软件工程中非常重要的一个阶段,它直接决定了后续软件开发工作的方向和效果。
软件总体设计包括对软件系统整体结构、模块划分、接口设计、数据设计、性能要求等方面进行详细规划和设计。
下面将就软件总体设计的内容进行详细介绍。
一、整体结构设计在软件总体设计阶段,首先需要对整体结构进行设计。
整体结构设计是指确定系统的各个功能模块之间的关系和层次结构,建立模块之间的调用关系和数据传递方式。
需要考虑到系统的可拓展性、可维护性以及模块之间的耦合度等因素。
在确定整体设计的过程中,通常采用模块化设计的方法,将整个系统分解为多个独立的功能模块,每个模块负责一个明确的功能或任务。
要考虑到整体结构的灵活性,以便在后续的开发过程中能够方便地进行模块的增加、修改或删除。
二、模块划分设计模块划分设计是软件总体设计的核心部分之一。
在模块划分设计阶段,需要根据系统的功能需求和业务流程,将整个系统划分为若干个相对独立的模块。
每个模块负责完成系统中的一个功能或一组功能,并且具有清晰的接口和数据通信方式。
模块划分的设计应该考虑到模块之间的逻辑关系和依赖关系,使得每个模块的职责清晰明确,功能独立完整。
还应该避免模块之间的循环依赖和耦合,以确保系统的稳定性和可扩展性。
三、接口设计接口设计是软件总体设计中非常重要的一个环节。
接口设计涉及到模块之间的数据通信方式、消息传递格式、参数传递规范等方面。
一个好的接口设计可以提高模块之间的协同工作效率,降低开发和测试的难度。
在进行接口设计时,需要考虑到接口的简洁性、可读性和易用性。
接口应该具有清晰的功能定义和参数说明,使得开发人员能够快速地理解和使用。
还需要考虑到接口的稳定性和兼容性,以确保模块之间的通信能够顺利进行。
四、数据设计数据设计是软件总体设计中不可忽视的一个环节。
数据设计涉及到系统中的数据结构、数据库设计、数据存储方式等方面。
一个好的数据设计可以提高系统的性能和稳定性,减少数据处理的复杂度。
简述软件设计的两种分类方法软件设计是指根据用户需求和系统要求,对软件进行规划、设计和实现的过程。
软件设计可以分为两种分类方法:结构化设计和面向对象设计。
一、结构化设计结构化设计是一种传统的软件设计方法,它采用模块化的思想来组织程序。
结构化设计的主要特点包括:1. 模块化:将程序分解成若干个相互独立的模块,每个模块只负责完成一个特定的功能。
2. 自顶向下:从整体到局部进行逐步分解,直到最小单元为止。
3. 逐步细化:对每个模块进行进一步细化,直到可以编写代码为止。
4. 结构图:采用流程图或草图等方式表示程序结构。
二、面向对象设计面向对象设计是一种相对较新的软件设计方法,它以对象为中心来组织程序。
面向对象设计的主要特点包括:1. 封装性:将数据和操作封装在一个对象中,保证数据安全性和操作正确性。
2. 继承性:通过继承机制实现代码重用和扩展性。
3. 多态性:同一个操作可以作用于不同类型的对象上,并且具有不同行为表现。
4. 类图:采用类图表示程序结构。
三、软件设计的流程无论是结构化设计还是面向对象设计,软件设计都有一定的流程。
下面是软件设计的一般流程:1. 需求分析:明确用户需求和系统要求,确定软件功能和性能指标。
2. 概要设计:根据需求分析结果,进行概念性的设计,确定程序框架和模块划分。
3. 详细设计:对每个模块进行详细的设计,包括数据结构、算法、接口等。
4. 编码实现:根据详细设计结果编写代码,并进行单元测试和集成测试。
5. 调试测试:对整个程序进行测试和调试,保证程序正确性和可靠性。
6. 维护更新:对程序进行维护和更新,保证程序持续稳定运行。
四、总结软件设计是一个复杂的过程,需要遵循一定的方法和流程。
结构化设计和面向对象设计都有各自的特点和优势,在实际应用中需要根据具体情况选择合适的方法。
同时,在软件开发过程中还需要注意代码质量、可读性、可维护性等方面,以提高软件开发效率和质量。
软件设计的步骤及原理软件设计的步骤及原理可以分为以下几个方面:1. 需求分析:在软件设计的起始阶段,需求分析是非常关键的一步。
通过与客户或用户沟通,了解他们的需求和期望,收集、分析和整理用户需求,明确软件要解决的问题。
2. 概要设计:在需求分析的基础上,进行概要设计。
主要包括对软件系统的整体结构和模块划分,以及模块之间的接口设计等。
概要设计的目标是为软件的详细设计提供一个框架。
3. 详细设计:在概要设计的基础上,进行详细设计。
详细设计主要涉及到各个具体的模块的设计,包括确定模块的数据结构、算法、界面设计等。
详细设计需要遵循一些设计原则,如高内聚低耦合、模块化、可重用性等。
4. 编码和测试:在详细设计完成后,进行编码和测试。
编码是实现设计的过程,需要根据设计文档进行编写代码。
测试是为了验证代码的正确性和功能的实现,包括单元测试、集成测试和系统测试等。
5. 验收和维护:软件开发完成后,进行验收,与用户进行交互,收集用户反馈并修正问题。
一旦软件交付用户使用,就需要进行维护,包括修复错误、优化性能和功能扩展等。
在软件设计的过程中,有一些基本原理需要遵循:1. 模块化原则:将复杂的系统分解为多个模块,模块之间有清晰的接口定义,各模块之间相互独立,易于编码和调试。
2. 高内聚低耦合原则:模块内部的元素彼此关联紧密,实现单一的功能,而模块之间的依赖关系尽可能少,以减少模块之间的影响。
3. 可重用性原则:设计和编写可重用的模块,提高代码的复用性,减少开发工作量。
4. 抽象和封装原则:将系统的复杂性隐藏在模块内部,对外提供简单的接口,方便使用和维护。
5. 设计模式:使用设计模式可以提供一种在设计过程中常见问题的解决方案,提高代码的可读性和可维护性。
总之,软件设计的步骤和原理旨在确保软件系统能够满足用户需求、具有良好的设计结构、易于维护和扩展。
引言概述:软件设计方案是软件开发过程中的关键步骤之一。
它包含了对软件需求进行分析、设计软件架构、编写代码以及测试和部署等内容。
一个好的软件设计方案可以确保软件开发过程的顺利进行,提高软件的质量和性能。
本文将详细介绍如何编写一个高质量的软件设计方案。
正文内容:1.软件需求分析1.1确定软件需求在软件设计方案中,首先需要明确软件需求。
这包括对软件功能、性能、安全性等方面的需求进行分析和定义。
可以通过与客户、用户和利益相关者的沟通,以及对现有系统进行调研和分析,来明确软件需求。
2.软件架构设计2.1定义软件架构软件架构是软件系统的基础,它定义了软件组件、模块以及它们之间的关系和交互方式。
在软件设计方案中,需要根据软件需求和系统的特点来定义合适的软件架构。
常用的软件架构包括分层架构、模块化架构、微服务架构等。
2.2确定系统接口和交互方式在设计软件架构时,需要考虑系统与外部环境的接口和交互方式。
这包括与其他系统的数据交换、与用户的交互界面等。
通过明确系统接口和交互方式,可以确保软件系统的稳定性和可扩展性。
3.编写代码和实现3.1选择合适的编程语言和开发工具在编写代码之前,需要选择合适的编程语言和开发工具。
根据软件需求和开发团队的能力,选择适合的编程语言和开发工具,并熟悉其使用方法。
3.2遵循良好的编码规范在编写代码时,需要遵循良好的编码规范。
这包括统一的命名规则、代码缩进、注释等。
通过遵循良好的编码规范,可以提高代码的可读性和可维护性。
3.3进行代码测试和调试在编写代码后,需要进行代码测试和调试。
这包括单元测试、集成测试和系统测试等。
通过测试和调试,可以发现和修复代码中的错误,确保软件的质量。
4.软件测试和部署4.1进行功能测试在完成软件开发后,需要进行功能测试。
功能测试可以验证软件是否满足需求,并发现潜在的错误和问题。
4.2进行性能测试除了功能测试,还需要进行性能测试。
性能测试可以评估软件的性能,包括响应时间、并发处理能力等。
第3章软件设计 (2)3.1 软件设计的基本任务 (3)3.1.1 总体设计的基本任务 (3)3.1.2 详细设计的基本任务 (4)3.2 软件设计的概念和原则 (4)3.2.1 模块化与模块独立性 (4)3.2.2 抽象与细化 (10)3.2.3 信息隐蔽 (11)3.2.4 可重用 (12)3.3结构化设计 (12)3.3.1结构化设计概述 (12)3.3.2结构化设计描述工具 (13)3.3.3 面向数据流的设计 (23)3.3.4 面向数据结构的设计 (27)3.4 面向对象的设计 (35)3.4.1 面向对象的设计概述 (35)3.4.2 系统设计 (36)3.4.3 对象设计 (40)3.4.4 设计模式 (41)3.5 用户界面设计 (43)3.5.1 用户界面设计的一般原则 (43)3.5.2 用户界面设计过程 (44)3.5.3 用户界面设计经验 (45)3.6 设计质量的度量 (46)3.6.1 McCabe方法 (46)3.6.2 Halstead方法 (48)3.7 软件设计CASE工具 (49)第3章软件设计本章要点✧软件设计的基本任务✧软件设计的概念和原则✧结构化和面向对象的设计方法✧用户界面设计过程及原则✧程序复杂性的度量✧常用的软件设计工具本章学习目标✧深刻理解软件设计的基本任务✧深刻理解模块化、模块独立性、抽象、细化、信息隐蔽、可重用等概念,掌握定性度量模块独立性的标准✧熟练掌握结构化设计的总体和详细设计的描述工具,以及面向数据流的设计方法。
理解JSP方法的思想和步骤。
✧理解面向对象的系统设计和对象设计内容,了解设计模式的概念以及使用设计模式的重要性。
✧了解用户界面的设计过程,理解用户界面设计的一般原则✧理解并掌握程序复杂性度量McCabe方法和Halstead方法✧了解并掌握常用的软件设计CASE工具软件设计是在需求分析的基础上,解决将要构造的系统如何完成需求分析阶段所具有的功能,具体怎样干才能完成这些任务。
所以软件设计的主要过程就是将软件需求阶段产生的系统模型转化为软件设计模型的过程,即在这两个模型中建立相应的映射。
与需求分析不同的是,需求的验证是采用以用户为主导,需求分析人员和项目开发人员为辅的验证方式。
就需求内容来说,并不会有很多的花样,一切都是以符合用户的客观实际为准则(客户的业务规则)展开的,内容本身并不会体现出太多的创造性。
软件设计则不一样,软件设计是一个构造多个方案并进行选择的过程。
它需要对诸多因素进行考虑后进行折中,是一个在多个目标函数的环境下选择最优组合的过程。
也就是说根据需求阶段确定的系统规模和目标,设想实现目标系统的各种可能的方案,然后综合考虑技术、经济、操作等各种因素,从各种可能的方案中选取若干个合理的方案进行综合分析、对比,从中选出一个最佳方案,最后设计这个最佳方案的详细具体实现计划和细节。
软件设计通常分为两个阶段:总体设计阶段和详细设计阶段。
总体设计又称概要设计或初步设计,该阶段主要给出一个系统的构造和构造元素,详细设计阶段再对构造元素进行细化设计。
但在具体的软件开发过程中,这两个阶段的分界线并不很清晰,有时可以合二而一。
比如说在面向对象方法中,总体设计和详细设计界线很模糊;另外,对于一个简单或熟悉的系统,可以将总体设计阶段和详细设计阶段合二而一,不过我们还是可以根据开发流程人为地进行一些划分。
软件设计阶段是软件开发过程中决定软件产品质量的关键阶段,它是后续的一切软件开发和维护步骤的基础;是把用户需求准确地转变为最终的软件产品的惟一方法;它还提供了可以进行软件质量评估的软件模型;同时它还减少了如下风险:⑴.难于维护的风险;⑵.难于测试的风险;⑶.系统稍作改动就可能崩溃的风险;⑷.推迟发现软件质量的风险。
3.1 软件设计的基本任务3.1.1 总体设计的基本任务软件总体设计是概要地回答系统应该如何实现。
该阶段具体地完成以下几个方面的基本任务:⑴.最佳方案的设计。
需求分析阶段所形成的结果是软件总体设计的基础。
我们要从可供选择的方案中选取合理的方案,对每一个方案给出模型图,列出系统组成的物理元素,并进行效益分析,制定实现方案的进度。
然后从合理的方案中选择一个最佳的方案向用户推荐。
对于需要使用数据库的那些应用系统还需要进行必要的数据库设计,如为分布式系统还要进行网络设计。
此外,还要制定测试计划和确定测试要求。
⑵.软件结构设计。
当用户接受一个最佳方案后,接着就要为这个方案设计软件结构。
通常情况下,这个软件结构要经过反复修改,以便得到更好的体系结构。
所谓软件结构设计,就是确定软件系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
它包括:1). 采用某种设计方法,将一个复杂的系统划分成若干模块;2). 确定每个模块的功能,建立与已确定的软件需求的对应关系;3). 确定模块之间的调用关系;4). 确定模块之间的接口,即模块之间传递的信息;5). 评价模块结构的质量。
软件结构设计是总体设计的关键,它直接影响软件开发后续阶段的工作。
因此,软件结构的设计应由经验丰富的软件人员担任,并采用一定的设计方法设计出高质量的软件结构。
⑶. 数据结构及数据库设计1). 数据结构的设计。
根据需求分析阶段对系统数据的组成、操作约束和数据之间的关系的描述,确定数据结构特性。
利用逐步细化的方法对数据结构进行深入的设计,但是不考虑具体的实现细节。
在该阶段比较适宜使用抽象的数据类型。
这些抽象的数据类型到详细设计阶段再用具体的数据结构描述其实现。
如在总体设计阶段定义的数据结构概念模型‘栈’,可在详细设计中用线性表和链表来实现。
2). 数据库设计。
数据库的设计指数据存储文件的设计,主要进行概念设计、逻辑设计、物理设计三方面设计。
数据库课程将对其进行详细的介绍,本书省略。
⑷. 网络系统设计。
如为分布式系统,则要遵照网络设计的原则,确定网络系统的需求。
⑸. 文档编写。
编写的主要文档有:概要设计说明书、数据库设计说明书、用户手册和测试计划等。
国标GB8576--88《计算机软件产品开发文件编制指南》对文档的编制进行了详细的规定,可参见附录。
⑹.评审。
对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理内外部接口定义正确性、有效性,各部分之间的一致性等等进行技术审查,审查通过后再由使用部门的负责人从管理角度进行复审。
3.1.2 详细设计的基本任务详细设计是总体设计的进一步的具体化,主要确定每个模块的具体执行过程,故也称为过程设计。
其基本任务有:(1).为每个模块进行详细的算法设计。
用某种描述工具将每个模块处理过程的详细算法描述出来。
(2).为模块内的数据结构进行设计。
(3).对数据库进行物理设计,即确定数据库的物理结构。
(4).界面设计。
对于交互式系统来说,界面设计没好坏直接影响用户对软件产品的评价。
可以采用图形用户界面和多媒体人机界面设计等技术进行界面设计。
(5).其它设计。
根据软件系统类型,还可能要进行代码设计、输入输出格式设计、人机对话设计。
(6).编写文档。
详细设计说明书是详细设计阶段所产生的主要文档。
详细说明书的内容详见附录。
(7).评审。
对详细设计成果进行审查和复审。
软件设计的最终目标就是要取得未来系统的最佳方案,不管在总体设计还是详细设计过程中为了保证设计阶段成果的正确性,每一阶段都必须经过设计质量的严格评审,以便及时发现和解决设计中存在的问题,防止把问题遗留到开发的后期,造成不必要的风险。
3.2 软件设计的概念和原则在软件设计中,要遵循一些基本的软件设计概念与原则。
这些概念与原则是经过多年的实践发展和总结出来的,它已成为软件设计人员完成复杂设计问题的基础。
3.2.1 模块化与模块独立性模块化与模块的独立性是软件设计中非常重要的,也是非常关系密切的设计原则。
1.模块化在日常生活中我们经常看到,某一机器由各种零部件组成,某一大型工程由一些较小的项目组成。
这样做的好处是便于加工制造,便于管理和维护。
同样,对于一个复杂大型的软件系统来说,可把它划分成若干较小的程序单元,这些较小的程序单元就是模块。
确切地说,模块是数据说明、可执行语句等程序对象的集合。
模块可以被单独命名,而且可通过名字来访问,例如,过程、函数、子程序、宏等等都可作为模块。
在面向对象的方法学中,对象和对象内的方法也是模块。
在软件的体系结构中,模块是可组合、分解和更换的单元。
模块是构成程序的基本构件。
模块具有以下几个基本属性:1).接口:指模块的输入与输出。
2).功能:指模块实现什么功能。
3).逻辑:描述内部如何实现要求的功能及所需的数据,即描述模块内部怎样做。
4).状态:指该模块的运行环境,即模块的调用与被调用关系。
功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。
在软件设计阶段通常首先要确定模块的外部特性,这就是软件总体设计需要解决的问题。
然后再确定模块的内部特性,这就是软件详细设计需要解决的问题。
模块化就是把程序划分成若干个模块,每个模块具有一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能,实现问题的求解。
为什么大型软件要模块化?我们知道对于一个大型软件由于其控制路径多、涉及范围广而且变量数目多,人们对这样复杂的软件无论是理解还是处理和管理,其复杂性远远超过小型软件。
它的理论依据如下:定义函数C(x)为问题x的复杂程度,函数E(x)为解决问题x需要的工作量(时间)。
对于问题Pl和问题P2,如C(P1)>C(P2)即P1比P2复杂,那么:E〔P1〕>E(P2)表示问题越复杂所需的工作量就越大。
因为由P1和P2两个问题组合而成一个问题的复杂程度大于分别考虑每个问题时的复杂程度之和,即:C(Pl十P2)>C(P1)十C(P2)这样,可以推出:E(Pl十P2)>E(P1)十E(P2)上述不等式表明,把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。
同时,从这一不等式中我们似乎还可以得出这样的结论:如果把软件无限细分,那么最后开发软件所需要的工作量就小得可以忽略了。
但是事实并非如此,因为影响软件开发工作量的因素还有许多,随着模块数目的增加,虽然开发单个模块需要的成本确实减少了,但是模块之间的接口的复杂程度和接口所需的工作量也成倍增加。
参见图3.1。
根据这两个因素,可得出图中虚线所示的总成本曲图 3.1 模块数目和软件成本线。
从图中可以看出存在着一个开发成本最小的模块数目M区。
虽然到目前为至还不能精确地决定M的准确数值,但在考虑模块时软件总成本曲线确实给我们提供了非常有用的指导。
目前,模块化方法已被广泛接受和应用,特别是在面向对象的软件开发模式中很自然地支持了把系统划分成模块化的思想。
因为对象就是模块,它是由一组属性和对这组属性进行操作的一组方法构成。