566
社区成员
作为一名本科也是软件工程专业的学生来说,孟宁老师的《高级软件工程》这门课给我带来了和本科老师所教授的《软件工程》截然不同的两种感受。
在本科时候所学习的《软件工程》老师主要还是围绕着传统的软件工程关于 “研究和应用如何以系统性的、规范化的的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来” 的内容进行课展开,教学方式以教师课堂授课为主,学生被动地听课,教学一般重理论而轻实践。
而在研究生阶段孟宁老师引入了一些新的教学内容和教学思路,乃至对软件本身进行哲学上的思考。课程第一篇叫 “工欲善其事,必先利其器” ,不是先讲一堆枯燥的关于软件工程的学术知识和概念,而是先从简单、实用的工具讲起,包括VS Code、Git 以及正则表达式。一开始我是挺惊讶的,作为一门课程却先避开了学术内容走向实践,虽然这些工具有接触过一些,但是一路听老师所讲述的下来最大的感受就是两个词——干货、实用,没有什么花里胡哨和繁琐的废话,上来全是真正实用能打的内容。
其中关于git的内容受益匪浅,以前搜索关于git的内容很多都是长篇大论,会夹杂着很多你并不需要的内容。在这门课上对四种git常见的场景包括本地仓库、远程代码库、团队项目中的分叉合并和最后的git reabase,把日常我们使用会遇到的基本情况全部罗列并讲解。
讲完了工具后,开始站在代码编程的角度上介绍工程化编程的基本方法,涵盖了代码风格规范、模块化、可复用、可重入和线程安全等,在一步步完善代码的同时将软件工程的思想融入其中,实践的同时强调理论知识的重要性,做到了理实交融。后续的话从需求分析和建模开始,探讨了一些软件工程中的基本建模方法,接着深入了软件的本质和软件的结构,以软件科学化的视角梳理了软件的基本构成元素、基本结构、设计模式、软件架构、质量属性,以及描述软件的不同视图等;最后讲述了软件危机,将软件的生命周期作为讨论的重点,并与业界主流的PSP、TSP、CMM/CMMI、敏捷开发、DevOps等软件过程和生命周期管理衔接起来,中间还涉及到了软件与哲学内容的探讨,整体属于是相当精彩并饱含思想的一门课了,就像老师书所述那般:兼有理论深度和实践厚度,内容丰富、由浅入深、层次鲜明。
下面是我关于本课程部分内容的归纳整理
命令
用法
命令
用法
用法
流程
命令
在场景三团队项⽬⼯作流程中增加⼀步Git Rebase,即在mybranch分⽀上完成⾃⼰的⼯作之后,为了 让 log 记录将来更容易回顾参考,⽤ git rebase 重新整理⼀下提交记录。
克隆
重构
⾯向功能的分解⽅法
特征
数据
并发
事件
对象
分解视图:⽤软件模块
依赖视图:软件模块之间的依赖关系
泛化视图:软件模块之间的⼀般化或具体化的关系
执⾏视图:系统运⾏时的时序结构特点
实现视图:描述软件架构与源⽂件之间的映射关系
部署视图:执⾏实体和计算机资源建⽴映射关系
⼯作任务分配视图:将系统分解成可独⽴完成的⼯作任务
根本问题:软件概念结构(conceptual structure)的复杂性,⽆法达成软件概念的完整性和⼀致性,⾃然⽆法从根本上解决软件危机带来的困境。
分析:需求分析和定义
设计:软件架构设计和软件详细设计
实现:编码和测试
交付:部署、交付测试和⽤户培训
维护:持续时间最⻓
描述性过程:客观陈述在软件开发过程中实际发⽣什么
说明性过程:主观陈述在软件开发过程中应该会发⽣什么。抽象的
适⽤于:能够完全透彻理解的需求且⼏乎不会发⽣需求变更的项⽬
瀑布模型中的主要阶段通过⾥程碑(milestones)和交付产出来划分的
原型就是根据需要完成的软件的⼀部分,完成哪⼀部分是根据开发原型的⽬标确定,可将⻛险前移
⽣死相依原则
在开始⼀项⼯作之前,先去思考验证该⼯作完成的⽅法
V模型是开始⼀个特定过程活动和评估该特定过程的过程活动成对出现
分阶段的增量和迭代开发
每⼀次迭代过程分为四个主要阶段:
计划阶段
开发阶段
开发完成后进⾏总结分析
软件过程评估:⽤于确定⼀个组织当前的软件⼯程过程状态及组织所⾯临的软件过程的优先改善问题
软件能⼒评估:⽤于识别合格的软件承包商或者监控软件承包商开发软件的过程状态
应⽤⽅⾯:
全员规划,分块并⾏
⽂档为纲,当⾯交流
迭代开发,分块检查,持续交付
优先开发,讲究实效
是开发,技术运营,质量保障的交付
参考资料:代码中的软件工程
软件能⼒评估:⽤于识别合格的软件承包商或者监控软件承包商开发软件的过程状态
那你是怎么做评估的呢? 这个 “知识点” 对你有什么价值呢?