《代码中的软件工程》学习总结/心得体会

本学期跟随孟宁老师学完了《高级软件工程》这门课,感觉自己收获颇丰,其中,令我印象最为深刻的是个人软件过程PSP(Personal Software Process)和团队软件过程TSP(Team Software Process)这一部分,尤其是个人软件过程,真可谓是个人开发过程的真实写照,读这一部分内容时,之前自己写项目的历程仿佛又浮现在眼前,所以本文重点围绕PSP和TSP进行展开。

个人软件过程PSP

一个软件工程师如何成长,如何证明自己的成长?PSP提供了一个不断成长进阶的参考路径,即个人软件过程PSP框架。

个体度量过程PSP0

1、计划阶段

2、开发阶段     

  • 设计     
  • 编码     
  • 测试

3、开发完成后进行总结分析

一般来说,做任何事情最基本的思路就是计划、执行和总结。PSP0就是这个最基本的思路,但是在PSP0阶段必须理解和学会采集软件过程中的数据。

个体度量过程PSP0.1

1、计划阶段

2、开发阶段     

  • 编码标准规范   
  • 设计   
  • 编码     
  • 测试

3、程序规模度量

4、开发完成后进行总结分析

5、过程改进计划

PSP0.1 增加了编码标准规范、程序规模度量、以及过程改进计划。显然PSP0.1融入了标准规范,而且将最后的总结分析更加明确充实。过程改进计划用于随时记录过程中存在的问题、解决问题的措施以及改进过程的方法,以提高软件开发人员的质量意识和过程意识。

PSP0和PSP0.1重点是个体度量过程,也就是通过采集过程数据、度量程序的规模等,通过量化的度量数据为软件过程改进提供基准。

个体计划过程PSP1

1、计划阶段     

  • 项目评估

2、开发阶段     

  • 编码标准规范     
  • 设计     
  • 编码     
  • 测试

3、项目测试报告

4、程序规模度量

5、开发完成后进行总结分析

6、过程改进计划

PSP1在计划阶段增加了项目评估,引入了基于估计的计划方法,用自己的历史数据来预测新程序的大小和需要的开发时间,开发阶段之后首先完成项目测试报告。

在PSP1阶段应该学会编制项目开发计划,这不仅对承担大型软件的开发十分重要,即使是开发小型软件也必不可少。因为,只有对自己的能力有客观的评价,才能作出更加准确的计划,才能实事求是地接受和完成客户委托的任务。

个体计划过程PSP1.1

1、计划阶段     

  • 项目评估

2、开发阶段     

  • 编码标准规范     
  • 设计     
  • 编码     
  • 测试

3、统计记录各项工作用了多少时间

4、项目测试报告

5、程序规模度量

6、开发完成后进行总结分析

7、过程改进计划

PSP1.1在PSP1增加项目评估的基础上,开发阶段之后首先统计记录各项工作用了多少时间,前后呼应进行量化管理,为过程改进提供数据支撑。

PSP1和PSP1.1的重点是个体计划过程,基于历史数据来评估项目,进而提高项目计划的准确性。

个体质量管理PSP2

1、计划阶段     

  • 项目评估

2、开发阶段     

  • 编码标准规范     
  • 设计     
  • 设计评审     
  • 编码     
  • 代码评审     
  • 测试

3、统计记录各项工作用了多少时间

4、项目测试报告

5、程序规模度量

6、开发完成后进行总结分析

7、过程改进计划

PSP2的重点是个体质量管理,引入了设计评审(Design Review)和代码评审(Code Review),以便及早发现缺陷,使修复缺陷的代价最小。

个体质量管理PSP2.1

1、计划阶段     

•    项目评估

2、开发阶段     

  • 分析     
  • 设计规格     
  • 编码标准规范     
  • 设计     
  • 设计评审     
  • 编码     
  • 代码评审     
  • 测试

3、统计记录各项工作用了多少时间

4、项目测试报告

5、程序规模度量

6、开发完成后进行总结分析

7、过程改进计划 

PSP2.1引入了分析和设计规格,介绍了分析方法,并提供了设计规格。

