软件工程项目感想
软件工程课程必然是一门实践的课程,而笔者对这门课程的实践也是刚刚完成。
写了一个小程序,“你帮我助”。不妨看看笔者在这门课上学到了什么,作为一个checklist来看看有没有学以致用:
- 概论
- 个人软件过程
- 可行性分析
- 需求
- 形式化方法
- 总体设计
- 详细设计
- 实现
- 维护
- 面向对象方法
- 面向对象分析
- 面向对象设计
- 面向对象实现
- 项目管理
概论,及其他
可行性分析、需求,想必是老师出题时已经帮我们做好了,至于个人软件过程,也是贯穿始终的。选择了Python语言,类的定义全部用了大驼峰,而其他均采用了下划线分隔,注释了函数接口和关键代码等等......个人风格想必是一个习惯养成的过程,希望未来也可以慢慢养成“诗一样代码”的习惯。
设计
回想设计过程,也是非常简单的。总体设计上来说,独立模块化是必定的,内聚耦合也在注意了,总体设计非常简单,模块及其域非常明显,并没有花太大气力。感受上,这些设计方法是一些内化于心,外化于形的方法论,是一种思路,是一种思维方式,更是一种思维习惯。真正去做时,好像也并没有刻意去使用课堂所学内容;而做完回顾时,发现课堂所学内容已然彻底改变了笔者的思维方式。
详细设计也是没有花费太大气力,稍微想想,手就不由自主地放在键盘上开始码了。现代高级语言很难写出非结构化的代码了,而设计好后,也很难写出需要用图才能说明逻辑的代码了。
实现
实际上实现和详细设计是同时进行的了——因为在强大的方法论下,这两个过程都变得如此简单。麻烦的倒是测试过程了。写了三个模块,每个模块中都有些子模块(类),用了Python,测试起来也很方便,于是乎每个类方法都经过了白盒测试,每个模块都经过了子系统测试,整体也做了系统测试。
用了Python,自底向上的测试非常方便。也体会到了回归测试过程,也试图找朋友做了α测试。说来神奇,代码这种神奇的东西,其逻辑复杂度已远超出个人所能理解,也就导致了代码有了bug便是头疼脑热也解决不了;而软件工程却将其逻辑复杂度break down,让一个人能够管理的代码大大增加。至少笔者在这次开发实践当中,再也没有出现过头疼脑热找不到bug的经历了。
面向对象
用了Python,写的程序很难不面向对象了,分析实现的思路也很难不面向对象了。类图、用例图、顺序图画出来后,代码也基本上写好了。
除了UI部分。实际编程过程中,UI和控制流很难分开,顺序图画的顺序,基本上是实现UI时控制流的蓝图。这部分代码,虽然是写在UI类里,但是很大程度上是面向过程的了。
但是,在面向过程的过程中,笔者切切实实地体会到了面向对象的畅爽——过程里是对象的舞台,诸多功能可谓一触即达——封装严密,测试完善的功能。大部分代码量是在处理与用户交互的数据(所以不得不面向过程),但是数据准备好后,只需往对象方法接口里一送,便是获得了return的结果。
面向对象是更精密更成体系的模块化,更是拓展了个人得以处理得以理解的代码范围。
软件工程
软件工程是一门科学
人脑是有限的,系统是复杂的。如何让有限的小大脑,去制造、维护一个很大的系统,必然是一个值得研究的学问。
计算机是一个无比复杂的系统,而它搭建了一个更广阔的平台——其上可以搭建无限复杂的软件!
软件可以无限复杂,研究软件工程,想必可以推广到对于其他系统的制造与维护。
软件工程是一门学科,是一门科学;科学本身是不是一项工程呢?物理学构建于定理之上,一个定理不就是一个对象吗,是属性(物理量)和操作(方程)的集合,牛顿之后,有了量和方程的加持,物理学才真正拨云见日成为一门科学。能够帮助人类搭的更高的学科,是科学中的科学。
软件工程是一种习惯
知是行的主意,行是知的功夫,软件工程的学习中,笔者真正体会到了知行合一——行时自然是知,不知自然不行。课上所讲微言大义,有时着实难以具象理解。但真到行时,才发现知识已然内化于心。
真正的软件工程并不是背会的,并不是考的了的,而是在行动中体会到的习惯——不,笔者的经验是,是行动中都体会不到的习惯。方法论运用熟练之时,自然成为一种思考习惯,行事习惯,软件工程,就是这样一种习惯。
标签:项目,代码,感想,习惯,面向对象,软件工程,测试,过程 From: https://www.cnblogs.com/dobyxu/p/16996947.html