软件工程与计算总结(十七)软件构造

一.概述

1.定义

软件构造是以编程为主的活动,类似于软件实现。但软件构造又不止编程这么简单,除了核心的编程任务之外,还设计详细设计(数据结构与算法设计)、单元测试、集成与集成测试以及其他活动~

2.软件构造是设计的延续

传统上,将软件开发的编程阶段统称为软件实现,认为它是将软件构建方案映射为机器语言的过程,属于软件开发的次要任务~

仔细区分设计与实现的界限:

  • 设计是规划软件构建方案的过程,实现是依据规划的软件构建方案建造真正产品的过程
  • 源程序是软件构建方案的最后一个规划,不是产品本身,真正的产品是运行于计算机上的由二进制代码组成的可执行程序
  • 源程序的生产过程——编程,属于设计活动,编译器完成的编译和链接才是依据规划 建造软件产品的实现活动~

软件设计阶段的设计工作是对软件系统总体结构和细节结构的规划,但是并没有产生最终的规划——还没有进行到源代码级别;而软件构造阶段的设计就是在较低的代码层次上的设计活动,将软件设计阶段产生的设计规划深入和细化到表现为源代码的最终机制~

编程从来就不是一种简单的活动,它的核心是设计代码,并验证设计的效果;过去的经验也一再表明,忽视编程工作的复杂性和重要性,会付出低质量的代价~

二.软件构造活动

1.详细设计

有些项目会将主要的详细设计工作分配在软件构造阶段完成,也有一些项目要求在软件设计阶段完成非常详细的详细设计工作,其详细设计方案能详细到让编程工作近乎无机械化;还有一些项目在软件设计阶段完成主要的详细设计工作,将剩余的详细设计工作遗留给软件构造阶段~

软件构造阶段详细设计使用的方法与技术与设计阶段是一样的,只是应用在更小的规模上~

2.编程

软件构造的核心活动,目的是生产高质量的代码:

  • 易读性:程序代码必须是易读的,看上去“显而易见是正确的”
  • 易维护性:易读易修改
  • 可靠性:执行正确,妥善处理故障
  • 性能:时间性能和空间性能
  • 安全性:不要遗留程序漏洞

3.测试

通过单元测试和集成测试,验证设计的正确性

4.调试

通过调试找到程序代码中的缺陷并加以修复,总的来说 ,调试是非常依赖于经验的工作,过程可以分为如下3个部分:

  • 重现问题:发现问题后先不要着急寻找缺陷,要通过重现问题来确定错误的出处
  • 诊断缺陷:对于重现的问题,不能考猜测和直觉来确定缺陷所在
  • 修复缺陷:一次只需改一个缺陷,修改前保留旧版本的备份,并使用测试和评审验证修复的有效性

5.代码评审

代码评审是对代码的系统检查,通过是通过同行专家评审来完成的,通过评审会议可以发现并修正之前忽略的代码错误,从而提高软件的质量和开发者的技巧~

6.集成与构建

在以分数的方式完成程序基本单位之后,软件构造还需要将这些分散单位集成和构建为构件,子系统和完整系统~

7.构造管理

  • 构造计划:根据整个项目的开发过程安排,定义要开发的构件与次序,选择构造方法、明确构造任务并分配给程序员。
  • 度量:软件构造阶段的产品度量主要围绕源代码展开
  • 配置管理:出于团队协作开发的要求

三.软件构造实践方法

1.重构

原因:最早用来进行软件维护的方法,因为无法预计到后续数年的修改导致设计方案不能满足修改需求,亦或随着修改次数的增加,软件设计结构的质量越来越脆弱,很难继续维持可修改性

常见时机:

  • 增加新的功能时
  • 发现了缺陷进行修复时
  • 进行代码评审时

 注意事项:

  • 重构是基于已有代码的设计改进,不是开发新代码的方法
  • 重构要防止副作用
  • 重构的重点是改进详细设计结构

2.测试驱动开发

又称为测试优先的开发,它随着极限编程方法的普遍应用而得到发展和普及~

优点:

  • 提高程序的正确性和可靠性
  • 提高设计质量
  • 提高生产力

过程:

  • 编写一段测试代码
  • 编译测试代码
  • 最小化编写正常程序代码
  • 运行测试代码
  • 最小化修改正常程序代码
  • 运行测试代码
  • 重构正常程序代码
  • 重复以上步骤

3.结对编程

由极限编程推广的方法,思想是:两个程序员挨着坐一起,共同协作进行软件构造活动~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单谈谈我参加数据分析省赛的感受与体会

数据分析省赛的感受与体会 概要考试前的感受与体会考试注意事项小结 概要 大数据分析省赛指的是在省级范围内举办的大数据分析竞赛活动。该竞赛旨在鼓励和推动大数据分析领域的技术创新和人才培养,促进大数据技术与应用的深度融合,切实解决实际问题。参…

Android中级——MVVM

MVVM MVVM是什么?MVVM实现前提ModelViewModelView MVVM是什么? Model-View-ViewMode架构,可看作MVP改进版,将此前Presenter的逻辑操作交给ViewMode中的Binder去处理 Mode:封装数据存储及相关操作逻辑,与MV…

Kali Linux 安装搭建 hadoop 平台 详细教程

1)前期环境准备:(虚拟机、jdk、ssh) 2)SSH相关配置 安装SSH Server服务器:apt-get install openssh-server 更改默认的SSH密钥 cd /etc/ssh mkdir ssh_key_backup mv ssh_host_* ssh_key_backup 创建新…

【C++进阶(八)】C++继承深度剖析

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 继承 1. 前言2. 继承的基本概念3. 继承关系和访…