PSP2和PSP2.1的重点是个体质量管理,学会在开发软件的早期,发现由于疏忽所造成的程序缺陷问题。人们都期盼获得高质量的软件,但是只有高素质的软件开发人员并遵循合适的软件过程,才能开发出高质量的软件,PSP2引入并着重强调设计评审和代码评审技术,一个合格的软件开发人员必须掌握这两项基本技术。

个体循环过程PSP3 

PSP3的重点是个体循环过程,目标是把个体开发小规模程序所能达到的生产效率和生产质量,扩展到大型程序中。主要是采用螺旋式上升的方法,即增量和迭代开发方法,首先把大型程序分解成小的模块,然后对每个模块按照PSP2.1所描述的过程进行开发,最后把这些模块逐步集成为完整的软件产品。

应用PSP3开发大型软件系统,必须采用增量式开发方法,并要求每一个增量都是高质量的。在这样的前提下,在新一轮个体循环过程中,可以采用回归测试的方法,重点考察新的增量是否符合要求。因此,要求在PSP2中进行严格的设计评审和代码评审,并在PSP2.1中努力遵循设计规格。

个体软件过程PSP总结 

从个软件过程PSP框架的概要描述中,可以清楚地看到,如何作好项目规划和如何保证产品质量,是任何软件开发过程中最基本的问题。

PSP可以帮助软件工程师在运用软件过程的方法和原则,借助于一些度量和分析工具,了解自己的技能水平,控制和管理自己的工作方式,使自己日常工作中的评估、计划和预测更加准确、更加有效,进而改进个人的工作表现,提高个人的工作质量和产量,积极而有效地参与高级管理人员和过程人员推动的团队范围的软件工程过程改进。

个体软件过程PSP为软件工程师提供了发展个人技能的结构化框架和必须掌握的方法。在软件行业,开发人员如果不经过PSP训练,就只能靠在开发中通过实践逐步摸索掌握这些技能和方法,这不仅周期很长,而且要付出很大的代价。

TSP概述 

大多数商业软件都是由团队开发的,因此,要想成为一个优秀的软件工程师,你就必须具有在团队中工作的能力。如果你有与人合作的意识并且愿意付诸实践,你就具备了成为一个优秀的团队成员的基本素质。但是,团队协作的涵义远比融洽相处要丰富。

团队必须计划项目、跟踪进展、协调工作,还必须有一致的工作目标,共同的工作过程,并且经常自由沟通。

TSP是一个为多达20人的团队开发或升级大型软件系统而设计的工业化软件过程,而且通常是需要几年时间才能完成的大型项目。我们学习TSP无法完整地模拟实际大型项目的情况,但是可以学习到最基本的概念和方法,以便将来在实际大型项目中能够快速上手TSP。

单纯把一项工作任务交给一群工程师并不能自动产生一个团队。建设团队的步骤并不显而易见,新的团队经常要花费大量时间去建立团队的运行机制。他们必须明确如何作为一个团队一起工作,如何定义要做的工作,以及如何设计工作方案。他们必须在团队成员间分配任务、协调任务,并且跟踪和汇报工作进展。虽然这些团队建设工作很重要,但是并不难,而且已有很多完成这些工作的方法,你和你的团队成员并不需要自己去重新发明这些方法。

TSP的基本工作方法

  1. 如何开始一个团队项目?
  2. 团队项目的基本策略
  3. 开发计划
  4. 定义需求
  5. 与团队一起设计
  6. 产品实现
  7. 集成与系统测试
  8. 结项总结

1、如何开始一个团队项目?     

•    设定团队目标     

•    设定团队成员目标,包括各个角色的目标     

        ◦    团队领导角色     

        ◦    开发经理角色     

        ◦    计划经理角色     

        ◦    质量和过程经理角色     

        ◦    支持经理角色     

•    项目筹备及第一次项目会议

2、团队项目的基本策略

•    计划先行,也就是做出承诺之前先计划     

•    完成概念设计     

•    选择开发策略     

•    完成初步规模估算     

•    完成初步时间估算     

