转载文章----软件工程导论

转载地址:http://www.cnblogs.com/lishiyun19/p/4443002.html 

很多人,包括计算机科班出身的同学,在关于软件工程项目的开发与维护的问题上,或多或少的有着一些错误的认识。学习软件工程的基础知识,对提高软件开发效率、节省软件开发成本和提高软件的可维护性,具有非常重要的意义。

一、软件危机与软件工程

  在 1968 年的时候由北约组织召集了一大批科学家们为解决"软件危机"这一难题的会议上,首次提出了软件工程 Software Engineering 这一概念。但是,一直以来,关于什么是软件工程缺乏一个统一有效的定义。那么,为了解释清楚什么是软件工程,我们必须要了解,什么又是软件危机呢?通常,我们把计算机软件在开发与维护过程中所遇到的一系列问题,统称为软件危机。简单的说,软件危机主要包含以下两个方面:

    1.如何高效的开发软件;

    2.如何有效的维护现有软件;

  也就是说,软件危机贯穿于软件的整个生命过程,而这些问题绝不仅仅是不能正常运行和维护的软件所具备的,几乎所有的软件都不同程度的存在软件危机的问题。那么问题来了,什么样的原因导致了软件危机?

  客观的说,由于软件是计算机系统中的逻辑部件,而不是物理部件,在一定程度上缺乏可预见性,管理和控制开发、维护过程相当的困难;此外,软件通常具有规模庞大的特点,软件的规模随着程序的复杂性成指数级的往上增长,大大增加了开发和维护的难度。

  主观的说,在软件开发过程中,由于工程师们的水平良莠不齐,工程项目的时间又往往相对漫长,那么就会造成如下几个问题:

    1)忽视软件需求分析的重要性,或者甚至错误的认知了软件的需求,造成了开发过程中的人力、物力和资源的浪费;

    2)忽视了软件开发数据和文档的建设,造成软件项目完成后,面对几十万行甚至更多的代码,完全无法有效的进行调试和维护;

    3)由于软件设计的方法不科学,导致了大量的软件代码冗余和耦合,给后期的维护带来了极大的麻烦;

  综上所述,为了能够从主观和客观两个方面的因素消除或者说尽量减少软件危机带来的不确定性,我们既要采用科学的方法和工具,又要掌握合理的管理和组织开发团队的能力,因此,软件工程正是从技术和管理这两个方面去研究和指导如何能够更好的开发和维护软件的一门工程学科,这里可以参考下维基百科对软件工程的定义。

二、软件生命周期

  在软件工程诞生的这半个多世纪里,通过几代科学家和优秀工程技术人员的努力探索和总结,形成了一套行之有效的软件开发和维护模式,概括的说,软件生命周期由软件定义、软件开发和运行维护这三大阶段组成,而每一个阶段又可以细分为几个小的阶段,如下图所示:

  

   问题定义:占据整个软件项目 5% 左右的时间,定义所有要解决的问题;

  可行性研究:占据整个软件项目 5%~10% 左右的时间,确定问题是否值得解决,并为后续的任务提供建议;

  需求分析:占据整个软件项目 5%~10% 左右的时间,确定软件系统必须完成的工作;

  总体设计:占据整个软件项目 10%~15% 左右的时间;

  详细设计:占据整个软件项目 10%~15% 左右的时间;

  编码和单元测试:占据整个软件项目 20%~25% 左右的时间,编写代码和单元测试;

  综合测试:占据整个软件项目 30%~40% 左右的时间;

  运行和维护:主要是软件交付使用后的维护工作;

三、软件工程方法学

  通常,我们把在软件生命周期整个过程中使用的一整套技术方法的集合,称为软件工程方法学,主要包括 3 个要素:方法、工具和过程。

    方法:是指完成软件开发过程中的各项任务的技术方法,主要阐述了"怎样做"的问题;

    工具:是指是为了运用方法而提供自动的或者半自动的软件工程支撑环境;

    过程:是指为了获得高质量软件所需完成的一系列的任务和框架,规定了完成各个任务的工作步骤,主要解答了"何时做"的问题;

  目前,使用的最广泛的软件工程方法学主要是结构化方法学面向对象方法学

    1>结构化方法学的主要特点:

      采用结构化技术来完成软件开发的各项任务;

      把软件生命周期划分为若干个阶段,然后顺序完成各阶段的任务;

      每个阶段的开始和结束都有着严格的标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准;

      在每个阶段结束之前都必须正式地进行严格的技术审查和管理复审;

    2>面向对象方法学的主要特点:

      把对象作为融合了数据及在数据上操作的软件构件,也就是说用对象分解取代了结构化方法的功能分解;

      把所有的对象都划分成类;

      按照父类与子类的关系,把若干个相关类组织成一个层次结构的系统;

      对象彼此间仅能通过发送消息互相联系;

四、总结

  总的来说,软件工程是一门交叉学科,是将计算机科学、数学、工程学和管理学等基本原理应用于软件的开发与维护中,以软件方法和技术为核心,重点对大型软件进行分析与评价、规格说明、设计和演化,同时涉及管理、质量、创新、标准、个人技能、团队协作和专业实践。在软件开发项目中不仅涉及了组织和应用软件系统的配置和部署所面临的实际问题,同时又必须不断促进和实践的理论知识的创新。为了真正解决实际问题,必然需要在理论和应用上获得最佳平衡。

时间: 2024-10-11 06:37:37

