请问什么是软件过程?
软件过程(Software Process)是指一套关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及相关Artifacts(计划、文档、模型、编码、测试、手册等)组成。
目前有三种方法:UP(the unified process),The OPEN Process,OOSP(The Object-Oriented Software Process)。
软件过程(Software Procedure)是指软件生存周期所涉及的一系列相关过程。
过程是活动的集合;活动是任务的集合;任务要起着把输入进行加工然后输出的作用。
活动的执行可以是顺序的、重复的、并行的、嵌套的或者是有条件地引发的。
...
什么是软件?什么是程序?
1.软件(中国大陆及香港用语,台湾称作软体,英文:Software)是一系列按照特定顺序组织的计算机数据和指令的集合。
一般来讲软件被划分为系统软件、应用软件和介于这两者之间的中间件。
软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。
简单的说软件就是程序加文档的集合体。
2.计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。
同一计算机程序的源程序和目标程序为同一作品。
3.程序员(英文Programmer)是从事程序开发、维护的专业人员。
一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。
软件从业人员分为初级程序员、高级程序员、系统分析员,系统架构师,测试工程师五大类。
4.网络工程师是通过学习和训练,掌握网络技术的理论知识和操作技能的网络技术人员。
网络工程师能够从事计算机信息系统的设计、建设、运行和维护工作。
5.C语言是一门通用计算机编程语言,应用广泛。
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
6.C++是在C语言的基础上开发的一种通用编程语言,应用广泛。
C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。
最新正式标准C++14于2014年8月18日公布。
其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大受用的最强大编程语言之一,支持类:类、封装、重载等!7.C语言是C++的基础,C++和C语言在很多方面是兼容的。
C语言是一个结构化语言,它的重点在于算法与数据结构。
C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。
所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。
8.程序到软件过程:代码→编译、链接→程序→打包、发布→软件。
软件安装是一个什么样的过程
软件在安装时,到底做了些什么? 大家每天都在用电脑,可能也经常在自己的电脑上安装软件。
就算自己没安装过,至少也看到人家安装过软件。
在这里,我不是想教你怎么安装软件,而是想向你展示,软件在安装的过程中,到底都做了些什么动作?为什么有些软件要安装,直接拷贝过去却不能用?为什么一些软件安装或卸载之后要重启。
下面要讨论的就是这些问题。
首先,我们探讨一下软件安装的共通部分,说共通,就是在不同版本的操作系统上,如WINDOWS98,WIN2K和WINXP等上它们都有共同点的地方。
这个文章也试图不针对具体的某个操作系统,而对共同的规律来探讨,不过我自己用的是WINDOWS98,所以有时一些例子可能会用WINDOWS98上的实例来说明,而大多数情况下这些特***在WIN2K和WINXP上也是类似的。
那么,我先来归纳一下,典型的软件安装过程都有可能做哪些事情。
由于我们是讨论软件在安装时的行为,所以开始安装前的设置和选项我们就暂不讨论,只说到软件真正开始安装那个时候起的动作:①文件从安装源位置拷贝到目标位置。
②往系统目录写入一些必要的动态连接库(DLL)。
(可选)③往系统注册表中写入相应的设置项。
(可选)④建立开始菜单里的程序组和桌面快捷方式。
(可选)⑤其他动作。
(可选) 下面我们再详细来分析上面归纳出来的这些动作:1)拷贝软件本身需要的文件。
源位置指软件未安装之前的位置,例如光盘,下载的目录等,目标位置指你指定的安装位置。
这是几乎所有的软件安装过程一定会做的一件事。
而如果一个软件,在安装时只要这一步,不需要后面的其他几步,我们可以认为这个软件就是绿色软件。
或者反过来说绿色软件就是只要拷贝文件,不需要依赖于某个DLL,或者它依赖的DLL在几乎所有的系统中都一定有的,并且它也不依赖于注册表里面的设置项的软件。
2)这一步,可以说至少有一半软件在安装时都会做,一些软件,需要用到某个DLL,特别是那些软件作者开发的DLL,或者系统中不常用的DLL,一般都会随软件的安装拷到系统目录。
所谓系统目录,在WIN98下一般是在WINDOWS\SYSTEM这个目录,而WIN2K是在WINNT\SYSTEM32,WINXP是在WINDOWS\SYSTEM32。
还有,一些软件如QQ游戏,中游等,它们也用到一些DLL,由于这些DLL只是这个软件自己用到,别的其他软件不会用到,所以它们并不一定存在于系统目录,而是放在软件安装目录里面,这样的DLL已经在上一步中被拷贝,所以和这一步说的情况不一样。
3)这一步同样至少有一半软件会做,一般在安装前用户的设置和一些选项,在安装时就会把这些设置写到注册表里。
另外就是有时在上一步把DLL拷贝到系统目录时,一些DLL需要向系统注册,这些DLL的注册信息也会写在注册表里。
还有,一些软件有时可能安装时并不写注册表,而是在第一次运行时才把一些设置写到注册表。
4)这个非常简单,大概不需要怎么解释。
建立这些快捷方式一方面是便于用户执行,另外在时也会把卸载的快捷方式放在程序组里。
关于卸载后面我们再来讨论。
5)这个就是除了上面说的以外的其他情况。
例如有些软件安装时会先把所有文件(或一部分文件)先解压到临时目录,那么安装完之后就要把这些文件删除掉。
那么我们再总结一下:一、一个典型的软件在安装过程一般都会执行上面的1-4项。
这样可以认为是一个完整的安装过程。
二、除了第1项之外,其他的都不是必要的。
只需要第一项的软件,我们可以把它叫做绿色软件。
三、有些软件安装时是执行了1、2、4,有些软件是执行了1、3、4,有些软件是执行了1、4。
四、一个特殊的情况,一般的驱动程序,只会执行2和3,没有1和4。
五、理论上,任何软件,如果你非常确切地知道了它在上面的那几步都具体做了些什么,特别是2和3,那么,理论上你可以把这个软件的安装文件拷贝到另一台机子,把必要的DLL从系统目录拷贝到那一台机子的系统目录,再把注册表里软件写入的项目导出来(必要时还要修改一下)再导入到那台机子的注册表中,那么,就算不是绿色软件,你也能这样把它移植给另一台机。
但有时特别是一些共享软件,一般都会有注册表中设置比较隐蔽的项目,不容易查找,所以除非你对系统非常熟悉,否则不是绿色软件的软件要移植还是有一定的难度的。
那么,下面我们再来看看,为什么一些软件安装后要重启。
在WINDOWS操作系统上,一般一个正在运行中的程序,操作系统是不让你修改它的,修改包括替换,改动和删除。
那么有时,一些软件需要向系统目录中写入一个DLL,而系统目录中原来已经有同名的DLL并且这个DLL目前正在被系统使用,因此不能用新版本去替换它,这个时候就需要重启,在重启的过程中,在这个DLL旧的版本被使用之前用新版本替换它。
这就是为什么要重启的原因。
你能看到这里,说明你很有耐心,并且对技术的探讨很有兴趣,那么我就再说得更详细些。
在WIN98中,上面说的这个替换是由系统的一个工具来实现的,这个工具叫WININIT.EXE。
安装程序在检测到需要写入的DLL或其他程序文件正在使用时,会把要写入的DLL...
什么是软件过程评估
就是评估软件开发整个周期呗,现在的软件开发是社会化大分工,硬件是流水线,软件就需要优秀的流程,比如cmmi参考模型,大概将软件开发成熟度分为5层:1. 手工作坊式,即产品质量全靠开发人员的个人英雄主义做法,无法保证开发新产品能有同样的质量。
2. 已经有了一些流程,进行一定的监控和控制,可以保证开发新产品有同样的质量。
3. 标准的流程,明确的出入口条件。
4. 可度量的,有了明确的量度,可以对过程和结果进行数字化的度量以计算完成度。
5. 自优化的,预防性的,可以预估行为,过程,结果,应用新技术,进行相应措施优化过程。
什么是软件工具
使用软件工具能节省软件生产开发时间和费用,提高软件生产率和质量。
从软件工程的观点来看,软件工具能够支持软件生存期的各个阶段⒛芑ハ嘟岷瞎钩晒ぞ呦低场?/SPAN软件工具的种类繁多,从软件过程的观点通常可以分为:项目管理工具、配置管理工具、分析和设计工具、程序设计工具、测试工具以及维护工具等。
(1)项目管理工具:支持项目管理活动的工具。
通常,这类工具把重点放在特定的管理环节上,例如工作量、成本和工期估算以及项目调度计划等。
(2)配置管理工具:支持完成配置项标识、版本控制、变化控制、审计和状态统计等任务的工具。
(3)分析和设计工具:辅助建立软件的系统模型和设计的工具。
分析和设计引擎将成为新一代分析设计工具,该工具可以对任何分析和设计方法进行定制,根据需要,支持特定的分析和设计方法。
(4)程序设计工具:包括常规的编码工具编译程序、编辑程序、排错程序及第四代语言、应用程序生成器、数据库查询语言和面向对象(OO)程序设计环境等。
(5)测试工具:可以分为数据获取工具、静态分析工具、动态分析工具、模拟工具以及测试管理工具等。
其中,静态分析工具通过对源程序的程序结构、数据流和控制流进行分析,得出程序中函数(过程)的调用与被调用关系、分支和路径、变量定义和引用等情况,发现语义错误。
动态分析工具通过执行程序,检查语句、分支和路径覆盖,测试有关变量值的断点,即对程序的执行流行探测。
另一类动态分析工具称为截获/播放工具。
测试管理工具用以控制并协调软件测试的每一个主要步骤,进行回归测试,比较运行结果和期望输出之间的差异,并可实施程序的成批测试。
(6)维护工具:支持软件维护的工具。
大致可分为逆向工程工具和再生工程工具。
逆向工程工具对已经开发完成的源程序进行分析,抽取程序的系统结构、控制结构、逻辑流程、数据结构和数据流等信息,并生成分析和设计模型以及其它设计信息。
再生工程工具用来支持重构一个功能和性能更为完善的、改进的软件系统。
程序和软件有什么区别?什么是程序?什么是软件?
1、软件=程序+文档=数据结构+算法+文档 2、软件是包含程序的有机集合体,程序是软件的必要元素。
任何软件都有可运行的程序,至少一个。
比如:操作系统给的工具软件,很多都只有一个可运行程序。
而Office是一个办公软件包,却包含了很多可运行程序,软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序是软件的一部分。
软件程序的功能是什么?
什么是"软件设计" 面向对象技术,特别是C++,似乎给软件界带来了不小的震动。
出现了大量的论文和书籍去描述如何应用这项新技术。
总的来说,那些关于面向对象技术是否只是一个骗局的问题已经被那些关于如何付出最小的努力即可获得收益的问题所替代。
面向对象技术出现已经有一段时间了,但是这种爆炸式的流行却似乎有点不寻常。
人们为何会突然关注它呢?对于这个问题,人们给出了各种各样的解释。
事实上,很可能就没有单一的原因。
也许,把多种因素的结合起来才能最终取得突破,并且这项工作正在进展之中。
尽管如此,在软件革命的这个最新阶段中,C++本身看起来似乎成为了一个主要因素。
同样,对于这个问题,很可能也存在很多种理由,不过我想从一个稍微不同的视角给出一个答案:C++之所以变得流行,是因为它使软件设计变得更容易的同时,也使编程变得更容易。
虽然这个解释好像有点奇特,但是它却是深思熟虑的结果。
在这篇论文中,我就是想要关注一下编程和程序设计之间的关系。
近10年来,我一直觉得整个软件行业都没有觉察到做出一个软件设计和什么是真正的软件设计之间的一个微妙的不同点。
只要看到了这一点,我认为我们就可以从C++增长的流行趋势中,学到关于如何才能成为更好的软件工程师的意义深远的知识。
这个知识就是,编程不是构建软件,而是设计软件。
几年前,我参见了一个讨论会,其中讨论到软件开发是否是一门工程学科的问题。
虽然我不记得了讨论结果,但是我却记得它是如何促使我认识到:软件业已经做出了一些错误的和硬件工程的比较,而忽视了一些绝对正确的对比。
其实,我认为我们不是软件工程师,因为我们没有认识到什么才是真正的软件设计。
现在,我对这一点更是确信无疑。
任何工程活动的最终目标都是某些类型的文档。
当设计工作完成时,设计文档就被转交给制造团队。
该团队是一个和设计团队完全不同的群体,并且其技能也和设计团队完全不同。
如果设计文档正确地描绘了一个完整的设计,那么制造团队就可以着手构建产品。
事实上,他们可以着手构建该产品的许多实物,完全无需设计者的任何进一步的介入。
在按照我的理解方式审查了软件开发的生命周期后,我得出一个结论:实际上满足工程设计标准的惟一软件文档,就是源代码清单。
对于这个观点,人们进行了很多的争论,无论是赞成的还是反对的都足以写成无数的论文。
本文假定最终的源代码就是真正的软件设计,然后仔细研究了该假定带来的一些结果。
我可能无法证明这个观点是正确的,但是我希望证明:它确实解释了软件行业中一些已经观察到的事实,包括C++的流行。
在把代码看作是软件设计所带来的结果中,有一个结果完全盖过了所有其他的结果。
它非常重要并且非常明显,也正因为如此,对于大多数软件机构来说,它完全是一个盲点。
这个结果就是:软件的构建是廉价的。
它根本就不具有昂贵的资格;它非常的廉价,几乎就是免费的。
如果源代码是软件设计,那么实际的软件构建就是由编译器和连接器完成的。
我们常常把编译和连接一个完整的软件系统的过程称为“进行一次构建”。
在软件构建设备上所进行的主要投资是很少的——实际需要的只有一台计算机、一个编辑器、一个编译器以及一个连接器。
一旦具有了一个构建环境,那么实际的软件构建只需花费少许的时间。
编译50 000行的C++程序也许会花费很长的时间,但是构建一个具有和50 000行C++程序同样设计复杂性的硬件系统要花费多长的时间呢? 把源代码看作是软件设计的另外一个结果是,软件设计相对易于创作,至少在机械意义上如此。
通常,编写(也就是设计)一个具有代表性的软件模块(50至100行代码)只需花费几天的时间(对它进行完全的调试是另外一个议题,稍后会对它进行更多的讨论)。
我很想问一下,是否还有任何其他的学科可以在如此短的时间内,产生出和软件具有同样复杂性的设计来,不过,首先我们必须要弄清出如何来度量和比较复杂性。
然而,有一点是明显的,那就是软件设计可以 极为迅速地变得非常庞大。
假设软件设计相对易于创作,并且在本质上构建起来也没有什么代价,一个不令人吃惊的发现是,软件设计往往是难以置信的庞大和复杂。
这看起来似乎很明显,但是问题的重要性却常常被忽视。
学校中的项目通常具有数千行的代码。
具有10 000行代码(设计)的软件产品被它们的设计者丢弃的情况也是有的。
我们早就不再关注于简单的软件。
典型的商业软件的设计都是由数十万行代码组成的。
许多软件设计达到了上百万行代码。
另外,软件设计几乎总是在不断地演化。
虽然当前的设计可能只有几千行代码,但是在产品的生命期中,实际上可能要编写许多倍的代码。
尽管确实存在一些硬件设计,它们看起来似乎和软件设计一样复杂,但是请注意两个有关现代硬件的事实。
第一,复杂的硬件工程成果未必总是没有错误的,在这一点上,它不存在像软件那样让我们相信的评判标准。
多数的微处理器在发售时都具有一些逻辑错误:桥梁坍塌,大坝破裂,飞机失事以及数以千计的汽车和其他消费品被召回——所有的...
什么是软件方法学?
软件方法学(SoftWare Methodology)是以方法为研究对象的软件学科。
主要涉及指导软件设计的原理和原则,以及基于这些原理、原则的方法和技术。
狭义的也指某种特定的软件设计指导原则和方法体系。
不论何种含义,其关注的中心问题是如何设计正确的软件和高效率地设计软件。
软件方法学的目的是寻求科学方法的指导,使软件开发过程“纪律化”,即要寻找一些规范的“求解过程”,把软件开发活动置于坚实的理论基础之上。
软件工程与软件方法学的方法不同,软件工程是侧重于借鉴传统工程学科,最终目的是把软件生产变成一门制造工程。
两者之间的关系是软件工程需要软件方法学为依据和指导;方法学依赖于软件工程,特别是环境工具来发挥实际效用