第1个回答 2020-10-12
设计注意事项
在一个软件的设计中有许多方面需要考虑。每一个考虑因素的重要性都应该反映出软件所要达到的目标和期望。其中一些方面是:
兼容性-该软件能够与其他产品一起运行,这些产品是为与其他产品的互操作性而设计的。例如,一个软件可能与它自己的旧版本向后兼容。
可扩展性-新功能可以添加到软件中,而无需对底层架构进行重大更改。
模块化-生成的软件由定义良好的独立组件组成,从而提高了可维护性。然后,这些组件可以在集成成所需的软件系统之前单独实现和测试。这允许在软件开发项目中进行分工。
容错-软件能够抵抗并从组件故障中恢复。
可维护性-一个衡量bug修复或功能修改的容易程度的指标。高可维护性是模块化和可扩展性的产物。
可靠性(软件耐久性)-软件能够在规定的条件下在规定的时间内执行所需的功能。
可重用性-在其他项目中使用现有软件的某些或所有方面而不做任何修改的能力。
稳健性-软件能够在压力下运行,或容忍不可预测或无效的输入。例如,它可以被设计成具有对低内存条件的弹性。
安全性-该软件能够抵御和抵抗敌对行为和影响。
可用性-软件用户界面必须对其目标用户/受众可用。必须选择参数的默认值,以便大多数用户都能很好地选择这些值。[6]
性能-软件在用户可以接受的时间范围内执行任务,并且不需要太多内存。
可移植性-软件应该可以在许多不同的条件和环境下使用。
可扩展性-软件很好地适应了不断增长的数据或用户数量。
建模语言
建模语言是一种人工语言,可以用来表达由一组一致的规则定义的结构中的信息、知识或系统。这些规则用于解释结构中的组件。建模语言可以是图形语言或文本语言。软件设计的图形建模语言示例如下:
体系结构描述语言(ADL)是描述和表示软件系统体系结构的语言。
业务流程建模符号(BPMN)是流程建模语言的一个例子。
EXPRESS和EXPRESS-G(ISO 10303-11)是一种国际标准通用数据建模语言。
扩展企业建模语言(EEML)通常用于跨多个层的业务流程建模。
流程图是算法或其他逐步过程的示意图。
基础建模概念(FMC)是软件密集型系统的建模语言。
IDEF是一个建模语言家族,其中最著名的包括用于功能建模的IDEF0、用于信息建模的IDEF1X和用于本体建模的IDEF5。
Jackson结构化编程(JSP)是一种基于数据流结构和程序结构之间的对应关系的结构化编程方法。
LeMP3是面向对象的可视化设计描述语言,是一种形式化的规范语言,主要适用于大型面向对象(java,C++,C语言)程序和设计模式的建模。
统一建模语言(UML)是一种从结构和行为上描述软件的通用建模语言。它有一个图形符号,允许使用概要文件(UML)进行扩展。
Alloy(specification language)是一种通用的规范语言,用于表达软件系统中复杂的结构约束和行为。它提供了一种基于一阶关系逻辑的简明语言。
系统建模语言(SysML)是一种新的系统工程通用建模语言。
面向服务的建模框架(SOMF)[7]
设计模式
软件设计师或架构师可能会发现一个设计问题,这个问题过去曾被其他人访问过,甚至可能被其他人解决过。描述常见问题解决方案的模板或模式称为设计模式。这种模式的重用有助于加快软件开发过程
技术
在软件中使用“设计”一词的困难在于,在某种意义上,程序的源代码就是它所生成的程序的设计。在一定程度上,这是真的,“软件设计”是指设计的设计。Edsger W.Dijkstra将这种语义层次的分层称为计算机编程的“根本新奇之处”[9],Donald Knuth用他编写TeX的经验来描述在实现之前试图设计程序的徒劳:
如果我仅仅指定了TEX,而没有完全参与它的初始实现,它将是一个彻底的失败。实施过程不断地让我产生意想不到的问题,并对如何改进原始规范有了新的见解
用法
软件设计文档可以在计算机编程之前进行审查或呈现,以允许对约束、规范甚至需求进行调整。重新设计可能发生在程序模拟或原型审查之后。可以在编程过程中设计软件,而无需进行计划或需求分析,[11],但对于更复杂的项目,这将被认为是不可行的。编程前的独立设计允许多学科设计师和主题专家(SME)与高技能程序员协作,开发既有用又技术可靠的软件。