转载文章----软件工程导论的相关文章

《软件工程导论》读后感想与疑惑

<软件工程导论>读后感想与疑惑 疑问1: 根据2.1节我们知道可行性研究至少从技术.经济和操作可行性三个方面分析,那么应如何理解文中首句指出的:"可行性研究的根本目的不是解决问题,而是确定问题是否值得去解决." 疑问2: 按照教材内容编排顺序,可行性研究放在了需求分析之前.这意味着应该先进行可行性研究再进行需求分析吗?如果不是,那为什么不把需求放在前面呢,应如何理解这二者之间的关系? 疑问3: 在之前的课程中曾经学习过"管理信息系统"和"决策支

对转载文章却不加原文链接的人感到恶心

最近在接触 U3D,经过近两个多月的学习和研究,对 U3D 有了点点了解,于是就想把知道的一切写成文章,以让后来者少走弯路!可是有些人实在无耻!当然我不反对自己写的文章能被别人转载,但是文章被别人转载的时候不愿意加原文链接,也实在让我无语,更恶心的是还把图片的水印都去掉了,并且加上了自己网站的水印!对这种人真是感觉愤怒了,别人辛苦编写的例子.代码.文章,你一个转载就把别人的成果变成自己的了? 其实我的网站图片在没有加水印之前,我在其网站上面留言,让其把原文链接加上去,但是此人把留言删除了!后来没

欢送转载文章

据笔者懂得到的新闻日前中国在北京进行了欧盟企业在中国倡议书的宣布,在这个提议书中中国再一次的将撤销对外商投资的限度划入到汽车工业内容中的头一条上面,而作为欧洲在国内企业好处的代表来说这一次已经是中国九年以来的第九次对海内汽车企业合资股比的问题提出了不同的见解. 欢送转载文章,转载请注明出处,wxwx5.blog.com!本文网址: 对此负责人表现到目前为止还不哪一家欧洲的汽车企业在中国的合资企业中拿到了控股的全力,但是中国的汽车企业在进入到欧洲市场的进程中却不会呈现这方面的制约,他以为这是一种不

陈爽 软件工程导论week2.1

软件工程导论week2.1 第一章概论问题:1.程序=算法+数据结构  软件=程序+软件工程软件工程的目标是创造足够好的软件,可以从用户满意度,可靠性,软件流程的质量,可维护性等方面判断,但是我们没有自己做过大的软件工程体系的项目,之前做的新闻管理系统,就是十几条新闻做查询,增删改查等数据库操作,但是真正的新闻管理系统每天需要管理的新闻量达到上千条甚至上百万条,我们自己做出来的系统能否承受住这样大数据量的考验呢?如何从这几方面衡量标准来改善一下我们已经做过的新闻管理系统软件呢?2.学生电脑的系统

软件工程导论作业(文章改随笔)

什么是RUP: RUP是由Rational软件公司推出的一种完整而且完美的软件过程,由RUP总结的六条最有效的软件开发经验,这些经验被称为"最佳实验".最佳实验分为迭代开发.管理需求.管理需求.使用基于构建的体系结构.可视化建模.验证软件质量.控制软件变更. 什么是敏捷过程: 敏捷过程是为了使软件开发团队具有高效工作和快速响应变化的能力,由17位著名的软件专家与2001年2月联合起草的.敏捷软件开发宣言包含四个简单的价值观声明.分别为,个体和交互胜过过程和工具.可以工作的软件胜过面面俱

转载文章 利用旋转正方形与图形的组合实现爱心

实现爱心效果图 源码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>利用旋转正方形与图形的组合实现爱心</title> 6 <style> 7 html { 8 font-family: "microsoft yahei"; 9 } 10 .heartShaped { 11 position

转载文章----C#基础概念

转载地址:http://www.cnblogs.com/zhouzhou-aspnet/articles/2591596.html 1.值类型和引用类型 1.1堆和栈 简单的说值类型存放在堆栈上面,引用类型的数据存放在托管堆上面(它的引用地址却存放在堆栈上面)! 栈:它是一个内存数组,是一个先进后出的数据结构! 栈的特征:数据只能从栈顶进,从栈顶出! 堆:它是一个内存区域,可以分配大块区域存储某类型的数据,与栈不同的是它里面的数据可以任意排序和移除! 下面是园子的一张图,贴上来供大家参考啊! 问

关于“转载”文章的一些说明

很久以来,一直坚持原创,早先转载的许多文章,删除了大半.  近期,感觉自己很有必要"转载"别人的文章.    网上看到好的文章.都是用浏览器-收藏夹管理的,这样的方式看了不够直观,内容分布在多个站点. 此外,还有个最大的"风险",文章可能被删除了.甚至这个站点直接关闭了. 之前,不喜欢转载,主要感觉是太没有意思了.好多人都喜欢copy别人的文章.还标记的是"原创". 我很歧视这样的行为.更不能成为一个这样的人,节操. 有必要"转载&qu

转载文章——Hadoop学习

转载地址:http://www.iteye.com/blogs/subjects/zy19982004?page=2 一.Hadoop社区版和发行版 社区版:我们把Apache社区一直开发的Hadoop称为社区版.简单的说就是Apache Hadoophttp://hadoop.apache.org/ 发行版:基于Apache Hadoop的基础上进行商业改造的解决方案,包含一系列定制的管理工具和软件. 二.Hadoop社区版版本号 一直以来,Hadoop的版本号一直困扰着广大Hadoop爱好者