所有由zhufenghua发布的文章

如何理解软件危机?

软件危机的定义

“软件危机”是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要包含了两方面的问题:一是如何开发软件以满足软件日益增长的需求;二是如何维护数量不断增长的已有软件。

软件危机表现形式

(1)对软件开发成本和研制进度的估计常常很不精确。经费预算经常突破,完成时间一拖再拖。这种现象降低了软件开发组织的信誉,而且有时为了赶进度和节约成本所采取的一些权宜之计又往往影响了软件产品的质量,从而不可避免地会引起用户的不满。

2)“已完成”的软件不能满足用户要求。软件开发人员常常在对用户需求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序了。软件开发人员和用户又未能及时交换意见,使得一些问题不能得到及时解决,导致开发的软件不能满足用户要求,使得开发失败。

(3)软件产品质量差,可靠性得不到保证。软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,提交给用户的软件质量差,在运行中暴露大量问题。

(4)软件产品可维护性差,软件开发人员在开发过程中按各自的风格工作,各行其是,没有统一、公认的规范和完整规范的文档,发现问题后进行杂乱无章的修改。程序结构不好,运行时发现错误也很难修改,导致维护性差。

(5)软件成本在计算机系统总成本中所占的比例逐年上升。软件的发展跟不上硬件的发展。由于微电子技术的进步和生产自动化程度的不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本也随着通货膨胀以及软件规模和数量的不断扩大而持续上升。

(6)软件开发生产率提高的速度远远跟不上计算机应用速度普及深入的趋势。软件的发展跟不上用户的要求。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

软件危机产生的原因

造成上述软件危机的原因与软件自身特点有关,也与软件开发人员在开发和维护时所采用的生产方式、方法、技术有关,可概括为以下几个方面。

(1)软件是计算机系统中的逻辑部件。软件产品往往规模庞大,结构复杂,这给软件的开发和维护带来客观的困难。

(2)软件开发的管理困难。软件规模大、结构复杂,又具有无形性,这导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。

(3)软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大。

(4)软件开发技术落后。在20世纪60年代,人们注重如编译原理、操作系统原理、数据库原理等一些计算机理论问题的研究,而不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应。

(5)生产方式落后。有人统计,硬件的性能价格比在过去30年中增长了10^6。一种新器件的出现,其性能较旧器件提高,价格反而有所下降,而软件则相形见绌。软件规模与复杂性增长了几个数量级,但生产方式仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依靠,带有很强的“个性化”特征的程序,因缺乏文档而根本不能维护,加剧了供需之间的矛盾。

(6)开发工具落后,生产效率提高缓慢。软件开发工具趋于原始,没有出现高效率的开发工具,因而软件生产效率低下。还有软件开发人员忽视需求分析的重要性,轻视软件维护也是造成软件危机的原因。

解决软件危机途径

目前,计算机的应用日益广泛,世界上发达国家的许多企业将全部投资的10%以上用于计算机领域。但到目前为止,计算机的体系结构在硬件上仍然是冯·诺依曼计算机。实际中复杂、庞大的问题,只能由专门人员编制软件来解决。假设计算机能实现智能化,能进行推理和运算,正确解决用户所提出的问题,那么软件危机就会有根本性的缓解。然而新一代计算机体系结构的研制可能还需要一段时间。那么在目前计算机硬件条件下,要想解决软件危机必须解决以下问题。

(1)首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念。

(2)要使用好的开发技术和方法,并且要不断研究探索更好更有效的技术和方法。尽快消除在计算机系统早期发展阶段形成的一些错误观念和做法。

(3)要有良好的组织、严密的管理,各类人员要相互配合,共同完成任务。充分认识软件开发不是某种个体劳动的神秘技巧。

(4)应该开发和使用好的软件工具。正如机械工具可以“放大”人类的体力一样,软件工具也可以“放大”人类的智力,从而可以有效提高软件生产率。

软件系统开发与制造一台机器或建造一栋大厦有许多相同之处,所以要采用“工程化”的思想做指导来解决软件研究中面临的困难和混乱,从而走出软件危机的困境。

软件工程 软件的特点

答案:

  1. 软件是一种逻辑产品,没有物理实体,可以把它保存在存储体中,但无法观察到它本身的形态、功能以及作用
  2. 软件产品的生产没有明显的制造过程,软件开发完成后可以大量的复制。
  3. 软件产品在使用过程中,不存在磨损、消耗、老化等问题。但软件在运行时,为了适应软件硬件、环境以及需求的变化而进行修改,优化。
  4. 软件产品的开发主要是脑力劳动,还未完全摆脱手工开发方式,大部分产品是“定做的”,生产效率低。
  5. 软件产品的成本相当昂贵,软件费用不断增加,软件的研制需要投入大量的人力、物力和资金,生产过程中还需对产品进行质量控制,对每件产品进行严格的检验
  6. 软件对硬件和环境有不同程度的依赖性,为了减少这种依赖性,在软件开发中提出了软件的可移植性问题。
  7. 软件是复杂的。软件是人类有史以来生产的复杂度最高的工业产品,软件是一个庞大的逻辑系统。软件开发,尤其是应用软件的开发常常涉及其他领域的专门知识,这就对软件开发人员提出了很高的要求。

软件工程中软件的定义?

答案:

软件由是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。

解释:

1983年IEEE为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。其中的方法和规则通常是在文档中说明并在程序中实现的。特别是当软件成为商品时,相关的文档资料是必不可少的。没有相关文档,仅有程序是不能称为软件产品的。

软件工程的出现主要是由于?

答案:软件危机的出现

扩展:

软件危机是指计算机软件开发和维护过程中所出现的一系列严重问题。

软件危机出现的原因,是落后的软件生产方式无法满足迅速增长的计算机软件需求。

通俗来说,就是软件设计没有规范,导致代码难以开发、维护,另外还表现为开发成本高、产品质量低。

汇编dos中断之键盘输入?

汇编使用dos中断键盘输入数据,有2个功能号

  • mov ah, 01h ==》输入一个字符,并存储ASCII在al中
  • mov ah, 0ah ==》输入一个字符串,并存储ASCII在ds: dx内存地址中

输入一个字符代码调试

Code segment

	Assume cs:code

 Start: 

     Mov ah,01h

     Int 21h

     Mov ah,4ch

     Int 21h

Code ends

   End start

编译上面的代码,使用debug时,在将执行int 21时使用p命令取代t命令,即可输入,输入一个数如3,那么al的值将会变为33(3的16进制的ASCII就是33)

输入字符串代码调试

Code segment

	Assume cs:code

 Start: 

     Mov ah,0ah

     Int 21h

     Mov ah,4ch

     Int 21h

Code ends

   End start

使用debug调试上述程序,在执行到int 21时输入p命令

假设输入的是abcde这5个数,输入完毕后查看ds段,第3位开始是61,62,63,64,65(这是16进制的abcde的ASCII对应编码),那么为什么不是从0开始?

在输入字符串时,会在第一个字中存放输入的长度,观察第2位的值确实是05,可重复调试查看结果。

可以明确,输入的值存储的ds寄存器指定的段地址,那么偏移地址呢?通过调试发现是dx,可以通过指定dx偏移地址,比如mov dx, 3