25
08

软件工程与软件研发(预备知识)

软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率。但是,由于软件的特殊存在形式和研发过程,在近50年软件工程的发展过程中,虽然我们简化了开发,提高了效率,细节了分工,提出标准,实践了各种方法论,但是有一些根本的问题,仍然无法得以解决。


实验简介



软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率。但是,由于软件的特殊存在形式和研发过程,在近50年软件工程的发展过程中,虽然我们简化了开发,提高了效率,细节了分工,提出标准,实践了各种方法论,但是有一些根本的问题,仍然无法得以解决。

 

实验目的


1、掌握软件工程的核心过程。

2、掌握软件研发各角色分工。

3、理解研发过程中的各类问题。



实验流程


1.  何为“没有银弹”?


毫无疑问,没有人会否认“信息技术”是近半个世纪以来对人类日常生活影响最为深远的科学,没有之一。而“信息技术”的发展,是以“大规模集成电路”与“软件工程”这两门工程学科为基础的,而组成信息技术的这两门重点学科却在科学界有两个完全不同的结论:

(1) 集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍 (摩尔定律)

(2) 没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步 (人月神话)


20200114_102411_240.png


 

 “没有银弹”是“人月神话”这本书中的一个很重要的观点,表达的核心思想就是:“由于软件的复杂性本质,而使真正的从根本上解决问题的银弹并不存在”。


2、 为何“没有银弹”?


“没有银弹”似乎已经成为制约“软件工程”的魔咒,至今无法破解。分析其原因,我们不得不谈谈“软件工程”相比于其它工程类学科所独有的一些特性:


(1) 需求易变:

软件工程与建筑工程一样,同属于工程类学科,可人类从未也无法要求建筑师在大楼建设到一半时修改原有设计,重新建造;但人类却可以无休止地要求软件在开发到一半时重新设计,从头构建。其根本原因在于,建筑物属于实体,推倒重来意味着实实在在的经济损失,而软件属于虚拟物品,推倒重来并不能切实地感受到损失,最多是多花点时间,多找些程序员。

 

(2) 软件不可见:

每个人都明白,软件绝对不是由钢筋水泥组成,软件是由看不见摸不着的一串串的指令构成。我们可以很容易通过科学仪器来检测一个建筑物是否有裂痕,是否漏水,承重及抗震力是否合乎设计要求,但是我们有什么仪器来检测一个软件是否满足条件呢?它看不见也摸不着,只能依靠人类的智慧,还有偏见。如果一只猫跑进一幢建筑物内会发生什么呢?答案是什么也不会发生,但是你能想象如果一只猫踩上你的键盘会发生什么吗?

 

(3) 逻辑复杂:

我们可以很容易推导出一个建筑物如果能抵御8级地震,那么它一定可以抵御1级地震,但是如果不经验证,我们将无法推导出计算机能正确计算8+8的结果则一定可以正确计算1+1的结果。计算机非常简单,简单到只能处理1和0,正因为它的简单导致了它的复杂和强大。当今的软件代码量均以上万甚至百万行计,有的大型软件如Windows操作系统,代码量以千万行计,如此庞大的代码量可想而知其逻辑判断分支和相互之间的耦合与影响是任何一个测试工具或者方法也没有办法完全覆盖到的。

 

(4) 不可重用:

所有的建筑物都由钢筋,水泥,玻璃,电缆等组成,一个钢筋制造企业可以制造出适用于大多数建筑物的钢筋来。但是,每一个软件产品都有其不同的特点,我们无法使用现有的构件经过简单的堆砌而制造出一款全新的软件,每个软件产品都针对特定的行业甚至特定的企业解决特定的问题。可以说,任何软件产品的开发都是从0到1的过程。


3、软件研发难题


种种迹象表明,“软件工程”的发展将是极其悲观的,可是人类从未停止探索的脚本,面对如此复杂多变而又不可见的“软件”,我们提出了软件生命周期模型,提出了面向对象的软件开发方法,提出了敏捷开发方法论,并不断改进,以期获得尽可能多的进步,虽然我们无法创造银弹,但我们从未停止创造的脚步,言下之意是:至今仍然“没有银弹”。互联网上流传着这样一则笑话,或许从另一个侧面为我们解释了为何“没有银弹”。

 

20200114_102440_264.png


程序员写出自认为没有Bug的代码

软件测试,发现了20Bug

程序员修改了10Bug,并告诉测试组另外10个不是Bug

测试组发现其中5个改动根本无法工作,同时又发现了15个新Bug

重复3次步骤3和步骤4

鉴于市场方面的压力,和当初制定的乐观的发布时间表,产品终于上市了

用户发现了137个新Bug

已经领了项目奖金的程序员不知跑到哪里去了

新组建的项目组修正了差不多全部137Bug,但又发现了456个新Bug

最初那个程序员从斐济给饱受拖欠工资之苦的测试组寄来了一张明信片,整个测试组集体辞职

公司被竞争对手恶意收购。收购时,软件的最终版本包含783Bug

CEO走马上任,公司雇了一名新程序员重写该软件

程序员写出自认为没有Bug的代码


请思考:为何会出现上述问题?应该如何解决?

 

20200114_102453_335.png



人的问题,要首先解决。



 4、 需求工程难题


软件研发的整个过程充满着不确定性,。我们可以看到,从客户描述自身需求开始,整个研发过程便在一条错误的道路上越走越远。如图所示。

 

20200114_102559_822.png

 

需求工程主要的问题:

(1).   户或者客户说不清楚,说不完整,或者不知道自己想要什么。

(2).   客户存在一些隐性需求,必须依靠研发人的提醒,而研发人员也不一定清楚细节。

(3).   很多时候,客户并不一定是最终用户。付钱的人和使用的人不同。

 

5. 软件研发核心角


20200114_102609_015.png


(1).   需求分析人员:负责明确客户需求,保持与客户和团队的流畅的沟通。

(2).   软件架构人员:对系统进行架构设计,测试设计,确保系统能够满足客户需求。

(3).   软件编码人员:编码实现,算法实现,功能实现,BUG修复等。

(4).   软件测试人员:对软件进行测试需求分析,设计测试方案和测试用例,开发自动化测试脚本,执行测试,并提交缺陷报告,跟踪验证缺陷是否被修复等。

(5).   上线运营人员:如果是运营的产品,则是为了确保产品正常运营,保持与用户之间的沟通,收集用户需求或反馈,进而继续改进本产品。如果是一个定制开发的项目,则主要确保对客户做好售后服务,使用培训,安装配置等。


6.  软件测试人员的职业发展

20200114_102619_848.png


下周推送:测试与开发团队如何配合



为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。


20190320_095757_834.jpg




版权所有,转载本站文章请注明出处:蜗牛学苑, https://www.woniuxy.cn/article/375