为什么会有痣| 垂爱是什么意思| 准奏是什么意思| 枕大神经痛吃什么药| 胆汁为什么会反流到胃里面| pes是什么材质| 仪轨是什么意思| 结肠炎挂什么科| 高铁动车有什么区别| 娃娃鱼吃什么| 日语亚麻得是什么意思| 什么时候种白菜| 516是什么意思| 胎位左枕前是什么意思| 慢性盆腔炎吃什么药| 阁字五行属什么| 眼眶发青是什么原因| 彼岸花又叫什么花| 萤火虫为什么会发光简单回答| 云南简称是什么| 李子有什么功效| 夜光杯是什么材质| 朝鲜说什么语言| 灰指甲挂什么科| ne是什么意思| 吃维生素b6有什么好处和副作用| 黄芪长什么样子| 肠澼是什么意思| 圣诞节是什么时候| 血沉高意味着什么意思| 铭五行属什么| 豆奶不能和什么一起吃| 一人吃饱全家不饿是什么生肖| nk是什么意思| 有利有弊是什么意思| 手绘是什么意思| 住院送什么花好| 干碟是什么| 眼睛里有红血丝是什么原因| 肥猪拱门是什么生肖| 什么病会引起皮肤瘙痒| 西天取经是什么意思| 去湿气吃什么食物| 为什么医生都穿洞洞鞋| 郑成功是什么朝代的| 什么是激素脸| 小本创业做什么生意好| 物极必反什么意思| 怀孕肚子会有什么反应| 公历和农历有什么区别| 六月八日是什么星座| 五月十三号是什么日子| 什么东西比乌鸦更讨厌| 龋牙是什么意思| 子宫内膜增厚是什么意思| 经常爱放屁是什么原因| 冻结账户需要什么条件| 六月初二是什么日子| 什么动物最聪明| 黛力新主治什么病| 耳朵发炎吃什么药| 荡是什么意思| 7月29日什么星座| 咳黄痰吃什么药| 平肝什么意思| 中子是什么| 花卉是什么| 腠理是什么意思| 眼袋肿了是什么原因| 右侧后背疼是什么原因| 吃什么水果解酒| 瞳孔是什么| 1971属什么生肖| 杜甫是什么主义诗人| 一月17号是什么星座| 梦见水里有蛇是什么意思| 正的五行属性是什么| 巴字加一笔是什么字| 过敏有什么症状表现| 天天喝酒会得什么病| 如泰山前面一个字是什么啊| 土家族是什么族| 为什么胸闷一吃丹参滴丸就好| 露出什么意思| 化疗前要做什么检查| 孕妇快生的时候有什么征兆| 桡神经受损有什么恢复的方法| 探病送什么花| fe是什么意思| 城五行属什么| 水浒传主要讲了什么| 肝回声稍密是什么意思| 散光什么意思| 痛风反复发作什么原因| 秋后问斩是什么意思| 足三里在什么位置| 吃什么蔬菜能降血脂| 什么是埋线双眼皮| 95511是什么号码| 月经几个月不来是什么原因| 孕妇口腔溃疡能用什么药| 抵抗力差是什么原因| 类风湿是什么原因引起的| 尿常规白细胞3个加号什么意思| 糖尿病人可以吃什么| 东吴是现在的什么地方| 文气是什么意思| 低密度脂蛋白偏高是什么意思| 有机是什么意思| 内裤上有黄色分泌物是什么原因| 自然色是什么颜色| 冬眠是什么意思| 什么越来越什么| 脖子上长小肉疙瘩是什么原因| 氢氧化钙是什么东西| 1月22日什么星座| 脚气泡脚用什么泡最好| 冒菜和麻辣烫有什么区别| 阿昔洛韦片治什么病| 对牛弹琴告诉我们什么道理| 良民是什么意思| 肚子为什么会胀气| 小意思是什么意思| 77年属什么生肖| prada是什么品牌| 狗吃什么食物| 淋巴肉是什么| g是什么牌子| 1月13是什么星座| 狡兔三窟是什么生肖| 碳酸氢铵是什么| 洗面奶和洁面乳有什么区别| 拍胸片挂什么科室| 口蜜腹剑是什么意思| 什么是双修| 自身免疫性疾病是什么意思| 读警校需要什么条件| 阳强易举是什么意思| 什么东西清肺最好| 雅漾喷雾有什么功效| 调虎离山是什么意思| 肾结水是什么原因造成的| 遗忘的遗是什么意思| 胆经不通吃什么中成药| 为什么健身后体重反而重了| 静待花开的前一句是什么| 2月什么星座| 美国为什么打越南| 渣是什么意思| 夏的五行属什么| 痰多吃什么好| 泛性恋是什么意思| 河南古代叫什么| 浑身乏力什么病的前兆| 为什么十二生肖老鼠排第一| 我不知道你在说什么英文| 什么是病毒| 梦见爆炸是什么意思| 什么样的人容易高反| 头晕挂什么科比较好| 苏打水配什么好喝| 囊肿是什么引起的| 猫上门为什么不能赶走| vsd是什么意思| 肾构错瘤要注意什么| 强硬是什么意思| 陈皮泡水喝有什么作用| 执念是什么意思| 手足口吃什么药| 什么是自由基| 重庆的市花是什么| 亭亭净植是什么意思| 观音坐莲是什么姿势| cts是什么意思| 拉屎的时候拉出血来是什么原因| 3.25是什么星座| 金是什么结构| 蒸米饭时加什么好吃| 半边脸疼是什么原因引起的| 我一言难尽忍不住伤心是什么歌| 质地是什么意思| 男性雄激素低吃什么药| 肝回声密集是什么意思| 包饺子用什么面粉| 看得什么| 2022年属虎的是什么命| 疏导是什么意思| 宿便是什么颜色| 荠菜什么时候播种最好| 丙申五行属什么| 畸形是什么意思| 自诩是什么意思| 免疫固定电泳查什么的| 吆西是什么意思| 鸡珍是什么| 什么食物含钾多| 打是什么意思| 代沟是什么| 品相是什么意思| 上四休二是什么意思| 12月15日什么星座| 吃素是什么意思| 基因病是什么意思| 坐以待毙是什么意思| 根尖周炎吃什么药| premier是什么牌子| 万事达卡是什么卡| 敛是什么意思| 只是当时已惘然是什么意思| 耳朵痛是什么原因| 胡萝卜不能和什么一起吃| apl医学上是什么意思| iac是什么意思| 尿常规隐血弱阳性什么意思| 一月来两次月经是什么原因| 衣原体是什么| 用凝胶排出豆腐渣一样的东西是什么原因| 颞下颌关节挂什么科| 醋有什么功效和作用| 梦到捡菌子是什么意思| 副肾是什么药名| 人肉搜索是什么意思| 1991年是什么年| 肾功能不好吃什么药调理| 维生素d3吃多了有什么副作用| 农村入党需要什么条件| 2007年是什么生肖| 指压板有什么功效| 79年的羊是什么命| 无痛肠镜和普通肠镜有什么区别| lava是什么意思| 东北属于什么气候| 小肠是干什么的| pro是什么意思| 有什么奇怪| 什么原因导致子宫内膜息肉| 什么是发票抬头| 房中术是什么意思| 缺钾是什么原因| 晕车药吃多了有什么副作用| 什么人容易得淋巴癌| 舌头裂纹吃什么药| 为什么冬吃萝卜夏吃姜| 胃体息肉是什么意思| 胸腔积液是什么原因引起的| 危机四伏是什么生肖| 毒龙是什么| 两个大于号是什么车| 祭日是什么意思| 你本来就很美是什么广告| 肺炎吃什么药好| 梦到坟墓是什么意思| 何炅的老婆叫什么名字| 白头发越来越多是什么原因| 老子和孔子是什么关系| 蒲公英和玫瑰花一起泡有什么功效| 香蕉可以做什么美食| pony什么意思| 吃什么食物能提高免疫力| 糖尿病吃什么| 2005年属鸡是什么命| 什么粥最养胃| 大拇指旁边的手指叫什么| 七月十日是什么日子| 百度Jump to content

