软件设计指导-简介

Aug 8, 2018 18:56 · 1327 words · 3 minute read 软件设计指导

随着程序的发展和获取更多功能,它变得复杂,其组件之间存在子依赖关系。随着时间的推移,复杂性会逐渐增加,程序员在修改系统时会将所有相关因素保留在他们的脑海中变得越来越难。这会减慢开发速度并导致错误,从而进一步降低开发速度并增加成本。复杂性在任何程序的生命周期中都不可避免地增加。程序越大,处理它的人越多,管理复杂性就越困难。

有两种解决复杂性的方法。第一种方法是通过使代码更简单和更明显来消除复杂性。例如,通过消除特殊情况或以一致的方式使用标识符,可以降低复杂性。第二种方法是封装,以便程序员可以在一个系统上工作而不会立即暴露其所有复杂性。这种方法称为模块化设计。在模块化设计中,软件系统被划分为模块,例如面向对象语言中的类。这些模块的设计相对独立,因此程序员可以在一个模块上工作而无需了解其他模块的细节。

由于软件具有可塑性,因此软件设计是一个跨越软件系统整个生命周期的连续过程;这使得软件设计不同于物理系统的设计,例如建筑物,船舶或桥梁。但是,软件设计并不总是这样看待。对于编程历史的大部分时间,开发人员将软件设计视为一次完成的项目。开发团队使用了所谓的瀑布模型,其中项目分为不连续的阶段,如需求定义,设计,编码,测试和维护。在瀑布模型中,每个阶段在下一阶段开始之前完成。在许多情况下,不同的人负责每个阶段。整个系统在设计阶段一次设计。设计在此阶段结束时被冻结,后续阶段的作用是充实并实施该设计。

不幸的是,瀑布模型很少适用于软件。软件系统本质上比物理系统更复杂。在构建任何东西之前,不可能将大型软件系统的设计可视化,以便了解其所有含义。结果,初始设计将存在许多问题。在实施正在进行之前,这些问题并不明显。但是,瀑布模型的结构不适合此时的主要设计更改(例如,设计人员可能已转移到其他项目)。因此,开发人员试图在不改变整体设计的情况下修补问题。这导致复杂性的爆炸性增加。

由于这些问题,瀑布模型已基本放弃。今天的大多数软件开发项目都使用增量方法,例如敏捷开发,其中初始设计侧重于整体功能的一小部分。设计,实现并评估该子集。发现并纠正了原始设计的问题,然后设计,实现和评估了一些其他功能。每次迭代都会暴露现有设计的问题,这些问题在设计下一组功能之前就已得到修复。通过以这种方式展开设计,可以在系统仍然很小的情况下修复初始设计的问题。后来的功能受益于早期功能实现过程中获得的经验,因此问题较少。

增量方法适用于软件,因为软件具有足够的可塑性,可以在实施过程中实现重大的设计变更。相比之下,对于物理系统来说,主要的设计变化更具挑战性:例如,在建筑中间改变支撑桥梁的塔的数量是不切实际的。

增量开发意味着永远不会进行软件设计。在系统的整个生命周期中不断设计:开发人员应该始终考虑设计问题。增量开发也意味着不断重新设计。系统或组件的初始设计几乎从不是最好的设计;经验丰富的经验表明了更好的做事方式。作为软件开发人员,您应该始终关注改进正在进行的系统设计的机会,并且您应该计划将一部分时间花在设计改进上。

如果软件开发人员应该始终考虑设计问题,并且降低复杂性是软件设计中最重要的元素,那么软件开发人员应该始终考虑复杂性。如何使用复杂性来指导软件设计的整个生命周期就是本系列的主旨。

tweet Share