软件构造课程随笔:1. 软件构造的概述

1 什么是软件

软件的定义      

        理解什么是软件首先理解什么是程序,程序是一系列按照特定顺序组织的计算机指令集合,用于执行特定任务或完成特定功能。

       程序 = 数据结构 + 算法

        软件是指由一系列计算机程序、数据和文档组成的集合,用于指导计算机执行特定任务或实现特定功能。

        软件 = 程序 + 数据 + 文档

 软件的基础分类

        软件可以分为系统软件和应用软件两大类。

        系统软件:系统软件是直接与计算机硬件交互,并管理和控制计算机系统资源的程序集合。它们包括操作系统、驱动程序和一些实用工具。操作系统是最基本的系统软件,负责管理计算机的各种硬件和软件资源,并为用户和应用程序提供接口以与计算机系统交互。

        应用软件:应用软件是根据用户需求设计和开发的程序,用于执行各种具体的任务和操作。这些软件包括办公软件(如文字处理、电子表格和演示文稿软件)、图形设计软件、多媒体软件、游戏软件、数据库管理软件等。应用软件通常运行在操作系统之上,并利用操作系统提供的功能来完成用户指定的任务。

2 什么是软件构造

        软件构建指的是通过编程、测试、调试和文档编写等过程,将软件需求转化为具体的可执行软件产品的过程。

        软件系统构造有三个维度八种多维视图。