“大洋一号”青岛起航 “潜龙”“海龙”将双双入海

This is a good article. Click here for more information.
From Wikipedia, the free encyclopedia
百度 数据库中的视频大多来自二十世纪福克斯电影公司所捐赠的福克斯新闻影片。

Software maintenance is the modification of software after delivery.

Software maintenance is often considered lower skilled and less rewarding than new development. As such, it is a common target for outsourcing or offshoring. Usually, the team developing the software is different from those who will be maintaining it. The developers lack an incentive to write the code to be easily maintained. Software is often delivered incomplete and almost always contains some bugs that the maintenance team must fix. Software maintenance often initially includes the development of new functionality, but as the product nears the end of its lifespan, maintenance is reduced to the bare minimum and then cut off entirely before the product is withdrawn.

Each maintenance cycle begins with a change request typically originating from an end user. That request is evaluated and if it is decided to implement it, the programmer studies the existing code to understand how it works before implementing the change. Testing to make sure the existing functionality is retained and the desired new functionality is added often comprises most of the maintenance cost.

Software maintenance is not as well studied as other phases of the software life cycle, despite comprising most of the cost. Understanding has not changed significantly since the 1980s. Software maintenance can be categorized into several types depending on whether it is preventative or reactive and whether it is seeking to add functionality or preserve existing functionality, the latter typically in the face of a changed environment.

