虽说本科的时候学过软件工程这门课程,却因为缺少项目编程实践,所以对其理解得不是很透彻。但是在研一的继续学习却有了更为深刻的理解和体会,究其原因除了一而再的受教,更多的是理论与实践的结合。那么,高级软件工程这门课究竟给我带来了什么样的心得呢span>
软件工程是一门需要大量实践时间的学科,如果我们只是上课听一听,跟着老师,课本敲一敲代码而已,课后完全没有自己的练习,那无疑是学不好软件的。在这两个多月的学习中,我不仅在课堂上学到了理论知识,更重要的是每周的实验实践以及助教的负责检查和指导,让我不断地进步。
一般有过面向对象编程的人来说,最头疼的估计就是设计了。一个好的项目,设计至少要占到50%甚至更多,那么问题来了,什么样的设计才是好的设计,以及如何才能做到需要软件工程思想来指导。
软件工程的目标就是提高软件的质量与生产率,最终实现软件的工业化生产。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。
软件的质量因素有很多,比如正确性、性能、可靠性、容错性、易用性、灵活性、可扩展性、可理解性、可维护性等。
软件工程的主要环节有人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试、维护等。
常见的软件工程模型有线性模型、渐增式模型、螺旋模型、快速原型模型、形式化描述模型等。
软件工程多年的发展已经积累了相当多的方法,但这些方法不是严密的理论,我们应该学会选择合适的方法和产生新的方法,“复用”和“分而治之”是两个行之有效的策略,也是在实验中代码编写的关键思想。
复用就是指“利用现成的东西“,文人称“拿来主义”。复用不是人类懒惰的表现而是智慧的表现,正是因为我们总是在继承前人的成果,不断加以利用、改进和创新才会进步。把复用的思想用于软件开发,就能避免重复造轮子。复用方法合理化并简化了软件开发过程,减少了总的开发工作量与维护代价,既降低了软件的成本又提高了生成率。
分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。把这个思想应用于软件开发时,我们要考虑复杂问题分解后的每个问题能否用程序实现的程序最终能否集成为一个软件系统并有效地解决原始的复杂问题span>
在现实情况中,由于条件的千差万别和技术的日新月异,没有哪一种软件标准能长盛不衰,所以我们要与时俱进,敢于创新,不能过分依赖和套用一些示例。
软件开发不同于传统的农业生产,人多不见得力量大。如果给落后于计划的项目增加新手,可能会延误项目。因为新手会产生很多新的错误,使项目混乱;老手向新手解释工作以及交流思想都要花费时间,使实际开发时间更少。所以科学的项目计划很重要,不在乎计划能提前多少,重在恰如其分。
对需求把握得越准确,软件的修修补补就越少。有些需求在一开始时很难确定,在开发过程中要不断地加以改正。软件修改越早代价越少,修改越晚代价越大。
正所谓,不想当将军的士兵不是好士兵。作为一名合格的程序猿,不仅仅只是码代码来实现系统需求,更应该去培养软件工程的思想。在编写代码的时候,多以软件工程化的思想去推敲考究,看是否能将代码写得更漂亮,更优秀。闲的时候可以设想一下,如果自己是软件架构师或项目经理,该如何设计整个软件开发周期,预测在开发过程中可能遇到的问题及相应的解决方案。只有时刻准备着那个职位,才有机会获得那个职位,机会是留给有准备的人的,不是吗span>
附录:实验内容以及实验 告和代码
实验一:写一个“Hello World”小程序
实验一 告
实验一代码
实验二:命令行菜单小程序V1.0
实验二 告
实验二代码
实验三:内部模块化的命令行菜单小程序V2.0
实验三 告
实验三代码
实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
实验四 告
实验四代码
实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
实验五 告
实验五代码
实验六:函数的可重入性及线程安全
实验六测验
实验七:将menu设计为可重用的子系统
实验七 告
实验七代码
潘凯特
《软件工程(C编码实践篇)》 MOOC课程http://mooc.study.163.com/course/USTC-1000002006
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!