构成软件系统的三个维度

 By phases: build- and run-time views(按阶段划分:构造时/运行时视图

        构造时视图:
      
  1. Code-level View(代码级视图)

    • 在代码级视图中,关注的是软件系统的代码实现细节,包括类、函数、方法等的具体实现及其相互关系。
    • 这个视图主要用于理解代码的结构和逻辑,以及各个代码单元之间的交互方式和数据流动情况。
    • 代码级视图在构造时帮助开发人员进行具体的编码和实现工作,并进行代码的调试和测试。
  2. Component-level View(组件级视图)

    • 在组件级视图中,关注的是软件系统的组件及其之间的关系,包括模块、库、服务等的组织结构。
    • 这个视图用于理解系统的模块化结构,包括各个组件之间的依赖关系、接口定义以及通信方式。
    • 组件级视图在构造时帮助开发人员组织和管理系统的各个组件,以及进行组件之间的集成和测试。
  3. Moment View(时刻视图)

    • 在时刻视图中,关注的是软件系统在构造阶段的状态和结构,即系统中各个组件和对象的实例情况。
    • 这个视图用于理解构造阶段系统的实时状态,包括对象的创建、初始化、销毁等情况。
    • 时刻视图在构造时帮助开发人员监视系统的构建过程,及时发现和解决构建阶段的问题和错误。
  4. Period View(周期视图)

    • 在周期视图中,关注的是软件系统在构造阶段的演化和变化,即系统构建过程中的版本演进情况。
    • 这个视图用于理解构造阶段系统的演化轨迹,包括代码的变更历史、版本控制情况等。
    • 周期视图在构造时帮助开发人员跟踪系统的构建过程,管理版本变更和代码迭代,确保构建过程的有效管理和控制。

        运行阶段视图:
  1. Code-level View(代码级视图)

    • 在代码级视图中,关注的是软件系统的代码实现细节,即各种类、方法和函数的实现及其相互关系。
    • 这个视图显示了代码在运行时如何相互调用和交互,以及代码执行过程中的数据流动情况。
    • 代码级视图可以帮助开发人员理解系统的实际运行机制,并进行调试和优化。
  2. Component-level View(组件级视图)

    • 在组件级视图中,关注的是软件系统的组件及其之间的关系,如模块、类库、服务等。
    • 这个视图显示了各个组件在运行时如何协作,以及它们之间的依赖关系和接口定义。
    • 组件级视图可以帮助开发人员理解系统的模块化结构,以便于组件的开发、替换和重用。
  3. Moment View(时刻视图)

    • 在时刻视图中,关注的是软件系统在某一时刻的状态和结构,即系统中各个组件和对象的实例情况。
    • 这个视图显示了系统的实时状态,包括对象的属性值、方法调用情况等。
    • 时刻视图可以帮助开发人员理解系统在运行时的实际情况,以便于排查和解决问题。
  4. Period View(周期视图)

    • 在周期视图中,关注的是软件系统在一段时间内的演化和变化,即系统的演化过程和版本变更情况。
    • 这个视图显示了系统的版本演变历史,包括新功能的添加、bug修复、性能优化等。
    • 周期视图可以帮助开发人员理解系统的演化轨迹,以便于制定合理的开发和维护策略。

By dynamics: moment and period views(按动态性划分:时刻/阶段视图

        特定时刻视图关注的是软件在某一特定时刻的表现或者组织结构,阶段视图则关注软件在某个阶段一系列的表现变化或者组织结构的变化。

By levels: code and component views(按构造对象的层次划分:代码/构件视图

        代码视图主要关注软件系统的具体实现细节,即源代码的结构、组织和逻辑。

        代码视图用于帮助开发人员理解和分析软件系统的具体实现,包括代码的模块化程度、函数调用关系、数据流动情况等,从而进行代码的编写、调试和优化。

        构件视图主要关注软件系统的组织结构和模块化设计,即系统由哪些组件构成,它们之间的关系如何。包括程序的物理组织以及程序是如何部署到不同的物理环境中的。

        构件视图用于帮助开发人员理解和分析软件系统的组织结构,包括模块的划分、组件之间的协作方式、接口的定义等,从而进行系统的设计、组织和集成。

构成软件系统的八个多维视图

1. Build-time, moment, and code-level view

        这个多维视图中,有三个相互关联的形式:

词汇层面 Lexical-oriented source code
语法层面 Syntax-oriented program structure: e.g., Abstract Syntax Tree
(AST)
语义层面 Semantics-oriented program structure: e.g., Class Diagram

        词汇层面指的是基于词汇的半结构化源代码(Lexical-based semi-structured source code),半结构化是指近乎自然语言的风格+遵循特定的编程语法,前者方便程序员,后者方便编译器。

        语法层面指的是面向语法的程序结构(Syntax-oriented program structure),具体例子有抽象语法树(AST)。

        语义层面指的是面向语义的程序结构(Semantics-oriented program structure),语义是指源代码具体想实现什么目标。

2.Build-time, period, and code-level view

        这个多维视图描述了代码随时间的变化(Code churn),包括代码行的增删改。

3.Build-time, moment, and component-level view

        这个多维视图着眼于源代码被物理地组织成文件(file),这些文件进一步由目录组织。文件被封装成包(package),并在逻辑上封装组件和子系统。可重用模块以库(library)的形式存在

4.Build-time, moment, and component-level view

        该多维视图关注各项软件实体随时间如何变化,包括SCI,软件配置项以及版本的演变。

        一个版本演变图如下:

5.Run-time, moment, and code-level view

        这个多维视图着眼于程序运行时在某个特定时刻的代码层面的状态,主要工具有快照图(Snapshot diagram)和内存信息转储(Memory dump )。

6.Run-time, period and code-level view

        这个多维视图着眼于程序运行阶段在某一段时间内在代码层面的视图,在这一视图中主要涉及到执行跟踪(Execution tracing),即用日志方式记录程序执行的调用次序,这通常由程序员用于调试目的,并根据跟踪日志中包含的信息的类型和详细信息,由有经验的管理员或技术支持人员以及软件监视工具来诊断软件的常见问题。

7. Run-time, moment, and component-level view

        该多维视图着眼于程序运行阶段在某一特定时刻在组件层面的视图。

8.Run-time, period, and component-level view

        该多维视图关注程序在运行阶段在某一阶段的组件层面视图。事件日志为系统管理员提供了诊断和审计的有用信息,将被记录的事件的不同类别,以及将在事件消息中出现的详细信息,都将在开发周期中考虑。每个事件类都要分配一个唯一的“代码”来格式化和输出一个人类可读的消息,这有助于本地化,并允许系统管理员更容易地获取有关发生问题的信息

软件构造过程就是在不同的视图间进行转换

        软件构造的一个简略版整体流程图如下:

        图中包括了在不同视图间转换的各种类型和相关方式,具体有:

       $\varnothing$\rightarrow Code: 这一转换过程涉及将概念或者需求转化为实际的可执行代码。在这个阶段,开发人员基于需求和设计,使用不同的编程范式(如抽象数据类型/面向对象编程)编写代码,并通过静态分析检查代码的正确性和质量。

        Code \rightarrow Component: 这一转换过程将代码视图转化为组件视图。在软件构造的过程中,源代码经过编译、静态链接等操作,被组织成为可重用的组件,如库文件、动态链接库等,以便在不同的应用中被调用和复用。

        Build-time \rightarrow Run-time: 这一转换涉及从构造时的视图到运行时的视图。在构建软件时,系统会进行编译、链接、打包等操作,将源代码转换为可执行的程序,而在运行时,这些程序会被加载到内存中执行,实现软件的功能。

        Moment \rightarrow Period: 这一转换涉及从特定时刻的视图到阶段性的视图。经常包括版本迭代,以及并行开发等内容。

        窃以这种视图转换的方式对软件构造基本流程进行把握,可以使软件构造更加的模块化、标准化,可以使开发人员更好把握开发的进度和过程。

        

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用中提供的代码,可以使用toUnixTimestamp函数将日期对象转换为Unix时间戳。根据引用中的说明,刷新间隔时间是指从服务器检查域数据文件是否需要更新的时间间隔。根据引用中的示例,可以将域数据文件复制到指定的目录下。根据您提供的时间戳"2023-09-03T08:38:43.548 00:00",您可以使用toUnixTimestamp函数将其转换为Unix时间戳。请注意,时间戳应该是一个数字,表示从Unix纪元(1970年1月1日)开始的秒数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [to-unix-timestamp:将日期转换为Unix时间戳](https://download.csdn.net/download/weixin_42160425/18164877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux随笔16-主从DNS服务搭建以及智能DNS服务搭建、基于CentOS7.6编译安装MySQL-5.7.32](https://blog.csdn.net/ikkyphoenix/article/details/118445272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值