History

[edit]

In the early 1970s, companies began to separate out software maintenance with its own team of engineers to free up software development teams from support tasks.[1] In 1972, R. G. Canning published "The Maintenance 'Iceberg'", in which he contended that software maintenance was an extension of software development with an additional input: the existing system.[1] The discipline of software maintenance has changed little since then.[2] One twenty-first century innovation has been companies deliberately releasing incomplete software and planning to finish it post-release. This type of change, and others that expand functionality, is often called software evolution instead of maintenance.[2]

Software life cycle

[edit]
Diagram for a traditional software development life cycle from 1988

Despite testing and quality assurance, virtually all software contains bugs where the system does not work as intended. Post-release maintenance is necessary to remediate these bugs when they are found.[3] Most software is a combination of pre-existing commercial off-the-shelf (COTS) and open-source software components with custom-written code. COTS and open-source software is typically updated over time, which can reduce the maintenance burden, but the modifications to these software components will need to be adjusted for in the final product.[4] Unlike software development, which is focused on meeting specified requirements, software maintenance is driven by events—such as user requests or detection of a bug.[5] Its main purpose is to preserve the usefulness of the software, usually in the face of changing requirements.[6]

If conceived of as part of the software development life cycle, maintenance is the last and typically the longest phase of the cycle,[7][8] comprising 80 to 90 percent of the lifecycle cost.[9] Other models consider maintenance separate from software development, instead as part of the software maintenance life cycle (SMLC).[8] SMLC models typically include understanding the code, modifying it, and revalidating it.[8]

Transition from release to maintenance to end of the lifespan

[edit]
Diagram showing the steps for software retirement

Frequently, software is delivered in an incomplete state. Developers will test a product until running out of time or funding, because they face fewer consequences for an imperfect product than going over time or budget.[10] The transition from the development to the maintenance team is often inefficient, without lists of known issues or validation tests, which the maintenance team will likely recreate.[11] After release, members of the development team are likely to be reassigned or otherwise become unavailable. The maintenance team will require additional resources for the first year after release, both for technical support and fixing defects left over from development.[10]

Initially, software may go through a period of enhancements after release. New features are added according to user feedback. At some point, the company may decide that it is no longer profitable to make functional improvements, and restrict support to bug fixing and emergency updates. Changes become increasingly difficult and expensive due to lack of expertise or decaying architecture due to software aging. After a product is no longer maintained, and does not receive even this limited level of updating, some vendors will seek to extract revenue from the software as long as possible, even though the product is likely to become increasingly avoided. Eventually, the software will be withdrawn from the market, although it may remain in use. During this process, the software becomes a legacy system.[12]

Change cycle

[edit]

