![软件开发概述_第1页](http://file4.renrendoc.com/view/dfbf07d276f51cc2e63612f643d4808e/dfbf07d276f51cc2e63612f643d4808e1.gif)
![软件开发概述_第2页](http://file4.renrendoc.com/view/dfbf07d276f51cc2e63612f643d4808e/dfbf07d276f51cc2e63612f643d4808e2.gif)
![软件开发概述_第3页](http://file4.renrendoc.com/view/dfbf07d276f51cc2e63612f643d4808e/dfbf07d276f51cc2e63612f643d4808e3.gif)
![软件开发概述_第4页](http://file4.renrendoc.com/view/dfbf07d276f51cc2e63612f643d4808e/dfbf07d276f51cc2e63612f643d4808e4.gif)
![软件开发概述_第5页](http://file4.renrendoc.com/view/dfbf07d276f51cc2e63612f643d4808e/dfbf07d276f51cc2e63612f643d4808e5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件开发技术智能科学系林贤明2014年秋林贤明联系信息inxm@QQ:105794413办公地点:科研2-413联系信息课程考核考核方式:采用课程项目设计,无笔试本课程最终考核内容包括:出勤情况(10%)课程项目设计完成情况(50%)课程项目设计报告
(40%)服务器地址:
5 用户名:develop, 密码:developpass本学期内容软件开发概述(2学时)UML基础(4学时)设计模式(6学时)C++STL(6学时)动态链接库编程与钩子编程(4学时)Web编程入门(2学时)Android开发入门(4学时)软件测试基础(2学时)第1讲软件开发概述智能科学系林贤明
2023/1/31内容提要软件概念与特点软件生命周期中国软件现状如何成为合格的程序员1.软件概念与特点1.1软件概念软件是整个计算机系统中具体实现各种功能和操作的核心部分。世界上第一个编制软件的人—阿达(AugustaAda)19世纪60年代为机械式计算机巴贝奇编写软件软件=程序+方法+数据+文档程序是按功能和性能要求事先设计的指令序列方法是提供如何构造软件的技术数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料1.1软件概念 软件定义的发展程序的集合:50-60年代程序+文档:70年代,软件危机以后,认识到文档的重要性程序+文档+数据+方法:80年代以后,加强软件生产的工程化、规范化至今尚无一个明确的定义1.软件概念与特点东北大学信息科学与工程学院系统工程研究所胡清河huqinghe@20世纪80年代末至今网络计算机并行计算人工神经网络专家系统强大的桌面系统多项开发技术第一阶段第二阶段第三阶段第四阶段20世纪60年代中至70年代末软件产品数据库实时多用户20世纪70年代中至80年代末消费者影响低成本硬件嵌入”智能”分布式系统20世纪50年代初至60年代初自定义软件有限的分布面向批处理1.2软件发展历程1.软件概念与特点软件发展过程中存在的问题
软件开发能力不能满足人们的需要社会对软件的依赖程度加大,人们普遍关注软件的安全和可靠性若干年前开发的应用软件经过几十次修改已无人认识它的内部结构,己经不可维护由于经济原因,嵌入式系统存在许多怪现象,企业不愿意投入资源再生产,而采取打补丁+时髦界面的方法问题实例日常生活:零元帐单国计民生:1962年6月,美国飞向金星的航空探测器因导航程序出错,致使探测器偏离航道而失败。阿波罗8号太空飞船的一个软件错误,造成了存储器部分信息丢失;阿波罗14号在飞行过程中出现过18个软件错误。身边电脑、手机的操作系统崩溃银行取款机系统故障在计算机软件的开发和维护过程中所遇到的一系列严重问题,最终导致了软件危机的出现。软件危机表现:开发成本和进度的估计常常很不准确用户对“已完成的”软件系统经常不满意软件质量不可靠软件没有足够的文档资料,造成软件不可维护软件产品“供不应求”软件成本在计算机系统中所占比例逐年上升“软件工程”的提出1968年北大西洋公约组织的计算机科学家在联邦德国召开会议,讨论软件危机问题,正式提出“软件工程”的概念。软件工程试图采用工程的概念、原理、技术和方法来开发和维护软件,将工程管理技术成功的经验和思想与具体软件的开发过程、研究技术相结合,形成一整套适合于计算机软件开发的方法、规范和技术。1.软件概念特点1.3软件特点(1)软件是一种逻辑实体,而不是具体的物理实体,因此它具有抽象性,质量问题不易暴露.人们往往忽视软件质量问题及其造成的损失。河南义昌大桥坍塌vsWindows死机 桥梁和操作系统的一个重要区别在于,土木工程界和软件工程界对于崩溃这件事情的态度不一样。如果一个软件工程师像一般工程师对待桥梁坍塌那样严肃地对待操作系统崩溃,软件工程的职业水准就会大大提高。1.软件概念特点1.3软件特点(2)软件生产与硬件不同,软件开发没有明显的制造过程,不能完全工程化。软件成为产品后,其制造只是简单的拷贝而已。由于软件本身是非常复杂,因而软件的制造过程不能完全工程化,对软件质量的控制,应该着重在软件设计方面下功夫。桥梁的设计是要使它能承受可预见的考验。然而我们并不能预见软件能遇到的任何情况,软件的设计是要使他在遇到意外时能够将损失降到最小。
1.软件概念特点1.3软件特点(3)软件不同于机械、电子设备,虽然它不存在磨损和老化问题,然而它存在退化问题,设计人员必须多次修改。桥梁维护仅限于粉刷、修复小裂缝、重铺路面。修改操作系统三年修改50%的源代码,把操作系统从一种机器移植到以一种完全不同的机器,是很自然的。软件维护成本和时间占整个软件成本和时间的50-60%,有的甚至80%。1.软件概念特点1.3软件特点(4)软件开发和运行受到计算机系统的限制。软件开发方法往往依赖于硬件技术,同时效仿硬件技术,但是又远远落后于硬件技术。软件的开发尚未完全摆脱手工艺的方式,但是硬件技术已经发展到超大规模集成电路阶段1.软件概念特点1.3软件特点(5)软件成本相当昂贵.软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它投入的成本是比较高的。软件工作涉及到众多的社会因素,如:软件的开发和运行涉及到机构设置,体制运作及管理方式等问题,甚至涉及到人们的观念和心理,这些因素直接影响到项目的成败。2.软件生命周期
2.1什么是软件生命周期
某个待开发软件从开发的目的被提出并着手实现,直到最后停止使用的这个过程,称为软件生命周期粗粒度:软件定义、软件开发、软件维护细粒度:问题定义、可行性分析、需求分析、总体设计、详细设计、编码、测试、软件发布、软件运行、软件维护等一些列过程。2.软件生命周期软件产品或系统一系列相关活动的全周期软件定义软件开发可行性分析需求分析总体设计详细设计编码测试软件发布软件运行软件维护软件维护问题定义系统设计系统实现2.2软件定义1.问题定义“要解决的问题是什么?”
确定用户要求解决的问题的性质、工程的目标和规模2.可行性研究“对于上一个阶段所确定的问题有行得通的解决办法吗?”经济、技术、法律许可、不同的方案2.3软件开发3.需求分析“为了解决这个问题,目标系统必须做什么”确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景规格说明书(specification)4.总体设计(概要设计)“概括地说,应该怎样实现目标系统?”
设计出实现目标系统的几种可能的方案。推荐一个最佳方案确定程序由哪些模块组成以及模块之间的关系5.详细设计(模块设计)“应该怎样具体地实现这个系统呢?”设计出程序的详细规格说明确定实现模块功能所需要的算法和数据结构2.3软件开发6.编码和单元测试写出正确的易理解、易维护的程序模块并仔细测试每个模块7.综合测试集成测试和验收测试2.4软件维护8.软件维护使系统持久地满足用户的需要维护工作分成以下四类改正性维护(17-20%)适应性维护(18-25%)完善性维护(50-60%)预防性维护(4%)3.中国软件现状及解决之道
3.1中印软件业比较印度大型软件公司的项目按合同完成率达到95%以上,而麦肯锡公司不久前的一项调查表明,全球软件开发项目中只有16%能按计划完成,中国则低于10%。印度目前有软件公司7500多家,从业人员41万人,其中5000人以上的大公司16家,10000人以上的公司6家,印度软件企业的上百家分支机构分布在欧美国家,印度软件业近5年的平均增长率达60%左右。全球目前通过CMM-5认证的52家软件企业中,印度占了42家。3.中国软件现状及解决之道
3.2软件危机仍然根深蒂固
IT产业已经逐步发展成为中国的支柱产业之一,然而充满活力、优秀的软件企业屈指可数,绝大多数软件企业长期面临“产品质量低下、进度延误、成本高昂”的共性问题,就像患了恶劣的慢性病,难以根除。许多原本雄心勃勃的软件企业并没有战死在沙场上,而是被恶病折磨得奄奄一息直至颓然去世。但是IT产业的利润和前景实在是太诱人了,没有获得免疫力的新企业又如雨后春笋般地诞生,前仆后继,延续着相似的故事。3.中国软件现状及解决之道
3.3在中国软件危机仍然根深蒂固的原因国内大学计算机教育太差劲了?书籍资料不够导致人们不懂软件开发和管理吗?难道是软件人才不够?难道是政府对IT产业的扶持不够?难道社会对IT产业的投资不够?3.中国软件现状及解决之道
3.3在中国软件危机仍然存在的原因大学教育以填鸭的方式给学生灌输技能,却忽视了传授思想和方法;学生们埋头学习,不知学以致用,离开学校后对企业、产品、人生一片茫然;企业以混乱甚至错误的方式开发产品,重复着前人的失败而不是成功。这就是产生“软件危机”的真正根源。教育界和工业界应当研究和推广走向成功的“方法论和模式”,这是解决“软件危机”最有效的办法。3.中国软件现状及解决之道
3.4解决之道一—牢记企业的根本目标企业的根本目标是“合法地赚取尽可能多的利润,使企业利益最大化”。这个根本目标就如同企业的“宪法”,是企业生存和发展之本。企业所有的特定目标和行动都是围绕着这个根本目标展开。政府对企业唯一约束是“守法”,甚至不要求“守德”。3.中国软件现状及解决之道3.4解决之道一—牢记企业的根本目标《甲方乙方》冯小刚的年终工作报告:同志们,我们推出的“美梦一日游”深受广大群众的喜欢,墙上挂满了群众们送的锦旗。大家工作都很勤奋,客户越来越多,但是我们挣的钱却越来越少了。公司再办下去就成了慈善机构,所以大家只好散伙。3.中国软件现状及解决之道3.5解决之道二——产品开发之道(1)开发正确的产品所谓“开发正确的产品”是指“开发能够赚取利润的产品”。对于企业而言,评判产品“对错”的标准就是“能否赚钱”。(2)正确地开发产品所谓“正确地开发产品”是指:项目团队在预定的时间和成本之内,开发完成合格的产品;项目团队尽最大努力把产品做得好、做得快并且少花钱。前者是基本要求,后者是努力方向。
3.中国软件现状及解决之道3.5解决之道二——产品开发之道(2)正确地开发产品“质量、效率、成本”通常是衡量产品开发过程优劣的三个关键指标。如果产品的质量比较差,必然挨用户骂,轻则被退货,重则倒品牌。如果工作效率比较低,等你慢腾腾开发完成产品并推向市场时,可能大部分市场己经被竞争对手捷足先登了。如果开发成本太高,要么用户买不起,要么利润率太低。3.中国软件现状及解决之道
3.6解决之道三——用人之道企业用人之道也有两个方面:用正确的人,即利用能为企业赚取利润的人正确地用人,即努力使所用之人为企业赚取尽可能多的利润。3.中国软件现状及解决之道
3.6解决之道三——用人之道团队的人员结构让最优秀的人才当团队的领导,让次优秀的人才成为核心成员让平庸之人成为普通成员(1)如何组建软件开发团队3.中国软件现状及解决之道3.6解决之道三——用人之道物色团队的领导:团队领导应当具备的四项素质3.中国软件现状及解决之道
3.6解决之道三——用人之道物色团队的核心成员
:区别“核心”与“普通”的要素是“才能、责任心、忠诚度”。物色团队的普通成员
:选择普通成员的主要指标是“技能合格、安分守己、任劳任怨”。
3.中国软件现状及解决之道
3.6解决之道三——用人之道(2)如何管理团队规范化管理:规范化的管理有两层含义,制定工作规范,然后按照规范开展工作.超越规范化的管理:知人善用显然是超越规范的。直观地理解,“知人”是指领导者应当非常了解他的团队成员,包括知识技能和性格爱好等等;“善用”是指让团队各成员扬长避短,使团队战斗力达到最强4如何成为一名合格的程序员4.1程序员的个人素质成己:积极的心态、良好的工作和生活态度待人:和谐的人际关系理事:专业的做事精神4.2程序员的职业素质•忠诚•守信•责任心•敬业精神•自动自发4.3程序员的基本素质1.写文档和注释的习惯2.模块复用性思维习惯3.测试习惯4.学习、总结的习惯5.团队精神6.沟通能力4.3.1写文档和注释的习惯注释开发过程文档:良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。4.3.2复用性,模块化思维能力软件最大的优点是能够复用,因此程序员在完成任何一个模块或函数的时候,不要局限在完成当前任务的上,要多想一些,想想看该模块是否可以脱离这个系统存在,是否能够重复使用?用户控件组件技术4.3.3测试习惯单元测试集成测试系统测试稳定性测试软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。4.3.4学习和总结的能力学习:程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。总结:善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。4.3.5团队精神木桶理论学习性组织4.3.6沟通能力程序员之间程序员和销售人员程序员和测试人员程序员和客户…..4.4项目实践•软件工程理论•质量体系:ISO9001和CMM体系•UML基本理论•测试理论和测试工具使用•加密理论和加密方法•源代码控制工具使用•说明书编写•程序的安装和部署4.5高级程序员的基本素质1.需求分析能力2.项目设计方法和流程处理能力3.复用设计和模块化分解能力4.整体项目评估能力5.团队组织管理能力4.5.1需求分析能力
需求分析是软件开发流程中非常重要的一个环节。对于研发项目的组织和管理者来说,他们不但要理解客户需求,还要具备把用户需求转化为系统设计的能力。4.5.2系统设计能力高级程序员者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。4.5.3模块分解能力一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便挂接,这就是复用化的模块设计明显的一个佐证。4.5.4整体项目评估能力作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界4.5.5项目组织能力包括工作的量化和分配能力、团队协调能力。没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求高级程序员能真正评估一个模块的复杂性和工作量。项目组内程序员的水平是有差距的,同时用户需求又在不断变化,高级程序员要有动态调整责权和成员工作状况的能力。项目vs.产品4.6软件程序员的职业发展软件企业的人才类型和素质结构关系高级技术人才理想成长路径高级管理人才理想成长路径高级综合人才理想成长路径
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年公司车辆借用管理协议
- 2025年企业并购双方股权策划合同样本
- 2025年产品销售代表合同范本
- 2025年多功能会议室租赁合同样本
- 2025年企业人力资源部门员工雇佣协议
- 2025年个人租赁协议范本
- 2025年热固化油墨项目规划申请报告
- 2025年应用软件设计服务项目立项申请报告模范
- 2025年电力系统安全策划生产责任协议书
- 2025年金融机构信用借贷合同范文
- 站桩的知识讲座
- 革命文物主题陈列展览导则(试行)
- 医学遗传学第三版课件
- 四川家庭农场补贴标准2023年
- 五年级下册字帖
- 设备采购供货安装实施方案
- 初中生物《病毒》说课课件
- 小小银行家-儿童银行知识、理财知识培训
- 物业公司缩减人员方案范本
- 河湖保护主题班会课件
- 机械基础知识竞赛题库附答案(100题)
评论
0/150
提交评论