原创

软件工程导论---第一章软件工程概述-1


第一章-----总结

软件危机

软件危机的具体表现:

  1. 软件开发成本和进度估计往往不够准。(就拿我做自己的项目来说,原本实现某个功能很简单,大概只需要几个小时,但是其中有一些从来没有遇见过的BUG需要修改,以至于进度超出预期)。
  2. 开发出来的软件用户不满意或者不是用户自己想要的那种类型。(这个我深有体会,想要设计一款比较绚丽的一个样式,奈何自己的技术太low,做不出来,以至于自己很不满意)
  3. 设计出来的软件质量不够nice(对于我这种技术小白来说,经常设计出一些渣渣软件,项目跑起来各种错,鹅♥疼.....)
  4. 软件常常是不可维护的。(即就是说,软件出错了,要去修改,把这个错误修改正确了,又因为改了这个错误的代码,又触发了另一个错误,就很烦)
  5. 软件通常是没有合适的文档资料的(嗯嗯!说的就是我,一两个月之前写的小项目,过一两个月想要添加或者修改一个功能,回头看自己写的代码,这TM写的是啥玩意,我咋看不懂,又没有文档,所以就硬着头皮看。)
  6. 软件成本在计算机系统总体成本所占的比例逐年上升。(咋说尼,现在计算机硬件成本越来越低,软件开发要大量的人才,所以这也就导致软件出现危机)。
  7. 软件开发速度,与计算机迅速应用比起来是望尘莫及啊。

为什么会产生软件危机嘞:

我自己认为产生软件危机的原因如下(我呸!那是根据书上所了解,还自己认为,能的不行):

  1. 我们设计的软件没到真正应用的时候(即就是投入到市场运行的时候)谁也不知道会出现什么幺蛾子,因为在投入使用的时候,各种可能都会出现,不确定因素太多了。
  2. 软件和我们硬件不一样,硬件我们可以看的到,摸的到,有时候还可以吃(开个玩笑),软件是缺乏可见性,在写出程序代码并且在计算机上运行之前,软件开发过程进展情况很难衡量的。
  3. 软件在长时间运行过程中,会暴露出新的错误,或者出现以前测试没找出来的错误。

所以争对以上问题,于是就出现了一门新的学科,也就是《软件工程》这门学科,其实在我看来,这么学科就是为了研究怎么尽量避免产生软件危机。


软件工程

什么是软件工程尼?

用我自己的话说:软件工程就是借鉴前人的经验,吸取前人的教训所得出来怎么高效,无差错,经济的开发一款好的软件。 权威解释:软件工程就是把规范的,可度量的途径应用到软件开发,运行,维护的过程,即就是把工程应用到软件开发过程中。(采用工程的概念,原理,技术和方法开发,运行,维护软件,把经过时间考验而证明正确的管理技术和当前能够得到最好的技术想结合,以经济高效的开发高质量的软件并有效的维护软件)。


介绍了什么是软件工程,那我们在开发软件的时候,应该按照什么规则或者说原理去进行软件开发尼?下面介绍软件工程的7条基本原理。


软件工程的7条基本原理

  1. 用分阶段的生命周期计划与严格管理(用人话说就是:制定好开发软件的计划与注意事项,每个计划都要认真执行和认真监察和检查)
  2. 坚持阶段性评审(人话说:每完成一项计划,或者每隔一个阶段,都要认真的审查工作与检查计划是否按照要求或者用户的需求在执行)
  3. 实行严格的产品控制(讲人话:软件在执行或者在研究之中遇到的问题,不应该随意按照自己的想法去完成,应该根据客户的要求,或者基线配置去开发。而且还要上报评审员,只有评审员和客户达成一致以后,才能就行修改)。
  4. 采用现代的程序设计开发技术:为啥子尼?因为现代的程序设计不仅高效而且更加具有平台适应性。(java可以跨平台)
  5. 结果应该能够清楚的审查(这个就不用多说了)
  6. 开发人员应该少而精。
  7. 承认不断改进软件工程实践的必要性(因为以上总给的原理是前人总结出来的,时代在发展,软件开发也在不断进步,所以当代或者未来在开发软件的时候,也会衍生出新的开发原理,这条原理是为了扩充与完善软件工程原理的)。

介绍了软件开发的几条原理,现在我们看看以前开发软件和当代开发软件的方法。


  1. 传统方法学: 即就是采用生命周期方法或者结构化(结构化分析,结构化设计,结构化实现)来完成软件开发的各项任务。通俗易懂的说就是:按照任务计划顺序来执行。前一段任务的结束就是下一任务的开始,每个任务结束之前就是要严格的审查与复审。(就是自顶向下顺序的完成各个阶段开发的任务)
  2. 面向对象方法学:(4个要点):
    • 把对象作为融合数据以及在数据上操作的统一软件结构(即就是抽象来说是对象,具体来说就是Java里我们创建的类class,类里面有方法----操作,类的属性--数据)。
    • 把对象划分为类,每个类有属性和方法,一个类有自己的行为和特征,符合人们对现实世界的认识。
    • 按照父类与子类的关系(继承或派生),这个好处就是,一个基类有共同的特征,但是每一个对象有自己独特的性格特点,这解决这种类型的问题。
    • 对象彼此仅能通过发生消息相互联系。(人话,我给你发一个消息,你去发一个哔哩哔哩动态说:“遇到什么困难都不要怕,要勇敢的面对它,奥里给!!”,这是我给你传递的消息,然后你是这个操作的主体,执行在于你,而不是我直接去)。

刚才介绍软件工程原理的时候第一条介绍,分阶段的严格控制与管理生命周期,那这个生命周期有哪些呢,一般来说有8个生命周期,分为三个阶段。第一阶段:软件定义。第二阶段:软件开发。第三阶段:软件运行与维护。以下具体介绍8个生命周期。


软件生命周期

  1. 问题定义: 开发软件的时候,拿到一个项目,我们应该问自己,这个项目解决的是什么问题,有哪些问题,这是这一阶段所要解决的问题。
  2. 可行性研究:这个阶段研究的内容是:我们所解决的问题是不是能够解决,是否有可行的办法。
  3. 需求分析: 用户让我们开发这个软件,这个软件功能有哪些,经过研究必须要确定逻辑模型。通常用数据字典和简单的算法表示逻辑模型。最后----最重要的是拿出一份规格说明书(很重要啊)以后开发软件就是拿这个为依据(所以,这个阶段出现错误,后面的开发将前功尽弃。)
  4. 总体设计:怎样实现这个系统,设计时应该考虑低,中,高三种设计的成本方案,并权衡三种开发设计的方案的利弊,选择合适的一种进行开发设计。
  5. 详细设计:这个阶段就是按照总体设计选出来的方案,对每一模块进行具体化,也就是怎样具体实现系统每个模块的功能。
  6. 编码测试:这部分内容就是按照详细规格说明书设计容易理解,容易维护,容易修改的程序化代码。
  7. 综合测试:这部分分为集成测试和验收测试。集成测试就根据设计的软件结构,把经过单元测试的模块按照某种选定的策略装配起来,在装配过程中就要对程序进行必要的测试。
  8. 软件维护:一般分为四种维护方式,分别是适应性维护,改正性维护,完善性维护和预防性维护。
学习

评论