The first step in the change cycle is receiving a change request from a customer and analyzing it to confirm the problem and decide whether to implement the change.[13] This may require input from multiple departments; for example, the marketing team can help evaluate whether the change is expected to bring more business.[14] Software development effort estimation is a difficult problem, including for maintenance change requests,[15] but the request is likely to be declined if it is too expensive or infeasible.[16] If it is decided to implement the request, it can be assigned to a scheduled release and implemented.[16] Although agile methodology does not have a maintenance phase,[17] the change cycle can be enacted as a scrum sprint.[18]

Understanding existing code is an essential step before modifying it.[2] The rate of understanding depends both on the code base as well as the skill of the programmer.[19] Following coding conventions such as using clear function and variable names that correspond to their purpose makes understanding easier.[20] Use of conditional loop statements only if the code could execute more than once, and eliminating code that will never execute can also increase understandability.[21] Experienced programmers have an easier time understanding what the code does at a high level.[22] Software visualization is sometimes used to speed up this process.[23]

Modification to the code may take place in any way. On the one hand, it is common to haphazardly apply a quick fix without being granted enough time to update the code documentation.[24] On the other hard structured iterative enhancement can begin by changing the top-level requirements document and propagating the change down to lower levels of the system.[25] Modification often includes code refactoring (improving the structure without changing functionality) and restructuring (improving structure and functionality at the same time).[26] Unlike commercial software, free and open source software change cycles are largely restricted to coding and testing, with minimal documentation. Open-source software projects instead rely on mailing lists and a large number of contributors to understand the code base and fix bugs efficiently.[27]

An additional problem with maintenance is that nearly every change to code will introduce new bugs or unexpected ripple effects, which require another round of fixes.[2] Testing can consume most of the maintenance resource for safety-critical code, due to the need to revalidate the entire software if any changes are made.[28] Revalidation may include code review, regression testing with a subset of unit tests, integration tests, and system tests.[26] The goal of the testing is to verify that previous functionality is retained, and the new functionality has been added.[29]

Categories of software maintenance

[edit]

The key purpose of software maintenance is ensuring that the product continues to meet usability requirements. At times, this may mean extending the product's capabilities beyond what was initially envisioned.[30]

According to the ISO/IEC 14764 specification, software maintenance can be classified into four types:[31]

  • Corrective maintenance: modification of software to fix a bug or other failure to meet requirements, typically reported by an end user.[31][32]
  • Preventive maintenance: forward-looking modification of software after delivery to ensure it continues to meet requirements or fix problems that have not manifested yet.[33][31] This type of maintenance is performed especially on systems that are required to be highly safe or available.[33] Software rejuvenation is one form of preventative maintenance to clean up state and prevent future problems.[33]
  • Adaptive maintenance: modification of software performed after delivery to ensure its continuing usability in a changed or changing environment.[31][33]
  • Perfective maintenance: enhancement of software after delivery to improve qualities such as user experience, processing efficiency, and maintainability.[33][34] Perfective maintenance is necessary if other types of maintenance are carried out, because modification of an existing code base will otherwise increase complexity and cause the existing structure to deteriorate.[34] Perfective maintenance may include rewriting documentation, code refactoring, and performance tuning.[33]

According to some estimates, enhancement (the latter two categories) comprises some 80 percent of software maintenance.[35]

Maintainability

[edit]

Maintainability is the quality of software enabling it to be easily modified without breaking existing functionality.[31] According to the ISO/IEC 14764 specification, activity to ensure software maintainability prior to release counts as part of software maintenance.[5] Many software development organizations neglect maintainability, even though doing so will increase long-term costs.[36] Technical debt is incurred when programmers, often out of laziness or urgency to meet a deadline, choose quick and dirty solutions rather than build maintainability into their code.[37] A common cause is underestimates in software development effort estimation, leading to insufficient resources allocated to development.[38] One important aspect is having a large amount of automated software tests that can detect if existing functionality is compromised by a change.[31]

A maintainability index can be calculated with certain formulae from lines-of-code measures, McCabe measures and Halstead complexity measures.

