现代软件工程
最近拜读了邹欣老师的《构建之法》的前四章,对于其中介绍的一些方法和理论感受颇深,下面结合我的具体经历谈一些自己的想法。
一、软件工程师应具备的能力素质
首先一个软件工程师必备的技能要求:
1. 知识:对具体技术的掌握, 动手能力。
2. 经验: 对问题领域的知识和经验的积累。
3. 通用的软件设计思想, 软件工程思想的提高
4. 团队合作能力
再来谈一谈我自己的一些感悟:
知识是编程的基础,一个合格的软件工程师,必须拥有扎实的知识,例如我在工程测控的实验课上对一个matlab的程序进行编辑的时候,第一次会由于某方面知识的缺失而无法完成,所以我会再去复习关于语法和逻辑的知识。因此对于软件工程师来说,掌握Java,C/C++/C#的基本知识至关重要。
其次是经验的积累,经验的获得比知识更加宝贵,经验是由实践中获得的,对于初学者来说,开始的时候无法完全正确的调试一个较为复杂的程序,可能缺乏的不是知识,而是经验。
对于思想方面我的理解是,思想是逐渐建立的,在不断的实践和进步中,会对软件工程的习惯做法有更深的理解,这就形成了自己的思想,但是空谈思想而无所作为显然是行不通的。
团队合作是软件开发流程的必要因素,一个人很难高效完成任务,正如书中提到:软件开发流程不光指团队的流程, 软件团队是由个人组成的,一个好的团队流程能把冲突的积极方面释放出来, 而避免消极方面。
二、基于模型的设计流程
通过对算法建模进行软件设计的过程,叫基于模型的设计。例如使用Simulink模型开发嵌入式软件的设计过程,为提高开发团队效率和提高软件品质,考虑到了算法模型的验证、文档自动化及代码和模型的等效性验证,以系统需求文档作为依据建立模型,并进行代码生成,文件自动化和图形自动化,即为基于模型的设计流程。
相对其他开发流程的优点:
1. 图形化设计
对于基于模型的设计来讲,图形化设计是天然的优势,对于工程师来说,图形化的东西更加容易理解,所以这是对于其他开发流程的优势所在。
2. 早期验证
早期验证能够及时发现引入的bug。假如我们在一个阶段工作完成后就进行验证工作,那么在这一阶段的bug就会被及时发现,不会对下面的产生较大影响,使用基于模型设计去开发软件,除了传统的评审外,还有更高效的早期验证方式,包括Simulink模型本身固有的仿真,以及通过形式化方法工具对模型进行形式化的分析。
3. 代码的自动生成
代码生成的前提是模型已经是验证过的模型,或者说是正确的模型,做到以上这些,就可以考虑进行代码生成工作了,代码生成过程中,工程师要做的主要工作是数据管理工作,除此之外,还会有一些代码相关的配置,比如函数原型、比如代码文件等等。代码生成为软件工程师省去了许多时间,提高了开发的效率。
4. 文档自动化
代码生成和早期验证之外,基于模型的设计,还可以给我们带来其他好处,比如文档自动化。
文档在开发过程中必不可少,但是写文档对于大部分工程师是不情愿的,所以文档的自动化为工程师带去了便捷。
所以以上四点即为基于模型的设计流程为软件工程师带来的优点。