软件工程概述
一、软件的发展历史
程序设计阶段
软件设计阶段
软件工程阶段
(1)程序设计阶段
在1946年~1955年。对硬件进行开发,规模很小
主要用于科学计算。
程序设计追求节省空间和编程技巧。
(2)软件设计阶段
在1956年~1970年
硬件增长速度快,性价比越来越高。从科技转化到了商用。
软件开发技术没有重大突破,软件产品的质量不高,生产效率低下,导致了“软件危机”。
(3)软件工程阶段1970年~至今
大量的软件需求被提出,没有相应解决方案。
改变软件开发的技术手段和管理。
采用新的变成思想来开发软件。
采用工程化的思想来管理软件。
目前为止没有从根本上解决软件危机。
二、软件工程的目标
利用工程化的方法.在给定成本、进度的前提下,开发出具有可维护性、正确性、可移植性的软件. 提高软件产品的质量和开发效率,减少维护的困难。
三、软件的复杂性
图形用户界面。程序与文档。数据通信。超大型关系型数据库(NoSQL不仅关系型数据库)。负载均衡集群。
四、软件项目团队中的角色
分析师:接触用户,获得用户的需求,前瞻性估略出要使用的技术,做出需求分析,总结需求使之成为文档,供开发人员使用(不编码,只负责调研,需要拥有开发经验和良好的沟通能力)。
软件架构师:通常做一些前沿技术,根据新的框架需求,设计整体框架,
项目经理:目标是在规定的时间内把用户的需求完成,管理整个项目团队的开发,负责控制开发进度,分配开发任务。
设计人员:对系统的原型进行设计,对UI进行设计,对程序每一个功能设计,数据库设计,还有美工等。
程序员:开发人员,按照设计人员的设计进行代码开发。
测试人员:对开发完成的软件进行各种测试,将出现问题的部分反馈给开发人员做修改。
运维人员:将软件部署到用户那里去用,通常是在晚上进行部署和维护,工作地点通常是在用户的服务器机房里(用户那里一出现问题,首先挨骂的就是运维人员)。
五、两种软件开发模型
(1)瀑布模型
可行性研究与计划----->可行性研究报告
需求分析----->需求说明书
设计----->设计文档
开发----->程序
测试----->测试报告
维护
由于用户需求经常多变,瀑布模型就很少再使用
(2)螺旋模型
可行性研究与计划----->需求分析----->设计----->开发----->测试----->维护
| |
--------------------------------------------------------------------------------------
计划是可控的,项目经理可以制定各个时期的开发进程。
六、软件开发阶段
(1)可行性分析
a.技术可行性:能不能使用现有技术来实现这个需求。
b.经济可行性:这个项目接下来有没有钱可赚。
c.社会可行性(Don't be evil):软件不能违反法律,或危害社会秩序。
(2)需求分析
需求是产品的根源
需求工作的优劣对产品影响最大
(3)软件设计
(4)实现阶段
(5)测试阶段
测试人员是和开发人员经常进行PK,开发人员认为自己开发的程序越少bug越好,但是测试人员认为自己测试的程序发现越多错误,越能突出自己的能力,绩效越好。这就是开发与测试万年对立的原因。测试与开发出现分歧之后最好的办法就是找自己的上级进行调解。
(6)维护阶段
a.为客户提供故障诊断支持
转载请注明出处:http://blog.csdn.net/acmman/article/details/50302087
一、软件的发展历史
程序设计阶段
软件设计阶段
软件工程阶段
(1)程序设计阶段
在1946年~1955年。对硬件进行开发,规模很小
主要用于科学计算。
程序设计追求节省空间和编程技巧。
(2)软件设计阶段
在1956年~1970年
硬件增长速度快,性价比越来越高。从科技转化到了商用。
软件开发技术没有重大突破,软件产品的质量不高,生产效率低下,导致了“软件危机”。
(3)软件工程阶段1970年~至今
大量的软件需求被提出,没有相应解决方案。
改变软件开发的技术手段和管理。
采用新的变成思想来开发软件。
采用工程化的思想来管理软件。
目前为止没有从根本上解决软件危机。
二、软件工程的目标
利用工程化的方法.在给定成本、进度的前提下,开发出具有可维护性、正确性、可移植性的软件. 提高软件产品的质量和开发效率,减少维护的困难。
三、软件的复杂性
图形用户界面。程序与文档。数据通信。超大型关系型数据库(NoSQL不仅关系型数据库)。负载均衡集群。
四、软件项目团队中的角色
分析师:接触用户,获得用户的需求,前瞻性估略出要使用的技术,做出需求分析,总结需求使之成为文档,供开发人员使用(不编码,只负责调研,需要拥有开发经验和良好的沟通能力)。
软件架构师:通常做一些前沿技术,根据新的框架需求,设计整体框架,
项目经理:目标是在规定的时间内把用户的需求完成,管理整个项目团队的开发,负责控制开发进度,分配开发任务。
设计人员:对系统的原型进行设计,对UI进行设计,对程序每一个功能设计,数据库设计,还有美工等。
程序员:开发人员,按照设计人员的设计进行代码开发。
测试人员:对开发完成的软件进行各种测试,将出现问题的部分反馈给开发人员做修改。
运维人员:将软件部署到用户那里去用,通常是在晚上进行部署和维护,工作地点通常是在用户的服务器机房里(用户那里一出现问题,首先挨骂的就是运维人员)。
五、两种软件开发模型
(1)瀑布模型
可行性研究与计划----->可行性研究报告
需求分析----->需求说明书
设计----->设计文档
开发----->程序
测试----->测试报告
维护
由于用户需求经常多变,瀑布模型就很少再使用
(2)螺旋模型
可行性研究与计划----->需求分析----->设计----->开发----->测试----->维护
| |
--------------------------------------------------------------------------------------
计划是可控的,项目经理可以制定各个时期的开发进程。
六、软件开发阶段
(1)可行性分析
a.技术可行性:能不能使用现有技术来实现这个需求。
b.经济可行性:这个项目接下来有没有钱可赚。
c.社会可行性(Don't be evil):软件不能违反法律,或危害社会秩序。
(2)需求分析
需求是产品的根源
需求工作的优劣对产品影响最大
医疗、物流、机关、政府的系统要遵循各种行业标准,要贴切他们的业务需求,这个时候我们就要分析到位。
(3)软件设计
(4)实现阶段
(5)测试阶段
测试人员是和开发人员经常进行PK,开发人员认为自己开发的程序越少bug越好,但是测试人员认为自己测试的程序发现越多错误,越能突出自己的能力,绩效越好。这就是开发与测试万年对立的原因。测试与开发出现分歧之后最好的办法就是找自己的上级进行调解。
(6)维护阶段
a.为客户提供故障诊断支持
b.应用程序要求的任何软件升级
转载请注明出处:http://blog.csdn.net/acmman/article/details/50302087