软件构造复习1——概念介绍

要点综述

软件构造是通过编码、验证、单元测试、集成测试、调试和其他活动的组合来创建工作软件的过程。下面来总结课程中涉及的一些关键点。

第一部分:概述

软件构造的一般过程包括设计、编码、重构、调试、测试、性能分析、代码评审、构造和发布。

编码

有几种类型的语言用于编码:编程语言、建模语言、配置语言和构造语言。使用C++、Python和Java等编程语言编写代码。集成开发环境(IDE)可以极大地促进代码编写和文件管理。

建模语言是一种人工语言,用于在一组一致的规则中表达信息、知识或系统,用于系统设计的可视化、推理、验证和通信。配置语言用于配置程序参数和初始设置。

代码审查

代码评审是对源代码的系统检查。它可以通过配对编程、非正式演练或正式检查来完成。正式代码审查是一个结构化的过程,用于检查代码和文档缺陷,包括多个部分和对多个语句的仔细检查。轻量级代码审查通常比正式代码审查需要更少的频率,但如果使用得当,可以产生相同的效果。

性能分析

性能分析包括运行程序来分析代码。程序需要经过彻底测试。可以使用测试测量技术(如覆盖率)来确保对代码的所有可能功能进行彻底测试。评测可用于测量程序的时间和空间复杂性、特定指令或功能的频率或持续时间。

调试和测试

测试为利益相关者提供有关被测试产品或服务质量的信息。测试包括执行软件组件或系统组件以验证功能。测试技术有很多:单元测试、功能测试、系统测试、验收测试。

调试是识别错误的根本原因并加以纠正的过程。调试通常是成功测试的后续工作;成功的测试并不意味着没有发现错误;相反地在一些项目中,调试占总开发时间的一半;对于许多程序员来说,调试是编码中最困难的部分。

测试和调试不能提高软件质量;它们是发现缺陷的主要手段。应通过仔细分析需求、良好的设计和高质量的编码来确保软件质量;调试是最后的手段。

重构

重构是在不改变外部行为的情况下改进内部结构的过程。它包括在维护代码功能的同时,通过一系列小的转换来重建和组织代码。目标是使代码更易于维护和更改,同时确保它仍然正常工作并通过测试。

第二部分:软件测试

测试是通过确认软件是否达到可用水平(用户需求)来提高软件质量的重要手段。它侧重于系统质量特征的某些方面。

测试的目标与其他活动相反;它的目的是找出错误。无论测试有多好,都无法证明系统中没有错误。一个好的测试具有以下特点:它可以发现错误,不冗余,具有最佳组合,不太复杂或太简单。

测试类型

测试可以根据范围进行分类:单元测试侧重于测试单个单元(通常在单个方法/类的级别),隔离模块以便于错误定位和调试;集成测试将多个程序员/团队编写的类/包/组件/子系统组合在一起进行测试;系统测试将整个系统作为一个整体进行测试,包括硬件/软件/配置信息;验收测试是在产品发布前进行的软件测试活动,作为技术测试的最后阶段,目的是确保最终用户可以使用软件来执行其预期功能和任务;一旦进行了程序更改,回归测试将重新执行所有以前的测试,以确保更改不会引入新的错误或导致其他代码产生错误。

测试也可以根据静态/动态进行分类:静态测试包括程序员或代码编辑器/编译器等工具在编码阶段进行检查(例如语法检查/代码审查);动态测试包括使用测试用例实际执行编写的代码。

测试用例

测试用例由输入+执行条件+预期结果组成。测试的动机是让代码失败;它越早失败越好。

第三部分:流程和配置管理

软件配置管理(SCM)跟踪和控制软件的更改,包括版本控制和软件配置项(SCI)。SCI是指软件中发生变化的基本单元(如文件)。

版本控制

版本控制系统(VCS)管理随着时间的推移对源代码的更改。有三种类型:本地版本控制系统将存储库存储在开发人员的本地机器上,但不能共享或协作;集中式版本控制系统将存储库存储在独立的服务器上,支持多个开发人员之间的协作;分布式版本控制系统将存储库存储在独立的服务器+每个开发人员的本地机器上。

Git是一个分布式版本控制系统,由三部分组成:.Git目录(本地CMDB)、工作目录(本地文件系统)、暂存区(将工作目录与Git存储库分隔开的.Git目录文件)。

第四部分:数据类型和类型检查

数据类型定义了值在内存中的表示方式以及程序如何操作这些值。

类型检查

类型检查有两种类型:在编译阶段执行的静态类型检查,其中所有变量类型都是在编译时确定的;在运行时期间执行的动态类型检查,其中在运行时确定变量类型。

静态类型检查可以检测语法错误、类/函数名称错误、参数编号错误、参数类型错误、返回值类型错误。静态类型检查可以在编译阶段检测错误,避免将错误带入运行时阶段,从而提高程序的正确性/稳健性。

动态类型检查可以检测非法的参数值/返回值/越界/空指针。静态类型检查检查“类型”而不考虑值,而动态检查检查“值”。

Java是一种静态类型语言,同时具有静态类型检查和动态类型检查。

可变性和不可变性

改变变量和改变值是有区别的。更改变量意味着将其指向另一个值的存储空间,而更改变量的值意味着将新值写入其当前存储空间。

不可变性是指其值一旦创建就无法更改的数据类型(不可变类型),或其指向的对象一旦确定就无法更改(尽管其值可能会更改)的引用(不可变引用)。Java中的final关键字使类无法派生子类/方法无法被无法更改其引用(而不是值)的子类/变量覆盖。

可变性是指具有可以修改自己值的方法的数据类型(可变类型)。

当有多个引用指向可变类型和不可变类型时,它们之间的区别就显而易见了。

可变类型可以最大限度地减少复制,以提高效率,使其适合在多个模块之间共享数据,而不可变类型“更安全”,在其他质量指标上表现更好,例如将不可变类型值传递到任何方法中,而不必担心意外修改,或者在多个线程之间安全地保留相同的不可变类型引用,而不需要担心竞争

可以通过将新对象返回到客户端的防御性复制或限制类/方法内可变对象引用的单引用局部变量来保护可变类型,而不对外公开它们。

结论

涉及到的概念有 编码实践/代码评审/性能分析/调试/测试/重构/版本控制/类型检查/可变性/不变性等,概述了软件构造复习中的重要概念。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值