软工发展的三个阶段

经过五年的软件工程学科的培养,我从课本阅读和课堂学习中了解软件发展大体可分为三个阶段。首先是50年代~70年代的软硬件一体化阶段,在该阶段中,软件完全依附于硬件,软件应用具有功能单一、复杂度有限、需求变更极少和软件支持硬件完成计算任务这四个典型特征,并且当时硬件非常昂贵,没有职业的软件工程师和程序员,团队主要以硬件工程师和数学家为主,他们奉行“Measure twice, cut once”的硬件开发原则。
随着电子电路技术的进步,商业微型机在20世纪60年代后期开始出现,70年代开始流行,众多小企业有可以负担得计算机的购买和使用,那么相比于之前,市场提升了对应用为中心的软件产品的需求。软件行业慢慢意识到“code and fix”不适合大型软件项目开发,因为软件的应用特征发生了变化,软件功能需求越来越多变,软件规模和复杂度随之急剧上升。面对这样的压力,人们在软件发展的第二阶段,也就是70年代~90年代期间,意识到了软件开发的四个本质难题:不可见性、复杂性、可变性和一致性,软件危机开始大大加重。传统的形式化编程在扩展性和可用性方面存在着不足,这时面向对象编程方法得到了广泛地使用,同时统一建模语言、设计模式、面向对象设计原则等有效的面向对象实践经验被广泛地传播和应用。
人们在60年代地软件生产中发现,越早的发现缺陷并修复,耗费的工作量和成本就越低。为了提高开发效率、降低开发成本、控制项目风险、提高项目成功率,从业人员将需求分设计和测试几个活动独立出来,在编码之前设计,在编码之后进行测试,在设计之前进行需求分析,这样的软件开发过程被命名为瀑布模型,被70年代的从业者广泛地接受和使用。
在20世纪80年代追求生产力地背景下,出现了很多声称能大幅度提高生产率地技术,但Brooks经过分析后认为,软件开发地根本困难在于软件产品的内在特性,他们是无法回避的,也不是可以轻易解决的,没有技术能够起到银弹的作用——没有银弹。同时,人们认识到重视过程的同时也需要重视人的作用,人是项目最大的资产,《人件》作者将与人相关的工作列为于软件和硬件并列的“人件”,以强调人的重要性。敏捷过程更是明确地提出“个人与交互胜过过程与工具”,将个人与团队工作置于比开发过程更加重要的地位。
敏捷过程地提出也产生了业内将之与CMMI比较地现象,其实 不同之处,在于CMMI是以工程纪律为基础,要求事情是有依据地开展活动。Agile 的理论是以个人的创意为主,依赖员工自己的经验、积极性和灵活性来体现效能。两种方法的对象不一样。CMMI是考虑如何管理一般(不单单是规模大的)的团队。Agile不关注一般的团队,它假设员工们都是成熟的。这个假设非常重要。在某些情况下,员工可以成熟的快一点,但不是每一个员工都能够是成熟的。所以Agile在某种条件下,非常成功。但是没有成功推广到一般的团队的层面。
另一方面,90年代中后期Internet的发展增加了普通人接触软件铲平的机会,并且由于万维网的发展,在面向大众消费的软件产品中出现了一种新型的应用——Web应用,软件体系结构、人机交互、需求工程、基于软件复用的大规模软件系统开发技术和web开发技术得到了广泛地应用和发展。在软件开发过程方面,80年代地迭代式、并发、快速地增量或演化软件开发过程并不能妥善解决上述问题,90年代地思路是一迭代式、并发、快速地增量或演化软件开发过程为基础,充分总结和借鉴已有地最佳实践方法,并将它们整合到一起。基于这个思想,90年代产生了主流地重量级过程方法RUP和很多轻量级过程方法(XP),此时开源软件开发也是巨大革新地工程形式,该方法是一种基于并行开发模式的软件开发组织与管理方法,其利用总够多的beta测试者和合作开发者尽早尽快地发现并修改软件所存在的问题,并且利用严格的代码提交审核制度进行代码管理。
21世纪00年代在软件开发所面对的主要现实问题上,变化较大的是:1、Web应用成为主流。2、面向消费大众的软件产品需求出现了爆炸式增长。因此,软件工程方法开始分领域深入,金融电子商务、嵌入式、娱乐等技术领域都出现了明显的进展,软件应用功能、规模、用户数量的急剧上升使得软件产品网络化和服务化。
我个人的理解,软件工程就是按照工程学的管理方式,有组织、有计划的在成本限额以内按时完成开发且能在实际机器上可靠有效地运行的软件,并不断对软件进行优化、维护及管理的工作过程。软件业作为一个服务业,要想得到发展,首先必须形成个对软件服务有迫切需要的市场。其次,这个市场中的消费者必须具备足够的购买力。软件的消费群体可以分为个体消费和企业消费。中国的企业群体,数量庞大,但综合质量不高,规模较大的企业极少,因此,中国的企业对大型软件的消费数量是有限的至于个人消费,目前在中国还难以成大器。
纵观软件工程的发展历史,可以得到一些启示,如:研究工程理论和实践需要有系统科学的思想,软件工程管理任重道远,为了解决软件危机,既要有技术措施,又要有必要的组织管理措施。软件工程需要从管理和技术两方面研究如何科学、正确、合理地开发和维护软件,软件开发必须遵循软件工程的思想不断精细化。

你可能感兴趣的:(其他,程序人生)