The measurement and tracking of maintainability are intended to help reduce or reverse a system's tendency toward "code entropy" or degraded integrity, and to indicate when it becomes cheaper and/or less risky to rewrite the code than it is to change it.

A challenge with maintainability is that many software engineering courses do not emphasize it, and give out one-and-done assignments that have clear and unchanging specifications.[39] Software engineering courses do not cover systems as complex as occur in the real world.[40] Development engineers who know that they will not be responsible for maintaining the software do not have an incentive to build in maintainability.[2]

Workforce

[edit]

Maintenance is often considered an unrewarding job for software engineers, who, if assigned to maintenance, were more likely to quit.[41][42] It often pays less than a comparable job in software development.[42] The task is often assigned to temporary workers or lesser-skilled staff,[2][43] although maintenance engineers are also typically older than developers, partly because they must be familiar with outdated technologies.[43] In 2008, around 900,000 of the 1.3 million software engineers and programmers working in the United States were doing maintenance.[44]

Companies started separate teams for maintenance, which led to outsourcing this work to a different company, and by the turn of the twenty-first century, sometimes offshoring the work to another country—whether as part of the original company or a separate entity.[45][9] The typical sources of outsourcing are developed countries such as the United States, the United Kingdom, Japan, and Australia, while destinations are usually lower-cost countries such as China, India, Russia, and Ireland.[46] Reasons for offshoring include taking advantage of lower labor costs, enabling around-the-clock support, reducing time pressure on developers, and to move support closer to the market for the product.[47] Downsides of offshoring include communication barriers in the form of such factors as time zone and organizational disjunction and cultural differences.[9] Despite many employers considering maintenance lower-skilled work and the phase of software development most suited to offshoring,[9][48] it requires close communication with the customer and rapid response, both of which are hampered by these communication difficulties.[9]

Alternatives to maintenance

[edit]

In software engineering, the term legacy system does not have a fixed meaning, but often refers to older systems which are large, difficult to modify, and also necessary for current business needs. Often legacy systems are written in obsolete programming languages, lack documentation, have a deteriorating structure after years of changes, and depend on experts to keep it operational.[49] When dealing with these systems, at some point so much technical debt accumulates that maintenance is not practical or economical.[12] Other choices include:

  • Freezing—do no more work on the legacy system.[50] This option may be chosen if the vendor wants to continue to extract revenue as long as possible while avoiding maintenance costs.[12]
  • Outsourcing functionality of the legacy system to a different company, especially if it is not considered a core business function.[50]
  • Discarding the existing legacy system and redeveloping a new application from scratch to fulfill the same purpose as the legacy system.[50] However, this approach is inefficient due to discarding a working system, and with this approach there is a danger that the new system will not fulfill changing business requirements.[50]
  • Wrapping the legacy application in an abstraction layer to simplify outdated interfaces.[50] The source code is not modified but the new interface allows a tried and tested component to be accessed by newer applications. This approach does not fix any of the issues with maintaining a legacy system.[51] Databases, functions, and entire applications may be wrapped in this way.[52]
  • Migrating the legacy system to a new platform, which can reduce the expense of new software development by reusing the implementation, design, specification, and requirements of the legacy system.[53] Migration can take 5 to 10 years, but results in greater flexibility and long-term savings in software maintenance.[54] As much as 80 percent of the expense is in testing; that is, ensuring that the new system has the same output as the old system.[55] After the new system is finished, there needs to be a transition from the old system to the new system with minimum disruption to business functions.[55]

Research

[edit]

Despite taking up the lion's share of software development resources, maintenance is the least studied phase of software development.[56][57] Much of the literature has focused on how to develop maintainable code from the outset, with less focus on motivating engineers to make maintainability a priority.[58] As of 2020, automated solutions for code refactoring to reduce maintenance effort are an active area of research,[59] as is machine-learning enhanced maintainability assessment.[60]

References

