Computer Engineering

设计

Category of Software Design

1. About Software Design

软件设计是一个创建软件工件规格说明的过程,目的是使用一组原始组件并对其进行约束以实现目标。软件设计可能指的是“概念化、构造、实现、调试和最终修改复杂系统所涉及的所有活动”,或者“在程式化的软件工程过程中,遵循需求规格说明并在编程之前进行的系列活动”。

软件设计通常包括解决问题和规划软件解决方案。这包括低级的组件和算法设计以及高级的架构设计。

1.1. Overview

软件设计是对一组或多组问题的设想和定义软件解决方案的过程。软件需求分析(SRA)是软件设计的一个主要组成部分。SRA 是列出软件工程中使用的规格说明的软件开发过程的一部分。如果软件是“半自动化的”或以用户为中心的,软件设计可能涉及用户体验设计,产生一个故事板来帮助确定那些规格。如果软件是完全自动化的(意味着没有用户或用户界面),软件设计可能像流程图或描述计划事件序列的文本一样简单。也有一些半标准的方法,如统一建模语言和基本建模概念。在任何一种情况下,计划的一些文档通常是设计的产物。此外,软件设计可能是独立于平台的,也可能是特定于平台的,这取决于实现具体设计的技术。

软件分析和设计之间的主要区别是,软件分析的输出由要解决的更小的问题组成。此外,不应该在不同的团队成员或组之间设计非常不同的分析。相反,设计关注的是功能,因此针对同一问题的多种设计可能并且将会存在。根据环境的不同,设计常常会有所不同,无论它是根据可靠的框架创建的,还是使用合适的设计模式实现的。设计的例子包括操作系统、网页、移动设备,甚至新的云计算范例。

软件设计既是一个过程,也是一个模型。

  • 设计过程是一系列的步骤,使设计者能够描述软件构建的所有方面。创意技能、过去的经验、对“好”软件的理解,以及对质量的全面承诺,都是成功设计的关键因素。然而,需要注意的是,设计过程并不总是一个简单的过程;
  • 设计模型可以与建筑师设计房屋的计划相比较。它首先代表了要建造的东西的整体(例如,房子的三维渲染)。慢慢地,这个东西被完善,为构建每个细节提供指导(例如,管道铺设)。同样,为软件创建的设计模型提供了计算机软件的各种不同视图。

1.2. 组件、算法设计与架构设计

算法、组件与架构--由低层到高层,暗示了看待问题的粒度大小是不同的,但从设计的本质上看并无不同:无论哪个层级的设计,其实都是由更底层模块进行支持和保障的,也同时要与外部模块按照约定进行协作。

在面向对象的设计中,一个架构可以被拆分成多个组件,一个组件又是由算法和数据构成的,因此设计视角必然也是软件架构的视角。

软件架构是指软件系统的基本结构以及创建这些结构和系统的规则。每个结构包括软件元素、它们之间的关系以及元素和关系的属性。软件系统的体系结构是一个比喻,类似于建筑物的体系结构。它作为系统和开发项目的蓝图,列出了需要由设计团队执行的任务。

软件架构是就基础结构做出选择,这些选择一旦实现就需要付出高昂的代价来更改。软件架构的选择包括软件设计中可能出现的特定结构选项。此外,为了满足可靠性的需要,可以选择多个冗余的、独立生成的程序副本,并在交叉检查结果的同时在独立的硬件上运行这些副本。

记录软件架构有助于涉众之间的沟通,捕获关于高层设计的早期决策,并允许在项目之间重用设计组件。

  • — Software Architecture

1.3. Design Considerations

在设计一个软件时要考虑很多方面。每个考虑事项的重要性应该反映软件创建要满足的目标和期望。这些考量因素包括:

  • Compatibility 兼容性--该软件能够操作与其他产品的互操作性设计的另一个产品。例如,一个软件可能向后兼容它自己的旧版本。

  • Extensibility 可扩展性--新功能可以添加到软件中,而无需对底层架构进行重大更改。考虑系统未来追加新功能是否方便,便宜。

  • Modularity 模块化--最终的软件由定义良好的、独立的组件组成,从而带来更好的可维护性。然后,这些组件可以被独立地实现和测试,然后再被集成成所需的软件系统。这允许软件开发项目中的工作分工。

  • Fault-Tolerance 容错--软件能够抵抗并从组件故障中恢复。

  • Maintainability 可维护性--对bug修复或功能修改是否容易完成的度量。高可维护性是模块化和可扩展性的产物。

  • Reliability 可靠性(软件耐久性)--软件能够在规定的条件下,在规定的时间内执行所需的功能。

  • Reusability 可重用性--在其他项目中使用现有软件的某些或全部方面的能力,几乎不需要修改。

  • obustness 健壮性--软件能够在压力下操作或容忍不可预测或无效输入。例如,它可以设计为具有低内存条件的弹性。

  • Security 安全性--该软件能够承受和抵抗敌对行为和影响。

  • Usability 可用性--软件用户界面必须对其目标用户/受众可用。必须为参数选择默认值,以便它们是大多数用户的良好选择。

  • Performance 性能--软件在用户可以接受的时间范围内执行任务,并且不需要太多的内存。

  • Portability 可移植性--软件应该可以在许多不同的条件和环境中使用。

  • Scalability 可伸缩性--该软件能够很好地适应不断增长的数据或增加的功能或用户数量。

2. Topics



MainWiki: ComputerEngineering (last edited 2013-03-01 00:37:02 by twotwo)