思考
对软件工程的看法
就我个人而言,软件工程是一门运用现代科学技术来设计并构造出可有效运行的计算机程序的复杂学科。软件工程是一个涉及软件全生命周期的系统方法,它对其开发、运行、维护和修复都做出了很好的归纳总结,使得软件的开发更具工程化思想。如任正非于2018年12月时所写的那封致员工信曾提到的“我们要遵守过程的一致性”,其中的一致性则是周期中每一个步骤的衔接,做好衔接工作就是软件工程这门学科所教会我们的。
对软件开发的本质的认识
软件开发的本质是实现问题域中的概念和处理逻辑到运行平台的概念和处理逻辑的映射。
软件开发是一项漫长的工作,它需要经历大量的前期准备、中期编写和后期维护,每一步都至关重要。如果仅仅认为软件的开发是程序编写,软件开发前期的需求分析不到位,很有可能使得后期开发的软件达不到客户的要求。同时软件开发是会随时变动的,由于需求变动的波动性,软件也需要时时更新维护。如果只是做好准备而缺乏代码编写能力,实际上也只是徒劳无功。
软件的特点
复杂性(Complexity)
软件本身是一个庞大的逻辑系统,不仅由多个文件,多行代码所构成,其模块之间也有显性和隐形的依赖关系。同时软件又是因多样的社会需求而诞生的,而其中影响社会需求的人为因素又是及其多样且多变的,更增加了软件本身的复杂性。软件的复杂性使得软件难以理解、难以生产、难以维护、更难以对其生产过程进行管理。
不可见性(Invisibility)
软件与硬件不同,不能轻易看到其内在,因此我们不能在软件上轻易的看到运行在其表面下的真实代码的执行情况。软件的不可见性,使得软件一旦出错很难完整重现程序出现的错误。
服从性(Conformity)
软件必须和运行它的硬件保持一致,这是由软件对硬件的依赖所决定的,因为硬件较软件难以更改,因此软件需要服从硬件。软件对运行会受到计算机系统的影响,软件在设计时就需要考虑到软件对于不同系统的应用,因此软件需要符合行业系统要求。同时又因为软件面向用户,它需要服从客户的需求,才能拥有市场。正是软件的服从性才使得软件被人们广泛的运用。
易变性(Changeability)
软件在生产过程中,甚至在投入运行之后,都可以再改变。软件可以不断地更新升级,而且相对于硬件,修改软件会比更换硬件更容易。软件的易变性虽然使得软件更容易修改,使得软件可以更为完善,但这种动态的变化难以预测和控制,可能对软件的质量产生负面影响。
软件危机
什么是软件危机
软件的规模不断扩大,复杂度不断增加,软件需求量也日益增加,且价格昂贵,供需差日益增大。
软件的开发过程是一种高密集度的脑力劳动,软件开发工作常常受挫,质量差,很难按照要求的进度来完成指定的任务,软件的研制过程管理起来困难,往往失去控制。
软件开发的模式及技术已经不能适应软件发展的需要。因此,导致大量低质量的软件涌向市场,有些软件开发出来就已经远远超出了预算,有的软件甚至在开发过程中就夭折了。
产生原因
在软件开发的初期阶段,需求提得不够明确,或未能得到确切的表达。开发工作开始后,软件开发人员和用户又未能及时交换意见,造成开发后期矛盾集中暴露。
解决手段
- 重视需求分析,与客户的沟通,确切表达需求
- 重视设计和实现过程的资料
- 充分的测试工作
- 维护和管理工作
- 统一的、公认的方法论和规范指导
软件工程
组成要素及其作用
- 方法:为软件开发提供了“如何做”的技术手段
- 过程:为了获得高质量的软件所需要完成的一些列任务框架,规定了完成各项任务的工作步骤
- 工具:为软件工程方法提供了自动的活半自动的软件支撑环境