•    评估风险     

•    建立策略文档     

•    制定配置管理计划

3、开发计划

•    制定计划     

•    实现计划     

•    对照计划跟踪进展     

•    质量管理

4、定义需求

•    软件需求规格说明书     

•    需求任务分配     

•    系统测试计划     

•    需求变更和追溯管理

5、与团队一起设计

•    利用所有团队成员的才智     

•    产生精确的设计     

•    复用性设计     

•    易用性设计     

•    可测试性设计     

•    设计规格说明书     

•    设计评审和审查 

6、产品实现

•    编码标准     

•    缺陷预防     

•    详细设计与设计评审     

•    编码及代码评审     

•    单元测试

7、集成与系统测试

•    构建和集成策略     

•    测试计划     

•    跟踪缺陷     

•    系统测试     

•    回归测试

8、结项总结

过程改进建议


最后,感谢孟老师在《高级软件工程》课程上的精心教导。在老师的课堂上,我不仅理解了软件工程的复杂概念,也学习到了如何有效地应用这些知识来解决实际问题。老师的课程内容深入浅出,教学方法富有启发性,使得这个学科变得既有趣又实用。老师的热情和投入让我对软件工程有了更深入的理解,并激发了我对此领域的热爱。我特别赞赏老师对实际工程实践的强调,以及对我们批判性思考和问题解决能力的培养。同时,我也非常期待将在老师课堂上学到的知识应用到今后实际的软件开发工作中去。

参考资料:《代码中的软件工程》    孟宁  编著

代码中的软件工程: 《代码中的软件工程》一书的配套ppt和源代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下GO IDE安装和配置(附快捷键)

目前,GoLand、VSCode 这些 IDE 都很优秀,但它们都是 Windows 系统下的 IDE。在 Linux 系统下我们可以选择将 Vim 配置成 Go IDE。熟练 Vim IDE 操作之后,开发效率不输 GoLand 和 VSCode。有多种方法可以配置一个 Vim IDE,这里我选…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(二)

系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟 …

【5G PHY】5G控制资源集CORESET介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

SpringBoot(六)SpringBoot项目部署到腾讯云服务器

这篇文章,可以说是干货满满。关注我的同学应该直到,之前我有几篇SpringBoot的文章,介绍了如何搭建本地服务器(没看过的同学可以系统地看下我的SpringBoot专栏,保证你会有很多的收获)。但我们那都是在本地玩…

Qt(Day2)

实现登录框中,当登录成功时,关闭登录界面,并跳转到其他界面:

前端面试题-HTML、HTTP、web综合问题(三)