酷开会员值得回味的经典老剧还记得吗?酷开系统家庭影院带你重温

那些年,大家的娱乐生活主要集中在那一台9寸的黑白电视机中;那些年,家家户户的孩子们晚上都会聚到电视机前欢声笑语;那些年,是诸多经典的电视剧陪伴了很多人的闲暇时光……那些年陪伴我们成长,在记忆中熠熠生…

下笔如有神:用VS Code写markdown

文章目录 Markdown All in One快捷键指令 输出PDFMarkdown Preview Enhancedmarkdown基本语法 Markdown All in One VS Coode中最推荐的Markdown插件是Markdown All in One,下文简称为mdAIO。千万别搜完markdown后下一个叫Markdown的插件,这个插件的名字…

新年学新语言Go之四

一、前言 任何编程语言都有类型系统,类型系统解决了数据的存取问题,它决定了使用这个类型需要开辟内存空间大小以及数据是如何存放的,也解决如何读出数据,因为在内存中相同二进制值不同类型的含义是不一样的,关于Go基…

Oracle的立场:官网更换首页与以色列站在一起

Oracle公司的官网,更换了首页内容,明确表明立场:Oracle与以色列站在一起。 声明指出: Oracle谴责针对以色列及其公民的恐怖袭击。Oracle将为其员工、以色列政府和国防机构提供一切必要的支持。 Magen David Adom是一家为以色列公民…

1024,毕业后工作的五个月

入职 一晃一下又到了1024,彼时已经成为打工人在写分享了,自己已经搬砖5个月了,总感觉4月份拍毕业照、去川渝毕业旅行看plmm还是在昨天,但五月下旬入职到现在已经5个月了。给大家简单的share一下工作和生活。 在5月初光速毁约ks入…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组队列

《数据结构、算法与应用C语言描述》使用C语言实现数组队列 定义 队列的定义 队列(queue)是一个线性表,其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾(back或rear),删除元素的那一端称…

在 Python 3 中释放 LightGBM 的力量:您的机器学习大师之路

机器学习是 Python 占据主导地位的领域,它一直在给全球各行各业带来革命性的变化。要在这个不断变化的环境中脱颖而出,掌握正确的工具是关键。LightGBM 就是这样一个工具,它是一个强大且快速的梯度提升框架。在这份综合指南中,我们将通过实际示例和示例数据集从基础知识到高…

系列十二、Redis的主从复制

一、概述 主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据。 二、架构图 三、搭建主从复制 3.1、准备三台机器并修改配置 # 准备三台机器并修改配置 说明:由于是个人笔记本,开启3个虚拟机比较消耗内存,所以使用…

快如闪电的扩容:秒级启动,弹性伸缩让您无忧

文章目录 快速扩容:秒级启动,弹性伸缩服务器秒级启动服务秒级启动升级JDK的版本通过将应用程序打包成WAR文件并部署到已经启动的Tomcat服务器上来实现秒级启动使用Spring Cloud Function和云原生技术来构建无服务器应用程序,可以实现秒级启动…

《动手学深度学习 Pytorch版》 9.5 机器翻译与数据集

机器翻译(machine translation)指的是将序列从一种语言自动翻译成另一种语言,基于神经网络的方法通常被称为神经机器翻译(neural machine translation)。 import os import torch from d2l import torch as d2l9.5.1 …

云表|低代码开发崛起:重新定义企业级应用开发

低代码开发这个概念在近年来越来越受到人们的关注,市场对于低代码的需求也日益增长。据Gartner预测,到2025年,75%的大型企业将使用至少四种低代码/无代码开发工具,用于IT应用开发和公民开发计划。 那么,为什…

黑豹程序员-架构师学习路线图-百科:MVC的演变终点SpringMVC

MVC发展史 在我们开发小型项目时,我们代码是混杂在一起的,术语称为紧耦合。 如最终写ASP、PHP。里面既包括服务器端代码,数据库操作的代码,又包括前端页面代码、HTML展现的代码、CSS美化的代码、JS交互的代码。可以看到早期编程就…

【C语言】#define宏与函数的优劣对比

本篇文章目录 1. 预处理指令#define宏2. #define定义标识符或宏,要不要最后加上分号?3.宏的参数替换后产生的运算符优先级问题3.1 问题产生3.2 不太完美的解决办法3.3 完美的解决办法 4.#define的替换规则5. 有副作用的宏参数6. 宏与函数的优劣对比6.1 宏…

向量数据库Transwarp Hippo1.1多个新特性升级,帮助用户实现降本增效

例如,当查询“A公司业务发展情况”时,通过向量检索可以检索出A公司“主要业务”、“经营模式”、“财务情况”、“市场地位”等信息,通过全文检索可以检索出知识库中和关键字“业务”、“发展”相关的结果作为补充,通过将两者检索的结果进行结合,可以使得大模型回答的结果…

分类预测 | Matlab实现WOA-GRU鲸鱼算法优化门控循环单元的数据多输入分类预测

分类预测 | Matlab实现WOA-GRU鲸鱼算法优化门控循环单元的数据多输入分类预测 目录 分类预测 | Matlab实现WOA-GRU鲸鱼算法优化门控循环单元的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-GRU鲸鱼算法优化门控循环单元的数据多输入…

【Qt】常见控件

文章目录 按钮组QListWidget列表容器TreeWidget树控件TableWidget 表格控件其它控件介绍下拉框QLabel显示图片和动图 自定义控件封装 按钮组 QPushButton 常用按钮 QToolButton 工具按钮: 用于显示图片 如果想显示文字:修改风格:toolButto…