[edit]
  1. ^ a b Tripathy & Naik 2014, p. 25.
  2. ^ a b c d e f Offutt, Jeff (January 2018). "Overview of Software Maintenance and Evolution". George Mason University Department of Computer Science. Retrieved 5 May 2024.
  3. ^ Tripathy & Naik 2014, p. 4.
  4. ^ Tripathy & Naik 2014, pp. 5–6.
  5. ^ a b Tripathy & Naik 2014, p. 26.
  6. ^ Madhusudhan et al. 2017, p. 761.
  7. ^ Varga 2018, p. 3.
  8. ^ a b c Tripathy & Naik 2014, p. 7.
  9. ^ a b c d e Ulziit et al. 2015, p. 764.
  10. ^ a b Reifer 2012, p. 22.
  11. ^ Reifer 2012, p. 21.
  12. ^ a b c Tripathy & Naik 2014, p. 89.
  13. ^ Madhusudhan et al. 2017, p. 763.
  14. ^ Tripathy & Naik 2014, p. 120.
  15. ^ Madhusudhan et al. 2017, p. 762.
  16. ^ a b Tripathy & Naik 2014, p. 123.
  17. ^ Ali et al. 2024, p. 126.
  18. ^ Ali et al. 2024, p. 130.
  19. ^ Tripathy & Naik 2014, p. 296.
  20. ^ Tripathy & Naik 2014, pp. 296–297.
  21. ^ Tripathy & Naik 2014, p. 309.
  22. ^ Tripathy & Naik 2014, p. 297.
  23. ^ Tripathy & Naik 2014, pp. 318–319.
  24. ^ Tripathy & Naik 2014, pp. 85–86.
  25. ^ Tripathy & Naik 2014, p. 86.
  26. ^ a b Tripathy & Naik 2014, p. 94.
  27. ^ Tripathy & Naik 2014, p. 59.
  28. ^ Reifer 2012, p. 5.
  29. ^ Tripathy & Naik 2014, p. 98.
  30. ^ Varga 2018, p. 4.
  31. ^ a b c d e f Varga 2018, p. 5.
  32. ^ Tripathy & Naik 2014, pp. 26–27.
  33. ^ a b c d e f Tripathy & Naik 2014, p. 27.
  34. ^ a b Varga 2018, pp. 5–6.
  35. ^ Varga 2018, p. 5 fn 4.
  36. ^ Varga 2018, p. 12.
  37. ^ Varga 2018, pp. 6–7.
  38. ^ Varga 2018, p. 7.
  39. ^ Varga 2018, pp. 7–8.
  40. ^ Varga 2018, p. 9.
  41. ^ Madhusudhan et al. 2017, p. 764.
  42. ^ a b Reifer 2012, p. 7.
  43. ^ a b Reifer 2012, p. 8.
  44. ^ Reifer 2012, p. 1.
  45. ^ Rahman et al. 2024, p. 1.
  46. ^ Rahman et al. 2021, Research Background.
  47. ^ Ulziit et al. 2015, p. 763.
  48. ^ Reifer 2012, p. 2.
  49. ^ Tripathy & Naik 2014, pp. 187–188.
  50. ^ a b c d e Tripathy & Naik 2014, p. 188.
  51. ^ Tripathy & Naik 2014, p. 189.
  52. ^ Tripathy & Naik 2014, p. 191.
  53. ^ Tripathy & Naik 2014, pp. 188–189.
  54. ^ Tripathy & Naik 2014, p. 195.
  55. ^ a b Tripathy & Naik 2014, p. 196.
  56. ^ Madhusudhan et al. 2017, p. 759.
  57. ^ Ulziit et al. 2015, p. 766.
  58. ^ Reifer 2012, pp. 4–5.
  59. ^ Baqais & Alshayeb 2020, p. 459.
  60. ^ Alsolai & Roper 2020, p. 106214.

Sources

