软件工程再继续

来源:互联网 发布:飞鱼打印软件 编辑:程序博客网 时间:2024/05/17 04:14

高级软件工程课程结束了,但对于软件工程的理解却还在继续!孟老师通过对同一个功能的反复重构迭代,带领我们一步步理解什么是软件工程,如何写好代码!

从一个简单的判断打印输出命令的hello world级别的程序,最后重构封装迭代为一个可重用的命令行接口程序,工程化的思想从0开始注入整个开发过程,现在回忆起来荡气回肠,体态充盈,老师对教授软件工程把握的恰到好处!

七次实验内容学下目录:
实验一: 写一个hello world小程序,熟悉Linux 下C语言编程,通过本实验熟悉Linux 平台开发流程。

实验二: 简单的命令行程序,实现一个可以输入相应命令,本次试验的代码就是属于程序初学者的代码,只是使用基本语法实现了所谓的功能需求,不考虑需求可能会发生变化,数据被硬编码在程序语句字面量上!这就未考虑软件的可维护性和可扩展性,如果需求增加或者减少更改,都需要重写逻辑代码。

实验三: 业务逻辑和数据存储分离,程序=数据结构+算法,严格来讲第一个程序没有像样的数据结构,只有一个业务逻辑算法而已。本实验设计了链表数据结构来存储命令数据,实现数据存储和业务逻辑抽离,放空程序员大脑存储。同时模块化查找功能,采用系统模块化思想,进行Separation of concern,对可重用部分模块化,并放入不同的模块之中!

实验四: 通用链表模块设计,实验三设计的链表数据结构是和业务逻辑相关的,本次实验通过重构链表模块,通过规范的接口设计,在不改变业务逻辑代码的情况下替换了原来的链表,设计使用一个新的通用链表,它不仅可以使用在这个命令行业务之中,还可以使用在其他业务之中。

实验五: callback回调函数增强通用链表,本实验通过回调函数的使用,遵循面向接口设计的编程理念,从而实现模块解偶,去除了全局变量的危险性,增强了通用链表的功能!并通过将链表结构隐藏在链表模块源文件而不是头文件来达到信息隐藏的目的。

实验六: 函数的可重入性和线程安全,本实验主要关注链表的线程安全问题,以改善多线程环境下的安全性问题,进一步完善软件系统。

实验七: 将menu设计成可重用子系统,本次实验,遵循不要太通用也不要太具体原则,通过设计两个简单易用的接口,为其他开发者提供一个可用的命令行组件模块。通过工程化的Makefile的编写,使得软件更加易用。

最后,站在更大的立场谈谈软件工程,不得不提一下计算机科学与技术,计算机硬件工程!几乎所有的大学都会来计算机科学和软件工程两门课,但奇怪的是本科课程设置差不多,毕业后大部分都是做码农,写软件!唯一不同是软件工程学费贵!我就奇怪了,这是培养模式的问题还是市场需求问题。既然都是写代码,干嘛设计两个专业。邹欣给出他们的区别,我觉得很赞!计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关;计算机科学中与实践相关的部分,都和数据以及其他学科发生关系;软件工程则和人的行为、现实社会的需求息息相关。软件工程的研究目标(软件的开发、运营和维护)都有“人”出现,这些“人”可以是项目需求的提供者,可以是软件的开发人员,还可以是软件的用户。

关于硬件,从本质上来讲,硬件=软件,硬件是固化后的软件,并且现在硬件的设计制造基本也是通过软件仿真,都是一系列完成某种功能单元器件通过排列组合等方式一步一步做完,这就像一个程序由一系列指令执行完成一样!一旦设计生产成型就不能更改或者难以更改,你不能用一个星期换一次吧,但是软件你可以随时随地换,这也是为什么硬件设计制造严格缓慢,周期长,成本衰减迅速。另外,特别依赖物理介质的条件和发展,很多硬件技术对物理化学等基础科学有很强的依赖性,这也是硬件发展比较缓慢的原因!

现在显然是软件更加迎合市场需求,硬件速度已经达到瓶颈,只能搞分布式或者资源虚拟化这些软件方式来解决问题和需求。软件比硬件更加灵活多变,这使得硬件不适合需求多变的场景,当然除非你用通用硬件+软件,但这个我觉得和智能机没啥区别!我自己不是很懂硬件,所以以上只是自己的一点拙见。现在物联网和智能硬件的发展如火如荼,硬件的发展必定又是一波浪潮,所以我认为软件硬件都一样,相辅相成,都是社会需求推动下浪潮的一波又一波迭代!

上面啰嗦了那么多,现在给软件工程下个定义就是利用计算机科学相关理论,根据社会需求(人的需求,不只是你软件的使用者,包括开发者,维护者),选择合适的硬件作为运行载体,更好更快的解决需求,从而带来商业价值。说的简单点,软件工程用来更好的赚钱,计算机科学是用来突破知识边界的。不能过多纠结两者,他们最后都必须使用代码来验证!
软件工程有一套流程,以上实验主要体现的是软件实现和编码层面的思想和实践,整个软件工程流程还包括可行性分析,需求分析,详细设计,编码,测试,维护等,每一环节又有相应的软件工具供人更方便更有效率的使用,是一项复杂的工程。

代码是一个软件工程师的产出或者说产品,这个产品是通过人协作开发,用来给人用,让后人维护的,因此,软件工程的一个核心思想是,写代码要以人为本!你写的代码不仅给你看,该给别人看,想用户所想,为自己以后维护着想,无论是性能上的利用计算机科学获得更好的用户体验,还是功能性,可维护性,易得性,可扩展性,可测量性,易测试性上获得更小的成本代价,都是为人,为用户!面向接口编程,模块化组织,规范化接口设计等都是体现!最后,课程的遗憾是只有个人一部分的软件工程,没有去协作完成一个成熟产品,上课内容过于泛化,没有落到实处!

田奇SA16225271 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000

原创粉丝点击