26 你做的⻚⾯在哪些流览器测试过?这些浏览器的内核分别是什么? IE : trident 内核Firefox : gecko 内核Safari : webkit 内核Opera :以前是 presto 内核, Opera 现已改⽤Google - Chrome 的 Blink 内核Chrome:Blink (基于 webkit &#xf…

服务器搭建oracle,并远程连接教程

下载两个压缩包,然后上传到服务器, 软件安装09:CentOS安装Oracle - 虚拟机 - 5997CK - 欢迎您! (hezhilin.online) 这里有全部步骤,反正过了几天我也会忘记,不赘述了。 直接上拆的坑: 开启服务器端口后…

【数据结构】24王道考研笔记——串

四、串 串的定义 串(字符串)是由零个或多个字符组成的有限序列。 子串:串中任意个连续的字符组成的子序列主串:包含子串的串字符在主串中的位置:字符在串中的序号子串在主串中的位置:子串的第一个字符在…

【Spring】项目创建和使用

一、Spring 的概念 Spring : 包含众多工具方法的 IoC 容器。 Spring 的核心 :IoC (控制反转), DI (依赖注入)。 loC (Inversion of Control)翻译成中文就是 “控制反转” 的意思,控制反转一种…

python代码练习:石头剪刀布猜拳游戏

python代码练习:石头剪刀布猜拳游戏 题目结果展示源代码 题目 使用Python实现人机石头剪刀布猜拳小游戏,并且最后能够统计分数和局数 结果展示 源代码 # -*- coding: utf-8 -*- # Course : python 基础 # Time : 2023/7/2 14:21 # Author : Eden Wei …

vue筛选框封装

点击对默认查询条件之外的条件进行 增加或删除 在使用的组件或标签加入:filtrateList"filtrateList"传入条件查询数组 当前demo写在xk-page中,就以xk-page组件为例 <xk-upage :filtrateList"filtrateList" :queryArr"queryArr"></xk-…

Vue3setup的参数说明

setup的两个参数 setup包含两个参数&#xff0c;一个为props、一个为context &#xff08;均为形参&#xff09; props&#xff1a;值为对象&#xff0c;包含&#xff1a;组件外部传递过来&#xff0c;且组件内部声明接收了的属性。context&#xff1a;上下文对象 <scrip…

LIN总线与RS485总线

LIN&#xff08;Local Interconnect Network&#xff0c;局部互连网络&#xff09;总线和RS485都是用于设备间通信的串行通信协议。下面我将分别列出它们的优势和劣势。 LIN总线的优势&#xff1a; 简单性&#xff1a;LIN总线的硬件和协议简单&#xff0c;易于实现和维护。成…

JVM常用参数

以下是 JVM 常用参数的配置 内存相关参数&#xff1a; -Xmx&#xff1a;指定 JVM 最大可用内存&#xff0c;例如 -Xmx2g 表示最大可用内存为 2GB。 -Xms&#xff1a;指定 JVM 初始内存大小&#xff0c;例如 -Xms512m 表示初始内存为 512MB。 -XX:MaxPermSize&#xff1a;指定…

23种设计模式总结

设计模式的本质是&#xff1a;“找到变化&#xff0c;封装变化” 设计模式的类型分为&#xff1a; 创建型&#xff1a;负责提供创建对象的机制 结构型&#xff1a;将对象或类组合成更大的结构&#xff0c;同时保持对外结构的不变&#xff0c;对内结构的灵活 行为型&#xff1a…

基于stm32单片机的智能家居环境监控系统

​一.硬件方案 智能家居环境监控系统的整体电路主要由stm32单片机最小系统&#xff0c;光MQ-2烟雾传感器电路&#xff0c;红外人体检测电路&#xff0c;DS18B20温度传感器&#xff0c;LCD1602显示电路&#xff0c;水泵驱动电路&#xff0c;风扇驱动电路&#xff0c;LED指示灯&…

MySQL数据库架构

MySQL数据库架构 MySQL架构自顶向下大致可以分为连接层 , SQL层 , 存储引擎层 , 物理文件层。架构如下 连接层 -- 查看最大连接数 show variables like %max_connections%;客户端连接器&#xff0c;MySQL向外提供交互接口连接各种不同的客户端。 客户端/应用程序&#xff1a;客…

银河麒麟服务器v10 sp1 redis开机自动启动

接上一篇&#xff1a;银河麒麟服务器v10 sp1 安装 redis_csdn_aspnet的博客-CSDN博客 将redis_init_script文件复制到/etc/init.d下&#xff0c;重命名为redisd&#xff1a; rootxxx-pc:cp /usr/local/redis/redis-7.0.11/utils/redis_init_script /etc/init.d/redisd 内容如…

MFC 单文档模式

Doc类利用自带框架存数据 void CCADDoc::Serialize(CArchive& ar) {if (ar.IsStoring()){// TODO: 在此添加存储代码//保存数据到文件ar << m_nShapeCount;for (int i 0; i < m_arrShapes.GetSize(); i){CShape* pShape NULL;pShape (CShape*)m_arrShapes[i];…

【C的葵花宝典进阶篇】之指针进阶(一)

【C语言进阶篇】之指针进阶&#xff08;一&#xff09; 1. 字符指针2. 指针数组2.1 整形指针数组2.2 用指针数组模拟二维数组 3. 数组指针3.1 数组指针的表示方法3.2 深度剖析&数组名和数组名3.3 数组指针的使用3.3.1 在同一函数内直接将数组的地址赋给数组指针3.3.2 数组指…
最新文章