[edit]
  • Ali, Muhammad; Cheema, Sehrish Munawar; Naz, Ammerha; Pires, Ivan Miguel (2024). "SAMSEF: An Agile Software Maintenance Leveraging Scrum Framework for Improved Efficiency and Effectiveness". Good Practices and New Perspectives in Information Systems and Technologies. Lecture Notes in Networks and Systems. Vol. 989. Springer Nature Switzerland. pp. 126–136. doi:10.1007/978-3-031-60227-6_11. ISBN 978-3-031-60226-9.
  • Alsolai, Hadeel; Roper, Marc (2020). "A systematic literature review of machine learning techniques for software maintainability prediction" (PDF). Information and Software Technology. 119 106214. doi:10.1016/j.infsof.2019.106214.
  • Baqais, Abdulrahman Ahmed Bobakr; Alshayeb, Mohammad (2020). "Automatic software refactoring: a systematic literature review". Software Quality Journal. 28 (2): 459–502. doi:10.1007/s11219-019-09477-y.
  • Madhusudhan, V.; Suma, V.; Rao, Jawahar J. (2017). Software Maintenance: From the Perspective of Effort and Cost Requirement. Proceedings of the International Conference on Data Engineering and Communication Technology. Springer. pp. 759–768. ISBN 978-981-10-1678-3.
  • Rahman, Hanif Ur; da Silva, Alberto Rodrigues; Alzayed, Asaad; Raza, Mushtaq (2024). "A Systematic Literature Review on Software Maintenance Offshoring Decisions". Information and Software Technology. 172 107475. doi:10.1016/j.infsof.2024.107475.
  • Rahman, Hanif Ur; Raza, Mushtaq; Afsar, Palwasha; Khan, Habib Ullah (2021). "Empirical Investigation of Influencing Factors Regarding Offshore Outsourcing Decision of Application Maintenance". IEEE Access. 9: 58589–58608. Bibcode:2021IEEEA...958589R. doi:10.1109/ACCESS.2021.3073315. hdl:10576/37687. ISSN 2169-3536.
  • Reifer, Donald J. (2012). Software Maintenance Success Recipes. CRC Press. ISBN 978-1-4398-5167-8.
  • Tripathy, Priyadarshi; Naik, Kshirasagar (2014). Software Evolution and Maintenance: A Practitioner's Approach. John Wiley & Sons. ISBN 978-0-470-60341-3.
  • Ulziit, Bayarbuyan; Warraich, Zeeshan Akhtar; Gencel, Cigdem; Petersen, Kai (2015). "A conceptual framework of challenges and solutions for managing global software maintenance". Journal of Software: Evolution and Process. 27 (10): 763–792. doi:10.1002/smr.1720.
  • Varga, Ervin (2018). Unraveling Software Maintenance and Evolution: Thinking Outside the Box. Springer. ISBN 978-3-319-71303-8.


代谢慢吃什么效果最快 朋友是什么意思 骨质疏松挂什么科 6.1号是什么星座 吃什么可以排毒
肠胃不好经常拉肚子吃什么药 三点水念什么 松鼠尾巴像什么 angry是什么意思 什么的北京城
上热下寒吃什么药 减肥餐吃什么 生命是什么意思 怀孕送什么礼物 甲功是查什么的
甲状腺在什么位置图片 dle是什么意思 bmi指数是什么 吃什么补血 什么人容易得老年痴呆
女性口臭都是什么原因mmeoe.com 怀孕初期什么症状hcv8jop0ns1r.cn 上颚痒是什么原因xinmaowt.com 脾是干什么用的hcv7jop6ns6r.cn horns是什么意思hcv9jop1ns5r.cn
随心而欲是什么意思hcv9jop6ns7r.cn 荔枝什么品种好吃hlguo.com 下午四五点是什么时辰hcv9jop0ns0r.cn 吃桃子有什么好处zhongyiyatai.com 城隍庙是什么神hcv8jop4ns7r.cn
中二病是什么意思zhongyiyatai.com 排骨炖什么汤止咳润肺hcv9jop4ns1r.cn 梦见眼镜蛇是什么预兆hcv8jop3ns8r.cn 蝼蛄是什么hcv9jop6ns3r.cn 双子男喜欢什么样的女生hcv8jop9ns1r.cn
脖子疼是什么原因hcv7jop5ns3r.cn 奇门遁甲什么意思hcv9jop6ns7r.cn 嘿咻是什么意思hcv9jop1ns3r.cn 高血压是什么原因引起的hcv8jop1ns6r.cn 胃炎伴糜烂是什么意思hcv9jop3ns2r.cn
百度